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 "clang/AST/Type.h" 18 #include "clang/AST/ExprCXX.h" 19 #include "clang/AST/ExprObjC.h" 20 #include "clang/AST/CharUnits.h" 21 #include "clang/Basic/ABI.h" 22 #include "clang/Basic/TargetInfo.h" 23 #include "llvm/ADT/DenseMap.h" 24 #include "llvm/ADT/SmallVector.h" 25 #include "llvm/Support/ValueHandle.h" 26 #include "CodeGenModule.h" 27 #include "CGBlocks.h" 28 #include "CGBuilder.h" 29 #include "CGCall.h" 30 #include "CGValue.h" 31 32 namespace llvm { 33 class BasicBlock; 34 class LLVMContext; 35 class MDNode; 36 class Module; 37 class SwitchInst; 38 class Twine; 39 class Value; 40 class CallSite; 41 } 42 43 namespace clang { 44 class APValue; 45 class ASTContext; 46 class CXXDestructorDecl; 47 class CXXTryStmt; 48 class Decl; 49 class EnumConstantDecl; 50 class FunctionDecl; 51 class FunctionProtoType; 52 class LabelStmt; 53 class ObjCContainerDecl; 54 class ObjCInterfaceDecl; 55 class ObjCIvarDecl; 56 class ObjCMethodDecl; 57 class ObjCImplementationDecl; 58 class ObjCPropertyImplDecl; 59 class TargetInfo; 60 class TargetCodeGenInfo; 61 class VarDecl; 62 class ObjCForCollectionStmt; 63 class ObjCAtTryStmt; 64 class ObjCAtThrowStmt; 65 class ObjCAtSynchronizedStmt; 66 67 namespace CodeGen { 68 class CodeGenTypes; 69 class CGDebugInfo; 70 class CGFunctionInfo; 71 class CGRecordLayout; 72 class CGBlockInfo; 73 class CGCXXABI; 74 75 /// A branch fixup. These are required when emitting a goto to a 76 /// label which hasn't been emitted yet. The goto is optimistically 77 /// emitted as a branch to the basic block for the label, and (if it 78 /// occurs in a scope with non-trivial cleanups) a fixup is added to 79 /// the innermost cleanup. When a (normal) cleanup is popped, any 80 /// unresolved fixups in that scope are threaded through the cleanup. 81 struct BranchFixup { 82 /// The block containing the terminator which needs to be modified 83 /// into a switch if this fixup is resolved into the current scope. 84 /// If null, LatestBranch points directly to the destination. 85 llvm::BasicBlock *OptimisticBranchBlock; 86 87 /// The ultimate destination of the branch. 88 /// 89 /// This can be set to null to indicate that this fixup was 90 /// successfully resolved. 91 llvm::BasicBlock *Destination; 92 93 /// The destination index value. 94 unsigned DestinationIndex; 95 96 /// The initial branch of the fixup. 97 llvm::BranchInst *InitialBranch; 98 }; 99 100 /// A metaprogramming class which decides whether a type is a subclass 101 /// of llvm::Value that needs to be saved if it's used in a 102 /// conditional cleanup. 103 template 104 <class T, 105 bool mustSave = 106 llvm::is_base_of<llvm::Value, llvm::remove_pointer<T> >::value 107 && !llvm::is_base_of<llvm::Constant, llvm::remove_pointer<T> >::value 108 && !llvm::is_base_of<llvm::BasicBlock, llvm::remove_pointer<T> >::value> 109 struct SavedValueInCond { 110 typedef T type; 111 typedef T saved_type; 112 static bool needsSaving(type value) { return false; } 113 static saved_type save(CodeGenFunction &CGF, type value) { return value; } 114 static type restore(CodeGenFunction &CGF, saved_type value) { return value; } 115 }; 116 // Partial specialization for true arguments at end of file. 117 118 enum CleanupKind { 119 EHCleanup = 0x1, 120 NormalCleanup = 0x2, 121 NormalAndEHCleanup = EHCleanup | NormalCleanup, 122 123 InactiveCleanup = 0x4, 124 InactiveEHCleanup = EHCleanup | InactiveCleanup, 125 InactiveNormalCleanup = NormalCleanup | InactiveCleanup, 126 InactiveNormalAndEHCleanup = NormalAndEHCleanup | InactiveCleanup 127 }; 128 129 /// A stack of scopes which respond to exceptions, including cleanups 130 /// and catch blocks. 131 class EHScopeStack { 132 public: 133 /// A saved depth on the scope stack. This is necessary because 134 /// pushing scopes onto the stack invalidates iterators. 135 class stable_iterator { 136 friend class EHScopeStack; 137 138 /// Offset from StartOfData to EndOfBuffer. 139 ptrdiff_t Size; 140 141 stable_iterator(ptrdiff_t Size) : Size(Size) {} 142 143 public: 144 static stable_iterator invalid() { return stable_iterator(-1); } 145 stable_iterator() : Size(-1) {} 146 147 bool isValid() const { return Size >= 0; } 148 149 /// Returns true if this scope encloses I. 150 /// Returns false if I is invalid. 151 /// This scope must be valid. 152 bool encloses(stable_iterator I) const { return Size <= I.Size; } 153 154 /// Returns true if this scope strictly encloses I: that is, 155 /// if it encloses I and is not I. 156 /// Returns false is I is invalid. 157 /// This scope must be valid. 158 bool strictlyEncloses(stable_iterator I) const { return Size < I.Size; } 159 160 friend bool operator==(stable_iterator A, stable_iterator B) { 161 return A.Size == B.Size; 162 } 163 friend bool operator!=(stable_iterator A, stable_iterator B) { 164 return A.Size != B.Size; 165 } 166 }; 167 168 /// Information for lazily generating a cleanup. Subclasses must be 169 /// POD-like: cleanups will not be destructed, and they will be 170 /// allocated on the cleanup stack and freely copied and moved 171 /// around. 172 /// 173 /// Cleanup implementations should generally be declared in an 174 /// anonymous namespace. 175 class Cleanup { 176 public: 177 // Anchor the construction vtable. We use the destructor because 178 // gcc gives an obnoxious warning if there are virtual methods 179 // with an accessible non-virtual destructor. Unfortunately, 180 // declaring this destructor makes it non-trivial, but there 181 // doesn't seem to be any other way around this warning. 182 // 183 // This destructor will never be called. 184 virtual ~Cleanup(); 185 186 /// Emit the cleanup. For normal cleanups, this is run in the 187 /// same EH context as when the cleanup was pushed, i.e. the 188 /// immediately-enclosing context of the cleanup scope. For 189 /// EH cleanups, this is run in a terminate context. 190 /// 191 // \param IsForEHCleanup true if this is for an EH cleanup, false 192 /// if for a normal cleanup. 193 virtual void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) = 0; 194 }; 195 196 /// A helper class for cleanups that execute conditionally. 197 class ConditionalCleanup : public Cleanup { 198 /// Either an i1 which directly indicates whether the cleanup 199 /// should be run or an i1* from which that should be loaded. 200 llvm::Value *cond; 201 202 public: 203 virtual void Emit(CodeGenFunction &CGF, bool IsForEHCleanup); 204 205 protected: 206 ConditionalCleanup(llvm::Value *cond) : cond(cond) {} 207 208 /// Emit the non-conditional code for the cleanup. 209 virtual void EmitImpl(CodeGenFunction &CGF, bool IsForEHCleanup) = 0; 210 }; 211 212 /// UnconditionalCleanupN stores its N parameters and just passes 213 /// them to the real cleanup function. 214 template <class T, class A0, class A1> 215 class UnconditionalCleanup2 : public Cleanup { 216 A0 a0; A1 a1; 217 public: 218 UnconditionalCleanup2(A0 a0, A1 a1) : a0(a0), a1(a1) {} 219 void Emit(CodeGenFunction &CGF, bool IsForEHCleanup) { 220 T::Emit(CGF, IsForEHCleanup, a0, a1); 221 } 222 }; 223 224 /// ConditionalCleanupN stores the saved form of its N parameters, 225 /// then restores them and performs the cleanup. 226 template <class T, class A0, class A1> 227 class ConditionalCleanup2 : public ConditionalCleanup { 228 typedef typename SavedValueInCond<A0>::saved_type A0_saved; 229 typedef typename SavedValueInCond<A1>::saved_type A1_saved; 230 A0_saved a0_saved; 231 A1_saved a1_saved; 232 233 void EmitImpl(CodeGenFunction &CGF, bool IsForEHCleanup) { 234 A0 a0 = SavedValueInCond<A0>::restore(CGF, a0_saved); 235 A1 a1 = SavedValueInCond<A1>::restore(CGF, a1_saved); 236 T::Emit(CGF, IsForEHCleanup, a0, a1); 237 } 238 239 public: 240 ConditionalCleanup2(llvm::Value *cond, A0_saved a0, A1_saved a1) 241 : ConditionalCleanup(cond), a0_saved(a0), a1_saved(a1) {} 242 }; 243 244 private: 245 // The implementation for this class is in CGException.h and 246 // CGException.cpp; the definition is here because it's used as a 247 // member of CodeGenFunction. 248 249 /// The start of the scope-stack buffer, i.e. the allocated pointer 250 /// for the buffer. All of these pointers are either simultaneously 251 /// null or simultaneously valid. 252 char *StartOfBuffer; 253 254 /// The end of the buffer. 255 char *EndOfBuffer; 256 257 /// The first valid entry in the buffer. 258 char *StartOfData; 259 260 /// The innermost normal cleanup on the stack. 261 stable_iterator InnermostNormalCleanup; 262 263 /// The innermost EH cleanup on the stack. 264 stable_iterator InnermostEHCleanup; 265 266 /// The number of catches on the stack. 267 unsigned CatchDepth; 268 269 /// The current EH destination index. Reset to FirstCatchIndex 270 /// whenever the last EH cleanup is popped. 271 unsigned NextEHDestIndex; 272 enum { FirstEHDestIndex = 1 }; 273 274 /// The current set of branch fixups. A branch fixup is a jump to 275 /// an as-yet unemitted label, i.e. a label for which we don't yet 276 /// know the EH stack depth. Whenever we pop a cleanup, we have 277 /// to thread all the current branch fixups through it. 278 /// 279 /// Fixups are recorded as the Use of the respective branch or 280 /// switch statement. The use points to the final destination. 281 /// When popping out of a cleanup, these uses are threaded through 282 /// the cleanup and adjusted to point to the new cleanup. 283 /// 284 /// Note that branches are allowed to jump into protected scopes 285 /// in certain situations; e.g. the following code is legal: 286 /// struct A { ~A(); }; // trivial ctor, non-trivial dtor 287 /// goto foo; 288 /// A a; 289 /// foo: 290 /// bar(); 291 llvm::SmallVector<BranchFixup, 8> BranchFixups; 292 293 char *allocate(size_t Size); 294 295 void *pushCleanup(CleanupKind K, size_t DataSize); 296 297 public: 298 EHScopeStack() : StartOfBuffer(0), EndOfBuffer(0), StartOfData(0), 299 InnermostNormalCleanup(stable_end()), 300 InnermostEHCleanup(stable_end()), 301 CatchDepth(0), NextEHDestIndex(FirstEHDestIndex) {} 302 ~EHScopeStack() { delete[] StartOfBuffer; } 303 304 // Variadic templates would make this not terrible. 305 306 /// Push a lazily-created cleanup on the stack. 307 template <class T> 308 void pushCleanup(CleanupKind Kind) { 309 void *Buffer = pushCleanup(Kind, sizeof(T)); 310 Cleanup *Obj = new(Buffer) T(); 311 (void) Obj; 312 } 313 314 /// Push a lazily-created cleanup on the stack. 315 template <class T, class A0> 316 void pushCleanup(CleanupKind Kind, A0 a0) { 317 void *Buffer = pushCleanup(Kind, sizeof(T)); 318 Cleanup *Obj = new(Buffer) T(a0); 319 (void) Obj; 320 } 321 322 /// Push a lazily-created cleanup on the stack. 323 template <class T, class A0, class A1> 324 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1) { 325 void *Buffer = pushCleanup(Kind, sizeof(T)); 326 Cleanup *Obj = new(Buffer) T(a0, a1); 327 (void) Obj; 328 } 329 330 /// Push a lazily-created cleanup on the stack. 331 template <class T, class A0, class A1, class A2> 332 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2) { 333 void *Buffer = pushCleanup(Kind, sizeof(T)); 334 Cleanup *Obj = new(Buffer) T(a0, a1, a2); 335 (void) Obj; 336 } 337 338 /// Push a lazily-created cleanup on the stack. 339 template <class T, class A0, class A1, class A2, class A3> 340 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3) { 341 void *Buffer = pushCleanup(Kind, sizeof(T)); 342 Cleanup *Obj = new(Buffer) T(a0, a1, a2, a3); 343 (void) Obj; 344 } 345 346 /// Push a lazily-created cleanup on the stack. 347 template <class T, class A0, class A1, class A2, class A3, class A4> 348 void pushCleanup(CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3, A4 a4) { 349 void *Buffer = pushCleanup(Kind, sizeof(T)); 350 Cleanup *Obj = new(Buffer) T(a0, a1, a2, a3, a4); 351 (void) Obj; 352 } 353 354 // Feel free to add more variants of the following: 355 356 /// Push a cleanup with non-constant storage requirements on the 357 /// stack. The cleanup type must provide an additional static method: 358 /// static size_t getExtraSize(size_t); 359 /// The argument to this method will be the value N, which will also 360 /// be passed as the first argument to the constructor. 361 /// 362 /// The data stored in the extra storage must obey the same 363 /// restrictions as normal cleanup member data. 364 /// 365 /// The pointer returned from this method is valid until the cleanup 366 /// stack is modified. 367 template <class T, class A0, class A1, class A2> 368 T *pushCleanupWithExtra(CleanupKind Kind, size_t N, A0 a0, A1 a1, A2 a2) { 369 void *Buffer = pushCleanup(Kind, sizeof(T) + T::getExtraSize(N)); 370 return new (Buffer) T(N, a0, a1, a2); 371 } 372 373 /// Pops a cleanup scope off the stack. This should only be called 374 /// by CodeGenFunction::PopCleanupBlock. 375 void popCleanup(); 376 377 /// Push a set of catch handlers on the stack. The catch is 378 /// uninitialized and will need to have the given number of handlers 379 /// set on it. 380 class EHCatchScope *pushCatch(unsigned NumHandlers); 381 382 /// Pops a catch scope off the stack. 383 void popCatch(); 384 385 /// Push an exceptions filter on the stack. 386 class EHFilterScope *pushFilter(unsigned NumFilters); 387 388 /// Pops an exceptions filter off the stack. 389 void popFilter(); 390 391 /// Push a terminate handler on the stack. 392 void pushTerminate(); 393 394 /// Pops a terminate handler off the stack. 395 void popTerminate(); 396 397 /// Determines whether the exception-scopes stack is empty. 398 bool empty() const { return StartOfData == EndOfBuffer; } 399 400 bool requiresLandingPad() const { 401 return (CatchDepth || hasEHCleanups()); 402 } 403 404 /// Determines whether there are any normal cleanups on the stack. 405 bool hasNormalCleanups() const { 406 return InnermostNormalCleanup != stable_end(); 407 } 408 409 /// Returns the innermost normal cleanup on the stack, or 410 /// stable_end() if there are no normal cleanups. 411 stable_iterator getInnermostNormalCleanup() const { 412 return InnermostNormalCleanup; 413 } 414 stable_iterator getInnermostActiveNormalCleanup() const; // CGException.h 415 416 /// Determines whether there are any EH cleanups on the stack. 417 bool hasEHCleanups() const { 418 return InnermostEHCleanup != stable_end(); 419 } 420 421 /// Returns the innermost EH cleanup on the stack, or stable_end() 422 /// if there are no EH cleanups. 423 stable_iterator getInnermostEHCleanup() const { 424 return InnermostEHCleanup; 425 } 426 stable_iterator getInnermostActiveEHCleanup() const; // CGException.h 427 428 /// An unstable reference to a scope-stack depth. Invalidated by 429 /// pushes but not pops. 430 class iterator; 431 432 /// Returns an iterator pointing to the innermost EH scope. 433 iterator begin() const; 434 435 /// Returns an iterator pointing to the outermost EH scope. 436 iterator end() const; 437 438 /// Create a stable reference to the top of the EH stack. The 439 /// returned reference is valid until that scope is popped off the 440 /// stack. 441 stable_iterator stable_begin() const { 442 return stable_iterator(EndOfBuffer - StartOfData); 443 } 444 445 /// Create a stable reference to the bottom of the EH stack. 446 static stable_iterator stable_end() { 447 return stable_iterator(0); 448 } 449 450 /// Translates an iterator into a stable_iterator. 451 stable_iterator stabilize(iterator it) const; 452 453 /// Finds the nearest cleanup enclosing the given iterator. 454 /// Returns stable_iterator::invalid() if there are no such cleanups. 455 stable_iterator getEnclosingEHCleanup(iterator it) const; 456 457 /// Turn a stable reference to a scope depth into a unstable pointer 458 /// to the EH stack. 459 iterator find(stable_iterator save) const; 460 461 /// Removes the cleanup pointed to by the given stable_iterator. 462 void removeCleanup(stable_iterator save); 463 464 /// Add a branch fixup to the current cleanup scope. 465 BranchFixup &addBranchFixup() { 466 assert(hasNormalCleanups() && "adding fixup in scope without cleanups"); 467 BranchFixups.push_back(BranchFixup()); 468 return BranchFixups.back(); 469 } 470 471 unsigned getNumBranchFixups() const { return BranchFixups.size(); } 472 BranchFixup &getBranchFixup(unsigned I) { 473 assert(I < getNumBranchFixups()); 474 return BranchFixups[I]; 475 } 476 477 /// Pops lazily-removed fixups from the end of the list. This 478 /// should only be called by procedures which have just popped a 479 /// cleanup or resolved one or more fixups. 480 void popNullFixups(); 481 482 /// Clears the branch-fixups list. This should only be called by 483 /// ResolveAllBranchFixups. 484 void clearFixups() { BranchFixups.clear(); } 485 486 /// Gets the next EH destination index. 487 unsigned getNextEHDestIndex() { return NextEHDestIndex++; } 488 }; 489 490 /// CodeGenFunction - This class organizes the per-function state that is used 491 /// while generating LLVM code. 492 class CodeGenFunction : public BlockFunction { 493 CodeGenFunction(const CodeGenFunction&); // DO NOT IMPLEMENT 494 void operator=(const CodeGenFunction&); // DO NOT IMPLEMENT 495 496 friend class CGCXXABI; 497 public: 498 /// A jump destination is an abstract label, branching to which may 499 /// require a jump out through normal cleanups. 500 struct JumpDest { 501 JumpDest() : Block(0), ScopeDepth(), Index(0) {} 502 JumpDest(llvm::BasicBlock *Block, 503 EHScopeStack::stable_iterator Depth, 504 unsigned Index) 505 : Block(Block), ScopeDepth(Depth), Index(Index) {} 506 507 bool isValid() const { return Block != 0; } 508 llvm::BasicBlock *getBlock() const { return Block; } 509 EHScopeStack::stable_iterator getScopeDepth() const { return ScopeDepth; } 510 unsigned getDestIndex() const { return Index; } 511 512 private: 513 llvm::BasicBlock *Block; 514 EHScopeStack::stable_iterator ScopeDepth; 515 unsigned Index; 516 }; 517 518 /// An unwind destination is an abstract label, branching to which 519 /// may require a jump out through EH cleanups. 520 struct UnwindDest { 521 UnwindDest() : Block(0), ScopeDepth(), Index(0) {} 522 UnwindDest(llvm::BasicBlock *Block, 523 EHScopeStack::stable_iterator Depth, 524 unsigned Index) 525 : Block(Block), ScopeDepth(Depth), Index(Index) {} 526 527 bool isValid() const { return Block != 0; } 528 llvm::BasicBlock *getBlock() const { return Block; } 529 EHScopeStack::stable_iterator getScopeDepth() const { return ScopeDepth; } 530 unsigned getDestIndex() const { return Index; } 531 532 private: 533 llvm::BasicBlock *Block; 534 EHScopeStack::stable_iterator ScopeDepth; 535 unsigned Index; 536 }; 537 538 CodeGenModule &CGM; // Per-module state. 539 const TargetInfo &Target; 540 541 typedef std::pair<llvm::Value *, llvm::Value *> ComplexPairTy; 542 CGBuilderTy Builder; 543 544 /// CurFuncDecl - Holds the Decl for the current function or ObjC method. 545 /// This excludes BlockDecls. 546 const Decl *CurFuncDecl; 547 /// CurCodeDecl - This is the inner-most code context, which includes blocks. 548 const Decl *CurCodeDecl; 549 const CGFunctionInfo *CurFnInfo; 550 QualType FnRetTy; 551 llvm::Function *CurFn; 552 553 /// CurGD - The GlobalDecl for the current function being compiled. 554 GlobalDecl CurGD; 555 556 /// ReturnBlock - Unified return block. 557 JumpDest ReturnBlock; 558 559 /// ReturnValue - The temporary alloca to hold the return value. This is null 560 /// iff the function has no return value. 561 llvm::Value *ReturnValue; 562 563 /// RethrowBlock - Unified rethrow block. 564 UnwindDest RethrowBlock; 565 566 /// AllocaInsertPoint - This is an instruction in the entry block before which 567 /// we prefer to insert allocas. 568 llvm::AssertingVH<llvm::Instruction> AllocaInsertPt; 569 570 // intptr_t, i32, i64 571 const llvm::IntegerType *IntPtrTy, *Int32Ty, *Int64Ty; 572 uint32_t LLVMPointerWidth; 573 574 bool Exceptions; 575 bool CatchUndefined; 576 577 /// \brief A mapping from NRVO variables to the flags used to indicate 578 /// when the NRVO has been applied to this variable. 579 llvm::DenseMap<const VarDecl *, llvm::Value *> NRVOFlags; 580 581 /// \brief A mapping from 'Save' expression in a conditional expression 582 /// to the IR for this expression. Used to implement IR gen. for Gnu 583 /// extension's missing LHS expression in a conditional operator expression. 584 llvm::DenseMap<const Expr *, llvm::Value *> ConditionalSaveExprs; 585 llvm::DenseMap<const Expr *, ComplexPairTy> ConditionalSaveComplexExprs; 586 llvm::DenseMap<const Expr *, LValue> ConditionalSaveLValueExprs; 587 588 EHScopeStack EHStack; 589 590 /// i32s containing the indexes of the cleanup destinations. 591 llvm::AllocaInst *NormalCleanupDest; 592 llvm::AllocaInst *EHCleanupDest; 593 594 unsigned NextCleanupDestIndex; 595 596 /// The exception slot. All landing pads write the current 597 /// exception pointer into this alloca. 598 llvm::Value *ExceptionSlot; 599 600 /// Emits a landing pad for the current EH stack. 601 llvm::BasicBlock *EmitLandingPad(); 602 603 llvm::BasicBlock *getInvokeDestImpl(); 604 605 /// Sets up a condition for a full-expression cleanup. 606 llvm::Value *initFullExprCleanup(); 607 608 template <class T> 609 typename SavedValueInCond<T>::saved_type saveValueInCond(T value) { 610 return SavedValueInCond<T>::save(*this, value); 611 } 612 613 public: 614 /// ObjCEHValueStack - Stack of Objective-C exception values, used for 615 /// rethrows. 616 llvm::SmallVector<llvm::Value*, 8> ObjCEHValueStack; 617 618 // A struct holding information about a finally block's IR 619 // generation. For now, doesn't actually hold anything. 620 struct FinallyInfo { 621 }; 622 623 FinallyInfo EnterFinallyBlock(const Stmt *Stmt, 624 llvm::Constant *BeginCatchFn, 625 llvm::Constant *EndCatchFn, 626 llvm::Constant *RethrowFn); 627 void ExitFinallyBlock(FinallyInfo &FinallyInfo); 628 629 /// pushFullExprCleanup - Push a cleanup to be run at the end of the 630 /// current full-expression. Safe against the possibility that 631 /// we're currently inside a conditionally-evaluated expression. 632 template <class T, class A0, class A1> 633 void pushFullExprCleanup(CleanupKind kind, A0 a0, A1 a1) { 634 // If we're not in a conditional branch, or if none of the 635 // arguments requires saving, then use the unconditional cleanup. 636 if (!(isInConditionalBranch() || 637 SavedValueInCond<A0>::needsSaving(a0) || 638 SavedValueInCond<A1>::needsSaving(a1))) { 639 typedef EHScopeStack::UnconditionalCleanup2<T, A0, A1> CleanupType; 640 return EHStack.pushCleanup<CleanupType>(kind, a0, a1); 641 } 642 643 llvm::Value *condVar = initFullExprCleanup(); 644 typename SavedValueInCond<A0>::saved_type a0_saved = saveValueInCond(a0); 645 typename SavedValueInCond<A1>::saved_type a1_saved = saveValueInCond(a1); 646 647 typedef EHScopeStack::ConditionalCleanup2<T, A0, A1> CleanupType; 648 EHStack.pushCleanup<CleanupType>(kind, condVar, a0_saved, a1_saved); 649 } 650 651 /// PushDestructorCleanup - Push a cleanup to call the 652 /// complete-object destructor of an object of the given type at the 653 /// given address. Does nothing if T is not a C++ class type with a 654 /// non-trivial destructor. 655 void PushDestructorCleanup(QualType T, llvm::Value *Addr); 656 657 /// PushDestructorCleanup - Push a cleanup to call the 658 /// complete-object variant of the given destructor on the object at 659 /// the given address. 660 void PushDestructorCleanup(const CXXDestructorDecl *Dtor, 661 llvm::Value *Addr); 662 663 /// PopCleanupBlock - Will pop the cleanup entry on the stack and 664 /// process all branch fixups. 665 void PopCleanupBlock(bool FallThroughIsBranchThrough = false); 666 667 /// DeactivateCleanupBlock - Deactivates the given cleanup block. 668 /// The block cannot be reactivated. Pops it if it's the top of the 669 /// stack. 670 void DeactivateCleanupBlock(EHScopeStack::stable_iterator Cleanup); 671 672 /// ActivateCleanupBlock - Activates an initially-inactive cleanup. 673 /// Cannot be used to resurrect a deactivated cleanup. 674 void ActivateCleanupBlock(EHScopeStack::stable_iterator Cleanup); 675 676 /// \brief Enters a new scope for capturing cleanups, all of which 677 /// will be executed once the scope is exited. 678 class RunCleanupsScope { 679 CodeGenFunction& CGF; 680 EHScopeStack::stable_iterator CleanupStackDepth; 681 bool OldDidCallStackSave; 682 bool PerformCleanup; 683 684 RunCleanupsScope(const RunCleanupsScope &); // DO NOT IMPLEMENT 685 RunCleanupsScope &operator=(const RunCleanupsScope &); // DO NOT IMPLEMENT 686 687 public: 688 /// \brief Enter a new cleanup scope. 689 explicit RunCleanupsScope(CodeGenFunction &CGF) 690 : CGF(CGF), PerformCleanup(true) 691 { 692 CleanupStackDepth = CGF.EHStack.stable_begin(); 693 OldDidCallStackSave = CGF.DidCallStackSave; 694 CGF.DidCallStackSave = false; 695 } 696 697 /// \brief Exit this cleanup scope, emitting any accumulated 698 /// cleanups. 699 ~RunCleanupsScope() { 700 if (PerformCleanup) { 701 CGF.DidCallStackSave = OldDidCallStackSave; 702 CGF.PopCleanupBlocks(CleanupStackDepth); 703 } 704 } 705 706 /// \brief Determine whether this scope requires any cleanups. 707 bool requiresCleanups() const { 708 return CGF.EHStack.stable_begin() != CleanupStackDepth; 709 } 710 711 /// \brief Force the emission of cleanups now, instead of waiting 712 /// until this object is destroyed. 713 void ForceCleanup() { 714 assert(PerformCleanup && "Already forced cleanup"); 715 CGF.DidCallStackSave = OldDidCallStackSave; 716 CGF.PopCleanupBlocks(CleanupStackDepth); 717 PerformCleanup = false; 718 } 719 }; 720 721 722 /// PopCleanupBlocks - Takes the old cleanup stack size and emits 723 /// the cleanup blocks that have been added. 724 void PopCleanupBlocks(EHScopeStack::stable_iterator OldCleanupStackSize); 725 726 void ResolveBranchFixups(llvm::BasicBlock *Target); 727 728 /// The given basic block lies in the current EH scope, but may be a 729 /// target of a potentially scope-crossing jump; get a stable handle 730 /// to which we can perform this jump later. 731 JumpDest getJumpDestInCurrentScope(llvm::BasicBlock *Target) { 732 return JumpDest(Target, 733 EHStack.getInnermostNormalCleanup(), 734 NextCleanupDestIndex++); 735 } 736 737 /// The given basic block lies in the current EH scope, but may be a 738 /// target of a potentially scope-crossing jump; get a stable handle 739 /// to which we can perform this jump later. 740 JumpDest getJumpDestInCurrentScope(const char *Name = 0) { 741 return getJumpDestInCurrentScope(createBasicBlock(Name)); 742 } 743 744 /// EmitBranchThroughCleanup - Emit a branch from the current insert 745 /// block through the normal cleanup handling code (if any) and then 746 /// on to \arg Dest. 747 void EmitBranchThroughCleanup(JumpDest Dest); 748 749 /// EmitBranchThroughEHCleanup - Emit a branch from the current 750 /// insert block through the EH cleanup handling code (if any) and 751 /// then on to \arg Dest. 752 void EmitBranchThroughEHCleanup(UnwindDest Dest); 753 754 /// getRethrowDest - Returns the unified outermost-scope rethrow 755 /// destination. 756 UnwindDest getRethrowDest(); 757 758 /// An object to manage conditionally-evaluated expressions. 759 class ConditionalEvaluation { 760 llvm::BasicBlock *StartBB; 761 762 public: 763 ConditionalEvaluation(CodeGenFunction &CGF) 764 : StartBB(CGF.Builder.GetInsertBlock()) {} 765 766 void begin(CodeGenFunction &CGF) { 767 assert(CGF.OutermostConditional != this); 768 if (!CGF.OutermostConditional) 769 CGF.OutermostConditional = this; 770 } 771 772 void end(CodeGenFunction &CGF) { 773 assert(CGF.OutermostConditional != 0); 774 if (CGF.OutermostConditional == this) 775 CGF.OutermostConditional = 0; 776 } 777 778 /// Returns a block which will be executed prior to each 779 /// evaluation of the conditional code. 780 llvm::BasicBlock *getStartingBlock() const { 781 return StartBB; 782 } 783 }; 784 785 /// isInConditionalBranch - Return true if we're currently emitting 786 /// one branch or the other of a conditional expression. 787 bool isInConditionalBranch() const { return OutermostConditional != 0; } 788 789 /// An RAII object to record that we're evaluating a statement 790 /// expression. 791 class StmtExprEvaluation { 792 CodeGenFunction &CGF; 793 794 /// We have to save the outermost conditional: cleanups in a 795 /// statement expression aren't conditional just because the 796 /// StmtExpr is. 797 ConditionalEvaluation *SavedOutermostConditional; 798 799 public: 800 StmtExprEvaluation(CodeGenFunction &CGF) 801 : CGF(CGF), SavedOutermostConditional(CGF.OutermostConditional) { 802 CGF.OutermostConditional = 0; 803 } 804 805 ~StmtExprEvaluation() { 806 CGF.OutermostConditional = SavedOutermostConditional; 807 CGF.EnsureInsertPoint(); 808 } 809 }; 810 811 /// getByrefValueFieldNumber - Given a declaration, returns the LLVM field 812 /// number that holds the value. 813 unsigned getByRefValueLLVMField(const ValueDecl *VD) const; 814 815 /// BuildBlockByrefAddress - Computes address location of the 816 /// variable which is declared as __block. 817 llvm::Value *BuildBlockByrefAddress(llvm::Value *BaseAddr, 818 const VarDecl *V); 819 private: 820 CGDebugInfo *DebugInfo; 821 822 /// IndirectBranch - The first time an indirect goto is seen we create a block 823 /// with an indirect branch. Every time we see the address of a label taken, 824 /// we add the label to the indirect goto. Every subsequent indirect goto is 825 /// codegen'd as a jump to the IndirectBranch's basic block. 826 llvm::IndirectBrInst *IndirectBranch; 827 828 /// LocalDeclMap - This keeps track of the LLVM allocas or globals for local C 829 /// decls. 830 llvm::DenseMap<const Decl*, llvm::Value*> LocalDeclMap; 831 832 /// LabelMap - This keeps track of the LLVM basic block for each C label. 833 llvm::DenseMap<const LabelStmt*, JumpDest> LabelMap; 834 835 // BreakContinueStack - This keeps track of where break and continue 836 // statements should jump to. 837 struct BreakContinue { 838 BreakContinue(JumpDest Break, JumpDest Continue) 839 : BreakBlock(Break), ContinueBlock(Continue) {} 840 841 JumpDest BreakBlock; 842 JumpDest ContinueBlock; 843 }; 844 llvm::SmallVector<BreakContinue, 8> BreakContinueStack; 845 846 /// SwitchInsn - This is nearest current switch instruction. It is null if if 847 /// current context is not in a switch. 848 llvm::SwitchInst *SwitchInsn; 849 850 /// CaseRangeBlock - This block holds if condition check for last case 851 /// statement range in current switch instruction. 852 llvm::BasicBlock *CaseRangeBlock; 853 854 // VLASizeMap - This keeps track of the associated size for each VLA type. 855 // We track this by the size expression rather than the type itself because 856 // in certain situations, like a const qualifier applied to an VLA typedef, 857 // multiple VLA types can share the same size expression. 858 // FIXME: Maybe this could be a stack of maps that is pushed/popped as we 859 // enter/leave scopes. 860 llvm::DenseMap<const Expr*, llvm::Value*> VLASizeMap; 861 862 /// DidCallStackSave - Whether llvm.stacksave has been called. Used to avoid 863 /// calling llvm.stacksave for multiple VLAs in the same scope. 864 bool DidCallStackSave; 865 866 /// A block containing a single 'unreachable' instruction. Created 867 /// lazily by getUnreachableBlock(). 868 llvm::BasicBlock *UnreachableBlock; 869 870 /// CXXThisDecl - When generating code for a C++ member function, 871 /// this will hold the implicit 'this' declaration. 872 ImplicitParamDecl *CXXThisDecl; 873 llvm::Value *CXXThisValue; 874 875 /// CXXVTTDecl - When generating code for a base object constructor or 876 /// base object destructor with virtual bases, this will hold the implicit 877 /// VTT parameter. 878 ImplicitParamDecl *CXXVTTDecl; 879 llvm::Value *CXXVTTValue; 880 881 /// OutermostConditional - Points to the outermost active 882 /// conditional control. This is used so that we know if a 883 /// temporary should be destroyed conditionally. 884 ConditionalEvaluation *OutermostConditional; 885 886 887 /// ByrefValueInfoMap - For each __block variable, contains a pair of the LLVM 888 /// type as well as the field number that contains the actual data. 889 llvm::DenseMap<const ValueDecl *, std::pair<const llvm::Type *, 890 unsigned> > ByRefValueInfo; 891 892 llvm::BasicBlock *TerminateLandingPad; 893 llvm::BasicBlock *TerminateHandler; 894 llvm::BasicBlock *TrapBB; 895 896 public: 897 CodeGenFunction(CodeGenModule &cgm); 898 899 CodeGenTypes &getTypes() const { return CGM.getTypes(); } 900 ASTContext &getContext() const; 901 CGDebugInfo *getDebugInfo() { return DebugInfo; } 902 903 /// Returns a pointer to the function's exception object slot, which 904 /// is assigned in every landing pad. 905 llvm::Value *getExceptionSlot(); 906 907 llvm::Value *getNormalCleanupDestSlot(); 908 llvm::Value *getEHCleanupDestSlot(); 909 910 llvm::BasicBlock *getUnreachableBlock() { 911 if (!UnreachableBlock) { 912 UnreachableBlock = createBasicBlock("unreachable"); 913 new llvm::UnreachableInst(getLLVMContext(), UnreachableBlock); 914 } 915 return UnreachableBlock; 916 } 917 918 llvm::BasicBlock *getInvokeDest() { 919 if (!EHStack.requiresLandingPad()) return 0; 920 return getInvokeDestImpl(); 921 } 922 923 llvm::LLVMContext &getLLVMContext() { return VMContext; } 924 925 //===--------------------------------------------------------------------===// 926 // Objective-C 927 //===--------------------------------------------------------------------===// 928 929 void GenerateObjCMethod(const ObjCMethodDecl *OMD); 930 931 void StartObjCMethod(const ObjCMethodDecl *MD, 932 const ObjCContainerDecl *CD); 933 934 /// GenerateObjCGetter - Synthesize an Objective-C property getter function. 935 void GenerateObjCGetter(ObjCImplementationDecl *IMP, 936 const ObjCPropertyImplDecl *PID); 937 void GenerateObjCCtorDtorMethod(ObjCImplementationDecl *IMP, 938 ObjCMethodDecl *MD, bool ctor); 939 940 /// GenerateObjCSetter - Synthesize an Objective-C property setter function 941 /// for the given property. 942 void GenerateObjCSetter(ObjCImplementationDecl *IMP, 943 const ObjCPropertyImplDecl *PID); 944 bool IndirectObjCSetterArg(const CGFunctionInfo &FI); 945 bool IvarTypeWithAggrGCObjects(QualType Ty); 946 947 //===--------------------------------------------------------------------===// 948 // Block Bits 949 //===--------------------------------------------------------------------===// 950 951 llvm::Value *BuildBlockLiteralTmp(const BlockExpr *); 952 llvm::Constant *BuildDescriptorBlockDecl(const BlockExpr *, 953 const CGBlockInfo &Info, 954 const llvm::StructType *, 955 llvm::Constant *BlockVarLayout, 956 std::vector<HelperInfo> *); 957 958 llvm::Function *GenerateBlockFunction(GlobalDecl GD, 959 const BlockExpr *BExpr, 960 CGBlockInfo &Info, 961 const Decl *OuterFuncDecl, 962 llvm::Constant *& BlockVarLayout, 963 llvm::DenseMap<const Decl*, llvm::Value*> ldm); 964 965 llvm::Value *LoadBlockStruct(); 966 967 void AllocateBlockCXXThisPointer(const CXXThisExpr *E); 968 void AllocateBlockDecl(const BlockDeclRefExpr *E); 969 llvm::Value *GetAddrOfBlockDecl(const BlockDeclRefExpr *E) { 970 return GetAddrOfBlockDecl(E->getDecl(), E->isByRef()); 971 } 972 llvm::Value *GetAddrOfBlockDecl(const ValueDecl *D, bool ByRef); 973 const llvm::Type *BuildByRefType(const ValueDecl *D); 974 975 void GenerateCode(GlobalDecl GD, llvm::Function *Fn); 976 void StartFunction(GlobalDecl GD, QualType RetTy, 977 llvm::Function *Fn, 978 const FunctionArgList &Args, 979 SourceLocation StartLoc); 980 981 void EmitConstructorBody(FunctionArgList &Args); 982 void EmitDestructorBody(FunctionArgList &Args); 983 void EmitFunctionBody(FunctionArgList &Args); 984 985 /// EmitReturnBlock - Emit the unified return block, trying to avoid its 986 /// emission when possible. 987 void EmitReturnBlock(); 988 989 /// FinishFunction - Complete IR generation of the current function. It is 990 /// legal to call this function even if there is no current insertion point. 991 void FinishFunction(SourceLocation EndLoc=SourceLocation()); 992 993 /// GenerateThunk - Generate a thunk for the given method. 994 void GenerateThunk(llvm::Function *Fn, GlobalDecl GD, const ThunkInfo &Thunk); 995 996 void EmitCtorPrologue(const CXXConstructorDecl *CD, CXXCtorType Type, 997 FunctionArgList &Args); 998 999 /// InitializeVTablePointer - Initialize the vtable pointer of the given 1000 /// subobject. 1001 /// 1002 void InitializeVTablePointer(BaseSubobject Base, 1003 const CXXRecordDecl *NearestVBase, 1004 uint64_t OffsetFromNearestVBase, 1005 llvm::Constant *VTable, 1006 const CXXRecordDecl *VTableClass); 1007 1008 typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedVirtualBasesSetTy; 1009 void InitializeVTablePointers(BaseSubobject Base, 1010 const CXXRecordDecl *NearestVBase, 1011 uint64_t OffsetFromNearestVBase, 1012 bool BaseIsNonVirtualPrimaryBase, 1013 llvm::Constant *VTable, 1014 const CXXRecordDecl *VTableClass, 1015 VisitedVirtualBasesSetTy& VBases); 1016 1017 void InitializeVTablePointers(const CXXRecordDecl *ClassDecl); 1018 1019 /// GetVTablePtr - Return the Value of the vtable pointer member pointed 1020 /// to by This. 1021 llvm::Value *GetVTablePtr(llvm::Value *This, const llvm::Type *Ty); 1022 1023 /// EnterDtorCleanups - Enter the cleanups necessary to complete the 1024 /// given phase of destruction for a destructor. The end result 1025 /// should call destructors on members and base classes in reverse 1026 /// order of their construction. 1027 void EnterDtorCleanups(const CXXDestructorDecl *Dtor, CXXDtorType Type); 1028 1029 /// ShouldInstrumentFunction - Return true if the current function should be 1030 /// instrumented with __cyg_profile_func_* calls 1031 bool ShouldInstrumentFunction(); 1032 1033 /// EmitFunctionInstrumentation - Emit LLVM code to call the specified 1034 /// instrumentation function with the current function and the call site, if 1035 /// function instrumentation is enabled. 1036 void EmitFunctionInstrumentation(const char *Fn); 1037 1038 /// EmitFunctionProlog - Emit the target specific LLVM code to load the 1039 /// arguments for the given function. This is also responsible for naming the 1040 /// LLVM function arguments. 1041 void EmitFunctionProlog(const CGFunctionInfo &FI, 1042 llvm::Function *Fn, 1043 const FunctionArgList &Args); 1044 1045 /// EmitFunctionEpilog - Emit the target specific LLVM code to return the 1046 /// given temporary. 1047 void EmitFunctionEpilog(const CGFunctionInfo &FI); 1048 1049 /// EmitStartEHSpec - Emit the start of the exception spec. 1050 void EmitStartEHSpec(const Decl *D); 1051 1052 /// EmitEndEHSpec - Emit the end of the exception spec. 1053 void EmitEndEHSpec(const Decl *D); 1054 1055 /// getTerminateLandingPad - Return a landing pad that just calls terminate. 1056 llvm::BasicBlock *getTerminateLandingPad(); 1057 1058 /// getTerminateHandler - Return a handler (not a landing pad, just 1059 /// a catch handler) that just calls terminate. This is used when 1060 /// a terminate scope encloses a try. 1061 llvm::BasicBlock *getTerminateHandler(); 1062 1063 const llvm::Type *ConvertTypeForMem(QualType T); 1064 const llvm::Type *ConvertType(QualType T); 1065 const llvm::Type *ConvertType(const TypeDecl *T) { 1066 return ConvertType(getContext().getTypeDeclType(T)); 1067 } 1068 1069 /// LoadObjCSelf - Load the value of self. This function is only valid while 1070 /// generating code for an Objective-C method. 1071 llvm::Value *LoadObjCSelf(); 1072 1073 /// TypeOfSelfObject - Return type of object that this self represents. 1074 QualType TypeOfSelfObject(); 1075 1076 /// hasAggregateLLVMType - Return true if the specified AST type will map into 1077 /// an aggregate LLVM type or is void. 1078 static bool hasAggregateLLVMType(QualType T); 1079 1080 /// createBasicBlock - Create an LLVM basic block. 1081 llvm::BasicBlock *createBasicBlock(const char *Name="", 1082 llvm::Function *Parent=0, 1083 llvm::BasicBlock *InsertBefore=0) { 1084 #ifdef NDEBUG 1085 return llvm::BasicBlock::Create(VMContext, "", Parent, InsertBefore); 1086 #else 1087 return llvm::BasicBlock::Create(VMContext, Name, Parent, InsertBefore); 1088 #endif 1089 } 1090 1091 /// getBasicBlockForLabel - Return the LLVM basicblock that the specified 1092 /// label maps to. 1093 JumpDest getJumpDestForLabel(const LabelStmt *S); 1094 1095 /// SimplifyForwardingBlocks - If the given basic block is only a branch to 1096 /// another basic block, simplify it. This assumes that no other code could 1097 /// potentially reference the basic block. 1098 void SimplifyForwardingBlocks(llvm::BasicBlock *BB); 1099 1100 /// EmitBlock - Emit the given block \arg BB and set it as the insert point, 1101 /// adding a fall-through branch from the current insert block if 1102 /// necessary. It is legal to call this function even if there is no current 1103 /// insertion point. 1104 /// 1105 /// IsFinished - If true, indicates that the caller has finished emitting 1106 /// branches to the given block and does not expect to emit code into it. This 1107 /// means the block can be ignored if it is unreachable. 1108 void EmitBlock(llvm::BasicBlock *BB, bool IsFinished=false); 1109 1110 /// EmitBranch - Emit a branch to the specified basic block from the current 1111 /// insert block, taking care to avoid creation of branches from dummy 1112 /// blocks. It is legal to call this function even if there is no current 1113 /// insertion point. 1114 /// 1115 /// This function clears the current insertion point. The caller should follow 1116 /// calls to this function with calls to Emit*Block prior to generation new 1117 /// code. 1118 void EmitBranch(llvm::BasicBlock *Block); 1119 1120 /// HaveInsertPoint - True if an insertion point is defined. If not, this 1121 /// indicates that the current code being emitted is unreachable. 1122 bool HaveInsertPoint() const { 1123 return Builder.GetInsertBlock() != 0; 1124 } 1125 1126 /// EnsureInsertPoint - Ensure that an insertion point is defined so that 1127 /// emitted IR has a place to go. Note that by definition, if this function 1128 /// creates a block then that block is unreachable; callers may do better to 1129 /// detect when no insertion point is defined and simply skip IR generation. 1130 void EnsureInsertPoint() { 1131 if (!HaveInsertPoint()) 1132 EmitBlock(createBasicBlock()); 1133 } 1134 1135 /// ErrorUnsupported - Print out an error that codegen doesn't support the 1136 /// specified stmt yet. 1137 void ErrorUnsupported(const Stmt *S, const char *Type, 1138 bool OmitOnError=false); 1139 1140 //===--------------------------------------------------------------------===// 1141 // Helpers 1142 //===--------------------------------------------------------------------===// 1143 1144 LValue MakeAddrLValue(llvm::Value *V, QualType T, unsigned Alignment = 0) { 1145 return LValue::MakeAddr(V, T, Alignment, getContext(), 1146 CGM.getTBAAInfo(T)); 1147 } 1148 1149 /// CreateTempAlloca - This creates a alloca and inserts it into the entry 1150 /// block. The caller is responsible for setting an appropriate alignment on 1151 /// the alloca. 1152 llvm::AllocaInst *CreateTempAlloca(const llvm::Type *Ty, 1153 const llvm::Twine &Name = "tmp"); 1154 1155 /// InitTempAlloca - Provide an initial value for the given alloca. 1156 void InitTempAlloca(llvm::AllocaInst *Alloca, llvm::Value *Value); 1157 1158 /// CreateIRTemp - Create a temporary IR object of the given type, with 1159 /// appropriate alignment. This routine should only be used when an temporary 1160 /// value needs to be stored into an alloca (for example, to avoid explicit 1161 /// PHI construction), but the type is the IR type, not the type appropriate 1162 /// for storing in memory. 1163 llvm::AllocaInst *CreateIRTemp(QualType T, const llvm::Twine &Name = "tmp"); 1164 1165 /// CreateMemTemp - Create a temporary memory object of the given type, with 1166 /// appropriate alignment. 1167 llvm::AllocaInst *CreateMemTemp(QualType T, const llvm::Twine &Name = "tmp"); 1168 1169 /// CreateAggTemp - Create a temporary memory object for the given 1170 /// aggregate type. 1171 AggValueSlot CreateAggTemp(QualType T, const llvm::Twine &Name = "tmp") { 1172 return AggValueSlot::forAddr(CreateMemTemp(T, Name), false, false); 1173 } 1174 1175 /// EvaluateExprAsBool - Perform the usual unary conversions on the specified 1176 /// expression and compare the result against zero, returning an Int1Ty value. 1177 llvm::Value *EvaluateExprAsBool(const Expr *E); 1178 1179 /// EmitIgnoredExpr - Emit an expression in a context which ignores the result. 1180 void EmitIgnoredExpr(const Expr *E); 1181 1182 /// EmitAnyExpr - Emit code to compute the specified expression which can have 1183 /// any type. The result is returned as an RValue struct. If this is an 1184 /// aggregate expression, the aggloc/agglocvolatile arguments indicate where 1185 /// the result should be returned. 1186 /// 1187 /// \param IgnoreResult - True if the resulting value isn't used. 1188 RValue EmitAnyExpr(const Expr *E, 1189 AggValueSlot AggSlot = AggValueSlot::ignored(), 1190 bool IgnoreResult = false); 1191 1192 // EmitVAListRef - Emit a "reference" to a va_list; this is either the address 1193 // or the value of the expression, depending on how va_list is defined. 1194 llvm::Value *EmitVAListRef(const Expr *E); 1195 1196 /// EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will 1197 /// always be accessible even if no aggregate location is provided. 1198 RValue EmitAnyExprToTemp(const Expr *E); 1199 1200 /// EmitsAnyExprToMem - Emits the code necessary to evaluate an 1201 /// arbitrary expression into the given memory location. 1202 void EmitAnyExprToMem(const Expr *E, llvm::Value *Location, 1203 bool IsLocationVolatile, 1204 bool IsInitializer); 1205 1206 /// EmitAggregateCopy - Emit an aggrate copy. 1207 /// 1208 /// \param isVolatile - True iff either the source or the destination is 1209 /// volatile. 1210 void EmitAggregateCopy(llvm::Value *DestPtr, llvm::Value *SrcPtr, 1211 QualType EltTy, bool isVolatile=false); 1212 1213 /// StartBlock - Start new block named N. If insert block is a dummy block 1214 /// then reuse it. 1215 void StartBlock(const char *N); 1216 1217 /// GetAddrOfStaticLocalVar - Return the address of a static local variable. 1218 llvm::Constant *GetAddrOfStaticLocalVar(const VarDecl *BVD) { 1219 return cast<llvm::Constant>(GetAddrOfLocalVar(BVD)); 1220 } 1221 1222 /// GetAddrOfLocalVar - Return the address of a local variable. 1223 llvm::Value *GetAddrOfLocalVar(const VarDecl *VD) { 1224 llvm::Value *Res = LocalDeclMap[VD]; 1225 assert(Res && "Invalid argument to GetAddrOfLocalVar(), no decl!"); 1226 return Res; 1227 } 1228 1229 /// getAccessedFieldNo - Given an encoded value and a result number, return 1230 /// the input field number being accessed. 1231 static unsigned getAccessedFieldNo(unsigned Idx, const llvm::Constant *Elts); 1232 1233 llvm::BlockAddress *GetAddrOfLabel(const LabelStmt *L); 1234 llvm::BasicBlock *GetIndirectGotoBlock(); 1235 1236 /// EmitNullInitialization - Generate code to set a value of the given type to 1237 /// null, If the type contains data member pointers, they will be initialized 1238 /// to -1 in accordance with the Itanium C++ ABI. 1239 void EmitNullInitialization(llvm::Value *DestPtr, QualType Ty); 1240 1241 // EmitVAArg - Generate code to get an argument from the passed in pointer 1242 // and update it accordingly. The return value is a pointer to the argument. 1243 // FIXME: We should be able to get rid of this method and use the va_arg 1244 // instruction in LLVM instead once it works well enough. 1245 llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty); 1246 1247 /// EmitVLASize - Generate code for any VLA size expressions that might occur 1248 /// in a variably modified type. If Ty is a VLA, will return the value that 1249 /// corresponds to the size in bytes of the VLA type. Will return 0 otherwise. 1250 /// 1251 /// This function can be called with a null (unreachable) insert point. 1252 llvm::Value *EmitVLASize(QualType Ty); 1253 1254 // GetVLASize - Returns an LLVM value that corresponds to the size in bytes 1255 // of a variable length array type. 1256 llvm::Value *GetVLASize(const VariableArrayType *); 1257 1258 /// LoadCXXThis - Load the value of 'this'. This function is only valid while 1259 /// generating code for an C++ member function. 1260 llvm::Value *LoadCXXThis() { 1261 assert(CXXThisValue && "no 'this' value for this function"); 1262 return CXXThisValue; 1263 } 1264 1265 /// LoadCXXVTT - Load the VTT parameter to base constructors/destructors have 1266 /// virtual bases. 1267 llvm::Value *LoadCXXVTT() { 1268 assert(CXXVTTValue && "no VTT value for this function"); 1269 return CXXVTTValue; 1270 } 1271 1272 /// GetAddressOfBaseOfCompleteClass - Convert the given pointer to a 1273 /// complete class to the given direct base. 1274 llvm::Value * 1275 GetAddressOfDirectBaseInCompleteClass(llvm::Value *Value, 1276 const CXXRecordDecl *Derived, 1277 const CXXRecordDecl *Base, 1278 bool BaseIsVirtual); 1279 1280 /// GetAddressOfBaseClass - This function will add the necessary delta to the 1281 /// load of 'this' and returns address of the base class. 1282 llvm::Value *GetAddressOfBaseClass(llvm::Value *Value, 1283 const CXXRecordDecl *Derived, 1284 CastExpr::path_const_iterator PathBegin, 1285 CastExpr::path_const_iterator PathEnd, 1286 bool NullCheckValue); 1287 1288 llvm::Value *GetAddressOfDerivedClass(llvm::Value *Value, 1289 const CXXRecordDecl *Derived, 1290 CastExpr::path_const_iterator PathBegin, 1291 CastExpr::path_const_iterator PathEnd, 1292 bool NullCheckValue); 1293 1294 llvm::Value *GetVirtualBaseClassOffset(llvm::Value *This, 1295 const CXXRecordDecl *ClassDecl, 1296 const CXXRecordDecl *BaseClassDecl); 1297 1298 void EmitDelegateCXXConstructorCall(const CXXConstructorDecl *Ctor, 1299 CXXCtorType CtorType, 1300 const FunctionArgList &Args); 1301 void EmitCXXConstructorCall(const CXXConstructorDecl *D, CXXCtorType Type, 1302 bool ForVirtualBase, llvm::Value *This, 1303 CallExpr::const_arg_iterator ArgBeg, 1304 CallExpr::const_arg_iterator ArgEnd); 1305 1306 void EmitSynthesizedCXXCopyCtorCall(const CXXConstructorDecl *D, 1307 llvm::Value *This, llvm::Value *Src, 1308 CallExpr::const_arg_iterator ArgBeg, 1309 CallExpr::const_arg_iterator ArgEnd); 1310 1311 void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 1312 const ConstantArrayType *ArrayTy, 1313 llvm::Value *ArrayPtr, 1314 CallExpr::const_arg_iterator ArgBeg, 1315 CallExpr::const_arg_iterator ArgEnd, 1316 bool ZeroInitialization = false); 1317 1318 void EmitCXXAggrConstructorCall(const CXXConstructorDecl *D, 1319 llvm::Value *NumElements, 1320 llvm::Value *ArrayPtr, 1321 CallExpr::const_arg_iterator ArgBeg, 1322 CallExpr::const_arg_iterator ArgEnd, 1323 bool ZeroInitialization = false); 1324 1325 void EmitCXXAggrDestructorCall(const CXXDestructorDecl *D, 1326 const ArrayType *Array, 1327 llvm::Value *This); 1328 1329 void EmitCXXAggrDestructorCall(const CXXDestructorDecl *D, 1330 llvm::Value *NumElements, 1331 llvm::Value *This); 1332 1333 llvm::Function *GenerateCXXAggrDestructorHelper(const CXXDestructorDecl *D, 1334 const ArrayType *Array, 1335 llvm::Value *This); 1336 1337 void EmitCXXDestructorCall(const CXXDestructorDecl *D, CXXDtorType Type, 1338 bool ForVirtualBase, llvm::Value *This); 1339 1340 void EmitNewArrayInitializer(const CXXNewExpr *E, llvm::Value *NewPtr, 1341 llvm::Value *NumElements); 1342 1343 void EmitCXXTemporary(const CXXTemporary *Temporary, llvm::Value *Ptr); 1344 1345 llvm::Value *EmitCXXNewExpr(const CXXNewExpr *E); 1346 void EmitCXXDeleteExpr(const CXXDeleteExpr *E); 1347 1348 void EmitDeleteCall(const FunctionDecl *DeleteFD, llvm::Value *Ptr, 1349 QualType DeleteTy); 1350 1351 llvm::Value* EmitCXXTypeidExpr(const CXXTypeidExpr *E); 1352 llvm::Value *EmitDynamicCast(llvm::Value *V, const CXXDynamicCastExpr *DCE); 1353 1354 void EmitCheck(llvm::Value *, unsigned Size); 1355 1356 llvm::Value *EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV, 1357 bool isInc, bool isPre); 1358 ComplexPairTy EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV, 1359 bool isInc, bool isPre); 1360 //===--------------------------------------------------------------------===// 1361 // Declaration Emission 1362 //===--------------------------------------------------------------------===// 1363 1364 /// EmitDecl - Emit a declaration. 1365 /// 1366 /// This function can be called with a null (unreachable) insert point. 1367 void EmitDecl(const Decl &D); 1368 1369 /// EmitVarDecl - Emit a local variable declaration. 1370 /// 1371 /// This function can be called with a null (unreachable) insert point. 1372 void EmitVarDecl(const VarDecl &D); 1373 1374 typedef void SpecialInitFn(CodeGenFunction &Init, const VarDecl &D, 1375 llvm::Value *Address); 1376 1377 /// EmitAutoVarDecl - Emit an auto variable declaration. 1378 /// 1379 /// This function can be called with a null (unreachable) insert point. 1380 void EmitAutoVarDecl(const VarDecl &D, SpecialInitFn *SpecialInit = 0); 1381 1382 void EmitStaticVarDecl(const VarDecl &D, 1383 llvm::GlobalValue::LinkageTypes Linkage); 1384 1385 /// EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl. 1386 void EmitParmDecl(const VarDecl &D, llvm::Value *Arg); 1387 1388 //===--------------------------------------------------------------------===// 1389 // Statement Emission 1390 //===--------------------------------------------------------------------===// 1391 1392 /// EmitStopPoint - Emit a debug stoppoint if we are emitting debug info. 1393 void EmitStopPoint(const Stmt *S); 1394 1395 /// EmitStmt - Emit the code for the statement \arg S. It is legal to call 1396 /// this function even if there is no current insertion point. 1397 /// 1398 /// This function may clear the current insertion point; callers should use 1399 /// EnsureInsertPoint if they wish to subsequently generate code without first 1400 /// calling EmitBlock, EmitBranch, or EmitStmt. 1401 void EmitStmt(const Stmt *S); 1402 1403 /// EmitSimpleStmt - Try to emit a "simple" statement which does not 1404 /// necessarily require an insertion point or debug information; typically 1405 /// because the statement amounts to a jump or a container of other 1406 /// statements. 1407 /// 1408 /// \return True if the statement was handled. 1409 bool EmitSimpleStmt(const Stmt *S); 1410 1411 RValue EmitCompoundStmt(const CompoundStmt &S, bool GetLast = false, 1412 AggValueSlot AVS = AggValueSlot::ignored()); 1413 1414 /// EmitLabel - Emit the block for the given label. It is legal to call this 1415 /// function even if there is no current insertion point. 1416 void EmitLabel(const LabelStmt &S); // helper for EmitLabelStmt. 1417 1418 void EmitLabelStmt(const LabelStmt &S); 1419 void EmitGotoStmt(const GotoStmt &S); 1420 void EmitIndirectGotoStmt(const IndirectGotoStmt &S); 1421 void EmitIfStmt(const IfStmt &S); 1422 void EmitWhileStmt(const WhileStmt &S); 1423 void EmitDoStmt(const DoStmt &S); 1424 void EmitForStmt(const ForStmt &S); 1425 void EmitReturnStmt(const ReturnStmt &S); 1426 void EmitDeclStmt(const DeclStmt &S); 1427 void EmitBreakStmt(const BreakStmt &S); 1428 void EmitContinueStmt(const ContinueStmt &S); 1429 void EmitSwitchStmt(const SwitchStmt &S); 1430 void EmitDefaultStmt(const DefaultStmt &S); 1431 void EmitCaseStmt(const CaseStmt &S); 1432 void EmitCaseStmtRange(const CaseStmt &S); 1433 void EmitAsmStmt(const AsmStmt &S); 1434 1435 void EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S); 1436 void EmitObjCAtTryStmt(const ObjCAtTryStmt &S); 1437 void EmitObjCAtThrowStmt(const ObjCAtThrowStmt &S); 1438 void EmitObjCAtSynchronizedStmt(const ObjCAtSynchronizedStmt &S); 1439 1440 llvm::Constant *getUnwindResumeOrRethrowFn(); 1441 void EnterCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false); 1442 void ExitCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock = false); 1443 1444 void EmitCXXTryStmt(const CXXTryStmt &S); 1445 1446 //===--------------------------------------------------------------------===// 1447 // LValue Expression Emission 1448 //===--------------------------------------------------------------------===// 1449 1450 /// GetUndefRValue - Get an appropriate 'undef' rvalue for the given type. 1451 RValue GetUndefRValue(QualType Ty); 1452 1453 /// EmitUnsupportedRValue - Emit a dummy r-value using the type of E 1454 /// and issue an ErrorUnsupported style diagnostic (using the 1455 /// provided Name). 1456 RValue EmitUnsupportedRValue(const Expr *E, 1457 const char *Name); 1458 1459 /// EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue 1460 /// an ErrorUnsupported style diagnostic (using the provided Name). 1461 LValue EmitUnsupportedLValue(const Expr *E, 1462 const char *Name); 1463 1464 /// EmitLValue - Emit code to compute a designator that specifies the location 1465 /// of the expression. 1466 /// 1467 /// This can return one of two things: a simple address or a bitfield 1468 /// reference. In either case, the LLVM Value* in the LValue structure is 1469 /// guaranteed to be an LLVM pointer type. 1470 /// 1471 /// If this returns a bitfield reference, nothing about the pointee type of 1472 /// the LLVM value is known: For example, it may not be a pointer to an 1473 /// integer. 1474 /// 1475 /// If this returns a normal address, and if the lvalue's C type is fixed 1476 /// size, this method guarantees that the returned pointer type will point to 1477 /// an LLVM type of the same size of the lvalue's type. If the lvalue has a 1478 /// variable length type, this is not possible. 1479 /// 1480 LValue EmitLValue(const Expr *E); 1481 1482 /// EmitCheckedLValue - Same as EmitLValue but additionally we generate 1483 /// checking code to guard against undefined behavior. This is only 1484 /// suitable when we know that the address will be used to access the 1485 /// object. 1486 LValue EmitCheckedLValue(const Expr *E); 1487 1488 /// EmitToMemory - Change a scalar value from its value 1489 /// representation to its in-memory representation. 1490 llvm::Value *EmitToMemory(llvm::Value *Value, QualType Ty); 1491 1492 /// EmitFromMemory - Change a scalar value from its memory 1493 /// representation to its value representation. 1494 llvm::Value *EmitFromMemory(llvm::Value *Value, QualType Ty); 1495 1496 /// EmitLoadOfScalar - Load a scalar value from an address, taking 1497 /// care to appropriately convert from the memory representation to 1498 /// the LLVM value representation. 1499 llvm::Value *EmitLoadOfScalar(llvm::Value *Addr, bool Volatile, 1500 unsigned Alignment, QualType Ty, 1501 llvm::MDNode *TBAAInfo = 0); 1502 1503 /// EmitStoreOfScalar - Store a scalar value to an address, taking 1504 /// care to appropriately convert from the memory representation to 1505 /// the LLVM value representation. 1506 void EmitStoreOfScalar(llvm::Value *Value, llvm::Value *Addr, 1507 bool Volatile, unsigned Alignment, QualType Ty, 1508 llvm::MDNode *TBAAInfo = 0); 1509 1510 /// EmitLoadOfLValue - Given an expression that represents a value lvalue, 1511 /// this method emits the address of the lvalue, then loads the result as an 1512 /// rvalue, returning the rvalue. 1513 RValue EmitLoadOfLValue(LValue V, QualType LVType); 1514 RValue EmitLoadOfExtVectorElementLValue(LValue V, QualType LVType); 1515 RValue EmitLoadOfBitfieldLValue(LValue LV, QualType ExprType); 1516 RValue EmitLoadOfPropertyRefLValue(LValue LV, 1517 ReturnValueSlot Return = ReturnValueSlot()); 1518 1519 /// EmitStoreThroughLValue - Store the specified rvalue into the specified 1520 /// lvalue, where both are guaranteed to the have the same type, and that type 1521 /// is 'Ty'. 1522 void EmitStoreThroughLValue(RValue Src, LValue Dst, QualType Ty); 1523 void EmitStoreThroughExtVectorComponentLValue(RValue Src, LValue Dst, 1524 QualType Ty); 1525 void EmitStoreThroughPropertyRefLValue(RValue Src, LValue Dst); 1526 1527 /// EmitStoreThroughLValue - Store Src into Dst with same constraints as 1528 /// EmitStoreThroughLValue. 1529 /// 1530 /// \param Result [out] - If non-null, this will be set to a Value* for the 1531 /// bit-field contents after the store, appropriate for use as the result of 1532 /// an assignment to the bit-field. 1533 void EmitStoreThroughBitfieldLValue(RValue Src, LValue Dst, QualType Ty, 1534 llvm::Value **Result=0); 1535 1536 /// Emit an l-value for an assignment (simple or compound) of complex type. 1537 LValue EmitComplexAssignmentLValue(const BinaryOperator *E); 1538 LValue EmitComplexCompoundAssignmentLValue(const CompoundAssignOperator *E); 1539 1540 // Note: only availabe for agg return types 1541 LValue EmitBinaryOperatorLValue(const BinaryOperator *E); 1542 LValue EmitCompoundAssignmentLValue(const CompoundAssignOperator *E); 1543 // Note: only available for agg return types 1544 LValue EmitCallExprLValue(const CallExpr *E); 1545 // Note: only available for agg return types 1546 LValue EmitVAArgExprLValue(const VAArgExpr *E); 1547 LValue EmitDeclRefLValue(const DeclRefExpr *E); 1548 LValue EmitStringLiteralLValue(const StringLiteral *E); 1549 LValue EmitObjCEncodeExprLValue(const ObjCEncodeExpr *E); 1550 LValue EmitPredefinedLValue(const PredefinedExpr *E); 1551 LValue EmitUnaryOpLValue(const UnaryOperator *E); 1552 LValue EmitArraySubscriptExpr(const ArraySubscriptExpr *E); 1553 LValue EmitExtVectorElementExpr(const ExtVectorElementExpr *E); 1554 LValue EmitMemberExpr(const MemberExpr *E); 1555 LValue EmitObjCIsaExpr(const ObjCIsaExpr *E); 1556 LValue EmitCompoundLiteralLValue(const CompoundLiteralExpr *E); 1557 LValue EmitConditionalOperatorLValue(const ConditionalOperator *E); 1558 LValue EmitCastLValue(const CastExpr *E); 1559 LValue EmitNullInitializationLValue(const CXXScalarValueInitExpr *E); 1560 1561 llvm::Value *EmitIvarOffset(const ObjCInterfaceDecl *Interface, 1562 const ObjCIvarDecl *Ivar); 1563 LValue EmitLValueForAnonRecordField(llvm::Value* Base, 1564 const IndirectFieldDecl* Field, 1565 unsigned CVRQualifiers); 1566 LValue EmitLValueForField(llvm::Value* Base, const FieldDecl* Field, 1567 unsigned CVRQualifiers); 1568 1569 /// EmitLValueForFieldInitialization - Like EmitLValueForField, except that 1570 /// if the Field is a reference, this will return the address of the reference 1571 /// and not the address of the value stored in the reference. 1572 LValue EmitLValueForFieldInitialization(llvm::Value* Base, 1573 const FieldDecl* Field, 1574 unsigned CVRQualifiers); 1575 1576 LValue EmitLValueForIvar(QualType ObjectTy, 1577 llvm::Value* Base, const ObjCIvarDecl *Ivar, 1578 unsigned CVRQualifiers); 1579 1580 LValue EmitLValueForBitfield(llvm::Value* Base, const FieldDecl* Field, 1581 unsigned CVRQualifiers); 1582 1583 LValue EmitBlockDeclRefLValue(const BlockDeclRefExpr *E); 1584 1585 LValue EmitCXXConstructLValue(const CXXConstructExpr *E); 1586 LValue EmitCXXBindTemporaryLValue(const CXXBindTemporaryExpr *E); 1587 LValue EmitExprWithCleanupsLValue(const ExprWithCleanups *E); 1588 LValue EmitCXXTypeidLValue(const CXXTypeidExpr *E); 1589 1590 LValue EmitObjCMessageExprLValue(const ObjCMessageExpr *E); 1591 LValue EmitObjCIvarRefLValue(const ObjCIvarRefExpr *E); 1592 LValue EmitObjCPropertyRefLValue(const ObjCPropertyRefExpr *E); 1593 LValue EmitStmtExprLValue(const StmtExpr *E); 1594 LValue EmitPointerToDataMemberBinaryExpr(const BinaryOperator *E); 1595 LValue EmitObjCSelectorLValue(const ObjCSelectorExpr *E); 1596 void EmitDeclRefExprDbgValue(const DeclRefExpr *E, llvm::Constant *Init); 1597 //===--------------------------------------------------------------------===// 1598 // Scalar Expression Emission 1599 //===--------------------------------------------------------------------===// 1600 1601 /// EmitCall - Generate a call of the given function, expecting the given 1602 /// result type, and using the given argument list which specifies both the 1603 /// LLVM arguments and the types they were derived from. 1604 /// 1605 /// \param TargetDecl - If given, the decl of the function in a direct call; 1606 /// used to set attributes on the call (noreturn, etc.). 1607 RValue EmitCall(const CGFunctionInfo &FnInfo, 1608 llvm::Value *Callee, 1609 ReturnValueSlot ReturnValue, 1610 const CallArgList &Args, 1611 const Decl *TargetDecl = 0, 1612 llvm::Instruction **callOrInvoke = 0); 1613 1614 RValue EmitCall(QualType FnType, llvm::Value *Callee, 1615 ReturnValueSlot ReturnValue, 1616 CallExpr::const_arg_iterator ArgBeg, 1617 CallExpr::const_arg_iterator ArgEnd, 1618 const Decl *TargetDecl = 0); 1619 RValue EmitCallExpr(const CallExpr *E, 1620 ReturnValueSlot ReturnValue = ReturnValueSlot()); 1621 1622 llvm::CallSite EmitCallOrInvoke(llvm::Value *Callee, 1623 llvm::Value * const *ArgBegin, 1624 llvm::Value * const *ArgEnd, 1625 const llvm::Twine &Name = ""); 1626 1627 llvm::Value *BuildVirtualCall(const CXXMethodDecl *MD, llvm::Value *This, 1628 const llvm::Type *Ty); 1629 llvm::Value *BuildVirtualCall(const CXXDestructorDecl *DD, CXXDtorType Type, 1630 llvm::Value *This, const llvm::Type *Ty); 1631 llvm::Value *BuildAppleKextVirtualCall(const CXXMethodDecl *MD, 1632 NestedNameSpecifier *Qual, 1633 llvm::Value *This, 1634 const llvm::Type *Ty); 1635 1636 RValue EmitCXXMemberCall(const CXXMethodDecl *MD, 1637 llvm::Value *Callee, 1638 ReturnValueSlot ReturnValue, 1639 llvm::Value *This, 1640 llvm::Value *VTT, 1641 CallExpr::const_arg_iterator ArgBeg, 1642 CallExpr::const_arg_iterator ArgEnd); 1643 RValue EmitCXXMemberCallExpr(const CXXMemberCallExpr *E, 1644 ReturnValueSlot ReturnValue); 1645 RValue EmitCXXMemberPointerCallExpr(const CXXMemberCallExpr *E, 1646 ReturnValueSlot ReturnValue); 1647 1648 RValue EmitCXXOperatorMemberCallExpr(const CXXOperatorCallExpr *E, 1649 const CXXMethodDecl *MD, 1650 ReturnValueSlot ReturnValue); 1651 1652 1653 RValue EmitBuiltinExpr(const FunctionDecl *FD, 1654 unsigned BuiltinID, const CallExpr *E); 1655 1656 RValue EmitBlockCallExpr(const CallExpr *E, ReturnValueSlot ReturnValue); 1657 1658 /// EmitTargetBuiltinExpr - Emit the given builtin call. Returns 0 if the call 1659 /// is unhandled by the current target. 1660 llvm::Value *EmitTargetBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 1661 1662 llvm::Value *EmitARMBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 1663 llvm::Value *EmitNeonCall(llvm::Function *F, 1664 llvm::SmallVectorImpl<llvm::Value*> &O, 1665 const char *name, 1666 unsigned shift = 0, bool rightshift = false); 1667 llvm::Value *EmitNeonSplat(llvm::Value *V, llvm::Constant *Idx); 1668 llvm::Value *EmitNeonShiftVector(llvm::Value *V, const llvm::Type *Ty, 1669 bool negateForRightShift); 1670 1671 llvm::Value *BuildVector(const llvm::SmallVectorImpl<llvm::Value*> &Ops); 1672 llvm::Value *EmitX86BuiltinExpr(unsigned BuiltinID, const CallExpr *E); 1673 llvm::Value *EmitPPCBuiltinExpr(unsigned BuiltinID, const CallExpr *E); 1674 1675 llvm::Value *EmitObjCProtocolExpr(const ObjCProtocolExpr *E); 1676 llvm::Value *EmitObjCStringLiteral(const ObjCStringLiteral *E); 1677 llvm::Value *EmitObjCSelectorExpr(const ObjCSelectorExpr *E); 1678 RValue EmitObjCMessageExpr(const ObjCMessageExpr *E, 1679 ReturnValueSlot Return = ReturnValueSlot()); 1680 1681 /// EmitReferenceBindingToExpr - Emits a reference binding to the passed in 1682 /// expression. Will emit a temporary variable if E is not an LValue. 1683 RValue EmitReferenceBindingToExpr(const Expr* E, 1684 const NamedDecl *InitializedDecl); 1685 1686 //===--------------------------------------------------------------------===// 1687 // Expression Emission 1688 //===--------------------------------------------------------------------===// 1689 1690 // Expressions are broken into three classes: scalar, complex, aggregate. 1691 1692 /// EmitScalarExpr - Emit the computation of the specified expression of LLVM 1693 /// scalar type, returning the result. 1694 llvm::Value *EmitScalarExpr(const Expr *E , bool IgnoreResultAssign = false); 1695 1696 /// EmitScalarConversion - Emit a conversion from the specified type to the 1697 /// specified destination type, both of which are LLVM scalar types. 1698 llvm::Value *EmitScalarConversion(llvm::Value *Src, QualType SrcTy, 1699 QualType DstTy); 1700 1701 /// EmitComplexToScalarConversion - Emit a conversion from the specified 1702 /// complex type to the specified destination type, where the destination type 1703 /// is an LLVM scalar type. 1704 llvm::Value *EmitComplexToScalarConversion(ComplexPairTy Src, QualType SrcTy, 1705 QualType DstTy); 1706 1707 1708 /// EmitAggExpr - Emit the computation of the specified expression 1709 /// of aggregate type. The result is computed into the given slot, 1710 /// which may be null to indicate that the value is not needed. 1711 void EmitAggExpr(const Expr *E, AggValueSlot AS, bool IgnoreResult = false); 1712 1713 /// EmitAggExprToLValue - Emit the computation of the specified expression of 1714 /// aggregate type into a temporary LValue. 1715 LValue EmitAggExprToLValue(const Expr *E); 1716 1717 /// EmitGCMemmoveCollectable - Emit special API for structs with object 1718 /// pointers. 1719 void EmitGCMemmoveCollectable(llvm::Value *DestPtr, llvm::Value *SrcPtr, 1720 QualType Ty); 1721 1722 /// EmitComplexExpr - Emit the computation of the specified expression of 1723 /// complex type, returning the result. 1724 ComplexPairTy EmitComplexExpr(const Expr *E, 1725 bool IgnoreReal = false, 1726 bool IgnoreImag = false); 1727 1728 /// EmitComplexExprIntoAddr - Emit the computation of the specified expression 1729 /// of complex type, storing into the specified Value*. 1730 void EmitComplexExprIntoAddr(const Expr *E, llvm::Value *DestAddr, 1731 bool DestIsVolatile); 1732 1733 /// StoreComplexToAddr - Store a complex number into the specified address. 1734 void StoreComplexToAddr(ComplexPairTy V, llvm::Value *DestAddr, 1735 bool DestIsVolatile); 1736 /// LoadComplexFromAddr - Load a complex number from the specified address. 1737 ComplexPairTy LoadComplexFromAddr(llvm::Value *SrcAddr, bool SrcIsVolatile); 1738 1739 /// CreateStaticVarDecl - Create a zero-initialized LLVM global for 1740 /// a static local variable. 1741 llvm::GlobalVariable *CreateStaticVarDecl(const VarDecl &D, 1742 const char *Separator, 1743 llvm::GlobalValue::LinkageTypes Linkage); 1744 1745 /// AddInitializerToStaticVarDecl - Add the initializer for 'D' to the 1746 /// global variable that has already been created for it. If the initializer 1747 /// has a different type than GV does, this may free GV and return a different 1748 /// one. Otherwise it just returns GV. 1749 llvm::GlobalVariable * 1750 AddInitializerToStaticVarDecl(const VarDecl &D, 1751 llvm::GlobalVariable *GV); 1752 1753 1754 /// EmitCXXGlobalVarDeclInit - Create the initializer for a C++ 1755 /// variable with global storage. 1756 void EmitCXXGlobalVarDeclInit(const VarDecl &D, llvm::Constant *DeclPtr); 1757 1758 /// EmitCXXGlobalDtorRegistration - Emits a call to register the global ptr 1759 /// with the C++ runtime so that its destructor will be called at exit. 1760 void EmitCXXGlobalDtorRegistration(llvm::Constant *DtorFn, 1761 llvm::Constant *DeclPtr); 1762 1763 /// Emit code in this function to perform a guarded variable 1764 /// initialization. Guarded initializations are used when it's not 1765 /// possible to prove that an initialization will be done exactly 1766 /// once, e.g. with a static local variable or a static data member 1767 /// of a class template. 1768 void EmitCXXGuardedInit(const VarDecl &D, llvm::GlobalVariable *DeclPtr); 1769 1770 /// GenerateCXXGlobalInitFunc - Generates code for initializing global 1771 /// variables. 1772 void GenerateCXXGlobalInitFunc(llvm::Function *Fn, 1773 llvm::Constant **Decls, 1774 unsigned NumDecls); 1775 1776 /// GenerateCXXGlobalDtorFunc - Generates code for destroying global 1777 /// variables. 1778 void GenerateCXXGlobalDtorFunc(llvm::Function *Fn, 1779 const std::vector<std::pair<llvm::WeakVH, 1780 llvm::Constant*> > &DtorsAndObjects); 1781 1782 void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, const VarDecl *D, 1783 llvm::GlobalVariable *Addr); 1784 1785 void EmitCXXConstructExpr(const CXXConstructExpr *E, AggValueSlot Dest); 1786 1787 void EmitSynthesizedCXXCopyCtor(llvm::Value *Dest, llvm::Value *Src, 1788 const Expr *Exp); 1789 1790 RValue EmitExprWithCleanups(const ExprWithCleanups *E, 1791 AggValueSlot Slot =AggValueSlot::ignored()); 1792 1793 void EmitCXXThrowExpr(const CXXThrowExpr *E); 1794 1795 //===--------------------------------------------------------------------===// 1796 // Internal Helpers 1797 //===--------------------------------------------------------------------===// 1798 1799 /// ContainsLabel - Return true if the statement contains a label in it. If 1800 /// this statement is not executed normally, it not containing a label means 1801 /// that we can just remove the code. 1802 static bool ContainsLabel(const Stmt *S, bool IgnoreCaseStmts = false); 1803 1804 /// ConstantFoldsToSimpleInteger - If the specified expression does not fold 1805 /// to a constant, or if it does but contains a label, return 0. If it 1806 /// constant folds to 'true' and does not contain a label, return 1, if it 1807 /// constant folds to 'false' and does not contain a label, return -1. 1808 int ConstantFoldsToSimpleInteger(const Expr *Cond); 1809 1810 /// EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an 1811 /// if statement) to the specified blocks. Based on the condition, this might 1812 /// try to simplify the codegen of the conditional based on the branch. 1813 void EmitBranchOnBoolExpr(const Expr *Cond, llvm::BasicBlock *TrueBlock, 1814 llvm::BasicBlock *FalseBlock); 1815 1816 /// getTrapBB - Create a basic block that will call the trap intrinsic. We'll 1817 /// generate a branch around the created basic block as necessary. 1818 llvm::BasicBlock *getTrapBB(); 1819 1820 /// EmitCallArg - Emit a single call argument. 1821 RValue EmitCallArg(const Expr *E, QualType ArgType); 1822 1823 /// EmitDelegateCallArg - We are performing a delegate call; that 1824 /// is, the current function is delegating to another one. Produce 1825 /// a r-value suitable for passing the given parameter. 1826 RValue EmitDelegateCallArg(const VarDecl *Param); 1827 1828 private: 1829 void EmitReturnOfRValue(RValue RV, QualType Ty); 1830 1831 /// ExpandTypeFromArgs - Reconstruct a structure of type \arg Ty 1832 /// from function arguments into \arg Dst. See ABIArgInfo::Expand. 1833 /// 1834 /// \param AI - The first function argument of the expansion. 1835 /// \return The argument following the last expanded function 1836 /// argument. 1837 llvm::Function::arg_iterator 1838 ExpandTypeFromArgs(QualType Ty, LValue Dst, 1839 llvm::Function::arg_iterator AI); 1840 1841 /// ExpandTypeToArgs - Expand an RValue \arg Src, with the LLVM type for \arg 1842 /// Ty, into individual arguments on the provided vector \arg Args. See 1843 /// ABIArgInfo::Expand. 1844 void ExpandTypeToArgs(QualType Ty, RValue Src, 1845 llvm::SmallVector<llvm::Value*, 16> &Args); 1846 1847 llvm::Value* EmitAsmInput(const AsmStmt &S, 1848 const TargetInfo::ConstraintInfo &Info, 1849 const Expr *InputExpr, std::string &ConstraintStr); 1850 1851 llvm::Value* EmitAsmInputLValue(const AsmStmt &S, 1852 const TargetInfo::ConstraintInfo &Info, 1853 LValue InputValue, QualType InputType, 1854 std::string &ConstraintStr); 1855 1856 /// EmitCallArgs - Emit call arguments for a function. 1857 /// The CallArgTypeInfo parameter is used for iterating over the known 1858 /// argument types of the function being called. 1859 template<typename T> 1860 void EmitCallArgs(CallArgList& Args, const T* CallArgTypeInfo, 1861 CallExpr::const_arg_iterator ArgBeg, 1862 CallExpr::const_arg_iterator ArgEnd) { 1863 CallExpr::const_arg_iterator Arg = ArgBeg; 1864 1865 // First, use the argument types that the type info knows about 1866 if (CallArgTypeInfo) { 1867 for (typename T::arg_type_iterator I = CallArgTypeInfo->arg_type_begin(), 1868 E = CallArgTypeInfo->arg_type_end(); I != E; ++I, ++Arg) { 1869 assert(Arg != ArgEnd && "Running over edge of argument list!"); 1870 QualType ArgType = *I; 1871 #ifndef NDEBUG 1872 QualType ActualArgType = Arg->getType(); 1873 if (ArgType->isPointerType() && ActualArgType->isPointerType()) { 1874 QualType ActualBaseType = 1875 ActualArgType->getAs<PointerType>()->getPointeeType(); 1876 QualType ArgBaseType = 1877 ArgType->getAs<PointerType>()->getPointeeType(); 1878 if (ArgBaseType->isVariableArrayType()) { 1879 if (const VariableArrayType *VAT = 1880 getContext().getAsVariableArrayType(ActualBaseType)) { 1881 if (!VAT->getSizeExpr()) 1882 ActualArgType = ArgType; 1883 } 1884 } 1885 } 1886 assert(getContext().getCanonicalType(ArgType.getNonReferenceType()). 1887 getTypePtr() == 1888 getContext().getCanonicalType(ActualArgType).getTypePtr() && 1889 "type mismatch in call argument!"); 1890 #endif 1891 Args.push_back(std::make_pair(EmitCallArg(*Arg, ArgType), 1892 ArgType)); 1893 } 1894 1895 // Either we've emitted all the call args, or we have a call to a 1896 // variadic function. 1897 assert((Arg == ArgEnd || CallArgTypeInfo->isVariadic()) && 1898 "Extra arguments in non-variadic function!"); 1899 1900 } 1901 1902 // If we still have any arguments, emit them using the type of the argument. 1903 for (; Arg != ArgEnd; ++Arg) { 1904 QualType ArgType = Arg->getType(); 1905 Args.push_back(std::make_pair(EmitCallArg(*Arg, ArgType), 1906 ArgType)); 1907 } 1908 } 1909 1910 const TargetCodeGenInfo &getTargetHooks() const { 1911 return CGM.getTargetCodeGenInfo(); 1912 } 1913 1914 void EmitDeclMetadata(); 1915 }; 1916 1917 /// Helper class with most of the code for saving a value for a 1918 /// conditional expression cleanup. 1919 struct SavedValueInCondImpl { 1920 typedef llvm::PointerIntPair<llvm::Value*, 1, bool> saved_type; 1921 1922 /// Answer whether the given value needs extra work to be saved. 1923 static bool needsSaving(llvm::Value *value) { 1924 // If it's not an instruction, we don't need to save. 1925 if (!isa<llvm::Instruction>(value)) return false; 1926 1927 // If it's an instruction in the entry block, we don't need to save. 1928 llvm::BasicBlock *block = cast<llvm::Instruction>(value)->getParent(); 1929 return (block != &block->getParent()->getEntryBlock()); 1930 } 1931 1932 /// Try to save the given value. 1933 static saved_type save(CodeGenFunction &CGF, llvm::Value *value) { 1934 if (!needsSaving(value)) return saved_type(value, false); 1935 1936 // Otherwise we need an alloca. 1937 llvm::Value *alloca = 1938 CGF.CreateTempAlloca(value->getType(), "cond-cleanup.save"); 1939 CGF.Builder.CreateStore(value, alloca); 1940 1941 return saved_type(alloca, true); 1942 } 1943 1944 static llvm::Value *restore(CodeGenFunction &CGF, saved_type value) { 1945 if (!value.getInt()) return value.getPointer(); 1946 return CGF.Builder.CreateLoad(value.getPointer()); 1947 } 1948 }; 1949 1950 /// Partial specialization of SavedValueInCond for when a value really 1951 /// requires saving. 1952 template <class T> struct SavedValueInCond<T,true> : SavedValueInCondImpl { 1953 typedef T type; 1954 static type restore(CodeGenFunction &CGF, saved_type value) { 1955 return static_cast<T>(SavedValueInCondImpl::restore(CGF, value)); 1956 } 1957 }; 1958 1959 /// CGBlockInfo - Information to generate a block literal. 1960 class CGBlockInfo { 1961 public: 1962 /// Name - The name of the block, kindof. 1963 const char *Name; 1964 1965 /// DeclRefs - Variables from parent scopes that have been 1966 /// imported into this block. 1967 llvm::SmallVector<const BlockDeclRefExpr *, 8> DeclRefs; 1968 1969 /// InnerBlocks - This block and the blocks it encloses. 1970 llvm::SmallPtrSet<const DeclContext *, 4> InnerBlocks; 1971 1972 /// CXXThisRef - Non-null if 'this' was required somewhere, in 1973 /// which case this is that expression. 1974 const CXXThisExpr *CXXThisRef; 1975 1976 /// NeedsObjCSelf - True if something in this block has an implicit 1977 /// reference to 'self'. 1978 bool NeedsObjCSelf : 1; 1979 1980 /// HasCXXObject - True if block has imported c++ object requiring copy 1981 /// construction in copy helper and destruction in copy dispose helpers. 1982 bool HasCXXObject : 1; 1983 1984 /// These are initialized by GenerateBlockFunction. 1985 bool BlockHasCopyDispose : 1; 1986 CharUnits BlockSize; 1987 CharUnits BlockAlign; 1988 llvm::SmallVector<const Expr*, 8> BlockLayout; 1989 1990 CGBlockInfo(const char *Name); 1991 }; 1992 1993 } // end namespace CodeGen 1994 } // end namespace clang 1995 1996 #endif 1997