1 //===-- CodeGenFunction.h - Per-Function state for LLVM CodeGen -*- C++ -*-===// 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 is the internal per-function state used for llvm translation. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef CLANG_CODEGEN_CODEGENFUNCTION_H 15 #define CLANG_CODEGEN_CODEGENFUNCTION_H 16 17 #include "CGBuilder.h" 18 #include "CGDebugInfo.h" 19 #include "CGValue.h" 20 #include "CodeGenModule.h" 21 #include "clang/AST/CharUnits.h" 22 #include "clang/AST/ExprCXX.h" 23 #include "clang/AST/ExprObjC.h" 24 #include "clang/AST/Type.h" 25 #include "clang/Basic/ABI.h" 26 #include "clang/Basic/CapturedStmt.h" 27 #include "clang/Basic/TargetInfo.h" 28 #include "clang/Frontend/CodeGenOptions.h" 29 #include "llvm/ADT/ArrayRef.h" 30 #include "llvm/ADT/DenseMap.h" 31 #include "llvm/ADT/SmallVector.h" 32 #include "llvm/Support/Debug.h" 33 #include "llvm/Support/ValueHandle.h" 34 35 namespace llvm { 36 class BasicBlock; 37 class LLVMContext; 38 class MDNode; 39 class Module; 40 class SwitchInst; 41 class Twine; 42 class Value; 43 class CallSite; 44 } 45 46 namespace clang { 47 class ASTContext; 48 class BlockDecl; 49 class CXXDestructorDecl; 50 class CXXForRangeStmt; 51 class CXXTryStmt; 52 class Decl; 53 class LabelDecl; 54 class EnumConstantDecl; 55 class FunctionDecl; 56 class FunctionProtoType; 57 class LabelStmt; 58 class ObjCContainerDecl; 59 class ObjCInterfaceDecl; 60 class ObjCIvarDecl; 61 class ObjCMethodDecl; 62 class ObjCImplementationDecl; 63 class ObjCPropertyImplDecl; 64 class TargetInfo; 65 class TargetCodeGenInfo; 66 class VarDecl; 67 class ObjCForCollectionStmt; 68 class ObjCAtTryStmt; 69 class ObjCAtThrowStmt; 70 class ObjCAtSynchronizedStmt; 71 class ObjCAutoreleasePoolStmt; 72 73 namespace CodeGen { 74 class CodeGenTypes; 75 class CGFunctionInfo; 76 class CGRecordLayout; 77 class CGBlockInfo; 78 class CGCXXABI; 79 class BlockFlags; 80 class BlockFieldFlags; 81 82 /// The kind of evaluation to perform on values of a particular 83 /// type. Basically, is the code in CGExprScalar, CGExprComplex, or 84 /// CGExprAgg? 85 /// 86 /// TODO: should vectors maybe be split out into their own thing? 87 enum TypeEvaluationKind { 88 TEK_Scalar, 89 TEK_Complex, 90 TEK_Aggregate 91 }; 92 93 /// A branch fixup. These are required when emitting a goto to a 94 /// label which hasn't been emitted yet. The goto is optimistically 95 /// emitted as a branch to the basic block for the label, and (if it 96 /// occurs in a scope with non-trivial cleanups) a fixup is added to 97 /// the innermost cleanup. When a (normal) cleanup is popped, any 98 /// unresolved fixups in that scope are threaded through the cleanup. 99 struct BranchFixup { 100 /// The block containing the terminator which needs to be modified 101 /// into a switch if this fixup is resolved into the current scope. 102 /// If null, LatestBranch points directly to the destination. 103 llvm::BasicBlock *OptimisticBranchBlock; 104 105 /// The ultimate destination of the branch. 106 /// 107 /// This can be set to null to indicate that this fixup was 108 /// successfully resolved. 109 llvm::BasicBlock *Destination; 110 111 /// The destination index value. 112 unsigned DestinationIndex; 113 114 /// The initial branch of the fixup. 115 llvm::BranchInst *InitialBranch; 116 }; 117 118 template <class T> struct InvariantValue { 119 typedef T type; 120 typedef T saved_type; 121 static bool needsSaving(type value) { return false; } 122 static saved_type save(CodeGenFunction &CGF, type value) { return value; } 123 static type restore(CodeGenFunction &CGF, saved_type value) { return value; } 124 }; 125 126 /// A metaprogramming class for ensuring that a value will dominate an 127 /// arbitrary position in a function. 128 template <class T> struct DominatingValue : InvariantValue<T> {}; 129 130 template <class T, bool mightBeInstruction = 131 llvm::is_base_of<llvm::Value, T>::value && 132 !llvm::is_base_of<llvm::Constant, T>::value && 133 !llvm::is_base_of<llvm::BasicBlock, T>::value> 134 struct DominatingPointer; 135 template <class T> struct DominatingPointer<T,false> : InvariantValue<T*> {}; 136 // template <class T> struct DominatingPointer<T,true> at end of file 137 138 template <class T> struct DominatingValue<T*> : DominatingPointer<T> {}; 139 140 enum CleanupKind { 141 EHCleanup = 0x1, 142 NormalCleanup = 0x2, 143 NormalAndEHCleanup = EHCleanup | NormalCleanup, 144 145 InactiveCleanup = 0x4, 146 InactiveEHCleanup = EHCleanup | InactiveCleanup, 147 InactiveNormalCleanup = NormalCleanup | InactiveCleanup, 148 InactiveNormalAndEHCleanup = NormalAndEHCleanup | InactiveCleanup 149 }; 150 151 /// A stack of scopes which respond to exceptions, including cleanups 152 /// and catch blocks. 153 class EHScopeStack { 154 public: 155 /// A saved depth on the scope stack. This is necessary because 156 /// pushing scopes onto the stack invalidates iterators. 157 class stable_iterator { 158 friend class EHScopeStack; 159 160 /// Offset from StartOfData to EndOfBuffer. 161 ptrdiff_t Size; 162 163 stable_iterator(ptrdiff_t Size) : Size(Size) {} 164 165 public: 166 static stable_iterator invalid() { return stable_iterator(-1); } 167 stable_iterator() : Size(-1) {} 168 169 bool isValid() const { return Size >= 0; } 170 171 /// Returns true if this scope encloses I. 172 /// Returns false if I is invalid. 173 /// This scope must be valid. 174 bool encloses(stable_iterator I) const { return Size <= I.Size; } 175 176 /// Returns true if this scope strictly encloses I: that is, 177 /// if it encloses I and is not I. 178 /// Returns false is I is invalid. 179 /// This scope must be valid. 180 bool strictlyEncloses(stable_iterator I) const { return Size < I.Size; } 181 182 friend bool operator==(stable_iterator A, stable_iterator B) { 183 return A.Size == B.Size; 184 } 185 friend bool operator!=(stable_iterator A, stable_iterator B) { 186 return A.Size != B.Size; 187 } 188 }; 189 190 /// Information for lazily generating a cleanup. Subclasses must be 191 /// POD-like: cleanups will not be destructed, and they will be 192 /// allocated on the cleanup stack and freely copied and moved 193 /// around. 194 /// 195 /// Cleanup implementations should generally be declared in an 196 /// anonymous namespace. 197 class Cleanup { 198 // Anchor the construction vtable. 199 virtual void anchor(); 200 public: 201 /// Generation flags. 202 class Flags { 203 enum { 204 F_IsForEH = 0x1, 205 F_IsNormalCleanupKind = 0x2, 206 F_IsEHCleanupKind = 0x4 207 }; 208 unsigned flags; 209 210 public: 211 Flags() : flags(0) {} 212 213 /// isForEH - true if the current emission is for an EH cleanup. 214 bool isForEHCleanup() const { return flags & F_IsForEH; } 215 bool isForNormalCleanup() const { return !isForEHCleanup(); } 216 void setIsForEHCleanup() { flags |= F_IsForEH; } 217 218 bool isNormalCleanupKind() const { return flags & F_IsNormalCleanupKind; } 219 void setIsNormalCleanupKind() { flags |= F_IsNormalCleanupKind; } 220 221 /// isEHCleanupKind - true if the cleanup was pushed as an EH 222 /// cleanup. 223 bool isEHCleanupKind() const { return flags & F_IsEHCleanupKind; } 224 void setIsEHCleanupKind() { flags |= F_IsEHCleanupKind; } 225 }; 226 227 // Provide a virtual destructor to suppress a very common warning 228 // that unfortunately cannot be suppressed without this. Cleanups 229 // should not rely on this destructor ever being called. 230 virtual ~Cleanup() {} 231 232 /// Emit the cleanup. For normal cleanups, this is run in the 233 /// same EH context as when the cleanup was pushed, i.e. the 234 /// immediately-enclosing context of the cleanup scope. For 235 /// EH cleanups, this is run in a terminate context. 236 /// 237 // \param flags cleanup kind. 238 virtual void Emit(CodeGenFunction &CGF, Flags flags) = 0; 239 }; 240 241 /// ConditionalCleanupN stores the saved form of its N parameters, 242 /// then restores them and performs the cleanup. 243 template <class T, class A0> 244 class ConditionalCleanup1 : public Cleanup { 245 typedef typename DominatingValue<A0>::saved_type A0_saved; 246 A0_saved a0_saved; 247 248 void Emit(CodeGenFunction &CGF, Flags flags) { 249 A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); 250 T(a0).Emit(CGF, flags); 251 } 252 253 public: 254 ConditionalCleanup1(A0_saved a0) 255 : a0_saved(a0) {} 256 }; 257 258 template <class T, class A0, class A1> 259 class ConditionalCleanup2 : public Cleanup { 260 typedef typename DominatingValue<A0>::saved_type A0_saved; 261 typedef typename DominatingValue<A1>::saved_type A1_saved; 262 A0_saved a0_saved; 263 A1_saved a1_saved; 264 265 void Emit(CodeGenFunction &CGF, Flags flags) { 266 A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); 267 A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); 268 T(a0, a1).Emit(CGF, flags); 269 } 270 271 public: 272 ConditionalCleanup2(A0_saved a0, A1_saved a1) 273 : a0_saved(a0), a1_saved(a1) {} 274 }; 275 276 template <class T, class A0, class A1, class A2> 277 class ConditionalCleanup3 : public Cleanup { 278 typedef typename DominatingValue<A0>::saved_type A0_saved; 279 typedef typename DominatingValue<A1>::saved_type A1_saved; 280 typedef typename DominatingValue<A2>::saved_type A2_saved; 281 A0_saved a0_saved; 282 A1_saved a1_saved; 283 A2_saved a2_saved; 284 285 void Emit(CodeGenFunction &CGF, Flags flags) { 286 A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); 287 A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); 288 A2 a2 = DominatingValue<A2>::restore(CGF, a2_saved); 289 T(a0, a1, a2).Emit(CGF, flags); 290 } 291 292 public: 293 ConditionalCleanup3(A0_saved a0, A1_saved a1, A2_saved a2) 294 : a0_saved(a0), a1_saved(a1), a2_saved(a2) {} 295 }; 296 297 template <class T, class A0, class A1, class A2, class A3> 298 class ConditionalCleanup4 : public Cleanup { 299 typedef typename DominatingValue<A0>::saved_type A0_saved; 300 typedef typename DominatingValue<A1>::saved_type A1_saved; 301 typedef typename DominatingValue<A2>::saved_type A2_saved; 302 typedef typename DominatingValue<A3>::saved_type A3_saved; 303 A0_saved a0_saved; 304 A1_saved a1_saved; 305 A2_saved a2_saved; 306 A3_saved a3_saved; 307 308 void Emit(CodeGenFunction &CGF, Flags flags) { 309 A0 a0 = DominatingValue<A0>::restore(CGF, a0_saved); 310 A1 a1 = DominatingValue<A1>::restore(CGF, a1_saved); 311 A2 a2 = DominatingValue<A2>::restore(CGF, a2_saved); 312 A3 a3 = DominatingValue<A3>::restore(CGF, a3_saved); 313 T(a0, a1, a2, a3).Emit(CGF, flags); 314 } 315 316 public: 317 ConditionalCleanup4(A0_saved a0, A1_saved a1, A2_saved a2, A3_saved a3) 318 : a0_saved(a0), a1_saved(a1), a2_saved(a2), a3_saved(a3) {} 319 }; 320 321 private: 322 // The implementation for this class is in CGException.h and 323 // CGException.cpp; the definition is here because it's used as a 324 // member of CodeGenFunction. 325 326 /// The start of the scope-stack buffer, i.e. the allocated pointer 327 /// for the buffer. All of these pointers are either simultaneously 328 /// null or simultaneously valid. 329 char *StartOfBuffer; 330 331 /// The end of the buffer. 332 char *EndOfBuffer; 333 334 /// The first valid entry in the buffer. 335 char *StartOfData; 336 337 /// The innermost normal cleanup on the stack. 338 stable_iterator InnermostNormalCleanup; 339 340 /// The innermost EH scope on the stack. 341 stable_iterator InnermostEHScope; 342 343 /// The current set of branch fixups. A branch fixup is a jump to 344 /// an as-yet unemitted label, i.e. a label for which we don't yet 345 /// know the EH stack depth. Whenever we pop a cleanup, we have 346 /// to thread all the current branch fixups through it. 347 /// 348 /// Fixups are recorded as the Use of the respective branch or 349 /// switch statement. The use points to the final destination. 350 /// When popping out of a cleanup, these uses are threaded through 351 /// the cleanup and adjusted to point to the new cleanup. 352 /// 353 /// Note that branches are allowed to jump into protected scopes 354 /// in certain situations; e.g. the following code is legal: 355 /// struct A { ~A(); }; // trivial ctor, non-trivial dtor 356 /// goto foo; 357 /// A a; 358 /// foo: 359 /// bar(); 360 SmallVector<BranchFixup, 8> BranchFixups; 361 362 char *allocate(size_t Size); 363 364 void *pushCleanup(CleanupKind K, size_t DataSize); 365 366 public: 367 EHScopeStack() : StartOfBuffer(0), EndOfBuffer(0), StartOfData(0), 368 InnermostNormalCleanup(stable_end()), 369 InnermostEHScope(stable_end()) {} 370 ~EHScopeStack() { delete[] StartOfBuffer; } 371 372 // Variadic templates would make this not terrible. 373 374 /// Push a lazily-created cleanup on the stack. 375 template <class T> 376 void pushCleanup(CleanupKind Kind) { 377 void *Buffer = pushCleanup(Kind, sizeof(T)); 378 Cleanup *Obj = new(Buffer) T(); 379 (void) Obj; 380 } 381 382 /// Push a lazily-created cleanup on the stack. 383 template <class T, class A0> 384 void pushCleanup(CleanupKind Kind, A0 a0) { 385 void *Buffer = pushCleanup(Kind, sizeof(T)); 386 Cleanup *Obj = new(Buffer) T(a0); 387 (void) Obj; 388 } 389 390 /// Push a lazily-created cleanup on the stack. 391 template <class T, class A0, class A1> 392 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1) { 393 void *Buffer = pushCleanup(Kind, sizeof(T)); 394 Cleanup *Obj = new(Buffer) T(a0, a1); 395 (void) Obj; 396 } 397 398 /// Push a lazily-created cleanup on the stack. 399 template <class T, class A0, class A1, class A2> 400 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2) { 401 void *Buffer = pushCleanup(Kind, sizeof(T)); 402 Cleanup *Obj = new(Buffer) T(a0, a1, a2); 403 (void) Obj; 404 } 405 406 /// Push a lazily-created cleanup on the stack. 407 template <class T, class A0, class A1, class A2, class A3> 408 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3) { 409 void *Buffer = pushCleanup(Kind, sizeof(T)); 410 Cleanup *Obj = new(Buffer) T(a0, a1, a2, a3); 411 (void) Obj; 412 } 413 414 /// Push a lazily-created cleanup on the stack. 415 template <class T, class A0, class A1, class A2, class A3, class A4> 416 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 417 void *Buffer = pushCleanup(Kind, sizeof(T)); 418 Cleanup *Obj = new(Buffer) T(a0, a1, a2, a3, a4); 419 (void) Obj; 420 } 421 422 // Feel free to add more variants of the following: 423 424 /// Push a cleanup with non-constant storage requirements on the 425 /// stack. The cleanup type must provide an additional static method: 426 /// static size_t getExtraSize(size_t); 427 /// The argument to this method will be the value N, which will also 428 /// be passed as the first argument to the constructor. 429 /// 430 /// The data stored in the extra storage must obey the same 431 /// restrictions as normal cleanup member data. 432 /// 433 /// The pointer returned from this method is valid until the cleanup 434 /// stack is modified. 435 template <class T, class A0, class A1, class A2> 436 T *pushCleanupWithExtra(CleanupKind Kind, size_t N, A0 a0, A1 a1, A2 a2) { 437 void *Buffer = pushCleanup(Kind, sizeof(T) + T::getExtraSize(N)); 438 return new (Buffer) T(N, a0, a1, a2); 439 } 440 441 /// Pops a cleanup scope off the stack. This is private to CGCleanup.cpp. 442 void popCleanup(); 443 444 /// Push a set of catch handlers on the stack. The catch is 445 /// uninitialized and will need to have the given number of handlers 446 /// set on it. 447 class EHCatchScope *pushCatch(unsigned NumHandlers); 448 449 /// Pops a catch scope off the stack. This is private to CGException.cpp. 450 void popCatch(); 451 452 /// Push an exceptions filter on the stack. 453 class EHFilterScope *pushFilter(unsigned NumFilters); 454 455 /// Pops an exceptions filter off the stack. 456 void popFilter(); 457 458 /// Push a terminate handler on the stack. 459 void pushTerminate(); 460 461 /// Pops a terminate handler off the stack. 462 void popTerminate(); 463 464 /// Determines whether the exception-scopes stack is empty. 465 bool empty() const { return StartOfData == EndOfBuffer; } 466 467 bool requiresLandingPad() const { 468 return InnermostEHScope != stable_end(); 469 } 470 471 /// Determines whether there are any normal cleanups on the stack. 472 bool hasNormalCleanups() const { 473 return InnermostNormalCleanup != stable_end(); 474 } 475 476 /// Returns the innermost normal cleanup on the stack, or 477 /// stable_end() if there are no normal cleanups. 478 stable_iterator getInnermostNormalCleanup() const { 479 return InnermostNormalCleanup; 480 } 481 stable_iterator getInnermostActiveNormalCleanup() const; 482 483 stable_iterator getInnermostEHScope() const { 484 return InnermostEHScope; 485 } 486 487 stable_iterator getInnermostActiveEHScope() const; 488 489 /// An unstable reference to a scope-stack depth. Invalidated by 490 /// pushes but not pops. 491 class iterator; 492 493 /// Returns an iterator pointing to the innermost EH scope. 494 iterator begin() const; 495 496 /// Returns an iterator pointing to the outermost EH scope. 497 iterator end() const; 498 499 /// Create a stable reference to the top of the EH stack. The 500 /// returned reference is valid until that scope is popped off the 501 /// stack. 502 stable_iterator stable_begin() const { 503 return stable_iterator(EndOfBuffer - StartOfData); 504 } 505 506 /// Create a stable reference to the bottom of the EH stack. 507 static stable_iterator stable_end() { 508 return stable_iterator(0); 509 } 510 511 /// Translates an iterator into a stable_iterator. 512 stable_iterator stabilize(iterator it) const; 513 514 /// Turn a stable reference to a scope depth into a unstable pointer 515 /// to the EH stack. 516 iterator find(stable_iterator save) const; 517 518 /// Removes the cleanup pointed to by the given stable_iterator. 519 void removeCleanup(stable_iterator save); 520 521 /// Add a branch fixup to the current cleanup scope. 522 BranchFixup &addBranchFixup() { 523 assert(hasNormalCleanups() && "adding fixup in scope without cleanups"); 524 BranchFixups.push_back(BranchFixup()); 525 return BranchFixups.back(); 526 } 527 528 unsigned getNumBranchFixups() const { return BranchFixups.size(); } 529 BranchFixup &getBranchFixup(unsigned I) { 530 assert(I < getNumBranchFixups()); 531 return BranchFixups[I]; 532 } 533 534 /// Pops lazily-removed fixups from the end of the list. This 535 /// should only be called by procedures which have just popped a 536 /// cleanup or resolved one or more fixups. 537 void popNullFixups(); 538 539 /// Clears the branch-fixups list. This should only be called by 540 /// ResolveAllBranchFixups. 541 void clearFixups() { BranchFixups.clear(); } 542 }; 543 544 /// CodeGenFunction - This class organizes the per-function state that is used 545 /// while generating LLVM code. 546 class CodeGenFunction : public CodeGenTypeCache { 547 CodeGenFunction(const CodeGenFunction &) LLVM_DELETED_FUNCTION; 548 void operator=(const CodeGenFunction &) LLVM_DELETED_FUNCTION; 549 550 friend class CGCXXABI; 551 public: 552 /// A jump destination is an abstract label, branching to which may 553 /// require a jump out through normal cleanups. 554 struct JumpDest { 555 JumpDest() : Block(0), ScopeDepth(), Index(0) {} 556 JumpDest(llvm::BasicBlock *Block, 557 EHScopeStack::stable_iterator Depth, 558 unsigned Index) 559 : Block(Block), ScopeDepth(Depth), Index(Index) {} 560 561 bool isValid() const { return Block != 0; } 562 llvm::BasicBlock *getBlock() const { return Block; } 563 EHScopeStack::stable_iterator getScopeDepth() const { return ScopeDepth; } 564 unsigned getDestIndex() const { return Index; } 565 566 // This should be used cautiously. 567 void setScopeDepth(EHScopeStack::stable_iterator depth) { 568 ScopeDepth = depth; 569 } 570 571 private: 572 llvm::BasicBlock *Block; 573 EHScopeStack::stable_iterator ScopeDepth; 574 unsigned Index; 575 }; 576 577 CodeGenModule &CGM; // Per-module state. 578 const TargetInfo &Target; 579 580 typedef std::pair<llvm::Value *, llvm::Value *> ComplexPairTy; 581 CGBuilderTy Builder; 582 583 /// CurFuncDecl - Holds the Decl for the current outermost 584 /// non-closure context. 585 const Decl *CurFuncDecl; 586 /// CurCodeDecl - This is the inner-most code context, which includes blocks. 587 const Decl *CurCodeDecl; 588 const CGFunctionInfo *CurFnInfo; 589 QualType FnRetTy; 590 llvm::Function *CurFn; 591 592 /// CurGD - The GlobalDecl for the current function being compiled. 593 GlobalDecl CurGD; 594 595 /// PrologueCleanupDepth - The cleanup depth enclosing all the 596 /// cleanups associated with the parameters. 597 EHScopeStack::stable_iterator PrologueCleanupDepth; 598 599 /// ReturnBlock - Unified return block. 600 JumpDest ReturnBlock; 601 602 /// ReturnValue - The temporary alloca to hold the return value. This is null 603 /// iff the function has no return value. 604 llvm::Value *ReturnValue; 605 606 /// AllocaInsertPoint - This is an instruction in the entry block before which 607 /// we prefer to insert allocas. 608 llvm::AssertingVH<llvm::Instruction> AllocaInsertPt; 609 610 /// \brief API for captured statement code generation. 611 class CGCapturedStmtInfo { 612 public: 613 explicit CGCapturedStmtInfo(const CapturedStmt &S, 614 CapturedRegionKind K = CR_Default) 615 : Kind(K), ThisValue(0), CXXThisFieldDecl(0) { 616 617 RecordDecl::field_iterator Field = 618 S.getCapturedRecordDecl()->field_begin(); 619 for (CapturedStmt::const_capture_iterator I = S.capture_begin(), 620 E = S.capture_end(); 621 I != E; ++I, ++Field) { 622 if (I->capturesThis()) 623 CXXThisFieldDecl = *Field; 624 else 625 CaptureFields[I->getCapturedVar()] = *Field; 626 } 627 } 628 629 virtual ~CGCapturedStmtInfo(); 630 631 CapturedRegionKind getKind() const { return Kind; } 632 633 void setContextValue(llvm::Value *V) { ThisValue = V; } 634 // \brief Retrieve the value of the context parameter. 635 llvm::Value *getContextValue() const { return ThisValue; } 636 637 /// \brief Lookup the captured field decl for a variable. 638 const FieldDecl *lookup(const VarDecl *VD) const { 639 return CaptureFields.lookup(VD); 640 } 641 642 bool isCXXThisExprCaptured() const { return CXXThisFieldDecl != 0; } 643 FieldDecl *getThisFieldDecl() const { return CXXThisFieldDecl; } 644 645 /// \brief Emit the captured statement body. 646 virtual void EmitBody(CodeGenFunction &CGF, Stmt *S) { 647 CGF.EmitStmt(S); 648 } 649 650 /// \brief Get the name of the capture helper. 651 virtual StringRef getHelperName() const { return "__captured_stmt"; } 652 653 private: 654 /// \brief The kind of captured statement being generated. 655 CapturedRegionKind Kind; 656 657 /// \brief Keep the map between VarDecl and FieldDecl. 658 llvm::SmallDenseMap<const VarDecl *, FieldDecl *> CaptureFields; 659 660 /// \brief The base address of the captured record, passed in as the first 661 /// argument of the parallel region function. 662 llvm::Value *ThisValue; 663 664 /// \brief Captured 'this' type. 665 FieldDecl *CXXThisFieldDecl; 666 }; 667 CGCapturedStmtInfo *CapturedStmtInfo; 668 669 /// BoundsChecking - Emit run-time bounds checks. Higher values mean 670 /// potentially higher performance penalties. 671 unsigned char BoundsChecking; 672 673 /// \brief Whether any type-checking sanitizers are enabled. If \c false, 674 /// calls to EmitTypeCheck can be skipped. 675 bool SanitizePerformTypeCheck; 676 677 /// \brief Sanitizer options to use for this function. 678 const SanitizerOptions *SanOpts; 679 680 /// In ARC, whether we should autorelease the return value. 681 bool AutoreleaseResult; 682 683 const CodeGen::CGBlockInfo *BlockInfo; 684 llvm::Value *BlockPointer; 685 686 llvm::DenseMap<const VarDecl *, FieldDecl *> LambdaCaptureFields; 687 FieldDecl *LambdaThisCaptureField; 688 689 /// \brief A mapping from NRVO variables to the flags used to indicate 690 /// when the NRVO has been applied to this variable. 691 llvm::DenseMap<const VarDecl *, llvm::Value *> NRVOFlags; 692 693 EHScopeStack EHStack; 694 695 /// i32s containing the indexes of the cleanup destinations. 696 llvm::AllocaInst *NormalCleanupDest; 697 698 unsigned NextCleanupDestIndex; 699 700 /// FirstBlockInfo - The head of a singly-linked-list of block layouts. 701 CGBlockInfo *FirstBlockInfo; 702 703 /// EHResumeBlock - Unified block containing a call to llvm.eh.resume. 704 llvm::BasicBlock *EHResumeBlock; 705 706 /// The exception slot. All landing pads write the current exception pointer 707 /// into this alloca. 708 llvm::Value *ExceptionSlot; 709 710 /// The selector slot. Under the MandatoryCleanup model, all landing pads 711 /// write the current selector value into this alloca. 712 llvm::AllocaInst *EHSelectorSlot; 713 714 /// Emits a landing pad for the current EH stack. 715 llvm::BasicBlock *EmitLandingPad(); 716 717 llvm::BasicBlock *getInvokeDestImpl(); 718 719 template <class T> 720 typename DominatingValue<T>::saved_type saveValueInCond(T value) { 721 return DominatingValue<T>::save(*this, value); 722 } 723 724 public: 725 /// ObjCEHValueStack - Stack of Objective-C exception values, used for 726 /// rethrows. 727 SmallVector<llvm::Value*, 8> ObjCEHValueStack; 728 729 /// A class controlling the emission of a finally block. 730 class FinallyInfo { 731 /// Where the catchall's edge through the cleanup should go. 732 JumpDest RethrowDest; 733 734 /// A function to call to enter the catch. 735 llvm::Constant *BeginCatchFn; 736 737 /// An i1 variable indicating whether or not the @finally is 738 /// running for an exception. 739 llvm::AllocaInst *ForEHVar; 740 741 /// An i8* variable into which the exception pointer to rethrow 742 /// has been saved. 743 llvm::AllocaInst *SavedExnVar; 744 745 public: 746 void enter(CodeGenFunction &CGF, const Stmt *Finally, 747 llvm::Constant *beginCatchFn, llvm::Constant *endCatchFn, 748 llvm::Constant *rethrowFn); 749 void exit(CodeGenFunction &CGF); 750 }; 751 752 /// pushFullExprCleanup - Push a cleanup to be run at the end of the 753 /// current full-expression. Safe against the possibility that 754 /// we're currently inside a conditionally-evaluated expression. 755 template <class T, class A0> 756 void pushFullExprCleanup(CleanupKind kind, A0 a0) { 757 // If we're not in a conditional branch, or if none of the 758 // arguments requires saving, then use the unconditional cleanup. 759 if (!isInConditionalBranch()) 760 return EHStack.pushCleanup<T>(kind, a0); 761 762 typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0); 763 764 typedef EHScopeStack::ConditionalCleanup1<T, A0> CleanupType; 765 EHStack.pushCleanup<CleanupType>(kind, a0_saved); 766 initFullExprCleanup(); 767 } 768 769 /// pushFullExprCleanup - Push a cleanup to be run at the end of the 770 /// current full-expression. Safe against the possibility that 771 /// we're currently inside a conditionally-evaluated expression. 772 template <class T, class A0, class A1> 773 void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1) { 774 // If we're not in a conditional branch, or if none of the 775 // arguments requires saving, then use the unconditional cleanup. 776 if (!isInConditionalBranch()) 777 return EHStack.pushCleanup<T>(kind, a0, a1); 778 779 typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0); 780 typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1); 781 782 typedef EHScopeStack::ConditionalCleanup2<T, A0, A1> CleanupType; 783 EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved); 784 initFullExprCleanup(); 785 } 786 787 /// pushFullExprCleanup - Push a cleanup to be run at the end of the 788 /// current full-expression. Safe against the possibility that 789 /// we're currently inside a conditionally-evaluated expression. 790 template <class T, class A0, class A1, class A2> 791 void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1, A2 a2) { 792 // If we're not in a conditional branch, or if none of the 793 // arguments requires saving, then use the unconditional cleanup. 794 if (!isInConditionalBranch()) { 795 return EHStack.pushCleanup<T>(kind, a0, a1, a2); 796 } 797 798 typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0); 799 typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1); 800 typename DominatingValue<A2>::saved_type a2_saved = saveValueInCond(a2); 801 802 typedef EHScopeStack::ConditionalCleanup3<T, A0, A1, A2> CleanupType; 803 EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved, a2_saved); 804 initFullExprCleanup(); 805 } 806 807 /// pushFullExprCleanup - Push a cleanup to be run at the end of the 808 /// current full-expression. Safe against the possibility that 809 /// we're currently inside a conditionally-evaluated expression. 810 template <class T, class A0, class A1, class A2, class A3> 811 void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1, A2 a2, A3 a3) { 812 // If we're not in a conditional branch, or if none of the 813 // arguments requires saving, then use the unconditional cleanup. 814 if (!isInConditionalBranch()) { 815 return EHStack.pushCleanup<T>(kind, a0, a1, a2, a3); 816 } 817 818 typename DominatingValue<A0>::saved_type a0_saved = saveValueInCond(a0); 819 typename DominatingValue<A1>::saved_type a1_saved = saveValueInCond(a1); 820 typename DominatingValue<A2>::saved_type a2_saved = saveValueInCond(a2); 821 typename DominatingValue<A3>::saved_type a3_saved = saveValueInCond(a3); 822 823 typedef EHScopeStack::ConditionalCleanup4<T, A0, A1, A2, A3> CleanupType; 824 EHStack.pushCleanup<CleanupType>(kind, a0_saved, a1_saved, 825 a2_saved, a3_saved); 826 initFullExprCleanup(); 827 } 828 829 /// Set up the last cleaup that was pushed as a conditional 830 /// full-expression cleanup. 831 void initFullExprCleanup(); 832 833 /// PushDestructorCleanup - Push a cleanup to call the 834 /// complete-object destructor of an object of the given type at the 835 /// given address. Does nothing if T is not a C++ class type with a 836 /// non-trivial destructor. 837 void PushDestructorCleanup(QualType T, llvm::Value *Addr); 838 839 /// PushDestructorCleanup - Push a cleanup to call the 840 /// complete-object variant of the given destructor on the object at 841 /// the given address. 842 void PushDestructorCleanup(const CXXDestructorDecl *Dtor, 843 llvm::Value *Addr); 844 845 /// PopCleanupBlock - Will pop the cleanup entry on the stack and 846 /// process all branch fixups. 847 /// \param EHLoc - Optional debug location for EH code. 848 void PopCleanupBlock(bool FallThroughIsBranchThrough = false, 849 SourceLocation EHLoc=SourceLocation()); 850 851 /// DeactivateCleanupBlock - Deactivates the given cleanup block. 852 /// The block cannot be reactivated. Pops it if it's the top of the 853 /// stack. 854 /// 855 /// \param DominatingIP - An instruction which is known to 856 /// dominate the current IP (if set) and which lies along 857 /// all paths of execution between the current IP and the 858 /// the point at which the cleanup comes into scope. 859 void DeactivateCleanupBlock(EHScopeStack::stable_iterator Cleanup, 860 llvm::Instruction *DominatingIP); 861 862 /// ActivateCleanupBlock - Activates an initially-inactive cleanup. 863 /// Cannot be used to resurrect a deactivated cleanup. 864 /// 865 /// \param DominatingIP - An instruction which is known to 866 /// dominate the current IP (if set) and which lies along 867 /// all paths of execution between the current IP and the 868 /// the point at which the cleanup comes into scope. 869 void ActivateCleanupBlock(EHScopeStack::stable_iterator Cleanup, 870 llvm::Instruction *DominatingIP); 871 872 /// \brief Enters a new scope for capturing cleanups, all of which 873 /// will be executed once the scope is exited. 874 class RunCleanupsScope { 875 EHScopeStack::stable_iterator CleanupStackDepth; 876 bool OldDidCallStackSave; 877 protected: 878 bool PerformCleanup; 879 private: 880 881 RunCleanupsScope(const RunCleanupsScope &) LLVM_DELETED_FUNCTION; 882 void operator=(const RunCleanupsScope &) LLVM_DELETED_FUNCTION; 883 884 protected: 885 CodeGenFunction& CGF; 886 887 public: 888 /// \brief Enter a new cleanup scope. 889 explicit RunCleanupsScope(CodeGenFunction &CGF) 890 : PerformCleanup(true), CGF(CGF) 891 { 892 CleanupStackDepth = CGF.EHStack.stable_begin(); 893 OldDidCallStackSave = CGF.DidCallStackSave; 894 CGF.DidCallStackSave = false; 895 } 896 897 /// \brief Exit this cleanup scope, emitting any accumulated 898 /// cleanups. 899 ~RunCleanupsScope() { 900 if (PerformCleanup) { 901 CGF.DidCallStackSave = OldDidCallStackSave; 902 CGF.PopCleanupBlocks(CleanupStackDepth); 903 } 904 } 905 906 /// \brief Determine whether this scope requires any cleanups. 907 bool requiresCleanups() const { 908 return CGF.EHStack.stable_begin() != CleanupStackDepth; 909 } 910 911 /// \brief Force the emission of cleanups now, instead of waiting 912 /// until this object is destroyed. 913 void ForceCleanup() { 914 assert(PerformCleanup && "Already forced cleanup"); 915 CGF.DidCallStackSave = OldDidCallStackSave; 916 CGF.PopCleanupBlocks(CleanupStackDepth); 917 PerformCleanup = false; 918 } 919 }; 920 921 class LexicalScope: protected RunCleanupsScope { 922 SourceRange Range; 923 SmallVector<const LabelDecl*, 4> Labels; 924 LexicalScope *ParentScope; 925 926 LexicalScope(const LexicalScope &) LLVM_DELETED_FUNCTION; 927 void operator=(const LexicalScope &) LLVM_DELETED_FUNCTION; 928 929 public: 930 /// \brief Enter a new cleanup scope. 931 explicit LexicalScope(CodeGenFunction &CGF, SourceRange Range) 932 : RunCleanupsScope(CGF), Range(Range), ParentScope(CGF.CurLexicalScope) { 933 CGF.CurLexicalScope = this; 934 if (CGDebugInfo *DI = CGF.getDebugInfo()) 935 DI->EmitLexicalBlockStart(CGF.Builder, Range.getBegin()); 936 } 937 938 void addLabel(const LabelDecl *label) { 939 assert(PerformCleanup && "adding label to dead scope?"); 940 Labels.push_back(label); 941 } 942 943 /// \brief Exit this cleanup scope, emitting any accumulated 944 /// cleanups. 945 ~LexicalScope() { 946 if (CGDebugInfo *DI = CGF.getDebugInfo()) 947 DI->EmitLexicalBlockEnd(CGF.Builder, Range.getEnd()); 948 949 // If we should perform a cleanup, force them now. Note that 950 // this ends the cleanup scope before rescoping any labels. 951 if (PerformCleanup) ForceCleanup(); 952 } 953 954 /// \brief Force the emission of cleanups now, instead of waiting 955 /// until this object is destroyed. 956 void ForceCleanup() { 957 CGF.CurLexicalScope = ParentScope; 958 RunCleanupsScope::ForceCleanup(); 959 960 if (!Labels.empty()) 961 rescopeLabels(); 962 } 963 964 void rescopeLabels(); 965 }; 966 967 968 /// PopCleanupBlocks - Takes the old cleanup stack size and emits 969 /// the cleanup blocks that have been added. 970 /// \param EHLoc - Optional debug location for EH code. 971 void PopCleanupBlocks(EHScopeStack::stable_iterator OldCleanupStackSize, 972 SourceLocation EHLoc=SourceLocation()); 973 974 void ResolveBranchFixups(llvm::BasicBlock *Target); 975 976 /// The given basic block lies in the current EH scope, but may be a 977 /// target of a potentially scope-crossing jump; get a stable handle 978 /// to which we can perform this jump later. 979 JumpDest getJumpDestInCurrentScope(llvm::BasicBlock *Target) { 980 return JumpDest(Target, 981 EHStack.getInnermostNormalCleanup(), 982 NextCleanupDestIndex++); 983 } 984 985 /// The given basic block lies in the current EH scope, but may be a 986 /// target of a potentially scope-crossing jump; get a stable handle 987 /// to which we can perform this jump later. 988 JumpDest getJumpDestInCurrentScope(StringRef Name = StringRef()) { 989 return getJumpDestInCurrentScope(createBasicBlock(Name)); 990 } 991 992 /// EmitBranchThroughCleanup - Emit a branch from the current insert 993 /// block through the normal cleanup handling code (if any) and then 994 /// on to \arg Dest. 995 void EmitBranchThroughCleanup(JumpDest Dest); 996 997 /// isObviouslyBranchWithoutCleanups - Return true if a branch to the 998 /// specified destination obviously has no cleanups to run. 'false' is always 999 /// a conservatively correct answer for this method. 1000 bool isObviouslyBranchWithoutCleanups(JumpDest Dest) const; 1001 1002 /// popCatchScope - Pops the catch scope at the top of the EHScope 1003 /// stack, emitting any required code (other than the catch handlers 1004 /// themselves). 1005 void popCatchScope(); 1006 1007 llvm::BasicBlock *getEHResumeBlock(bool isCleanup); 1008 llvm::BasicBlock *getEHDispatchBlock(EHScopeStack::stable_iterator scope); 1009 1010 /// An object to manage conditionally-evaluated expressions. 1011 class ConditionalEvaluation { 1012 llvm::BasicBlock *StartBB; 1013 1014 public: 1015 ConditionalEvaluation(CodeGenFunction &CGF) 1016 : StartBB(CGF.Builder.GetInsertBlock()) {} 1017 1018 void begin(CodeGenFunction &CGF) { 1019 assert(CGF.OutermostConditional != this); 1020 if (!CGF.OutermostConditional) 1021 CGF.OutermostConditional = this; 1022 } 1023 1024 void end(CodeGenFunction &CGF) { 1025 assert(CGF.OutermostConditional != 0); 1026 if (CGF.OutermostConditional == this) 1027 CGF.OutermostConditional = 0; 1028 } 1029 1030 /// Returns a block which will be executed prior to each 1031 /// evaluation of the conditional code. 1032 llvm::BasicBlock *getStartingBlock() const { 1033 return StartBB; 1034 } 1035 }; 1036 1037 /// isInConditionalBranch - Return true if we're currently emitting 1038 /// one branch or the other of a conditional expression. 1039 bool isInConditionalBranch() const { return OutermostConditional != 0; } 1040 1041 void setBeforeOutermostConditional(llvm::Value *value, llvm::Value *addr) { 1042 assert(isInConditionalBranch()); 1043 llvm::BasicBlock *block = OutermostConditional->getStartingBlock(); 1044 new llvm::StoreInst(value, addr, &block->back()); 1045 } 1046 1047 /// An RAII object to record that we're evaluating a statement 1048 /// expression. 1049 class StmtExprEvaluation { 1050 CodeGenFunction &CGF; 1051 1052 /// We have to save the outermost conditional: cleanups in a 1053 /// statement expression aren't conditional just because the 1054 /// StmtExpr is. 1055 ConditionalEvaluation *SavedOutermostConditional; 1056 1057 public: 1058 StmtExprEvaluation(CodeGenFunction &CGF) 1059 : CGF(CGF), SavedOutermostConditional(CGF.OutermostConditional) { 1060 CGF.OutermostConditional = 0; 1061 } 1062 1063 ~StmtExprEvaluation() { 1064 CGF.OutermostConditional = SavedOutermostConditional; 1065 CGF.EnsureInsertPoint(); 1066 } 1067 }; 1068 1069 /// An object which temporarily prevents a value from being 1070 /// destroyed by aggressive peephole optimizations that assume that 1071 /// all uses of a value have been realized in the IR. 1072 class PeepholeProtection { 1073 llvm::Instruction *Inst; 1074 friend class CodeGenFunction; 1075 1076 public: 1077 PeepholeProtection() : Inst(0) {} 1078 }; 1079 1080 /// A non-RAII class containing all the information about a bound 1081 /// opaque value. OpaqueValueMapping, below, is a RAII wrapper for 1082 /// this which makes individual mappings very simple; using this 1083 /// class directly is useful when you have a variable number of 1084 /// opaque values or don't want the RAII functionality for some 1085 /// reason. 1086 class OpaqueValueMappingData { 1087 const OpaqueValueExpr *OpaqueValue; 1088 bool BoundLValue; 1089 CodeGenFunction::PeepholeProtection Protection; 1090 1091 OpaqueValueMappingData(const OpaqueValueExpr *ov, 1092 bool boundLValue) 1093 : OpaqueValue(ov), BoundLValue(boundLValue) {} 1094 public: 1095 OpaqueValueMappingData() : OpaqueValue(0) {} 1096 1097 static bool shouldBindAsLValue(const Expr *expr) { 1098 // gl-values should be bound as l-values for obvious reasons. 1099 // Records should be bound as l-values because IR generation 1100 // always keeps them in memory. Expressions of function type 1101 // act exactly like l-values but are formally required to be 1102 // r-values in C. 1103 return expr->isGLValue() || 1104 expr->getType()->isRecordType() || 1105 expr->getType()->isFunctionType(); 1106 } 1107 1108 static OpaqueValueMappingData bind(CodeGenFunction &CGF, 1109 const OpaqueValueExpr *ov, 1110 const Expr *e) { 1111 if (shouldBindAsLValue(ov)) 1112 return bind(CGF, ov, CGF.EmitLValue(e)); 1113 return bind(CGF, ov, CGF.EmitAnyExpr(e)); 1114 } 1115 1116 static OpaqueValueMappingData bind(CodeGenFunction &CGF, 1117 const OpaqueValueExpr *ov, 1118 const LValue &lv) { 1119 assert(shouldBindAsLValue(ov)); 1120 CGF.OpaqueLValues.insert(std::make_pair(ov, lv)); 1121 return OpaqueValueMappingData(ov, true); 1122 } 1123 1124 static OpaqueValueMappingData bind(CodeGenFunction &CGF, 1125 const OpaqueValueExpr *ov, 1126 const RValue &rv) { 1127 assert(!shouldBindAsLValue(ov)); 1128 CGF.OpaqueRValues.insert(std::make_pair(ov, rv)); 1129 1130 OpaqueValueMappingData data(ov, false); 1131 1132 // Work around an extremely aggressive peephole optimization in 1133 // EmitScalarConversion which assumes that all other uses of a 1134 // value are extant. 1135 data.Protection = CGF.protectFromPeepholes(rv); 1136 1137 return data; 1138 } 1139 1140 bool isValid() const { return OpaqueValue != 0; } 1141 void clear() { OpaqueValue = 0; } 1142 1143 void unbind(CodeGenFunction &CGF) { 1144 assert(OpaqueValue && "no data to unbind!"); 1145 1146 if (BoundLValue) { 1147 CGF.OpaqueLValues.erase(OpaqueValue); 1148 } else { 1149 CGF.OpaqueRValues.erase(OpaqueValue); 1150 CGF.unprotectFromPeepholes(Protection); 1151 } 1152 } 1153 }; 1154 1155 /// An RAII object to set (and then clear) a mapping for an OpaqueValueExpr. 1156 class OpaqueValueMapping { 1157 CodeGenFunction &CGF; 1158 OpaqueValueMappingData Data; 1159 1160 public: 1161 static bool shouldBindAsLValue(const Expr *expr) { 1162 return OpaqueValueMappingData::shouldBindAsLValue(expr); 1163 } 1164 1165 /// Build the opaque value mapping for the given conditional 1166 /// operator if it's the GNU ?: extension. This is a common 1167 /// enough pattern that the convenience operator is really 1168 /// helpful. 1169 /// 1170 OpaqueValueMapping(CodeGenFunction &CGF, 1171 const AbstractConditionalOperator *op) : CGF(CGF) { 1172 if (isa<ConditionalOperator>(op)) 1173 // Leave Data empty. 1174 return; 1175 1176 const BinaryConditionalOperator *e = cast<BinaryConditionalOperator>(op); 1177 Data = OpaqueValueMappingData::bind(CGF, e->getOpaqueValue(), 1178 e->getCommon()); 1179 } 1180 1181 OpaqueValueMapping(CodeGenFunction &CGF, 1182 const OpaqueValueExpr *opaqueValue, 1183 LValue lvalue) 1184 : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, lvalue)) { 1185 } 1186 1187 OpaqueValueMapping(CodeGenFunction &CGF, 1188 const OpaqueValueExpr *opaqueValue, 1189 RValue rvalue) 1190 : CGF(CGF), Data(OpaqueValueMappingData::bind(CGF, opaqueValue, rvalue)) { 1191 } 1192 1193 void pop() { 1194 Data.unbind(CGF); 1195 Data.clear(); 1196 } 1197 1198 ~OpaqueValueMapping() { 1199 if (Data.isValid()) Data.unbind(CGF); 1200 } 1201 }; 1202 1203 /// getByrefValueFieldNumber - Given a declaration, returns the LLVM field 1204 /// number that holds the value. 1205 unsigned getByRefValueLLVMField(const ValueDecl *VD) const; 1206 1207 /// BuildBlockByrefAddress - Computes address location of the 1208 /// variable which is declared as __block. 1209 llvm::Value *BuildBlockByrefAddress(llvm::Value *BaseAddr, 1210 const VarDecl *V); 1211 private: 1212 CGDebugInfo *DebugInfo; 1213 bool DisableDebugInfo; 1214 1215 /// If the current function returns 'this', use the field to keep track of 1216 /// the callee that returns 'this'. 1217 llvm::Value *CalleeWithThisReturn; 1218 1219 /// DidCallStackSave - Whether llvm.stacksave has been called. Used to avoid 1220 /// calling llvm.stacksave for multiple VLAs in the same scope. 1221 bool DidCallStackSave; 1222 1223 /// IndirectBranch - The first time an indirect goto is seen we create a block 1224 /// with an indirect branch. Every time we see the address of a label taken, 1225 /// we add the label to the indirect goto. Every subsequent indirect goto is 1226 /// codegen'd as a jump to the IndirectBranch's basic block. 1227 llvm::IndirectBrInst *IndirectBranch; 1228 1229 /// LocalDeclMap - This keeps track of the LLVM allocas or globals for local C 1230 /// decls. 1231 typedef llvm::DenseMap<const Decl*, llvm::Value*> DeclMapTy; 1232 DeclMapTy LocalDeclMap; 1233 1234 /// LabelMap - This keeps track of the LLVM basic block for each C label. 1235 llvm::DenseMap<const LabelDecl*, JumpDest> LabelMap; 1236 1237 // BreakContinueStack - This keeps track of where break and continue 1238 // statements should jump to. 1239 struct BreakContinue { 1240 BreakContinue(JumpDest Break, JumpDest Continue) 1241 : BreakBlock(Break), ContinueBlock(Continue) {} 1242 1243 JumpDest BreakBlock; 1244 JumpDest ContinueBlock; 1245 }; 1246 SmallVector<BreakContinue, 8> BreakContinueStack; 1247 1248 /// SwitchInsn - This is nearest current switch instruction. It is null if 1249 /// current context is not in a switch. 1250 llvm::SwitchInst *SwitchInsn; 1251 1252 /// CaseRangeBlock - This block holds if condition check for last case 1253 /// statement range in current switch instruction. 1254 llvm::BasicBlock *CaseRangeBlock; 1255 1256 /// OpaqueLValues - Keeps track of the current set of opaque value 1257 /// expressions. 1258 llvm::DenseMap<const OpaqueValueExpr *, LValue> OpaqueLValues; 1259 llvm::DenseMap<const OpaqueValueExpr *, RValue> OpaqueRValues; 1260 1261 // VLASizeMap - This keeps track of the associated size for each VLA type. 1262 // We track this by the size expression rather than the type itself because 1263 // in certain situations, like a const qualifier applied to an VLA typedef, 1264 // multiple VLA types can share the same size expression. 1265 // FIXME: Maybe this could be a stack of maps that is pushed/popped as we 1266 // enter/leave scopes. 1267 llvm::DenseMap<const Expr*, llvm::Value*> VLASizeMap; 1268 1269 /// A block containing a single 'unreachable' instruction. Created 1270 /// lazily by getUnreachableBlock(). 1271 llvm::BasicBlock *UnreachableBlock; 1272 1273 /// Counts of the number return expressions in the function. 1274 unsigned NumReturnExprs; 1275 1276 /// Count the number of simple (constant) return expressions in the function. 1277 unsigned NumSimpleReturnExprs; 1278 1279 /// The last regular (non-return) debug location (breakpoint) in the function. 1280 SourceLocation LastStopPoint; 1281 1282 public: 1283 /// A scope within which we are constructing the fields of an object which 1284 /// might use a CXXDefaultInitExpr. This stashes away a 'this' value to use 1285 /// if we need to evaluate a CXXDefaultInitExpr within the evaluation. 1286 class FieldConstructionScope { 1287 public: 1288 FieldConstructionScope(CodeGenFunction &CGF, llvm::Value *This) 1289 : CGF(CGF), OldCXXDefaultInitExprThis(CGF.CXXDefaultInitExprThis) { 1290 CGF.CXXDefaultInitExprThis = This; 1291 } 1292 ~FieldConstructionScope() { 1293 CGF.CXXDefaultInitExprThis = OldCXXDefaultInitExprThis; 1294 } 1295 1296 private: 1297 CodeGenFunction &CGF; 1298 llvm::Value *OldCXXDefaultInitExprThis; 1299 }; 1300 1301 /// The scope of a CXXDefaultInitExpr. Within this scope, the value of 'this' 1302 /// is overridden to be the object under construction. 1303 class CXXDefaultInitExprScope { 1304 public: 1305 CXXDefaultInitExprScope(CodeGenFunction &CGF) 1306 : CGF(CGF), OldCXXThisValue(CGF.CXXThisValue) { 1307 CGF.CXXThisValue = CGF.CXXDefaultInitExprThis; 1308 } 1309 ~CXXDefaultInitExprScope() { 1310 CGF.CXXThisValue = OldCXXThisValue; 1311 } 1312 1313 public: 1314 CodeGenFunction &CGF; 1315 llvm::Value *OldCXXThisValue; 1316 }; 1317 1318 private: 1319 /// CXXThisDecl - When generating code for a C++ member function, 1320 /// this will hold the implicit 'this' declaration. 1321 ImplicitParamDecl *CXXABIThisDecl; 1322 llvm::Value *CXXABIThisValue; 1323 llvm::Value *CXXThisValue; 1324 1325 /// The value of 'this' to use when evaluating CXXDefaultInitExprs within 1326 /// this expression. 1327 llvm::Value *CXXDefaultInitExprThis; 1328 1329 /// CXXStructorImplicitParamDecl - When generating code for a constructor or 1330 /// destructor, this will hold the implicit argument (e.g. VTT). 1331 ImplicitParamDecl *CXXStructorImplicitParamDecl; 1332 llvm::Value *CXXStructorImplicitParamValue; 1333 1334 /// OutermostConditional - Points to the outermost active 1335 /// conditional control. This is used so that we know if a 1336 /// temporary should be destroyed conditionally. 1337 ConditionalEvaluation *OutermostConditional; 1338 1339 /// The current lexical scope. 1340 LexicalScope *CurLexicalScope; 1341 1342 /// ByrefValueInfoMap - For each __block variable, contains a pair of the LLVM 1343 /// type as well as the field number that contains the actual data. 1344 llvm::DenseMap<const ValueDecl *, std::pair<llvm::Type *, 1345 unsigned> > ByRefValueInfo; 1346 1347 llvm::BasicBlock *TerminateLandingPad; 1348 llvm::BasicBlock *TerminateHandler; 1349 llvm::BasicBlock *TrapBB; 1350 1351 /// Add a kernel metadata node to the named metadata node 'opencl.kernels'. 1352 /// In the kernel metadata node, reference the kernel function and metadata 1353 /// nodes for its optional attribute qualifiers (OpenCL 1.1 6.7.2): 1354 /// - A node for the vec_type_hint(<type>) qualifier contains string 1355 /// "vec_type_hint", an undefined value of the <type> data type, 1356 /// and a Boolean that is true if the <type> is integer and signed. 1357 /// - A node for the work_group_size_hint(X,Y,Z) qualifier contains string 1358 /// "work_group_size_hint", and three 32-bit integers X, Y and Z. 1359 /// - A node for the reqd_work_group_size(X,Y,Z) qualifier contains string 1360 /// "reqd_work_group_size", and three 32-bit integers X, Y and Z. 1361 void EmitOpenCLKernelMetadata(const FunctionDecl *FD, 1362 llvm::Function *Fn); 1363 1364 public: 1365 CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext=false); 1366 ~CodeGenFunction(); 1367 1368 CodeGenTypes &getTypes() const { return CGM.getTypes(); } 1369 ASTContext &getContext() const { return CGM.getContext(); } 1370 /// Returns true if DebugInfo is actually initialized. 1371 bool maybeInitializeDebugInfo() { 1372 if (CGM.getModuleDebugInfo()) { 1373 DebugInfo = CGM.getModuleDebugInfo(); 1374 return true; 1375 } 1376 return false; 1377 } 1378 CGDebugInfo *getDebugInfo() { 1379 if (DisableDebugInfo) 1380 return NULL; 1381 return DebugInfo; 1382 } 1383 void disableDebugInfo() { DisableDebugInfo = true; } 1384 void enableDebugInfo() { DisableDebugInfo = false; } 1385 1386 bool shouldUseFusedARCCalls() { 1387 return CGM.getCodeGenOpts().OptimizationLevel == 0; 1388 } 1389 1390 const LangOptions &getLangOpts() const { return CGM.getLangOpts(); } 1391 1392 /// Returns a pointer to the function's exception object and selector slot, 1393 /// which is assigned in every landing pad. 1394 llvm::Value *getExceptionSlot(); 1395 llvm::Value *getEHSelectorSlot(); 1396 1397 /// Returns the contents of the function's exception object and selector 1398 /// slots. 1399 llvm::Value *getExceptionFromSlot(); 1400 llvm::Value *getSelectorFromSlot(); 1401 1402 llvm::Value *getNormalCleanupDestSlot(); 1403 1404 llvm::BasicBlock *getUnreachableBlock() { 1405 if (!UnreachableBlock) { 1406 UnreachableBlock = createBasicBlock("unreachable"); 1407 new llvm::UnreachableInst(getLLVMContext(), UnreachableBlock); 1408 } 1409 return UnreachableBlock; 1410 } 1411 1412 llvm::BasicBlock *getInvokeDest() { 1413 if (!EHStack.requiresLandingPad()) return 0; 1414 return getInvokeDestImpl(); 1415 } 1416 1417 const TargetInfo &getTarget() const { return Target; } 1418 llvm::LLVMContext &getLLVMContext() { return CGM.getLLVMContext(); } 1419 1420 //===--------------------------------------------------------------------===// 1421 // Cleanups 1422 //===--------------------------------------------------------------------===// 1423 1424 typedef void Destroyer(CodeGenFunction &CGF, llvm::Value *addr, QualType ty); 1425 1426 void pushIrregularPartialArrayCleanup(llvm::Value *arrayBegin, 1427 llvm::Value *arrayEndPointer, 1428 QualType elementType, 1429 Destroyer *destroyer); 1430 void pushRegularPartialArrayCleanup(llvm::Value *arrayBegin, 1431 llvm::Value *arrayEnd, 1432 QualType elementType, 1433 Destroyer *destroyer); 1434 1435 void pushDestroy(QualType::DestructionKind dtorKind, 1436 llvm::Value *addr, QualType type); 1437 void pushEHDestroy(QualType::DestructionKind dtorKind, 1438 llvm::Value *addr, QualType type); 1439 void pushDestroy(CleanupKind kind, llvm::Value *addr, QualType type, 1440 Destroyer *destroyer, bool useEHCleanupForArray); 1441 void emitDestroy(llvm::Value *addr, QualType type, Destroyer *destroyer, 1442 bool useEHCleanupForArray); 1443 llvm::Function *generateDestroyHelper(llvm::Constant *addr, 1444 QualType type, 1445 Destroyer *destroyer, 1446 bool useEHCleanupForArray); 1447 void emitArrayDestroy(llvm::Value *begin, llvm::Value *end, 1448 QualType type, Destroyer *destroyer, 1449 bool checkZeroLength, bool useEHCleanup); 1450 1451 Destroyer *getDestroyer(QualType::DestructionKind destructionKind); 1452 1453 /// Determines whether an EH cleanup is required to destroy a type 1454 /// with the given destruction kind. 1455 bool needsEHCleanup(QualType::DestructionKind kind) { 1456 switch (kind) { 1457 case QualType::DK_none: 1458 return false; 1459 case QualType::DK_cxx_destructor: 1460 case QualType::DK_objc_weak_lifetime: 1461 return getLangOpts().Exceptions; 1462 case QualType::DK_objc_strong_lifetime: 1463 return getLangOpts().Exceptions && 1464 CGM.getCodeGenOpts().ObjCAutoRefCountExceptions; 1465 } 1466 llvm_unreachable("bad destruction kind"); 1467 } 1468 1469 CleanupKind getCleanupKind(QualType::DestructionKind kind) { 1470 return (needsEHCleanup(kind) ? NormalAndEHCleanup : NormalCleanup); 1471 } 1472 1473 //===--------------------------------------------------------------------===// 1474 // Objective-C 1475 //===--------------------------------------------------------------------===// 1476 1477 void GenerateObjCMethod(const ObjCMethodDecl *OMD); 1478 1479 void StartObjCMethod(const ObjCMethodDecl *MD, 1480 const ObjCContainerDecl *CD, 1481 SourceLocation StartLoc); 1482 1483 /// GenerateObjCGetter - Synthesize an Objective-C property getter function. 1484 void GenerateObjCGetter(ObjCImplementationDecl *IMP, 1485 const ObjCPropertyImplDecl *PID); 1486 void generateObjCGetterBody(const ObjCImplementationDecl *classImpl, 1487 const ObjCPropertyImplDecl *propImpl, 1488 const ObjCMethodDecl *GetterMothodDecl, 1489 llvm::Constant *AtomicHelperFn); 1490 1491 void GenerateObjCCtorDtorMethod(ObjCImplementationDecl *IMP, 1492 ObjCMethodDecl *MD, bool ctor); 1493 1494 /// GenerateObjCSetter - Synthesize an Objective-C property setter function 1495 /// for the given property. 1496 void GenerateObjCSetter(ObjCImplementationDecl *IMP, 1497 const ObjCPropertyImplDecl *PID); 1498 void generateObjCSetterBody(const ObjCImplementationDecl *classImpl, 1499 const ObjCPropertyImplDecl *propImpl, 1500 llvm::Constant *AtomicHelperFn); 1501 bool IndirectObjCSetterArg(const CGFunctionInfo &FI); 1502 bool IvarTypeWithAggrGCObjects(QualType Ty); 1503 1504 //===--------------------------------------------------------------------===// 1505 // Block Bits 1506 //===--------------------------------------------------------------------===// 1507 1508 llvm::Value *EmitBlockLiteral(const BlockExpr *); 1509 llvm::Value *EmitBlockLiteral(const CGBlockInfo &Info); 1510 static void destroyBlockInfos(CGBlockInfo *info); 1511 llvm::Constant *BuildDescriptorBlockDecl(const BlockExpr *, 1512 const CGBlockInfo &Info, 1513 llvm::StructType *, 1514 llvm::Constant *BlockVarLayout); 1515 1516 llvm::Function *GenerateBlockFunction(GlobalDecl GD, 1517 const CGBlockInfo &Info, 1518 const DeclMapTy &ldm, 1519 bool IsLambdaConversionToBlock); 1520 1521 llvm::Constant *GenerateCopyHelperFunction(const CGBlockInfo &blockInfo); 1522 llvm::Constant *GenerateDestroyHelperFunction(const CGBlockInfo &blockInfo); 1523 llvm::Constant *GenerateObjCAtomicSetterCopyHelperFunction( 1524 const ObjCPropertyImplDecl *PID); 1525 llvm::Constant *GenerateObjCAtomicGetterCopyHelperFunction( 1526 const ObjCPropertyImplDecl *PID); 1527 llvm::Value *EmitBlockCopyAndAutorelease(llvm::Value *Block, QualType Ty); 1528 1529 void BuildBlockRelease(llvm::Value *DeclPtr, BlockFieldFlags flags); 1530 1531 class AutoVarEmission; 1532 1533 void emitByrefStructureInit(const AutoVarEmission &emission); 1534 void enterByrefCleanup(const AutoVarEmission &emission); 1535 1536 llvm::Value *LoadBlockStruct() { 1537 assert(BlockPointer && "no block pointer set!"); 1538 return BlockPointer; 1539 } 1540 1541 void AllocateBlockCXXThisPointer(const CXXThisExpr *E); 1542 void AllocateBlockDecl(const DeclRefExpr *E); 1543 llvm::Value *GetAddrOfBlockDecl(const VarDecl *var, bool ByRef); 1544 llvm::Type *BuildByRefType(const VarDecl *var); 1545 1546 void GenerateCode(GlobalDecl GD, llvm::Function *Fn, 1547 const CGFunctionInfo &FnInfo); 1548 void StartFunction(GlobalDecl GD, 1549 QualType RetTy, 1550 llvm::Function *Fn, 1551 const CGFunctionInfo &FnInfo, 1552 const FunctionArgList &Args, 1553 SourceLocation StartLoc); 1554 1555 void EmitConstructorBody(FunctionArgList &Args); 1556 void EmitDestructorBody(FunctionArgList &Args); 1557 void emitImplicitAssignmentOperatorBody(FunctionArgList &Args); 1558 void EmitFunctionBody(FunctionArgList &Args); 1559 1560 void EmitForwardingCallToLambda(const CXXRecordDecl *Lambda, 1561 CallArgList &CallArgs); 1562 void EmitLambdaToBlockPointerBody(FunctionArgList &Args); 1563 void EmitLambdaBlockInvokeBody(); 1564 void EmitLambdaDelegatingInvokeBody(const CXXMethodDecl *MD); 1565 void EmitLambdaStaticInvokeFunction(const CXXMethodDecl *MD); 1566 1567 /// EmitReturnBlock - Emit the unified return block, trying to avoid its 1568 /// emission when possible. 1569 void EmitReturnBlock(); 1570 1571 /// FinishFunction - Complete IR generation of the current function. It is 1572 /// legal to call this function even if there is no current insertion point. 1573 void FinishFunction(SourceLocation EndLoc=SourceLocation()); 1574 1575 /// GenerateThunk - Generate a thunk for the given method. 1576 void GenerateThunk(llvm::Function *Fn, const CGFunctionInfo &FnInfo, 1577 GlobalDecl GD, const ThunkInfo &Thunk); 1578 1579 void GenerateVarArgsThunk(llvm::Function *Fn, const CGFunctionInfo &FnInfo, 1580 GlobalDecl GD, const ThunkInfo &Thunk); 1581 1582 void EmitCtorPrologue(const CXXConstructorDecl *CD, CXXCtorType Type, 1583 FunctionArgList &Args); 1584 1585 void EmitInitializerForField(FieldDecl *Field, LValue LHS, Expr *Init, 1586 ArrayRef<VarDecl *> ArrayIndexes); 1587 1588 /// InitializeVTablePointer - Initialize the vtable pointer of the given 1589 /// subobject. 1590 /// 1591 void InitializeVTablePointer(BaseSubobject Base, 1592 const CXXRecordDecl *NearestVBase, 1593 CharUnits OffsetFromNearestVBase, 1594 llvm::Constant *VTable, 1595 const CXXRecordDecl *VTableClass); 1596 1597 typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedVirtualBasesSetTy; 1598 void InitializeVTablePointers(BaseSubobject Base, 1599 const CXXRecordDecl *NearestVBase, 1600 CharUnits OffsetFromNearestVBase, 1601 bool BaseIsNonVirtualPrimaryBase, 1602 llvm::Constant *VTable, 1603 const CXXRecordDecl *VTableClass, 1604 VisitedVirtualBasesSetTy& VBases); 1605 1606 void InitializeVTablePointers(const CXXRecordDecl *ClassDecl); 1607 1608 /// GetVTablePtr - Return the Value of the vtable pointer member pointed 1609 /// to by This. 1610 llvm::Value *GetVTablePtr(llvm::Value *This, llvm::Type *Ty); 1611 1612 /// EnterDtorCleanups - Enter the cleanups necessary to complete the 1613 /// given phase of destruction for a destructor. The end result 1614 /// should call destructors on members and base classes in reverse 1615 /// order of their construction. 1616 void EnterDtorCleanups(const CXXDestructorDecl *Dtor, CXXDtorType Type); 1617 1618 /// ShouldInstrumentFunction - Return true if the current function should be 1619 /// instrumented with __cyg_profile_func_* calls 1620 bool ShouldInstrumentFunction(); 1621 1622 /// EmitFunctionInstrumentation - Emit LLVM code to call the specified 1623 /// instrumentation function with the current function and the call site, if 1624 /// function instrumentation is enabled. 1625 void EmitFunctionInstrumentation(const char *Fn); 1626 1627 /// EmitMCountInstrumentation - Emit call to .mcount. 1628 void EmitMCountInstrumentation(); 1629 1630 /// EmitFunctionProlog - Emit the target specific LLVM code to load the 1631 /// arguments for the given function. This is also responsible for naming the 1632 /// LLVM function arguments. 1633 void EmitFunctionProlog(const CGFunctionInfo &FI, 1634 llvm::Function *Fn, 1635 const FunctionArgList &Args); 1636 1637 /// EmitFunctionEpilog - Emit the target specific LLVM code to return the 1638 /// given temporary. 1639 void EmitFunctionEpilog(const CGFunctionInfo &FI, bool EmitRetDbgLoc); 1640 1641 /// EmitStartEHSpec - Emit the start of the exception spec. 1642 void EmitStartEHSpec(const Decl *D); 1643 1644 /// EmitEndEHSpec - Emit the end of the exception spec. 1645 void EmitEndEHSpec(const Decl *D); 1646 1647 /// getTerminateLandingPad - Return a landing pad that just calls terminate. 1648 llvm::BasicBlock *getTerminateLandingPad(); 1649 1650 /// getTerminateHandler - Return a handler (not a landing pad, just 1651 /// a catch handler) that just calls terminate. This is used when 1652 /// a terminate scope encloses a try. 1653 llvm::BasicBlock *getTerminateHandler(); 1654 1655 llvm::Type *ConvertTypeForMem(QualType T); 1656 llvm::Type *ConvertType(QualType T); 1657 llvm::Type *ConvertType(const TypeDecl *T) { 1658 return ConvertType(getContext().getTypeDeclType(T)); 1659 } 1660 1661 /// LoadObjCSelf - Load the value of self. This function is only valid while 1662 /// generating code for an Objective-C method. 1663 llvm::Value *LoadObjCSelf(); 1664 1665 /// TypeOfSelfObject - Return type of object that this self represents. 1666 QualType TypeOfSelfObject(); 1667 1668 /// hasAggregateLLVMType - Return true if the specified AST type will map into 1669 /// an aggregate LLVM type or is void. 1670 static TypeEvaluationKind getEvaluationKind(QualType T); 1671 1672 static bool hasScalarEvaluationKind(QualType T) { 1673 return getEvaluationKind(T) == TEK_Scalar; 1674 } 1675 1676 static bool hasAggregateEvaluationKind(QualType T) { 1677 return getEvaluationKind(T) == TEK_Aggregate; 1678 } 1679 1680 /// createBasicBlock - Create an LLVM basic block. 1681 llvm::BasicBlock *createBasicBlock(const Twine &name = "", 1682 llvm::Function *parent = 0, 1683 llvm::BasicBlock *before = 0) { 1684 #ifdef NDEBUG 1685 return llvm::BasicBlock::Create(getLLVMContext(), "", parent, before); 1686 #else 1687 return llvm::BasicBlock::Create(getLLVMContext(), name, parent, before); 1688 #endif 1689 } 1690 1691 /// getBasicBlockForLabel - Return the LLVM basicblock that the specified 1692 /// label maps to. 1693 JumpDest getJumpDestForLabel(const LabelDecl *S); 1694 1695 /// SimplifyForwardingBlocks - If the given basic block is only a branch to 1696 /// another basic block, simplify it. This assumes that no other code could 1697 /// potentially reference the basic block. 1698 void SimplifyForwardingBlocks(llvm::BasicBlock *BB); 1699 1700 /// EmitBlock - Emit the given block \arg BB and set it as the insert point, 1701 /// adding a fall-through branch from the current insert block if 1702 /// necessary. It is legal to call this function even if there is no current 1703 /// insertion point. 1704 /// 1705 /// IsFinished - If true, indicates that the caller has finished emitting 1706 /// branches to the given block and does not expect to emit code into it. This 1707 /// means the block can be ignored if it is unreachable. 1708 void EmitBlock(llvm::BasicBlock *BB, bool IsFinished=false); 1709 1710 /// EmitBlockAfterUses - Emit the given block somewhere hopefully 1711 /// near its uses, and leave the insertion point in it. 1712 void EmitBlockAfterUses(llvm::BasicBlock *BB); 1713 1714 /// EmitBranch - Emit a branch to the specified basic block from the current 1715 /// insert block, taking care to avoid creation of branches from dummy 1716 /// blocks. It is legal to call this function even if there is no current 1717 /// insertion point. 1718 /// 1719 /// This function clears the current insertion point. The caller should follow 1720 /// calls to this function with calls to Emit*Block prior to generation new 1721 /// code. 1722 void EmitBranch(llvm::BasicBlock *Block); 1723 1724 /// HaveInsertPoint - True if an insertion point is defined. If not, this 1725 /// indicates that the current code being emitted is unreachable. 1726 bool HaveInsertPoint() const { 1727 return Builder.GetInsertBlock() != 0; 1728 } 1729 1730 /// EnsureInsertPoint - Ensure that an insertion point is defined so that 1731 /// emitted IR has a place to go. Note that by definition, if this function 1732 /// creates a block then that block is unreachable; callers may do better to 1733 /// detect when no insertion point is defined and simply skip IR generation. 1734 void EnsureInsertPoint() { 1735 if (!HaveInsertPoint()) 1736 EmitBlock(createBasicBlock()); 1737 } 1738 1739 /// ErrorUnsupported - Print out an error that codegen doesn't support the 1740 /// specified stmt yet. 1741 void ErrorUnsupported(const Stmt *S, const char *Type, 1742 bool OmitOnError=false); 1743 1744 //===--------------------------------------------------------------------===// 1745 // Helpers 1746 //===--------------------------------------------------------------------===// 1747 1748 LValue MakeAddrLValue(llvm::Value *V, QualType T, 1749 CharUnits Alignment = CharUnits()) { 1750 return LValue::MakeAddr(V, T, Alignment, getContext(), 1751 CGM.getTBAAInfo(T)); 1752 } 1753 1754 LValue MakeNaturalAlignAddrLValue(llvm::Value *V, QualType T) { 1755 CharUnits Alignment; 1756 if (!T->isIncompleteType()) 1757 Alignment = getContext().getTypeAlignInChars(T); 1758 return LValue::MakeAddr(V, T, Alignment, getContext(), 1759 CGM.getTBAAInfo(T)); 1760 } 1761 1762 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 1763 /// block. The caller is responsible for setting an appropriate alignment on 1764 /// the alloca. 1765 llvm::AllocaInst *CreateTempAlloca(llvm::Type *Ty, 1766 const Twine &Name = "tmp"); 1767 1768 /// InitTempAlloca - Provide an initial value for the given alloca. 1769 void InitTempAlloca(llvm::AllocaInst *Alloca, llvm::Value *Value); 1770 1771 /// CreateIRTemp - Create a temporary IR object of the given type, with 1772 /// appropriate alignment. This routine should only be used when an temporary 1773 /// value needs to be stored into an alloca (for example, to avoid explicit 1774 /// PHI construction), but the type is the IR type, not the type appropriate 1775 /// for storing in memory. 1776 llvm::AllocaInst *CreateIRTemp(QualType T, const Twine &Name = "tmp"); 1777 1778 /// CreateMemTemp - Create a temporary memory object of the given type, with 1779 /// appropriate alignment. 1780 llvm::AllocaInst *CreateMemTemp(QualType T, const Twine &Name = "tmp"); 1781 1782 /// CreateAggTemp - Create a temporary memory object for the given 1783 /// aggregate type. 1784 AggValueSlot CreateAggTemp(QualType T, const Twine &Name = "tmp") { 1785 CharUnits Alignment = getContext().getTypeAlignInChars(T); 1786 return AggValueSlot::forAddr(CreateMemTemp(T, Name), Alignment, 1787 T.getQualifiers(), 1788 AggValueSlot::IsNotDestructed, 1789 AggValueSlot::DoesNotNeedGCBarriers, 1790 AggValueSlot::IsNotAliased); 1791 } 1792 1793 /// Emit a cast to void* in the appropriate address space. 1794 llvm::Value *EmitCastToVoidPtr(llvm::Value *value); 1795 1796 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 1797 /// expression and compare the result against zero, returning an Int1Ty value. 1798 llvm::Value *EvaluateExprAsBool(const Expr *E); 1799 1800 /// EmitIgnoredExpr - Emit an expression in a context which ignores the result. 1801 void EmitIgnoredExpr(const Expr *E); 1802 1803 /// EmitAnyExpr - Emit code to compute the specified expression which can have 1804 /// any type. The result is returned as an RValue struct. If this is an 1805 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where 1806 /// the result should be returned. 1807 /// 1808 /// \param ignoreResult True if the resulting value isn't used. 1809 RValue EmitAnyExpr(const Expr *E, 1810 AggValueSlot aggSlot = AggValueSlot::ignored(), 1811 bool ignoreResult = false); 1812 1813 // EmitVAListRef - Emit a "reference" to a va_list; this is either the address 1814 // or the value of the expression, depending on how va_list is defined. 1815 llvm::Value *EmitVAListRef(const Expr *E); 1816 1817 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 1818 /// always be accessible even if no aggregate location is provided. 1819 RValue EmitAnyExprToTemp(const Expr *E); 1820 1821 /// EmitAnyExprToMem - Emits the code necessary to evaluate an 1822 /// arbitrary expression into the given memory location. 1823 void EmitAnyExprToMem(const Expr *E, llvm::Value *Location, 1824 Qualifiers Quals, bool IsInitializer); 1825 1826 /// EmitExprAsInit - Emits the code necessary to initialize a 1827 /// location in memory with the given initializer. 1828 void EmitExprAsInit(const Expr *init, const ValueDecl *D, 1829 LValue lvalue, bool capturedByInit); 1830 1831 /// hasVolatileMember - returns true if aggregate type has a volatile 1832 /// member. 1833 bool hasVolatileMember(QualType T) { 1834 if (const RecordType *RT = T->getAs<RecordType>()) { 1835 const RecordDecl *RD = cast<RecordDecl>(RT->getDecl()); 1836 return RD->hasVolatileMember(); 1837 } 1838 return false; 1839 } 1840 /// EmitAggregateCopy - Emit an aggregate assignment. 1841 /// 1842 /// The difference to EmitAggregateCopy is that tail padding is not copied. 1843 /// This is required for correctness when assigning non-POD structures in C++. 1844 void EmitAggregateAssign(llvm::Value *DestPtr, llvm::Value *SrcPtr, 1845 QualType EltTy) { 1846 bool IsVolatile = hasVolatileMember(EltTy); 1847 EmitAggregateCopy(DestPtr, SrcPtr, EltTy, IsVolatile, CharUnits::Zero(), 1848 true); 1849 } 1850 1851 /// EmitAggregateCopy - Emit an aggregate copy. 1852 /// 1853 /// \param isVolatile - True iff either the source or the destination is 1854 /// volatile. 1855 /// \param isAssignment - If false, allow padding to be copied. This often 1856 /// yields more efficient. 1857 void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr, 1858 QualType EltTy, bool isVolatile=false, 1859 CharUnits Alignment = CharUnits::Zero(), 1860 bool isAssignment = false); 1861 1862 /// StartBlock - Start new block named N. If insert block is a dummy block 1863 /// then reuse it. 1864 void StartBlock(const char *N); 1865 1866 /// GetAddrOfLocalVar - Return the address of a local variable. 1867 llvm::Value *GetAddrOfLocalVar(const VarDecl *VD) { 1868 llvm::Value *Res = LocalDeclMap[VD]; 1869 assert(Res && "Invalid argument to GetAddrOfLocalVar(), no decl!"); 1870 return Res; 1871 } 1872 1873 /// getOpaqueLValueMapping - Given an opaque value expression (which 1874 /// must be mapped to an l-value), return its mapping. 1875 const LValue &getOpaqueLValueMapping(const OpaqueValueExpr *e) { 1876 assert(OpaqueValueMapping::shouldBindAsLValue(e)); 1877 1878 llvm::DenseMap<const OpaqueValueExpr*,LValue>::iterator 1879 it = OpaqueLValues.find(e); 1880 assert(it != OpaqueLValues.end() && "no mapping for opaque value!"); 1881 return it->second; 1882 } 1883 1884 /// getOpaqueRValueMapping - Given an opaque value expression (which 1885 /// must be mapped to an r-value), return its mapping. 1886 const RValue &getOpaqueRValueMapping(const OpaqueValueExpr *e) { 1887 assert(!OpaqueValueMapping::shouldBindAsLValue(e)); 1888 1889 llvm::DenseMap<const OpaqueValueExpr*,RValue>::iterator 1890 it = OpaqueRValues.find(e); 1891 assert(it != OpaqueRValues.end() && "no mapping for opaque value!"); 1892 return it->second; 1893 } 1894 1895 /// getAccessedFieldNo - Given an encoded value and a result number, return 1896 /// the input field number being accessed. 1897 static unsigned getAccessedFieldNo(unsigned Idx, const llvm::Constant *Elts); 1898 1899 llvm::BlockAddress *GetAddrOfLabel(const LabelDecl *L); 1900 llvm::BasicBlock *GetIndirectGotoBlock(); 1901 1902 /// EmitNullInitialization - Generate code to set a value of the given type to 1903 /// null, If the type contains data member pointers, they will be initialized 1904 /// to -1 in accordance with the Itanium C++ ABI. 1905 void EmitNullInitialization(llvm::Value *DestPtr, QualType Ty); 1906 1907 // EmitVAArg - Generate code to get an argument from the passed in pointer 1908 // and update it accordingly. The return value is a pointer to the argument. 1909 // FIXME: We should be able to get rid of this method and use the va_arg 1910 // instruction in LLVM instead once it works well enough. 1911 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty); 1912 1913 /// emitArrayLength - Compute the length of an array, even if it's a 1914 /// VLA, and drill down to the base element type. 1915 llvm::Value *emitArrayLength(const ArrayType *arrayType, 1916 QualType &baseType, 1917 llvm::Value *&addr); 1918 1919 /// EmitVLASize - Capture all the sizes for the VLA expressions in 1920 /// the given variably-modified type and store them in the VLASizeMap. 1921 /// 1922 /// This function can be called with a null (unreachable) insert point. 1923 void EmitVariablyModifiedType(QualType Ty); 1924 1925 /// getVLASize - Returns an LLVM value that corresponds to the size, 1926 /// in non-variably-sized elements, of a variable length array type, 1927 /// plus that largest non-variably-sized element type. Assumes that 1928 /// the type has already been emitted with EmitVariablyModifiedType. 1929 std::pair<llvm::Value*,QualType> getVLASize(const VariableArrayType *vla); 1930 std::pair<llvm::Value*,QualType> getVLASize(QualType vla); 1931 1932 /// LoadCXXThis - Load the value of 'this'. This function is only valid while 1933 /// generating code for an C++ member function. 1934 llvm::Value *LoadCXXThis() { 1935 assert(CXXThisValue && "no 'this' value for this function"); 1936 return CXXThisValue; 1937 } 1938 1939 /// LoadCXXVTT - Load the VTT parameter to base constructors/destructors have 1940 /// virtual bases. 1941 // FIXME: Every place that calls LoadCXXVTT is something 1942 // that needs to be abstracted properly. 1943 llvm::Value *LoadCXXVTT() { 1944 assert(CXXStructorImplicitParamValue && "no VTT value for this function"); 1945 return CXXStructorImplicitParamValue; 1946 } 1947 1948 /// LoadCXXStructorImplicitParam - Load the implicit parameter 1949 /// for a constructor/destructor. 1950 llvm::Value *LoadCXXStructorImplicitParam() { 1951 assert(CXXStructorImplicitParamValue && 1952 "no implicit argument value for this function"); 1953 return CXXStructorImplicitParamValue; 1954 } 1955 1956 /// GetAddressOfBaseOfCompleteClass - Convert the given pointer to a 1957 /// complete class to the given direct base. 1958 llvm::Value * 1959 GetAddressOfDirectBaseInCompleteClass(llvm::Value *Value, 1960 const CXXRecordDecl *Derived, 1961 const CXXRecordDecl *Base, 1962 bool BaseIsVirtual); 1963 1964 /// GetAddressOfBaseClass - This function will add the necessary delta to the 1965 /// load of 'this' and returns address of the base class. 1966 llvm::Value *GetAddressOfBaseClass(llvm::Value *Value, 1967 const CXXRecordDecl *Derived, 1968 CastExpr::path_const_iterator PathBegin, 1969 CastExpr::path_const_iterator PathEnd, 1970 bool NullCheckValue); 1971 1972 llvm::Value *GetAddressOfDerivedClass(llvm::Value *Value, 1973 const CXXRecordDecl *Derived, 1974 CastExpr::path_const_iterator PathBegin, 1975 CastExpr::path_const_iterator PathEnd, 1976 bool NullCheckValue); 1977 1978 llvm::Value *GetVirtualBaseClassOffset(llvm::Value *This, 1979 const CXXRecordDecl *ClassDecl, 1980 const CXXRecordDecl *BaseClassDecl); 1981 1982 /// GetVTTParameter - Return the VTT parameter that should be passed to a 1983 /// base constructor/destructor with virtual bases. 1984 /// FIXME: VTTs are Itanium ABI-specific, so the definition should move 1985 /// to ItaniumCXXABI.cpp together with all the references to VTT. 1986 llvm::Value *GetVTTParameter(GlobalDecl GD, bool ForVirtualBase, 1987 bool Delegating); 1988 1989 void EmitDelegateCXXConstructorCall(const CXXConstructorDecl *Ctor, 1990 CXXCtorType CtorType, 1991 const FunctionArgList &Args); 1992 // It's important not to confuse this and the previous function. Delegating 1993 // constructors are the C++0x feature. The constructor delegate optimization 1994 // is used to reduce duplication in the base and complete consturctors where 1995 // they are substantially the same. 1996 void EmitDelegatingCXXConstructorCall(const CXXConstructorDecl *Ctor, 1997 const FunctionArgList &Args); 1998 void EmitCXXConstructorCall(const CXXConstructorDecl *D, CXXCtorType Type, 1999 bool ForVirtualBase, bool Delegating, 2000 llvm::Value *This, 2001 CallExpr::const_arg_iterator ArgBeg, 2002 CallExpr::const_arg_iterator ArgEnd); 2003 2004 void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D, 2005 llvm::Value *This, llvm::Value *Src, 2006 CallExpr::const_arg_iterator ArgBeg, 2007 CallExpr::const_arg_iterator ArgEnd); 2008 2009 void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 2010 const ConstantArrayType *ArrayTy, 2011 llvm::Value *ArrayPtr, 2012 CallExpr::const_arg_iterator ArgBeg, 2013 CallExpr::const_arg_iterator ArgEnd, 2014 bool ZeroInitialization = false); 2015 2016 void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 2017 llvm::Value *NumElements, 2018 llvm::Value *ArrayPtr, 2019 CallExpr::const_arg_iterator ArgBeg, 2020 CallExpr::const_arg_iterator ArgEnd, 2021 bool ZeroInitialization = false); 2022 2023 static Destroyer destroyCXXObject; 2024 2025 void EmitCXXDestructorCall(const CXXDestructorDecl *D, CXXDtorType Type, 2026 bool ForVirtualBase, bool Delegating, 2027 llvm::Value *This); 2028 2029 void EmitNewArrayInitializer(const CXXNewExpr *E, QualType elementType, 2030 llvm::Value *NewPtr, llvm::Value *NumElements); 2031 2032 void EmitCXXTemporary(const CXXTemporary *Temporary, QualType TempType, 2033 llvm::Value *Ptr); 2034 2035 llvm::Value *EmitCXXNewExpr(const CXXNewExpr *E); 2036 void EmitCXXDeleteExpr(const CXXDeleteExpr *E); 2037 2038 void EmitDeleteCall(const FunctionDecl *DeleteFD, llvm::Value *Ptr, 2039 QualType DeleteTy); 2040 2041 llvm::Value* EmitCXXTypeidExpr(const CXXTypeidExpr *E); 2042 llvm::Value *EmitDynamicCast(llvm::Value *V, const CXXDynamicCastExpr *DCE); 2043 llvm::Value* EmitCXXUuidofExpr(const CXXUuidofExpr *E); 2044 2045 void MaybeEmitStdInitializerListCleanup(llvm::Value *loc, const Expr *init); 2046 void EmitStdInitializerListCleanup(llvm::Value *loc, 2047 const InitListExpr *init); 2048 2049 /// \brief Situations in which we might emit a check for the suitability of a 2050 /// pointer or glvalue. 2051 enum TypeCheckKind { 2052 /// Checking the operand of a load. Must be suitably sized and aligned. 2053 TCK_Load, 2054 /// Checking the destination of a store. Must be suitably sized and aligned. 2055 TCK_Store, 2056 /// Checking the bound value in a reference binding. Must be suitably sized 2057 /// and aligned, but is not required to refer to an object (until the 2058 /// reference is used), per core issue 453. 2059 TCK_ReferenceBinding, 2060 /// Checking the object expression in a non-static data member access. Must 2061 /// be an object within its lifetime. 2062 TCK_MemberAccess, 2063 /// Checking the 'this' pointer for a call to a non-static member function. 2064 /// Must be an object within its lifetime. 2065 TCK_MemberCall, 2066 /// Checking the 'this' pointer for a constructor call. 2067 TCK_ConstructorCall, 2068 /// Checking the operand of a static_cast to a derived pointer type. Must be 2069 /// null or an object within its lifetime. 2070 TCK_DowncastPointer, 2071 /// Checking the operand of a static_cast to a derived reference type. Must 2072 /// be an object within its lifetime. 2073 TCK_DowncastReference 2074 }; 2075 2076 /// \brief Emit a check that \p V is the address of storage of the 2077 /// appropriate size and alignment for an object of type \p Type. 2078 void EmitTypeCheck(TypeCheckKind TCK, SourceLocation Loc, llvm::Value *V, 2079 QualType Type, CharUnits Alignment = CharUnits::Zero()); 2080 2081 /// \brief Emit a check that \p Base points into an array object, which 2082 /// we can access at index \p Index. \p Accessed should be \c false if we 2083 /// this expression is used as an lvalue, for instance in "&Arr[Idx]". 2084 void EmitBoundsCheck(const Expr *E, const Expr *Base, llvm::Value *Index, 2085 QualType IndexType, bool Accessed); 2086 2087 llvm::Value *EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV, 2088 bool isInc, bool isPre); 2089 ComplexPairTy EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 2090 bool isInc, bool isPre); 2091 //===--------------------------------------------------------------------===// 2092 // Declaration Emission 2093 //===--------------------------------------------------------------------===// 2094 2095 /// EmitDecl - Emit a declaration. 2096 /// 2097 /// This function can be called with a null (unreachable) insert point. 2098 void EmitDecl(const Decl &D); 2099 2100 /// EmitVarDecl - Emit a local variable declaration. 2101 /// 2102 /// This function can be called with a null (unreachable) insert point. 2103 void EmitVarDecl(const VarDecl &D); 2104 2105 void EmitScalarInit(const Expr *init, const ValueDecl *D, 2106 LValue lvalue, bool capturedByInit); 2107 void EmitScalarInit(llvm::Value *init, LValue lvalue); 2108 2109 typedef void SpecialInitFn(CodeGenFunction &Init, const VarDecl &D, 2110 llvm::Value *Address); 2111 2112 /// EmitAutoVarDecl - Emit an auto variable declaration. 2113 /// 2114 /// This function can be called with a null (unreachable) insert point. 2115 void EmitAutoVarDecl(const VarDecl &D); 2116 2117 class AutoVarEmission { 2118 friend class CodeGenFunction; 2119 2120 const VarDecl *Variable; 2121 2122 /// The alignment of the variable. 2123 CharUnits Alignment; 2124 2125 /// The address of the alloca. Null if the variable was emitted 2126 /// as a global constant. 2127 llvm::Value *Address; 2128 2129 llvm::Value *NRVOFlag; 2130 2131 /// True if the variable is a __block variable. 2132 bool IsByRef; 2133 2134 /// True if the variable is of aggregate type and has a constant 2135 /// initializer. 2136 bool IsConstantAggregate; 2137 2138 /// Non-null if we should use lifetime annotations. 2139 llvm::Value *SizeForLifetimeMarkers; 2140 2141 struct Invalid {}; 2142 AutoVarEmission(Invalid) : Variable(0) {} 2143 2144 AutoVarEmission(const VarDecl &variable) 2145 : Variable(&variable), Address(0), NRVOFlag(0), 2146 IsByRef(false), IsConstantAggregate(false), 2147 SizeForLifetimeMarkers(0) {} 2148 2149 bool wasEmittedAsGlobal() const { return Address == 0; } 2150 2151 public: 2152 static AutoVarEmission invalid() { return AutoVarEmission(Invalid()); } 2153 2154 bool useLifetimeMarkers() const { return SizeForLifetimeMarkers != 0; } 2155 llvm::Value *getSizeForLifetimeMarkers() const { 2156 assert(useLifetimeMarkers()); 2157 return SizeForLifetimeMarkers; 2158 } 2159 2160 /// Returns the raw, allocated address, which is not necessarily 2161 /// the address of the object itself. 2162 llvm::Value *getAllocatedAddress() const { 2163 return Address; 2164 } 2165 2166 /// Returns the address of the object within this declaration. 2167 /// Note that this does not chase the forwarding pointer for 2168 /// __block decls. 2169 llvm::Value *getObjectAddress(CodeGenFunction &CGF) const { 2170 if (!IsByRef) return Address; 2171 2172 return CGF.Builder.CreateStructGEP(Address, 2173 CGF.getByRefValueLLVMField(Variable), 2174 Variable->getNameAsString()); 2175 } 2176 }; 2177 AutoVarEmission EmitAutoVarAlloca(const VarDecl &var); 2178 void EmitAutoVarInit(const AutoVarEmission &emission); 2179 void EmitAutoVarCleanups(const AutoVarEmission &emission); 2180 void emitAutoVarTypeCleanup(const AutoVarEmission &emission, 2181 QualType::DestructionKind dtorKind); 2182 2183 void EmitStaticVarDecl(const VarDecl &D, 2184 llvm::GlobalValue::LinkageTypes Linkage); 2185 2186 /// EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl. 2187 void EmitParmDecl(const VarDecl &D, llvm::Value *Arg, unsigned ArgNo); 2188 2189 /// protectFromPeepholes - Protect a value that we're intending to 2190 /// store to the side, but which will probably be used later, from 2191 /// aggressive peepholing optimizations that might delete it. 2192 /// 2193 /// Pass the result to unprotectFromPeepholes to declare that 2194 /// protection is no longer required. 2195 /// 2196 /// There's no particular reason why this shouldn't apply to 2197 /// l-values, it's just that no existing peepholes work on pointers. 2198 PeepholeProtection protectFromPeepholes(RValue rvalue); 2199 void unprotectFromPeepholes(PeepholeProtection protection); 2200 2201 //===--------------------------------------------------------------------===// 2202 // Statement Emission 2203 //===--------------------------------------------------------------------===// 2204 2205 /// EmitStopPoint - Emit a debug stoppoint if we are emitting debug info. 2206 void EmitStopPoint(const Stmt *S); 2207 2208 /// EmitStmt - Emit the code for the statement \arg S. It is legal to call 2209 /// this function even if there is no current insertion point. 2210 /// 2211 /// This function may clear the current insertion point; callers should use 2212 /// EnsureInsertPoint if they wish to subsequently generate code without first 2213 /// calling EmitBlock, EmitBranch, or EmitStmt. 2214 void EmitStmt(const Stmt *S); 2215 2216 /// EmitSimpleStmt - Try to emit a "simple" statement which does not 2217 /// necessarily require an insertion point or debug information; typically 2218 /// because the statement amounts to a jump or a container of other 2219 /// statements. 2220 /// 2221 /// \return True if the statement was handled. 2222 bool EmitSimpleStmt(const Stmt *S); 2223 2224 RValue EmitCompoundStmt(const CompoundStmt &S, bool GetLast = false, 2225 AggValueSlot AVS = AggValueSlot::ignored()); 2226 RValue EmitCompoundStmtWithoutScope(const CompoundStmt &S, 2227 bool GetLast = false, AggValueSlot AVS = 2228 AggValueSlot::ignored()); 2229 2230 /// EmitLabel - Emit the block for the given label. It is legal to call this 2231 /// function even if there is no current insertion point. 2232 void EmitLabel(const LabelDecl *D); // helper for EmitLabelStmt. 2233 2234 void EmitLabelStmt(const LabelStmt &S); 2235 void EmitAttributedStmt(const AttributedStmt &S); 2236 void EmitGotoStmt(const GotoStmt &S); 2237 void EmitIndirectGotoStmt(const IndirectGotoStmt &S); 2238 void EmitIfStmt(const IfStmt &S); 2239 void EmitWhileStmt(const WhileStmt &S); 2240 void EmitDoStmt(const DoStmt &S); 2241 void EmitForStmt(const ForStmt &S); 2242 void EmitReturnStmt(const ReturnStmt &S); 2243 void EmitDeclStmt(const DeclStmt &S); 2244 void EmitBreakStmt(const BreakStmt &S); 2245 void EmitContinueStmt(const ContinueStmt &S); 2246 void EmitSwitchStmt(const SwitchStmt &S); 2247 void EmitDefaultStmt(const DefaultStmt &S); 2248 void EmitCaseStmt(const CaseStmt &S); 2249 void EmitCaseStmtRange(const CaseStmt &S); 2250 void EmitAsmStmt(const AsmStmt &S); 2251 2252 void EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S); 2253 void EmitObjCAtTryStmt(const ObjCAtTryStmt &S); 2254 void EmitObjCAtThrowStmt(const ObjCAtThrowStmt &S); 2255 void EmitObjCAtSynchronizedStmt(const ObjCAtSynchronizedStmt &S); 2256 void EmitObjCAutoreleasePoolStmt(const ObjCAutoreleasePoolStmt &S); 2257 2258 llvm::Constant *getUnwindResumeFn(); 2259 llvm::Constant *getUnwindResumeOrRethrowFn(); 2260 void EnterCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false); 2261 void ExitCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false); 2262 2263 void EmitCXXTryStmt(const CXXTryStmt &S); 2264 void EmitCXXForRangeStmt(const CXXForRangeStmt &S); 2265 2266 llvm::Function *EmitCapturedStmt(const CapturedStmt &S, CapturedRegionKind K); 2267 llvm::Function *GenerateCapturedStmtFunction(const CapturedDecl *CD, 2268 const RecordDecl *RD); 2269 2270 //===--------------------------------------------------------------------===// 2271 // LValue Expression Emission 2272 //===--------------------------------------------------------------------===// 2273 2274 /// GetUndefRValue - Get an appropriate 'undef' rvalue for the given type. 2275 RValue GetUndefRValue(QualType Ty); 2276 2277 /// EmitUnsupportedRValue - Emit a dummy r-value using the type of E 2278 /// and issue an ErrorUnsupported style diagnostic (using the 2279 /// provided Name). 2280 RValue EmitUnsupportedRValue(const Expr *E, 2281 const char *Name); 2282 2283 /// EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue 2284 /// an ErrorUnsupported style diagnostic (using the provided Name). 2285 LValue EmitUnsupportedLValue(const Expr *E, 2286 const char *Name); 2287 2288 /// EmitLValue - Emit code to compute a designator that specifies the location 2289 /// of the expression. 2290 /// 2291 /// This can return one of two things: a simple address or a bitfield 2292 /// reference. In either case, the LLVM Value* in the LValue structure is 2293 /// guaranteed to be an LLVM pointer type. 2294 /// 2295 /// If this returns a bitfield reference, nothing about the pointee type of 2296 /// the LLVM value is known: For example, it may not be a pointer to an 2297 /// integer. 2298 /// 2299 /// If this returns a normal address, and if the lvalue's C type is fixed 2300 /// size, this method guarantees that the returned pointer type will point to 2301 /// an LLVM type of the same size of the lvalue's type. If the lvalue has a 2302 /// variable length type, this is not possible. 2303 /// 2304 LValue EmitLValue(const Expr *E); 2305 2306 /// \brief Same as EmitLValue but additionally we generate checking code to 2307 /// guard against undefined behavior. This is only suitable when we know 2308 /// that the address will be used to access the object. 2309 LValue EmitCheckedLValue(const Expr *E, TypeCheckKind TCK); 2310 2311 RValue convertTempToRValue(llvm::Value *addr, QualType type); 2312 2313 void EmitAtomicInit(Expr *E, LValue lvalue); 2314 2315 RValue EmitAtomicLoad(LValue lvalue, 2316 AggValueSlot slot = AggValueSlot::ignored()); 2317 2318 void EmitAtomicStore(RValue rvalue, LValue lvalue, bool isInit); 2319 2320 /// EmitToMemory - Change a scalar value from its value 2321 /// representation to its in-memory representation. 2322 llvm::Value *EmitToMemory(llvm::Value *Value, QualType Ty); 2323 2324 /// EmitFromMemory - Change a scalar value from its memory 2325 /// representation to its value representation. 2326 llvm::Value *EmitFromMemory(llvm::Value *Value, QualType Ty); 2327 2328 /// EmitLoadOfScalar - Load a scalar value from an address, taking 2329 /// care to appropriately convert from the memory representation to 2330 /// the LLVM value representation. 2331 llvm::Value *EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 2332 unsigned Alignment, QualType Ty, 2333 llvm::MDNode *TBAAInfo = 0, 2334 QualType TBAABaseTy = QualType(), 2335 uint64_t TBAAOffset = 0); 2336 2337 /// EmitLoadOfScalar - Load a scalar value from an address, taking 2338 /// care to appropriately convert from the memory representation to 2339 /// the LLVM value representation. The l-value must be a simple 2340 /// l-value. 2341 llvm::Value *EmitLoadOfScalar(LValue lvalue); 2342 2343 /// EmitStoreOfScalar - Store a scalar value to an address, taking 2344 /// care to appropriately convert from the memory representation to 2345 /// the LLVM value representation. 2346 void EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 2347 bool Volatile, unsigned Alignment, QualType Ty, 2348 llvm::MDNode *TBAAInfo = 0, bool isInit = false, 2349 QualType TBAABaseTy = QualType(), 2350 uint64_t TBAAOffset = 0); 2351 2352 /// EmitStoreOfScalar - Store a scalar value to an address, taking 2353 /// care to appropriately convert from the memory representation to 2354 /// the LLVM value representation. The l-value must be a simple 2355 /// l-value. The isInit flag indicates whether this is an initialization. 2356 /// If so, atomic qualifiers are ignored and the store is always non-atomic. 2357 void EmitStoreOfScalar(llvm::Value *value, LValue lvalue, bool isInit=false); 2358 2359 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, 2360 /// this method emits the address of the lvalue, then loads the result as an 2361 /// rvalue, returning the rvalue. 2362 RValue EmitLoadOfLValue(LValue V); 2363 RValue EmitLoadOfExtVectorElementLValue(LValue V); 2364 RValue EmitLoadOfBitfieldLValue(LValue LV); 2365 2366 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 2367 /// lvalue, where both are guaranteed to the have the same type, and that type 2368 /// is 'Ty'. 2369 void EmitStoreThroughLValue(RValue Src, LValue Dst, bool isInit=false); 2370 void EmitStoreThroughExtVectorComponentLValue(RValue Src, LValue Dst); 2371 2372 /// EmitStoreThroughLValue - Store Src into Dst with same constraints as 2373 /// EmitStoreThroughLValue. 2374 /// 2375 /// \param Result [out] - If non-null, this will be set to a Value* for the 2376 /// bit-field contents after the store, appropriate for use as the result of 2377 /// an assignment to the bit-field. 2378 void EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, 2379 llvm::Value **Result=0); 2380 2381 /// Emit an l-value for an assignment (simple or compound) of complex type. 2382 LValue EmitComplexAssignmentLValue(const BinaryOperator *E); 2383 LValue EmitComplexCompoundAssignmentLValue(const CompoundAssignOperator *E); 2384 2385 // Note: only available for agg return types 2386 LValue EmitBinaryOperatorLValue(const BinaryOperator *E); 2387 LValue EmitCompoundAssignmentLValue(const CompoundAssignOperator *E); 2388 // Note: only available for agg return types 2389 LValue EmitCallExprLValue(const CallExpr *E); 2390 // Note: only available for agg return types 2391 LValue EmitVAArgExprLValue(const VAArgExpr *E); 2392 LValue EmitDeclRefLValue(const DeclRefExpr *E); 2393 LValue EmitStringLiteralLValue(const StringLiteral *E); 2394 LValue EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E); 2395 LValue EmitPredefinedLValue(const PredefinedExpr *E); 2396 LValue EmitUnaryOpLValue(const UnaryOperator *E); 2397 LValue EmitArraySubscriptExpr(const ArraySubscriptExpr *E, 2398 bool Accessed = false); 2399 LValue EmitExtVectorElementExpr(const ExtVectorElementExpr *E); 2400 LValue EmitMemberExpr(const MemberExpr *E); 2401 LValue EmitObjCIsaExpr(const ObjCIsaExpr *E); 2402 LValue EmitCompoundLiteralLValue(const CompoundLiteralExpr *E); 2403 LValue EmitInitListLValue(const InitListExpr *E); 2404 LValue EmitConditionalOperatorLValue(const AbstractConditionalOperator *E); 2405 LValue EmitCastLValue(const CastExpr *E); 2406 LValue EmitNullInitializationLValue(const CXXScalarValueInitExpr *E); 2407 LValue EmitMaterializeTemporaryExpr(const MaterializeTemporaryExpr *E); 2408 LValue EmitOpaqueValueLValue(const OpaqueValueExpr *e); 2409 2410 RValue EmitRValueForField(LValue LV, const FieldDecl *FD); 2411 2412 class ConstantEmission { 2413 llvm::PointerIntPair<llvm::Constant*, 1, bool> ValueAndIsReference; 2414 ConstantEmission(llvm::Constant *C, bool isReference) 2415 : ValueAndIsReference(C, isReference) {} 2416 public: 2417 ConstantEmission() {} 2418 static ConstantEmission forReference(llvm::Constant *C) { 2419 return ConstantEmission(C, true); 2420 } 2421 static ConstantEmission forValue(llvm::Constant *C) { 2422 return ConstantEmission(C, false); 2423 } 2424 2425 operator bool() const { return ValueAndIsReference.getOpaqueValue() != 0; } 2426 2427 bool isReference() const { return ValueAndIsReference.getInt(); } 2428 LValue getReferenceLValue(CodeGenFunction &CGF, Expr *refExpr) const { 2429 assert(isReference()); 2430 return CGF.MakeNaturalAlignAddrLValue(ValueAndIsReference.getPointer(), 2431 refExpr->getType()); 2432 } 2433 2434 llvm::Constant *getValue() const { 2435 assert(!isReference()); 2436 return ValueAndIsReference.getPointer(); 2437 } 2438 }; 2439 2440 ConstantEmission tryEmitAsConstant(DeclRefExpr *refExpr); 2441 2442 RValue EmitPseudoObjectRValue(const PseudoObjectExpr *e, 2443 AggValueSlot slot = AggValueSlot::ignored()); 2444 LValue EmitPseudoObjectLValue(const PseudoObjectExpr *e); 2445 2446 llvm::Value *EmitIvarOffset(const ObjCInterfaceDecl *Interface, 2447 const ObjCIvarDecl *Ivar); 2448 LValue EmitLValueForField(LValue Base, const FieldDecl* Field); 2449 LValue EmitLValueForLambdaField(const FieldDecl *Field); 2450 2451 /// EmitLValueForFieldInitialization - Like EmitLValueForField, except that 2452 /// if the Field is a reference, this will return the address of the reference 2453 /// and not the address of the value stored in the reference. 2454 LValue EmitLValueForFieldInitialization(LValue Base, 2455 const FieldDecl* Field); 2456 2457 LValue EmitLValueForIvar(QualType ObjectTy, 2458 llvm::Value* Base, const ObjCIvarDecl *Ivar, 2459 unsigned CVRQualifiers); 2460 2461 LValue EmitCXXConstructLValue(const CXXConstructExpr *E); 2462 LValue EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E); 2463 LValue EmitLambdaLValue(const LambdaExpr *E); 2464 LValue EmitCXXTypeidLValue(const CXXTypeidExpr *E); 2465 LValue EmitCXXUuidofLValue(const CXXUuidofExpr *E); 2466 2467 LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E); 2468 LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E); 2469 LValue EmitStmtExprLValue(const StmtExpr *E); 2470 LValue EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E); 2471 LValue EmitObjCSelectorLValue(const ObjCSelectorExpr *E); 2472 void EmitDeclRefExprDbgValue(const DeclRefExpr *E, llvm::Constant *Init); 2473 2474 //===--------------------------------------------------------------------===// 2475 // Scalar Expression Emission 2476 //===--------------------------------------------------------------------===// 2477 2478 /// EmitCall - Generate a call of the given function, expecting the given 2479 /// result type, and using the given argument list which specifies both the 2480 /// LLVM arguments and the types they were derived from. 2481 /// 2482 /// \param TargetDecl - If given, the decl of the function in a direct call; 2483 /// used to set attributes on the call (noreturn, etc.). 2484 RValue EmitCall(const CGFunctionInfo &FnInfo, 2485 llvm::Value *Callee, 2486 ReturnValueSlot ReturnValue, 2487 const CallArgList &Args, 2488 const Decl *TargetDecl = 0, 2489 llvm::Instruction **callOrInvoke = 0); 2490 2491 RValue EmitCall(QualType FnType, llvm::Value *Callee, 2492 ReturnValueSlot ReturnValue, 2493 CallExpr::const_arg_iterator ArgBeg, 2494 CallExpr::const_arg_iterator ArgEnd, 2495 const Decl *TargetDecl = 0); 2496 RValue EmitCallExpr(const CallExpr *E, 2497 ReturnValueSlot ReturnValue = ReturnValueSlot()); 2498 2499 llvm::CallInst *EmitRuntimeCall(llvm::Value *callee, 2500 const Twine &name = ""); 2501 llvm::CallInst *EmitRuntimeCall(llvm::Value *callee, 2502 ArrayRef<llvm::Value*> args, 2503 const Twine &name = ""); 2504 llvm::CallInst *EmitNounwindRuntimeCall(llvm::Value *callee, 2505 const Twine &name = ""); 2506 llvm::CallInst *EmitNounwindRuntimeCall(llvm::Value *callee, 2507 ArrayRef<llvm::Value*> args, 2508 const Twine &name = ""); 2509 2510 llvm::CallSite EmitCallOrInvoke(llvm::Value *Callee, 2511 ArrayRef<llvm::Value *> Args, 2512 const Twine &Name = ""); 2513 llvm::CallSite EmitCallOrInvoke(llvm::Value *Callee, 2514 const Twine &Name = ""); 2515 llvm::CallSite EmitRuntimeCallOrInvoke(llvm::Value *callee, 2516 ArrayRef<llvm::Value*> args, 2517 const Twine &name = ""); 2518 llvm::CallSite EmitRuntimeCallOrInvoke(llvm::Value *callee, 2519 const Twine &name = ""); 2520 void EmitNoreturnRuntimeCallOrInvoke(llvm::Value *callee, 2521 ArrayRef<llvm::Value*> args); 2522 2523 llvm::Value *BuildVirtualCall(const CXXMethodDecl *MD, llvm::Value *This, 2524 llvm::Type *Ty); 2525 llvm::Value *BuildVirtualCall(const CXXDestructorDecl *DD, CXXDtorType Type, 2526 llvm::Value *This, llvm::Type *Ty); 2527 llvm::Value *BuildAppleKextVirtualCall(const CXXMethodDecl *MD, 2528 NestedNameSpecifier *Qual, 2529 llvm::Type *Ty); 2530 2531 llvm::Value *BuildAppleKextVirtualDestructorCall(const CXXDestructorDecl *DD, 2532 CXXDtorType Type, 2533 const CXXRecordDecl *RD); 2534 2535 RValue EmitCXXMemberCall(const CXXMethodDecl *MD, 2536 SourceLocation CallLoc, 2537 llvm::Value *Callee, 2538 ReturnValueSlot ReturnValue, 2539 llvm::Value *This, 2540 llvm::Value *ImplicitParam, 2541 QualType ImplicitParamTy, 2542 CallExpr::const_arg_iterator ArgBeg, 2543 CallExpr::const_arg_iterator ArgEnd); 2544 RValue EmitCXXMemberCallExpr(const CXXMemberCallExpr *E, 2545 ReturnValueSlot ReturnValue); 2546 RValue EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E, 2547 ReturnValueSlot ReturnValue); 2548 2549 llvm::Value *EmitCXXOperatorMemberCallee(const CXXOperatorCallExpr *E, 2550 const CXXMethodDecl *MD, 2551 llvm::Value *This); 2552 RValue EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E, 2553 const CXXMethodDecl *MD, 2554 ReturnValueSlot ReturnValue); 2555 2556 RValue EmitCUDAKernelCallExpr(const CUDAKernelCallExpr *E, 2557 ReturnValueSlot ReturnValue); 2558 2559 2560 RValue EmitBuiltinExpr(const FunctionDecl *FD, 2561 unsigned BuiltinID, const CallExpr *E); 2562 2563 RValue EmitBlockCallExpr(const CallExpr *E, ReturnValueSlot ReturnValue); 2564 2565 /// EmitTargetBuiltinExpr - Emit the given builtin call. Returns 0 if the call 2566 /// is unhandled by the current target. 2567 llvm::Value *EmitTargetBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 2568 2569 llvm::Value *EmitAArch64BuiltinExpr(unsigned BuiltinID, const CallExpr *E); 2570 llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 2571 llvm::Value *EmitNeonCall(llvm::Function *F, 2572 SmallVectorImpl<llvm::Value*> &O, 2573 const char *name, 2574 unsigned shift = 0, bool rightshift = false); 2575 llvm::Value *EmitNeonSplat(llvm::Value *V, llvm::Constant *Idx); 2576 llvm::Value *EmitNeonShiftVector(llvm::Value *V, llvm::Type *Ty, 2577 bool negateForRightShift); 2578 2579 llvm::Value *BuildVector(ArrayRef<llvm::Value*> Ops); 2580 llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E); 2581 llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 2582 2583 llvm::Value *EmitObjCProtocolExpr(const ObjCProtocolExpr *E); 2584 llvm::Value *EmitObjCStringLiteral(const ObjCStringLiteral *E); 2585 llvm::Value *EmitObjCBoxedExpr(const ObjCBoxedExpr *E); 2586 llvm::Value *EmitObjCArrayLiteral(const ObjCArrayLiteral *E); 2587 llvm::Value *EmitObjCDictionaryLiteral(const ObjCDictionaryLiteral *E); 2588 llvm::Value *EmitObjCCollectionLiteral(const Expr *E, 2589 const ObjCMethodDecl *MethodWithObjects); 2590 llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E); 2591 RValue EmitObjCMessageExpr(const ObjCMessageExpr *E, 2592 ReturnValueSlot Return = ReturnValueSlot()); 2593 2594 /// Retrieves the default cleanup kind for an ARC cleanup. 2595 /// Except under -fobjc-arc-eh, ARC cleanups are normal-only. 2596 CleanupKind getARCCleanupKind() { 2597 return CGM.getCodeGenOpts().ObjCAutoRefCountExceptions 2598 ? NormalAndEHCleanup : NormalCleanup; 2599 } 2600 2601 // ARC primitives. 2602 void EmitARCInitWeak(llvm::Value *value, llvm::Value *addr); 2603 void EmitARCDestroyWeak(llvm::Value *addr); 2604 llvm::Value *EmitARCLoadWeak(llvm::Value *addr); 2605 llvm::Value *EmitARCLoadWeakRetained(llvm::Value *addr); 2606 llvm::Value *EmitARCStoreWeak(llvm::Value *value, llvm::Value *addr, 2607 bool ignored); 2608 void EmitARCCopyWeak(llvm::Value *dst, llvm::Value *src); 2609 void EmitARCMoveWeak(llvm::Value *dst, llvm::Value *src); 2610 llvm::Value *EmitARCRetainAutorelease(QualType type, llvm::Value *value); 2611 llvm::Value *EmitARCRetainAutoreleaseNonBlock(llvm::Value *value); 2612 llvm::Value *EmitARCStoreStrong(LValue lvalue, llvm::Value *value, 2613 bool resultIgnored); 2614 llvm::Value *EmitARCStoreStrongCall(llvm::Value *addr, llvm::Value *value, 2615 bool resultIgnored); 2616 llvm::Value *EmitARCRetain(QualType type, llvm::Value *value); 2617 llvm::Value *EmitARCRetainNonBlock(llvm::Value *value); 2618 llvm::Value *EmitARCRetainBlock(llvm::Value *value, bool mandatory); 2619 void EmitARCDestroyStrong(llvm::Value *addr, ARCPreciseLifetime_t precise); 2620 void EmitARCRelease(llvm::Value *value, ARCPreciseLifetime_t precise); 2621 llvm::Value *EmitARCAutorelease(llvm::Value *value); 2622 llvm::Value *EmitARCAutoreleaseReturnValue(llvm::Value *value); 2623 llvm::Value *EmitARCRetainAutoreleaseReturnValue(llvm::Value *value); 2624 llvm::Value *EmitARCRetainAutoreleasedReturnValue(llvm::Value *value); 2625 2626 std::pair<LValue,llvm::Value*> 2627 EmitARCStoreAutoreleasing(const BinaryOperator *e); 2628 std::pair<LValue,llvm::Value*> 2629 EmitARCStoreStrong(const BinaryOperator *e, bool ignored); 2630 2631 llvm::Value *EmitObjCThrowOperand(const Expr *expr); 2632 2633 llvm::Value *EmitObjCProduceObject(QualType T, llvm::Value *Ptr); 2634 llvm::Value *EmitObjCConsumeObject(QualType T, llvm::Value *Ptr); 2635 llvm::Value *EmitObjCExtendObjectLifetime(QualType T, llvm::Value *Ptr); 2636 2637 llvm::Value *EmitARCExtendBlockObject(const Expr *expr); 2638 llvm::Value *EmitARCRetainScalarExpr(const Expr *expr); 2639 llvm::Value *EmitARCRetainAutoreleaseScalarExpr(const Expr *expr); 2640 2641 void EmitARCIntrinsicUse(llvm::ArrayRef<llvm::Value*> values); 2642 2643 static Destroyer destroyARCStrongImprecise; 2644 static Destroyer destroyARCStrongPrecise; 2645 static Destroyer destroyARCWeak; 2646 2647 void EmitObjCAutoreleasePoolPop(llvm::Value *Ptr); 2648 llvm::Value *EmitObjCAutoreleasePoolPush(); 2649 llvm::Value *EmitObjCMRRAutoreleasePoolPush(); 2650 void EmitObjCAutoreleasePoolCleanup(llvm::Value *Ptr); 2651 void EmitObjCMRRAutoreleasePoolPop(llvm::Value *Ptr); 2652 2653 /// EmitReferenceBindingToExpr - Emits a reference binding to the passed in 2654 /// expression. Will emit a temporary variable if E is not an LValue. 2655 RValue EmitReferenceBindingToExpr(const Expr* E, 2656 const NamedDecl *InitializedDecl); 2657 2658 //===--------------------------------------------------------------------===// 2659 // Expression Emission 2660 //===--------------------------------------------------------------------===// 2661 2662 // Expressions are broken into three classes: scalar, complex, aggregate. 2663 2664 /// EmitScalarExpr - Emit the computation of the specified expression of LLVM 2665 /// scalar type, returning the result. 2666 llvm::Value *EmitScalarExpr(const Expr *E , bool IgnoreResultAssign = false); 2667 2668 /// EmitScalarConversion - Emit a conversion from the specified type to the 2669 /// specified destination type, both of which are LLVM scalar types. 2670 llvm::Value *EmitScalarConversion(llvm::Value *Src, QualType SrcTy, 2671 QualType DstTy); 2672 2673 /// EmitComplexToScalarConversion - Emit a conversion from the specified 2674 /// complex type to the specified destination type, where the destination type 2675 /// is an LLVM scalar type. 2676 llvm::Value *EmitComplexToScalarConversion(ComplexPairTy Src, QualType SrcTy, 2677 QualType DstTy); 2678 2679 2680 /// EmitAggExpr - Emit the computation of the specified expression 2681 /// of aggregate type. The result is computed into the given slot, 2682 /// which may be null to indicate that the value is not needed. 2683 void EmitAggExpr(const Expr *E, AggValueSlot AS); 2684 2685 /// EmitAggExprToLValue - Emit the computation of the specified expression of 2686 /// aggregate type into a temporary LValue. 2687 LValue EmitAggExprToLValue(const Expr *E); 2688 2689 /// EmitGCMemmoveCollectable - Emit special API for structs with object 2690 /// pointers. 2691 void EmitGCMemmoveCollectable(llvm::Value *DestPtr, llvm::Value *SrcPtr, 2692 QualType Ty); 2693 2694 /// EmitExtendGCLifetime - Given a pointer to an Objective-C object, 2695 /// make sure it survives garbage collection until this point. 2696 void EmitExtendGCLifetime(llvm::Value *object); 2697 2698 /// EmitComplexExpr - Emit the computation of the specified expression of 2699 /// complex type, returning the result. 2700 ComplexPairTy EmitComplexExpr(const Expr *E, 2701 bool IgnoreReal = false, 2702 bool IgnoreImag = false); 2703 2704 /// EmitComplexExprIntoLValue - Emit the given expression of complex 2705 /// type and place its result into the specified l-value. 2706 void EmitComplexExprIntoLValue(const Expr *E, LValue dest, bool isInit); 2707 2708 /// EmitStoreOfComplex - Store a complex number into the specified l-value. 2709 void EmitStoreOfComplex(ComplexPairTy V, LValue dest, bool isInit); 2710 2711 /// EmitLoadOfComplex - Load a complex number from the specified l-value. 2712 ComplexPairTy EmitLoadOfComplex(LValue src); 2713 2714 /// CreateStaticVarDecl - Create a zero-initialized LLVM global for 2715 /// a static local variable. 2716 llvm::GlobalVariable *CreateStaticVarDecl(const VarDecl &D, 2717 const char *Separator, 2718 llvm::GlobalValue::LinkageTypes Linkage); 2719 2720 /// AddInitializerToStaticVarDecl - Add the initializer for 'D' to the 2721 /// global variable that has already been created for it. If the initializer 2722 /// has a different type than GV does, this may free GV and return a different 2723 /// one. Otherwise it just returns GV. 2724 llvm::GlobalVariable * 2725 AddInitializerToStaticVarDecl(const VarDecl &D, 2726 llvm::GlobalVariable *GV); 2727 2728 2729 /// EmitCXXGlobalVarDeclInit - Create the initializer for a C++ 2730 /// variable with global storage. 2731 void EmitCXXGlobalVarDeclInit(const VarDecl &D, llvm::Constant *DeclPtr, 2732 bool PerformInit); 2733 2734 /// Call atexit() with a function that passes the given argument to 2735 /// the given function. 2736 void registerGlobalDtorWithAtExit(llvm::Constant *fn, llvm::Constant *addr); 2737 2738 /// Emit code in this function to perform a guarded variable 2739 /// initialization. Guarded initializations are used when it's not 2740 /// possible to prove that an initialization will be done exactly 2741 /// once, e.g. with a static local variable or a static data member 2742 /// of a class template. 2743 void EmitCXXGuardedInit(const VarDecl &D, llvm::GlobalVariable *DeclPtr, 2744 bool PerformInit); 2745 2746 /// GenerateCXXGlobalInitFunc - Generates code for initializing global 2747 /// variables. 2748 void GenerateCXXGlobalInitFunc(llvm::Function *Fn, 2749 ArrayRef<llvm::Constant *> Decls, 2750 llvm::GlobalVariable *Guard = 0); 2751 2752 /// GenerateCXXGlobalDtorsFunc - Generates code for destroying global 2753 /// variables. 2754 void GenerateCXXGlobalDtorsFunc(llvm::Function *Fn, 2755 const std::vector<std::pair<llvm::WeakVH, 2756 llvm::Constant*> > &DtorsAndObjects); 2757 2758 void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, 2759 const VarDecl *D, 2760 llvm::GlobalVariable *Addr, 2761 bool PerformInit); 2762 2763 void EmitCXXConstructExpr(const CXXConstructExpr *E, AggValueSlot Dest); 2764 2765 void EmitSynthesizedCXXCopyCtor(llvm::Value *Dest, llvm::Value *Src, 2766 const Expr *Exp); 2767 2768 void enterFullExpression(const ExprWithCleanups *E) { 2769 if (E->getNumObjects() == 0) return; 2770 enterNonTrivialFullExpression(E); 2771 } 2772 void enterNonTrivialFullExpression(const ExprWithCleanups *E); 2773 2774 void EmitCXXThrowExpr(const CXXThrowExpr *E, bool KeepInsertionPoint = true); 2775 2776 void EmitLambdaExpr(const LambdaExpr *E, AggValueSlot Dest); 2777 2778 RValue EmitAtomicExpr(AtomicExpr *E, llvm::Value *Dest = 0); 2779 2780 //===--------------------------------------------------------------------===// 2781 // Annotations Emission 2782 //===--------------------------------------------------------------------===// 2783 2784 /// Emit an annotation call (intrinsic or builtin). 2785 llvm::Value *EmitAnnotationCall(llvm::Value *AnnotationFn, 2786 llvm::Value *AnnotatedVal, 2787 StringRef AnnotationStr, 2788 SourceLocation Location); 2789 2790 /// Emit local annotations for the local variable V, declared by D. 2791 void EmitVarAnnotations(const VarDecl *D, llvm::Value *V); 2792 2793 /// Emit field annotations for the given field & value. Returns the 2794 /// annotation result. 2795 llvm::Value *EmitFieldAnnotations(const FieldDecl *D, llvm::Value *V); 2796 2797 //===--------------------------------------------------------------------===// 2798 // Internal Helpers 2799 //===--------------------------------------------------------------------===// 2800 2801 /// ContainsLabel - Return true if the statement contains a label in it. If 2802 /// this statement is not executed normally, it not containing a label means 2803 /// that we can just remove the code. 2804 static bool ContainsLabel(const Stmt *S, bool IgnoreCaseStmts = false); 2805 2806 /// containsBreak - Return true if the statement contains a break out of it. 2807 /// If the statement (recursively) contains a switch or loop with a break 2808 /// inside of it, this is fine. 2809 static bool containsBreak(const Stmt *S); 2810 2811 /// ConstantFoldsToSimpleInteger - If the specified expression does not fold 2812 /// to a constant, or if it does but contains a label, return false. If it 2813 /// constant folds return true and set the boolean result in Result. 2814 bool ConstantFoldsToSimpleInteger(const Expr *Cond, bool &Result); 2815 2816 /// ConstantFoldsToSimpleInteger - If the specified expression does not fold 2817 /// to a constant, or if it does but contains a label, return false. If it 2818 /// constant folds return true and set the folded value. 2819 bool ConstantFoldsToSimpleInteger(const Expr *Cond, llvm::APSInt &Result); 2820 2821 /// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an 2822 /// if statement) to the specified blocks. Based on the condition, this might 2823 /// try to simplify the codegen of the conditional based on the branch. 2824 void EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *TrueBlock, 2825 llvm::BasicBlock *FalseBlock); 2826 2827 /// \brief Emit a description of a type in a format suitable for passing to 2828 /// a runtime sanitizer handler. 2829 llvm::Constant *EmitCheckTypeDescriptor(QualType T); 2830 2831 /// \brief Convert a value into a format suitable for passing to a runtime 2832 /// sanitizer handler. 2833 llvm::Value *EmitCheckValue(llvm::Value *V); 2834 2835 /// \brief Emit a description of a source location in a format suitable for 2836 /// passing to a runtime sanitizer handler. 2837 llvm::Constant *EmitCheckSourceLocation(SourceLocation Loc); 2838 2839 /// \brief Specify under what conditions this check can be recovered 2840 enum CheckRecoverableKind { 2841 /// Always terminate program execution if this check fails 2842 CRK_Unrecoverable, 2843 /// Check supports recovering, allows user to specify which 2844 CRK_Recoverable, 2845 /// Runtime conditionally aborts, always need to support recovery. 2846 CRK_AlwaysRecoverable 2847 }; 2848 2849 /// \brief Create a basic block that will call a handler function in a 2850 /// sanitizer runtime with the provided arguments, and create a conditional 2851 /// branch to it. 2852 void EmitCheck(llvm::Value *Checked, StringRef CheckName, 2853 ArrayRef<llvm::Constant *> StaticArgs, 2854 ArrayRef<llvm::Value *> DynamicArgs, 2855 CheckRecoverableKind Recoverable); 2856 2857 /// \brief Create a basic block that will call the trap intrinsic, and emit a 2858 /// conditional branch to it, for the -ftrapv checks. 2859 void EmitTrapCheck(llvm::Value *Checked); 2860 2861 /// EmitCallArg - Emit a single call argument. 2862 void EmitCallArg(CallArgList &args, const Expr *E, QualType ArgType); 2863 2864 /// EmitDelegateCallArg - We are performing a delegate call; that 2865 /// is, the current function is delegating to another one. Produce 2866 /// a r-value suitable for passing the given parameter. 2867 void EmitDelegateCallArg(CallArgList &args, const VarDecl *param); 2868 2869 /// SetFPAccuracy - Set the minimum required accuracy of the given floating 2870 /// point operation, expressed as the maximum relative error in ulp. 2871 void SetFPAccuracy(llvm::Value *Val, float Accuracy); 2872 2873 private: 2874 llvm::MDNode *getRangeForLoadFromType(QualType Ty); 2875 void EmitReturnOfRValue(RValue RV, QualType Ty); 2876 2877 /// ExpandTypeFromArgs - Reconstruct a structure of type \arg Ty 2878 /// from function arguments into \arg Dst. See ABIArgInfo::Expand. 2879 /// 2880 /// \param AI - The first function argument of the expansion. 2881 /// \return The argument following the last expanded function 2882 /// argument. 2883 llvm::Function::arg_iterator 2884 ExpandTypeFromArgs(QualType Ty, LValue Dst, 2885 llvm::Function::arg_iterator AI); 2886 2887 /// ExpandTypeToArgs - Expand an RValue \arg Src, with the LLVM type for \arg 2888 /// Ty, into individual arguments on the provided vector \arg Args. See 2889 /// ABIArgInfo::Expand. 2890 void ExpandTypeToArgs(QualType Ty, RValue Src, 2891 SmallVector<llvm::Value*, 16> &Args, 2892 llvm::FunctionType *IRFuncTy); 2893 2894 llvm::Value* EmitAsmInput(const TargetInfo::ConstraintInfo &Info, 2895 const Expr *InputExpr, std::string &ConstraintStr); 2896 2897 llvm::Value* EmitAsmInputLValue(const TargetInfo::ConstraintInfo &Info, 2898 LValue InputValue, QualType InputType, 2899 std::string &ConstraintStr); 2900 2901 /// EmitCallArgs - Emit call arguments for a function. 2902 /// The CallArgTypeInfo parameter is used for iterating over the known 2903 /// argument types of the function being called. 2904 template<typename T> 2905 void EmitCallArgs(CallArgList& Args, const T* CallArgTypeInfo, 2906 CallExpr::const_arg_iterator ArgBeg, 2907 CallExpr::const_arg_iterator ArgEnd) { 2908 CallExpr::const_arg_iterator Arg = ArgBeg; 2909 2910 // First, use the argument types that the type info knows about 2911 if (CallArgTypeInfo) { 2912 for (typename T::arg_type_iterator I = CallArgTypeInfo->arg_type_begin(), 2913 E = CallArgTypeInfo->arg_type_end(); I != E; ++I, ++Arg) { 2914 assert(Arg != ArgEnd && "Running over edge of argument list!"); 2915 QualType ArgType = *I; 2916 #ifndef NDEBUG 2917 QualType ActualArgType = Arg->getType(); 2918 if (ArgType->isPointerType() && ActualArgType->isPointerType()) { 2919 QualType ActualBaseType = 2920 ActualArgType->getAs<PointerType>()->getPointeeType(); 2921 QualType ArgBaseType = 2922 ArgType->getAs<PointerType>()->getPointeeType(); 2923 if (ArgBaseType->isVariableArrayType()) { 2924 if (const VariableArrayType *VAT = 2925 getContext().getAsVariableArrayType(ActualBaseType)) { 2926 if (!VAT->getSizeExpr()) 2927 ActualArgType = ArgType; 2928 } 2929 } 2930 } 2931 assert(getContext().getCanonicalType(ArgType.getNonReferenceType()). 2932 getTypePtr() == 2933 getContext().getCanonicalType(ActualArgType).getTypePtr() && 2934 "type mismatch in call argument!"); 2935 #endif 2936 EmitCallArg(Args, *Arg, ArgType); 2937 } 2938 2939 // Either we've emitted all the call args, or we have a call to a 2940 // variadic function. 2941 assert((Arg == ArgEnd || CallArgTypeInfo->isVariadic()) && 2942 "Extra arguments in non-variadic function!"); 2943 2944 } 2945 2946 // If we still have any arguments, emit them using the type of the argument. 2947 for (; Arg != ArgEnd; ++Arg) 2948 EmitCallArg(Args, *Arg, Arg->getType()); 2949 } 2950 2951 const TargetCodeGenInfo &getTargetHooks() const { 2952 return CGM.getTargetCodeGenInfo(); 2953 } 2954 2955 void EmitDeclMetadata(); 2956 2957 CodeGenModule::ByrefHelpers * 2958 buildByrefHelpers(llvm::StructType &byrefType, 2959 const AutoVarEmission &emission); 2960 2961 void AddObjCARCExceptionMetadata(llvm::Instruction *Inst); 2962 2963 /// GetPointeeAlignment - Given an expression with a pointer type, emit the 2964 /// value and compute our best estimate of the alignment of the pointee. 2965 std::pair<llvm::Value*, unsigned> EmitPointerWithAlignment(const Expr *Addr); 2966 }; 2967 2968 /// Helper class with most of the code for saving a value for a 2969 /// conditional expression cleanup. 2970 struct DominatingLLVMValue { 2971 typedef llvm::PointerIntPair<llvm::Value*, 1, bool> saved_type; 2972 2973 /// Answer whether the given value needs extra work to be saved. 2974 static bool needsSaving(llvm::Value *value) { 2975 // If it's not an instruction, we don't need to save. 2976 if (!isa<llvm::Instruction>(value)) return false; 2977 2978 // If it's an instruction in the entry block, we don't need to save. 2979 llvm::BasicBlock *block = cast<llvm::Instruction>(value)->getParent(); 2980 return (block != &block->getParent()->getEntryBlock()); 2981 } 2982 2983 /// Try to save the given value. 2984 static saved_type save(CodeGenFunction &CGF, llvm::Value *value) { 2985 if (!needsSaving(value)) return saved_type(value, false); 2986 2987 // Otherwise we need an alloca. 2988 llvm::Value *alloca = 2989 CGF.CreateTempAlloca(value->getType(), "cond-cleanup.save"); 2990 CGF.Builder.CreateStore(value, alloca); 2991 2992 return saved_type(alloca, true); 2993 } 2994 2995 static llvm::Value *restore(CodeGenFunction &CGF, saved_type value) { 2996 if (!value.getInt()) return value.getPointer(); 2997 return CGF.Builder.CreateLoad(value.getPointer()); 2998 } 2999 }; 3000 3001 /// A partial specialization of DominatingValue for llvm::Values that 3002 /// might be llvm::Instructions. 3003 template <class T> struct DominatingPointer<T,true> : DominatingLLVMValue { 3004 typedef T *type; 3005 static type restore(CodeGenFunction &CGF, saved_type value) { 3006 return static_cast<T*>(DominatingLLVMValue::restore(CGF, value)); 3007 } 3008 }; 3009 3010 /// A specialization of DominatingValue for RValue. 3011 template <> struct DominatingValue<RValue> { 3012 typedef RValue type; 3013 class saved_type { 3014 enum Kind { ScalarLiteral, ScalarAddress, AggregateLiteral, 3015 AggregateAddress, ComplexAddress }; 3016 3017 llvm::Value *Value; 3018 Kind K; 3019 saved_type(llvm::Value *v, Kind k) : Value(v), K(k) {} 3020 3021 public: 3022 static bool needsSaving(RValue value); 3023 static saved_type save(CodeGenFunction &CGF, RValue value); 3024 RValue restore(CodeGenFunction &CGF); 3025 3026 // implementations in CGExprCXX.cpp 3027 }; 3028 3029 static bool needsSaving(type value) { 3030 return saved_type::needsSaving(value); 3031 } 3032 static saved_type save(CodeGenFunction &CGF, type value) { 3033 return saved_type::save(CGF, value); 3034 } 3035 static type restore(CodeGenFunction &CGF, saved_type value) { 3036 return value.restore(CGF); 3037 } 3038 }; 3039 3040 } // end namespace CodeGen 3041 } // end namespace clang 3042 3043 #endif 3044