CGExprConstant.cpp 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122
  1. //===--- CGExprConstant.cpp - Emit LLVM Code from Constant Expressions ----===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. //
  10. // This contains code to emit Constant Expr nodes as LLVM code.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #include "CodeGenFunction.h"
  14. #include "CodeGenModule.h"
  15. #include "CGCXXABI.h"
  16. #include "CGObjCRuntime.h"
  17. #include "CGRecordLayout.h"
  18. #include "clang/AST/APValue.h"
  19. #include "clang/AST/ASTContext.h"
  20. #include "clang/AST/RecordLayout.h"
  21. #include "clang/AST/StmtVisitor.h"
  22. #include "clang/Basic/Builtins.h"
  23. #include "llvm/Constants.h"
  24. #include "llvm/Function.h"
  25. #include "llvm/GlobalVariable.h"
  26. #include "llvm/Target/TargetData.h"
  27. using namespace clang;
  28. using namespace CodeGen;
  29. //===----------------------------------------------------------------------===//
  30. // ConstStructBuilder
  31. //===----------------------------------------------------------------------===//
  32. namespace {
  33. class ConstStructBuilder {
  34. CodeGenModule &CGM;
  35. CodeGenFunction *CGF;
  36. bool Packed;
  37. unsigned NextFieldOffsetInBytes;
  38. unsigned LLVMStructAlignment;
  39. std::vector<llvm::Constant *> Elements;
  40. public:
  41. static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
  42. InitListExpr *ILE);
  43. private:
  44. ConstStructBuilder(CodeGenModule &CGM, CodeGenFunction *CGF)
  45. : CGM(CGM), CGF(CGF), Packed(false), NextFieldOffsetInBytes(0),
  46. LLVMStructAlignment(1) { }
  47. bool AppendField(const FieldDecl *Field, uint64_t FieldOffset,
  48. llvm::Constant *InitExpr);
  49. void AppendBitField(const FieldDecl *Field, uint64_t FieldOffset,
  50. llvm::ConstantInt *InitExpr);
  51. void AppendPadding(uint64_t NumBytes);
  52. void AppendTailPadding(uint64_t RecordSize);
  53. void ConvertStructToPacked();
  54. bool Build(InitListExpr *ILE);
  55. unsigned getAlignment(const llvm::Constant *C) const {
  56. if (Packed) return 1;
  57. return CGM.getTargetData().getABITypeAlignment(C->getType());
  58. }
  59. uint64_t getSizeInBytes(const llvm::Constant *C) const {
  60. return CGM.getTargetData().getTypeAllocSize(C->getType());
  61. }
  62. };
  63. bool ConstStructBuilder::
  64. AppendField(const FieldDecl *Field, uint64_t FieldOffset,
  65. llvm::Constant *InitCst) {
  66. uint64_t FieldOffsetInBytes = FieldOffset / 8;
  67. assert(NextFieldOffsetInBytes <= FieldOffsetInBytes
  68. && "Field offset mismatch!");
  69. unsigned FieldAlignment = getAlignment(InitCst);
  70. // Round up the field offset to the alignment of the field type.
  71. uint64_t AlignedNextFieldOffsetInBytes =
  72. llvm::RoundUpToAlignment(NextFieldOffsetInBytes, FieldAlignment);
  73. if (AlignedNextFieldOffsetInBytes > FieldOffsetInBytes) {
  74. assert(!Packed && "Alignment is wrong even with a packed struct!");
  75. // Convert the struct to a packed struct.
  76. ConvertStructToPacked();
  77. AlignedNextFieldOffsetInBytes = NextFieldOffsetInBytes;
  78. }
  79. if (AlignedNextFieldOffsetInBytes < FieldOffsetInBytes) {
  80. // We need to append padding.
  81. AppendPadding(FieldOffsetInBytes - NextFieldOffsetInBytes);
  82. assert(NextFieldOffsetInBytes == FieldOffsetInBytes &&
  83. "Did not add enough padding!");
  84. AlignedNextFieldOffsetInBytes = NextFieldOffsetInBytes;
  85. }
  86. // Add the field.
  87. Elements.push_back(InitCst);
  88. NextFieldOffsetInBytes = AlignedNextFieldOffsetInBytes +
  89. getSizeInBytes(InitCst);
  90. if (Packed)
  91. assert(LLVMStructAlignment == 1 && "Packed struct not byte-aligned!");
  92. else
  93. LLVMStructAlignment = std::max(LLVMStructAlignment, FieldAlignment);
  94. return true;
  95. }
  96. void ConstStructBuilder::AppendBitField(const FieldDecl *Field,
  97. uint64_t FieldOffset,
  98. llvm::ConstantInt *CI) {
  99. if (FieldOffset > NextFieldOffsetInBytes * 8) {
  100. // We need to add padding.
  101. uint64_t NumBytes =
  102. llvm::RoundUpToAlignment(FieldOffset -
  103. NextFieldOffsetInBytes * 8, 8) / 8;
  104. AppendPadding(NumBytes);
  105. }
  106. uint64_t FieldSize =
  107. Field->getBitWidth()->EvaluateAsInt(CGM.getContext()).getZExtValue();
  108. llvm::APInt FieldValue = CI->getValue();
  109. // Promote the size of FieldValue if necessary
  110. // FIXME: This should never occur, but currently it can because initializer
  111. // constants are cast to bool, and because clang is not enforcing bitfield
  112. // width limits.
  113. if (FieldSize > FieldValue.getBitWidth())
  114. FieldValue.zext(FieldSize);
  115. // Truncate the size of FieldValue to the bit field size.
  116. if (FieldSize < FieldValue.getBitWidth())
  117. FieldValue.trunc(FieldSize);
  118. if (FieldOffset < NextFieldOffsetInBytes * 8) {
  119. // Either part of the field or the entire field can go into the previous
  120. // byte.
  121. assert(!Elements.empty() && "Elements can't be empty!");
  122. unsigned BitsInPreviousByte =
  123. NextFieldOffsetInBytes * 8 - FieldOffset;
  124. bool FitsCompletelyInPreviousByte =
  125. BitsInPreviousByte >= FieldValue.getBitWidth();
  126. llvm::APInt Tmp = FieldValue;
  127. if (!FitsCompletelyInPreviousByte) {
  128. unsigned NewFieldWidth = FieldSize - BitsInPreviousByte;
  129. if (CGM.getTargetData().isBigEndian()) {
  130. Tmp = Tmp.lshr(NewFieldWidth);
  131. Tmp.trunc(BitsInPreviousByte);
  132. // We want the remaining high bits.
  133. FieldValue.trunc(NewFieldWidth);
  134. } else {
  135. Tmp.trunc(BitsInPreviousByte);
  136. // We want the remaining low bits.
  137. FieldValue = FieldValue.lshr(BitsInPreviousByte);
  138. FieldValue.trunc(NewFieldWidth);
  139. }
  140. }
  141. Tmp.zext(8);
  142. if (CGM.getTargetData().isBigEndian()) {
  143. if (FitsCompletelyInPreviousByte)
  144. Tmp = Tmp.shl(BitsInPreviousByte - FieldValue.getBitWidth());
  145. } else {
  146. Tmp = Tmp.shl(8 - BitsInPreviousByte);
  147. }
  148. // 'or' in the bits that go into the previous byte.
  149. llvm::Value *LastElt = Elements.back();
  150. if (llvm::ConstantInt *Val = dyn_cast<llvm::ConstantInt>(LastElt))
  151. Tmp |= Val->getValue();
  152. else {
  153. assert(isa<llvm::UndefValue>(LastElt));
  154. // If there is an undef field that we're adding to, it can either be a
  155. // scalar undef (in which case, we just replace it with our field) or it
  156. // is an array. If it is an array, we have to pull one byte off the
  157. // array so that the other undef bytes stay around.
  158. if (!isa<llvm::IntegerType>(LastElt->getType())) {
  159. // The undef padding will be a multibyte array, create a new smaller
  160. // padding and then an hole for our i8 to get plopped into.
  161. assert(isa<llvm::ArrayType>(LastElt->getType()) &&
  162. "Expected array padding of undefs");
  163. const llvm::ArrayType *AT = cast<llvm::ArrayType>(LastElt->getType());
  164. assert(AT->getElementType()->isIntegerTy(8) &&
  165. AT->getNumElements() != 0 &&
  166. "Expected non-empty array padding of undefs");
  167. // Remove the padding array.
  168. NextFieldOffsetInBytes -= AT->getNumElements();
  169. Elements.pop_back();
  170. // Add the padding back in two chunks.
  171. AppendPadding(AT->getNumElements()-1);
  172. AppendPadding(1);
  173. assert(isa<llvm::UndefValue>(Elements.back()) &&
  174. Elements.back()->getType()->isIntegerTy(8) &&
  175. "Padding addition didn't work right");
  176. }
  177. }
  178. Elements.back() = llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp);
  179. if (FitsCompletelyInPreviousByte)
  180. return;
  181. }
  182. while (FieldValue.getBitWidth() > 8) {
  183. llvm::APInt Tmp;
  184. if (CGM.getTargetData().isBigEndian()) {
  185. // We want the high bits.
  186. Tmp = FieldValue;
  187. Tmp = Tmp.lshr(Tmp.getBitWidth() - 8);
  188. Tmp.trunc(8);
  189. } else {
  190. // We want the low bits.
  191. Tmp = FieldValue;
  192. Tmp.trunc(8);
  193. FieldValue = FieldValue.lshr(8);
  194. }
  195. Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp));
  196. NextFieldOffsetInBytes++;
  197. FieldValue.trunc(FieldValue.getBitWidth() - 8);
  198. }
  199. assert(FieldValue.getBitWidth() > 0 &&
  200. "Should have at least one bit left!");
  201. assert(FieldValue.getBitWidth() <= 8 &&
  202. "Should not have more than a byte left!");
  203. if (FieldValue.getBitWidth() < 8) {
  204. if (CGM.getTargetData().isBigEndian()) {
  205. unsigned BitWidth = FieldValue.getBitWidth();
  206. FieldValue.zext(8);
  207. FieldValue = FieldValue << (8 - BitWidth);
  208. } else
  209. FieldValue.zext(8);
  210. }
  211. // Append the last element.
  212. Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(),
  213. FieldValue));
  214. NextFieldOffsetInBytes++;
  215. }
  216. void ConstStructBuilder::AppendPadding(uint64_t NumBytes) {
  217. if (!NumBytes)
  218. return;
  219. const llvm::Type *Ty = llvm::Type::getInt8Ty(CGM.getLLVMContext());
  220. if (NumBytes > 1)
  221. Ty = llvm::ArrayType::get(Ty, NumBytes);
  222. llvm::Constant *C = llvm::UndefValue::get(Ty);
  223. Elements.push_back(C);
  224. assert(getAlignment(C) == 1 && "Padding must have 1 byte alignment!");
  225. NextFieldOffsetInBytes += getSizeInBytes(C);
  226. }
  227. void ConstStructBuilder::AppendTailPadding(uint64_t RecordSize) {
  228. assert(RecordSize % 8 == 0 && "Invalid record size!");
  229. uint64_t RecordSizeInBytes = RecordSize / 8;
  230. assert(NextFieldOffsetInBytes <= RecordSizeInBytes && "Size mismatch!");
  231. unsigned NumPadBytes = RecordSizeInBytes - NextFieldOffsetInBytes;
  232. AppendPadding(NumPadBytes);
  233. }
  234. void ConstStructBuilder::ConvertStructToPacked() {
  235. std::vector<llvm::Constant *> PackedElements;
  236. uint64_t ElementOffsetInBytes = 0;
  237. for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
  238. llvm::Constant *C = Elements[i];
  239. unsigned ElementAlign =
  240. CGM.getTargetData().getABITypeAlignment(C->getType());
  241. uint64_t AlignedElementOffsetInBytes =
  242. llvm::RoundUpToAlignment(ElementOffsetInBytes, ElementAlign);
  243. if (AlignedElementOffsetInBytes > ElementOffsetInBytes) {
  244. // We need some padding.
  245. uint64_t NumBytes =
  246. AlignedElementOffsetInBytes - ElementOffsetInBytes;
  247. const llvm::Type *Ty = llvm::Type::getInt8Ty(CGM.getLLVMContext());
  248. if (NumBytes > 1)
  249. Ty = llvm::ArrayType::get(Ty, NumBytes);
  250. llvm::Constant *Padding = llvm::UndefValue::get(Ty);
  251. PackedElements.push_back(Padding);
  252. ElementOffsetInBytes += getSizeInBytes(Padding);
  253. }
  254. PackedElements.push_back(C);
  255. ElementOffsetInBytes += getSizeInBytes(C);
  256. }
  257. assert(ElementOffsetInBytes == NextFieldOffsetInBytes &&
  258. "Packing the struct changed its size!");
  259. Elements = PackedElements;
  260. LLVMStructAlignment = 1;
  261. Packed = true;
  262. }
  263. bool ConstStructBuilder::Build(InitListExpr *ILE) {
  264. RecordDecl *RD = ILE->getType()->getAs<RecordType>()->getDecl();
  265. const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
  266. unsigned FieldNo = 0;
  267. unsigned ElementNo = 0;
  268. for (RecordDecl::field_iterator Field = RD->field_begin(),
  269. FieldEnd = RD->field_end(); Field != FieldEnd; ++Field, ++FieldNo) {
  270. // If this is a union, skip all the fields that aren't being initialized.
  271. if (RD->isUnion() && ILE->getInitializedFieldInUnion() != *Field)
  272. continue;
  273. // Don't emit anonymous bitfields, they just affect layout.
  274. if (Field->isBitField() && !Field->getIdentifier())
  275. continue;
  276. // Get the initializer. A struct can include fields without initializers,
  277. // we just use explicit null values for them.
  278. llvm::Constant *EltInit;
  279. if (ElementNo < ILE->getNumInits())
  280. EltInit = CGM.EmitConstantExpr(ILE->getInit(ElementNo++),
  281. Field->getType(), CGF);
  282. else
  283. EltInit = CGM.EmitNullConstant(Field->getType());
  284. if (!EltInit)
  285. return false;
  286. if (!Field->isBitField()) {
  287. // Handle non-bitfield members.
  288. if (!AppendField(*Field, Layout.getFieldOffset(FieldNo), EltInit))
  289. return false;
  290. } else {
  291. // Otherwise we have a bitfield.
  292. AppendBitField(*Field, Layout.getFieldOffset(FieldNo),
  293. cast<llvm::ConstantInt>(EltInit));
  294. }
  295. }
  296. uint64_t LayoutSizeInBytes = Layout.getSize() / 8;
  297. if (NextFieldOffsetInBytes > LayoutSizeInBytes) {
  298. // If the struct is bigger than the size of the record type,
  299. // we must have a flexible array member at the end.
  300. assert(RD->hasFlexibleArrayMember() &&
  301. "Must have flexible array member if struct is bigger than type!");
  302. // No tail padding is necessary.
  303. return true;
  304. }
  305. uint64_t LLVMSizeInBytes = llvm::RoundUpToAlignment(NextFieldOffsetInBytes,
  306. LLVMStructAlignment);
  307. // Check if we need to convert the struct to a packed struct.
  308. if (NextFieldOffsetInBytes <= LayoutSizeInBytes &&
  309. LLVMSizeInBytes > LayoutSizeInBytes) {
  310. assert(!Packed && "Size mismatch!");
  311. ConvertStructToPacked();
  312. assert(NextFieldOffsetInBytes <= LayoutSizeInBytes &&
  313. "Converting to packed did not help!");
  314. }
  315. // Append tail padding if necessary.
  316. AppendTailPadding(Layout.getSize());
  317. assert(Layout.getSize() / 8 == NextFieldOffsetInBytes &&
  318. "Tail padding mismatch!");
  319. return true;
  320. }
  321. llvm::Constant *ConstStructBuilder::
  322. BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF, InitListExpr *ILE) {
  323. ConstStructBuilder Builder(CGM, CGF);
  324. if (!Builder.Build(ILE))
  325. return 0;
  326. llvm::Constant *Result =
  327. llvm::ConstantStruct::get(CGM.getLLVMContext(),
  328. Builder.Elements, Builder.Packed);
  329. assert(llvm::RoundUpToAlignment(Builder.NextFieldOffsetInBytes,
  330. Builder.getAlignment(Result)) ==
  331. Builder.getSizeInBytes(Result) && "Size mismatch!");
  332. return Result;
  333. }
  334. //===----------------------------------------------------------------------===//
  335. // ConstExprEmitter
  336. //===----------------------------------------------------------------------===//
  337. class ConstExprEmitter :
  338. public StmtVisitor<ConstExprEmitter, llvm::Constant*> {
  339. CodeGenModule &CGM;
  340. CodeGenFunction *CGF;
  341. llvm::LLVMContext &VMContext;
  342. public:
  343. ConstExprEmitter(CodeGenModule &cgm, CodeGenFunction *cgf)
  344. : CGM(cgm), CGF(cgf), VMContext(cgm.getLLVMContext()) {
  345. }
  346. //===--------------------------------------------------------------------===//
  347. // Visitor Methods
  348. //===--------------------------------------------------------------------===//
  349. llvm::Constant *VisitStmt(Stmt *S) {
  350. return 0;
  351. }
  352. llvm::Constant *VisitParenExpr(ParenExpr *PE) {
  353. return Visit(PE->getSubExpr());
  354. }
  355. llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
  356. return Visit(E->getInitializer());
  357. }
  358. llvm::Constant *VisitUnaryAddrOf(UnaryOperator *E) {
  359. if (const MemberPointerType *MPT =
  360. E->getType()->getAs<MemberPointerType>()) {
  361. DeclRefExpr *DRE = cast<DeclRefExpr>(E->getSubExpr());
  362. NamedDecl *ND = DRE->getDecl();
  363. if (MPT->isMemberFunctionPointer())
  364. return CGM.getCXXABI().EmitMemberPointer(cast<CXXMethodDecl>(ND));
  365. else
  366. return CGM.getCXXABI().EmitMemberPointer(cast<FieldDecl>(ND));
  367. }
  368. return 0;
  369. }
  370. llvm::Constant *VisitBinSub(BinaryOperator *E) {
  371. // This must be a pointer/pointer subtraction. This only happens for
  372. // address of label.
  373. if (!isa<AddrLabelExpr>(E->getLHS()->IgnoreParenNoopCasts(CGM.getContext())) ||
  374. !isa<AddrLabelExpr>(E->getRHS()->IgnoreParenNoopCasts(CGM.getContext())))
  375. return 0;
  376. llvm::Constant *LHS = CGM.EmitConstantExpr(E->getLHS(),
  377. E->getLHS()->getType(), CGF);
  378. llvm::Constant *RHS = CGM.EmitConstantExpr(E->getRHS(),
  379. E->getRHS()->getType(), CGF);
  380. const llvm::Type *ResultType = ConvertType(E->getType());
  381. LHS = llvm::ConstantExpr::getPtrToInt(LHS, ResultType);
  382. RHS = llvm::ConstantExpr::getPtrToInt(RHS, ResultType);
  383. // No need to divide by element size, since addr of label is always void*,
  384. // which has size 1 in GNUish.
  385. return llvm::ConstantExpr::getSub(LHS, RHS);
  386. }
  387. llvm::Constant *VisitCastExpr(CastExpr* E) {
  388. switch (E->getCastKind()) {
  389. case CK_ToUnion: {
  390. // GCC cast to union extension
  391. assert(E->getType()->isUnionType() &&
  392. "Destination type is not union type!");
  393. const llvm::Type *Ty = ConvertType(E->getType());
  394. Expr *SubExpr = E->getSubExpr();
  395. llvm::Constant *C =
  396. CGM.EmitConstantExpr(SubExpr, SubExpr->getType(), CGF);
  397. if (!C)
  398. return 0;
  399. // Build a struct with the union sub-element as the first member,
  400. // and padded to the appropriate size
  401. std::vector<llvm::Constant*> Elts;
  402. std::vector<const llvm::Type*> Types;
  403. Elts.push_back(C);
  404. Types.push_back(C->getType());
  405. unsigned CurSize = CGM.getTargetData().getTypeAllocSize(C->getType());
  406. unsigned TotalSize = CGM.getTargetData().getTypeAllocSize(Ty);
  407. assert(CurSize <= TotalSize && "Union size mismatch!");
  408. if (unsigned NumPadBytes = TotalSize - CurSize) {
  409. const llvm::Type *Ty = llvm::Type::getInt8Ty(VMContext);
  410. if (NumPadBytes > 1)
  411. Ty = llvm::ArrayType::get(Ty, NumPadBytes);
  412. Elts.push_back(llvm::UndefValue::get(Ty));
  413. Types.push_back(Ty);
  414. }
  415. llvm::StructType* STy =
  416. llvm::StructType::get(C->getType()->getContext(), Types, false);
  417. return llvm::ConstantStruct::get(STy, Elts);
  418. }
  419. case CK_NullToMemberPointer: {
  420. const MemberPointerType *MPT = E->getType()->getAs<MemberPointerType>();
  421. return CGM.getCXXABI().EmitNullMemberPointer(MPT);
  422. }
  423. case CK_BaseToDerivedMemberPointer: {
  424. Expr *SubExpr = E->getSubExpr();
  425. llvm::Constant *C =
  426. CGM.EmitConstantExpr(SubExpr, SubExpr->getType(), CGF);
  427. if (!C) return 0;
  428. return CGM.getCXXABI().EmitMemberPointerConversion(C, E);
  429. }
  430. case CK_BitCast:
  431. // This must be a member function pointer cast.
  432. return Visit(E->getSubExpr());
  433. default: {
  434. // FIXME: This should be handled by the CK_NoOp cast kind.
  435. // Explicit and implicit no-op casts
  436. QualType Ty = E->getType(), SubTy = E->getSubExpr()->getType();
  437. if (CGM.getContext().hasSameUnqualifiedType(Ty, SubTy))
  438. return Visit(E->getSubExpr());
  439. // Handle integer->integer casts for address-of-label differences.
  440. if (Ty->isIntegerType() && SubTy->isIntegerType() &&
  441. CGF) {
  442. llvm::Value *Src = Visit(E->getSubExpr());
  443. if (Src == 0) return 0;
  444. // Use EmitScalarConversion to perform the conversion.
  445. return cast<llvm::Constant>(CGF->EmitScalarConversion(Src, SubTy, Ty));
  446. }
  447. return 0;
  448. }
  449. }
  450. }
  451. llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
  452. return Visit(DAE->getExpr());
  453. }
  454. llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) {
  455. unsigned NumInitElements = ILE->getNumInits();
  456. if (NumInitElements == 1 &&
  457. (isa<StringLiteral>(ILE->getInit(0)) ||
  458. isa<ObjCEncodeExpr>(ILE->getInit(0))))
  459. return Visit(ILE->getInit(0));
  460. std::vector<llvm::Constant*> Elts;
  461. const llvm::ArrayType *AType =
  462. cast<llvm::ArrayType>(ConvertType(ILE->getType()));
  463. const llvm::Type *ElemTy = AType->getElementType();
  464. unsigned NumElements = AType->getNumElements();
  465. // Initialising an array requires us to automatically
  466. // initialise any elements that have not been initialised explicitly
  467. unsigned NumInitableElts = std::min(NumInitElements, NumElements);
  468. // Copy initializer elements.
  469. unsigned i = 0;
  470. bool RewriteType = false;
  471. for (; i < NumInitableElts; ++i) {
  472. Expr *Init = ILE->getInit(i);
  473. llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF);
  474. if (!C)
  475. return 0;
  476. RewriteType |= (C->getType() != ElemTy);
  477. Elts.push_back(C);
  478. }
  479. // Initialize remaining array elements.
  480. // FIXME: This doesn't handle member pointers correctly!
  481. for (; i < NumElements; ++i)
  482. Elts.push_back(llvm::Constant::getNullValue(ElemTy));
  483. if (RewriteType) {
  484. // FIXME: Try to avoid packing the array
  485. std::vector<const llvm::Type*> Types;
  486. for (unsigned i = 0; i < Elts.size(); ++i)
  487. Types.push_back(Elts[i]->getType());
  488. const llvm::StructType *SType = llvm::StructType::get(AType->getContext(),
  489. Types, true);
  490. return llvm::ConstantStruct::get(SType, Elts);
  491. }
  492. return llvm::ConstantArray::get(AType, Elts);
  493. }
  494. llvm::Constant *EmitStructInitialization(InitListExpr *ILE) {
  495. return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
  496. }
  497. llvm::Constant *EmitUnionInitialization(InitListExpr *ILE) {
  498. return ConstStructBuilder::BuildStruct(CGM, CGF, ILE);
  499. }
  500. llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) {
  501. return CGM.EmitNullConstant(E->getType());
  502. }
  503. llvm::Constant *VisitInitListExpr(InitListExpr *ILE) {
  504. if (ILE->getType()->isScalarType()) {
  505. // We have a scalar in braces. Just use the first element.
  506. if (ILE->getNumInits() > 0) {
  507. Expr *Init = ILE->getInit(0);
  508. return CGM.EmitConstantExpr(Init, Init->getType(), CGF);
  509. }
  510. return CGM.EmitNullConstant(ILE->getType());
  511. }
  512. if (ILE->getType()->isArrayType())
  513. return EmitArrayInitialization(ILE);
  514. if (ILE->getType()->isRecordType())
  515. return EmitStructInitialization(ILE);
  516. if (ILE->getType()->isUnionType())
  517. return EmitUnionInitialization(ILE);
  518. // If ILE was a constant vector, we would have handled it already.
  519. if (ILE->getType()->isVectorType())
  520. return 0;
  521. assert(0 && "Unable to handle InitListExpr");
  522. // Get rid of control reaches end of void function warning.
  523. // Not reached.
  524. return 0;
  525. }
  526. llvm::Constant *VisitCXXConstructExpr(CXXConstructExpr *E) {
  527. if (!E->getConstructor()->isTrivial())
  528. return 0;
  529. QualType Ty = E->getType();
  530. // FIXME: We should not have to call getBaseElementType here.
  531. const RecordType *RT =
  532. CGM.getContext().getBaseElementType(Ty)->getAs<RecordType>();
  533. const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
  534. // If the class doesn't have a trivial destructor, we can't emit it as a
  535. // constant expr.
  536. if (!RD->hasTrivialDestructor())
  537. return 0;
  538. // Only copy and default constructors can be trivial.
  539. if (E->getNumArgs()) {
  540. assert(E->getNumArgs() == 1 && "trivial ctor with > 1 argument");
  541. assert(E->getConstructor()->isCopyConstructor() &&
  542. "trivial ctor has argument but isn't a copy ctor");
  543. Expr *Arg = E->getArg(0);
  544. assert(CGM.getContext().hasSameUnqualifiedType(Ty, Arg->getType()) &&
  545. "argument to copy ctor is of wrong type");
  546. return Visit(Arg);
  547. }
  548. return CGM.EmitNullConstant(Ty);
  549. }
  550. llvm::Constant *VisitStringLiteral(StringLiteral *E) {
  551. assert(!E->getType()->isPointerType() && "Strings are always arrays");
  552. // This must be a string initializing an array in a static initializer.
  553. // Don't emit it as the address of the string, emit the string data itself
  554. // as an inline array.
  555. return llvm::ConstantArray::get(VMContext,
  556. CGM.GetStringForStringLiteral(E), false);
  557. }
  558. llvm::Constant *VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
  559. // This must be an @encode initializing an array in a static initializer.
  560. // Don't emit it as the address of the string, emit the string data itself
  561. // as an inline array.
  562. std::string Str;
  563. CGM.getContext().getObjCEncodingForType(E->getEncodedType(), Str);
  564. const ConstantArrayType *CAT = cast<ConstantArrayType>(E->getType());
  565. // Resize the string to the right size, adding zeros at the end, or
  566. // truncating as needed.
  567. Str.resize(CAT->getSize().getZExtValue(), '\0');
  568. return llvm::ConstantArray::get(VMContext, Str, false);
  569. }
  570. llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
  571. return Visit(E->getSubExpr());
  572. }
  573. // Utility methods
  574. const llvm::Type *ConvertType(QualType T) {
  575. return CGM.getTypes().ConvertType(T);
  576. }
  577. public:
  578. llvm::Constant *EmitLValue(Expr *E) {
  579. switch (E->getStmtClass()) {
  580. default: break;
  581. case Expr::CompoundLiteralExprClass: {
  582. // Note that due to the nature of compound literals, this is guaranteed
  583. // to be the only use of the variable, so we just generate it here.
  584. CompoundLiteralExpr *CLE = cast<CompoundLiteralExpr>(E);
  585. llvm::Constant* C = Visit(CLE->getInitializer());
  586. // FIXME: "Leaked" on failure.
  587. if (C)
  588. C = new llvm::GlobalVariable(CGM.getModule(), C->getType(),
  589. E->getType().isConstant(CGM.getContext()),
  590. llvm::GlobalValue::InternalLinkage,
  591. C, ".compoundliteral", 0, false,
  592. E->getType().getAddressSpace());
  593. return C;
  594. }
  595. case Expr::DeclRefExprClass: {
  596. ValueDecl *Decl = cast<DeclRefExpr>(E)->getDecl();
  597. if (Decl->hasAttr<WeakRefAttr>())
  598. return CGM.GetWeakRefReference(Decl);
  599. if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Decl))
  600. return CGM.GetAddrOfFunction(FD);
  601. if (const VarDecl* VD = dyn_cast<VarDecl>(Decl)) {
  602. // We can never refer to a variable with local storage.
  603. if (!VD->hasLocalStorage()) {
  604. if (VD->isFileVarDecl() || VD->hasExternalStorage())
  605. return CGM.GetAddrOfGlobalVar(VD);
  606. else if (VD->isLocalVarDecl()) {
  607. assert(CGF && "Can't access static local vars without CGF");
  608. return CGF->GetAddrOfStaticLocalVar(VD);
  609. }
  610. }
  611. }
  612. break;
  613. }
  614. case Expr::StringLiteralClass:
  615. return CGM.GetAddrOfConstantStringFromLiteral(cast<StringLiteral>(E));
  616. case Expr::ObjCEncodeExprClass:
  617. return CGM.GetAddrOfConstantStringFromObjCEncode(cast<ObjCEncodeExpr>(E));
  618. case Expr::ObjCStringLiteralClass: {
  619. ObjCStringLiteral* SL = cast<ObjCStringLiteral>(E);
  620. llvm::Constant *C =
  621. CGM.getObjCRuntime().GenerateConstantString(SL->getString());
  622. return llvm::ConstantExpr::getBitCast(C, ConvertType(E->getType()));
  623. }
  624. case Expr::PredefinedExprClass: {
  625. unsigned Type = cast<PredefinedExpr>(E)->getIdentType();
  626. if (CGF) {
  627. LValue Res = CGF->EmitPredefinedLValue(cast<PredefinedExpr>(E));
  628. return cast<llvm::Constant>(Res.getAddress());
  629. } else if (Type == PredefinedExpr::PrettyFunction) {
  630. return CGM.GetAddrOfConstantCString("top level", ".tmp");
  631. }
  632. return CGM.GetAddrOfConstantCString("", ".tmp");
  633. }
  634. case Expr::AddrLabelExprClass: {
  635. assert(CGF && "Invalid address of label expression outside function.");
  636. llvm::Constant *Ptr =
  637. CGF->GetAddrOfLabel(cast<AddrLabelExpr>(E)->getLabel());
  638. return llvm::ConstantExpr::getBitCast(Ptr, ConvertType(E->getType()));
  639. }
  640. case Expr::CallExprClass: {
  641. CallExpr* CE = cast<CallExpr>(E);
  642. unsigned builtin = CE->isBuiltinCall(CGM.getContext());
  643. if (builtin !=
  644. Builtin::BI__builtin___CFStringMakeConstantString &&
  645. builtin !=
  646. Builtin::BI__builtin___NSStringMakeConstantString)
  647. break;
  648. const Expr *Arg = CE->getArg(0)->IgnoreParenCasts();
  649. const StringLiteral *Literal = cast<StringLiteral>(Arg);
  650. if (builtin ==
  651. Builtin::BI__builtin___NSStringMakeConstantString) {
  652. return CGM.getObjCRuntime().GenerateConstantString(Literal);
  653. }
  654. // FIXME: need to deal with UCN conversion issues.
  655. return CGM.GetAddrOfConstantCFString(Literal);
  656. }
  657. case Expr::BlockExprClass: {
  658. std::string FunctionName;
  659. if (CGF)
  660. FunctionName = CGF->CurFn->getName();
  661. else
  662. FunctionName = "global";
  663. return CGM.GetAddrOfGlobalBlock(cast<BlockExpr>(E), FunctionName.c_str());
  664. }
  665. }
  666. return 0;
  667. }
  668. };
  669. } // end anonymous namespace.
  670. llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E,
  671. QualType DestType,
  672. CodeGenFunction *CGF) {
  673. Expr::EvalResult Result;
  674. bool Success = false;
  675. if (DestType->isReferenceType())
  676. Success = E->EvaluateAsLValue(Result, Context);
  677. else
  678. Success = E->Evaluate(Result, Context);
  679. if (Success && !Result.HasSideEffects) {
  680. switch (Result.Val.getKind()) {
  681. case APValue::Uninitialized:
  682. assert(0 && "Constant expressions should be initialized.");
  683. return 0;
  684. case APValue::LValue: {
  685. const llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType);
  686. llvm::Constant *Offset =
  687. llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext),
  688. Result.Val.getLValueOffset().getQuantity());
  689. llvm::Constant *C;
  690. if (const Expr *LVBase = Result.Val.getLValueBase()) {
  691. C = ConstExprEmitter(*this, CGF).EmitLValue(const_cast<Expr*>(LVBase));
  692. // Apply offset if necessary.
  693. if (!Offset->isNullValue()) {
  694. const llvm::Type *Type = llvm::Type::getInt8PtrTy(VMContext);
  695. llvm::Constant *Casted = llvm::ConstantExpr::getBitCast(C, Type);
  696. Casted = llvm::ConstantExpr::getGetElementPtr(Casted, &Offset, 1);
  697. C = llvm::ConstantExpr::getBitCast(Casted, C->getType());
  698. }
  699. // Convert to the appropriate type; this could be an lvalue for
  700. // an integer.
  701. if (isa<llvm::PointerType>(DestTy))
  702. return llvm::ConstantExpr::getBitCast(C, DestTy);
  703. return llvm::ConstantExpr::getPtrToInt(C, DestTy);
  704. } else {
  705. C = Offset;
  706. // Convert to the appropriate type; this could be an lvalue for
  707. // an integer.
  708. if (isa<llvm::PointerType>(DestTy))
  709. return llvm::ConstantExpr::getIntToPtr(C, DestTy);
  710. // If the types don't match this should only be a truncate.
  711. if (C->getType() != DestTy)
  712. return llvm::ConstantExpr::getTrunc(C, DestTy);
  713. return C;
  714. }
  715. }
  716. case APValue::Int: {
  717. llvm::Constant *C = llvm::ConstantInt::get(VMContext,
  718. Result.Val.getInt());
  719. if (C->getType()->isIntegerTy(1)) {
  720. const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
  721. C = llvm::ConstantExpr::getZExt(C, BoolTy);
  722. }
  723. return C;
  724. }
  725. case APValue::ComplexInt: {
  726. llvm::Constant *Complex[2];
  727. Complex[0] = llvm::ConstantInt::get(VMContext,
  728. Result.Val.getComplexIntReal());
  729. Complex[1] = llvm::ConstantInt::get(VMContext,
  730. Result.Val.getComplexIntImag());
  731. // FIXME: the target may want to specify that this is packed.
  732. return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
  733. }
  734. case APValue::Float:
  735. return llvm::ConstantFP::get(VMContext, Result.Val.getFloat());
  736. case APValue::ComplexFloat: {
  737. llvm::Constant *Complex[2];
  738. Complex[0] = llvm::ConstantFP::get(VMContext,
  739. Result.Val.getComplexFloatReal());
  740. Complex[1] = llvm::ConstantFP::get(VMContext,
  741. Result.Val.getComplexFloatImag());
  742. // FIXME: the target may want to specify that this is packed.
  743. return llvm::ConstantStruct::get(VMContext, Complex, 2, false);
  744. }
  745. case APValue::Vector: {
  746. llvm::SmallVector<llvm::Constant *, 4> Inits;
  747. unsigned NumElts = Result.Val.getVectorLength();
  748. for (unsigned i = 0; i != NumElts; ++i) {
  749. APValue &Elt = Result.Val.getVectorElt(i);
  750. if (Elt.isInt())
  751. Inits.push_back(llvm::ConstantInt::get(VMContext, Elt.getInt()));
  752. else
  753. Inits.push_back(llvm::ConstantFP::get(VMContext, Elt.getFloat()));
  754. }
  755. return llvm::ConstantVector::get(&Inits[0], Inits.size());
  756. }
  757. }
  758. }
  759. llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E));
  760. if (C && C->getType()->isIntegerTy(1)) {
  761. const llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
  762. C = llvm::ConstantExpr::getZExt(C, BoolTy);
  763. }
  764. return C;
  765. }
  766. static void
  767. FillInNullDataMemberPointers(CodeGenModule &CGM, QualType T,
  768. std::vector<llvm::Constant *> &Elements,
  769. uint64_t StartOffset) {
  770. assert(StartOffset % 8 == 0 && "StartOffset not byte aligned!");
  771. if (CGM.getTypes().isZeroInitializable(T))
  772. return;
  773. if (const ConstantArrayType *CAT =
  774. CGM.getContext().getAsConstantArrayType(T)) {
  775. QualType ElementTy = CAT->getElementType();
  776. uint64_t ElementSize = CGM.getContext().getTypeSize(ElementTy);
  777. for (uint64_t I = 0, E = CAT->getSize().getZExtValue(); I != E; ++I) {
  778. FillInNullDataMemberPointers(CGM, ElementTy, Elements,
  779. StartOffset + I * ElementSize);
  780. }
  781. } else if (const RecordType *RT = T->getAs<RecordType>()) {
  782. const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
  783. const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
  784. // Go through all bases and fill in any null pointer to data members.
  785. for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
  786. E = RD->bases_end(); I != E; ++I) {
  787. if (I->isVirtual()) {
  788. // FIXME: We should initialize null pointer to data members in virtual
  789. // bases here.
  790. continue;
  791. }
  792. const CXXRecordDecl *BaseDecl =
  793. cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl());
  794. // Ignore empty bases.
  795. if (BaseDecl->isEmpty())
  796. continue;
  797. // Ignore bases that don't have any pointer to data members.
  798. if (CGM.getTypes().isZeroInitializable(BaseDecl))
  799. continue;
  800. uint64_t BaseOffset = Layout.getBaseClassOffsetInBits(BaseDecl);
  801. FillInNullDataMemberPointers(CGM, I->getType(),
  802. Elements, StartOffset + BaseOffset);
  803. }
  804. // Visit all fields.
  805. unsigned FieldNo = 0;
  806. for (RecordDecl::field_iterator I = RD->field_begin(),
  807. E = RD->field_end(); I != E; ++I, ++FieldNo) {
  808. QualType FieldType = I->getType();
  809. if (CGM.getTypes().isZeroInitializable(FieldType))
  810. continue;
  811. uint64_t FieldOffset = StartOffset + Layout.getFieldOffset(FieldNo);
  812. FillInNullDataMemberPointers(CGM, FieldType, Elements, FieldOffset);
  813. }
  814. } else {
  815. assert(T->isMemberPointerType() && "Should only see member pointers here!");
  816. assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
  817. "Should only see pointers to data members here!");
  818. uint64_t StartIndex = StartOffset / 8;
  819. uint64_t EndIndex = StartIndex + CGM.getContext().getTypeSize(T) / 8;
  820. llvm::Constant *NegativeOne =
  821. llvm::ConstantInt::get(llvm::Type::getInt8Ty(CGM.getLLVMContext()),
  822. -1ULL, /*isSigned=*/true);
  823. // Fill in the null data member pointer.
  824. for (uint64_t I = StartIndex; I != EndIndex; ++I)
  825. Elements[I] = NegativeOne;
  826. }
  827. }
  828. llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
  829. if (getTypes().isZeroInitializable(T))
  830. return llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(T));
  831. if (const ConstantArrayType *CAT = Context.getAsConstantArrayType(T)) {
  832. QualType ElementTy = CAT->getElementType();
  833. llvm::Constant *Element = EmitNullConstant(ElementTy);
  834. unsigned NumElements = CAT->getSize().getZExtValue();
  835. std::vector<llvm::Constant *> Array(NumElements);
  836. for (unsigned i = 0; i != NumElements; ++i)
  837. Array[i] = Element;
  838. const llvm::ArrayType *ATy =
  839. cast<llvm::ArrayType>(getTypes().ConvertTypeForMem(T));
  840. return llvm::ConstantArray::get(ATy, Array);
  841. }
  842. if (const RecordType *RT = T->getAs<RecordType>()) {
  843. const CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl());
  844. const llvm::StructType *STy =
  845. cast<llvm::StructType>(getTypes().ConvertTypeForMem(T));
  846. unsigned NumElements = STy->getNumElements();
  847. std::vector<llvm::Constant *> Elements(NumElements);
  848. const CGRecordLayout &Layout = getTypes().getCGRecordLayout(RD);
  849. // Go through all bases and fill in any null pointer to data members.
  850. for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
  851. E = RD->bases_end(); I != E; ++I) {
  852. if (I->isVirtual()) {
  853. // FIXME: We should initialize null pointer to data members in virtual
  854. // bases here.
  855. continue;
  856. }
  857. const CXXRecordDecl *BaseDecl =
  858. cast<CXXRecordDecl>(I->getType()->getAs<RecordType>()->getDecl());
  859. // Ignore empty bases.
  860. if (BaseDecl->isEmpty())
  861. continue;
  862. // Ignore bases that don't have any pointer to data members.
  863. if (getTypes().isZeroInitializable(BaseDecl))
  864. continue;
  865. // Currently, all bases are arrays of i8. Figure out how many elements
  866. // this base array has.
  867. unsigned BaseFieldNo = Layout.getNonVirtualBaseLLVMFieldNo(BaseDecl);
  868. const llvm::ArrayType *BaseArrayTy =
  869. cast<llvm::ArrayType>(STy->getElementType(BaseFieldNo));
  870. unsigned NumBaseElements = BaseArrayTy->getNumElements();
  871. std::vector<llvm::Constant *> BaseElements(NumBaseElements);
  872. // Now fill in null data member pointers.
  873. FillInNullDataMemberPointers(*this, I->getType(), BaseElements, 0);
  874. // Now go through all other elements and zero them out.
  875. if (NumBaseElements) {
  876. llvm::Constant *Zero =
  877. llvm::ConstantInt::get(llvm::Type::getInt8Ty(getLLVMContext()), 0);
  878. for (unsigned I = 0; I != NumBaseElements; ++I) {
  879. if (!BaseElements[I])
  880. BaseElements[I] = Zero;
  881. }
  882. }
  883. Elements[BaseFieldNo] = llvm::ConstantArray::get(BaseArrayTy,
  884. BaseElements);
  885. }
  886. for (RecordDecl::field_iterator I = RD->field_begin(),
  887. E = RD->field_end(); I != E; ++I) {
  888. const FieldDecl *FD = *I;
  889. // Ignore bit fields.
  890. if (FD->isBitField())
  891. continue;
  892. unsigned FieldNo = Layout.getLLVMFieldNo(FD);
  893. Elements[FieldNo] = EmitNullConstant(FD->getType());
  894. }
  895. // Now go through all other fields and zero them out.
  896. for (unsigned i = 0; i != NumElements; ++i) {
  897. if (!Elements[i])
  898. Elements[i] = llvm::Constant::getNullValue(STy->getElementType(i));
  899. }
  900. return llvm::ConstantStruct::get(STy, Elements);
  901. }
  902. assert(T->isMemberPointerType() && "Should only see member pointers here!");
  903. assert(!T->getAs<MemberPointerType>()->getPointeeType()->isFunctionType() &&
  904. "Should only see pointers to data members here!");
  905. // Itanium C++ ABI 2.3:
  906. // A NULL pointer is represented as -1.
  907. return llvm::ConstantInt::get(getTypes().ConvertTypeForMem(T), -1ULL,
  908. /*isSigned=*/true);
  909. }