clang  3.7.0
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Friends | List of all members
clang::CodeGen::CodeGenFunction Class Reference

#include <CodeGenFunction.h>

Inheritance diagram for clang::CodeGen::CodeGenFunction:
[legend]
Collaboration diagram for clang::CodeGen::CodeGenFunction:
[legend]

Classes

class  AutoVarEmission
 
class  CGCapturedStmtInfo
 API for captured statement code generation. More...
 
class  CGCapturedStmtRAII
 RAII for correct setting/restoring of CapturedStmtInfo. More...
 
class  ConditionalEvaluation
 An object to manage conditionally-evaluated expressions. More...
 
class  ConstantEmission
 
class  CXXDefaultInitExprScope
 
class  FieldConstructionScope
 
class  FinallyInfo
 A class controlling the emission of a finally block. More...
 
struct  JumpDest
 
class  LexicalScope
 
struct  LifetimeExtendedCleanupHeader
 Header for data within LifetimeExtendedCleanupStack. More...
 
class  OMPPrivateScope
 The scope used to remap some variables as private in the OpenMP loop body (or other captured region emitted without outlining), and to restore old vars back on exit. More...
 
class  OpaqueValueMapping
 An RAII object to set (and then clear) a mapping for an OpaqueValueExpr. More...
 
class  OpaqueValueMappingData
 
class  PeepholeProtection
 
class  RunCleanupsScope
 Enters a new scope for capturing cleanups, all of which will be executed once the scope is exited. More...
 
class  SanitizerScope
 RAII object to set/unset CodeGenFunction::IsSanitizerScope. More...
 
class  StmtExprEvaluation
 

Public Types

enum  CFITypeCheckKind { CFITCK_VCall, CFITCK_NVCall, CFITCK_DerivedCast, CFITCK_UnrelatedCast }
 
enum  TypeCheckKind {
  TCK_Load, TCK_Store, TCK_ReferenceBinding, TCK_MemberAccess,
  TCK_MemberCall, TCK_ConstructorCall, TCK_DowncastPointer, TCK_DowncastReference,
  TCK_Upcast, TCK_UpcastToVirtualBase
}
 Situations in which we might emit a check for the suitability of a pointer or glvalue. More...
 
typedef std::pair< llvm::Value
*, llvm::Value * > 
ComplexPairTy
 
typedef void Destroyer (CodeGenFunction &CGF, llvm::Value *addr, QualType ty)
 
typedef llvm::SmallPtrSet
< const CXXRecordDecl *, 4 > 
VisitedVirtualBasesSetTy
 
typedef void SpecialInitFn (CodeGenFunction &Init, const VarDecl &D, llvm::Value *Address)
 

Public Member Functions

void InsertHelper (llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB, llvm::BasicBlock::iterator InsertPt) const
 CGBuilder insert helper. This function is called after an instruction is created using Builder. More...
 
llvm::BasicBlock * EmitLandingPad ()
 Emits a landing pad for the current EH stack. More...
 
llvm::BasicBlock * getInvokeDestImpl ()
 
template<class T >
DominatingValue< T >::saved_type saveValueInCond (T value)
 
bool isSEHTryScope () const
 Returns true inside SEH __try blocks. More...
 
template<class T , class... As>
void pushFullExprCleanup (CleanupKind kind, As...A)
 
template<class T , class... As>
void pushCleanupAfterFullExpr (CleanupKind Kind, As...A)
 Queue a cleanup to be pushed after finishing the current full-expression. More...
 
void initFullExprCleanup ()
 
void PushDestructorCleanup (QualType T, llvm::Value *Addr)
 
void PushDestructorCleanup (const CXXDestructorDecl *Dtor, llvm::Value *Addr)
 
void PopCleanupBlock (bool FallThroughIsBranchThrough=false)
 
void DeactivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP)
 Deactive a cleanup that was created in an active state. More...
 
void ActivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP)
 Activate a cleanup that was created in an inactivated state. More...
 
void PopCleanupBlocks (EHScopeStack::stable_iterator OldCleanupStackSize)
 Takes the old cleanup stack size and emits the cleanup blocks that have been added. More...
 
void PopCleanupBlocks (EHScopeStack::stable_iterator OldCleanupStackSize, size_t OldLifetimeExtendedStackSize)
 Takes the old cleanup stack size and emits the cleanup blocks that have been added, then adds all lifetime-extended cleanups from the given position to the stack. More...
 
void ResolveBranchFixups (llvm::BasicBlock *Target)
 
JumpDest getJumpDestInCurrentScope (llvm::BasicBlock *Target)
 
JumpDest getJumpDestInCurrentScope (StringRef Name=StringRef())
 
void EmitBranchThroughCleanup (JumpDest Dest)
 
bool isObviouslyBranchWithoutCleanups (JumpDest Dest) const
 
void popCatchScope ()
 
llvm::BasicBlock * getEHResumeBlock (bool isCleanup)
 
llvm::BasicBlock * getEHDispatchBlock (EHScopeStack::stable_iterator scope)
 
bool isInConditionalBranch () const
 
void setBeforeOutermostConditional (llvm::Value *value, llvm::Value *addr)
 
std::pair< llvm::Type *, unsignedgetByRefValueLLVMField (const ValueDecl *VD) const
 
llvm::ValueBuildBlockByrefAddress (llvm::Value *BaseAddr, const VarDecl *V)
 
void incrementProfileCounter (const Stmt *S)
 Increment the profiler's counter for the given statement. More...
 
uint64_t getProfileCount (const Stmt *S)
 Get the profiler's count for the given statement. More...
 
void setCurrentProfileCount (uint64_t Count)
 Set the profiler's current count. More...
 
uint64_t getCurrentProfileCount ()
 
 CodeGenFunction (CodeGenModule &cgm, bool suppressNewContext=false)
 
 ~CodeGenFunction ()
 
CodeGenTypesgetTypes () const
 
ASTContextgetContext () const
 
CGDebugInfogetDebugInfo ()
 
void disableDebugInfo ()
 
void enableDebugInfo ()
 
bool shouldUseFusedARCCalls ()
 
const LangOptionsgetLangOpts () const
 
llvm::ValuegetExceptionSlot ()
 
llvm::ValuegetEHSelectorSlot ()
 
llvm::ValuegetExceptionFromSlot ()
 
llvm::ValuegetSelectorFromSlot ()
 
llvm::ValuegetNormalCleanupDestSlot ()
 
llvm::BasicBlock * getUnreachableBlock ()
 
llvm::BasicBlock * getInvokeDest ()
 
bool currentFunctionUsesSEHTry () const
 
const TargetInfogetTarget () const
 
llvm::LLVMContext & getLLVMContext ()
 
void pushIrregularPartialArrayCleanup (llvm::Value *arrayBegin, llvm::Value *arrayEndPointer, QualType elementType, Destroyer *destroyer)
 
void pushRegularPartialArrayCleanup (llvm::Value *arrayBegin, llvm::Value *arrayEnd, QualType elementType, Destroyer *destroyer)
 
void pushDestroy (QualType::DestructionKind dtorKind, llvm::Value *addr, QualType type)
 
void pushEHDestroy (QualType::DestructionKind dtorKind, llvm::Value *addr, QualType type)
 
void pushDestroy (CleanupKind kind, llvm::Value *addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray)
 
void pushLifetimeExtendedDestroy (CleanupKind kind, llvm::Value *addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray)
 
void pushCallObjectDeleteCleanup (const FunctionDecl *OperatorDelete, llvm::Value *CompletePtr, QualType ElementType)
 
void pushStackRestore (CleanupKind kind, llvm::Value *SPMem)
 
void emitDestroy (llvm::Value *addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray)
 
llvm::Function * generateDestroyHelper (llvm::Constant *addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray, const VarDecl *VD)
 
void emitArrayDestroy (llvm::Value *begin, llvm::Value *end, QualType type, Destroyer *destroyer, bool checkZeroLength, bool useEHCleanup)
 
DestroyergetDestroyer (QualType::DestructionKind destructionKind)
 
bool needsEHCleanup (QualType::DestructionKind kind)
 
CleanupKind getCleanupKind (QualType::DestructionKind kind)
 
void GenerateObjCMethod (const ObjCMethodDecl *OMD)
 
void StartObjCMethod (const ObjCMethodDecl *MD, const ObjCContainerDecl *CD)
 
void GenerateObjCGetter (ObjCImplementationDecl *IMP, const ObjCPropertyImplDecl *PID)
 GenerateObjCGetter - Synthesize an Objective-C property getter function. More...
 
void generateObjCGetterBody (const ObjCImplementationDecl *classImpl, const ObjCPropertyImplDecl *propImpl, const ObjCMethodDecl *GetterMothodDecl, llvm::Constant *AtomicHelperFn)
 
void GenerateObjCCtorDtorMethod (ObjCImplementationDecl *IMP, ObjCMethodDecl *MD, bool ctor)
 
void GenerateObjCSetter (ObjCImplementationDecl *IMP, const ObjCPropertyImplDecl *PID)
 Generate an Objective-C property setter function. More...
 
void generateObjCSetterBody (const ObjCImplementationDecl *classImpl, const ObjCPropertyImplDecl *propImpl, llvm::Constant *AtomicHelperFn)
 
bool IndirectObjCSetterArg (const CGFunctionInfo &FI)
 
bool IvarTypeWithAggrGCObjects (QualType Ty)
 
llvm::ValueEmitBlockLiteral (const BlockExpr *)
 Emit a block literal expression in the current function. More...
 
llvm::ValueEmitBlockLiteral (const CGBlockInfo &Info)
 
llvm::Constant * BuildDescriptorBlockDecl (const BlockExpr *, const CGBlockInfo &Info, llvm::StructType *, llvm::Constant *BlockVarLayout)
 
llvm::Function * GenerateBlockFunction (GlobalDecl GD, const CGBlockInfo &Info, const DeclMapTy &ldm, bool IsLambdaConversionToBlock)
 
llvm::Constant * GenerateCopyHelperFunction (const CGBlockInfo &blockInfo)
 
llvm::Constant * GenerateDestroyHelperFunction (const CGBlockInfo &blockInfo)
 
llvm::Constant * GenerateObjCAtomicSetterCopyHelperFunction (const ObjCPropertyImplDecl *PID)
 
llvm::Constant * GenerateObjCAtomicGetterCopyHelperFunction (const ObjCPropertyImplDecl *PID)
 
llvm::ValueEmitBlockCopyAndAutorelease (llvm::Value *Block, QualType Ty)
 
void BuildBlockRelease (llvm::Value *DeclPtr, BlockFieldFlags flags)
 
void emitByrefStructureInit (const AutoVarEmission &emission)
 
void enterByrefCleanup (const AutoVarEmission &emission)
 
llvm::ValueLoadBlockStruct ()
 
void AllocateBlockCXXThisPointer (const CXXThisExpr *E)
 
void AllocateBlockDecl (const DeclRefExpr *E)
 
llvm::ValueGetAddrOfBlockDecl (const VarDecl *var, bool ByRef)
 
llvm::Type * BuildByRefType (const VarDecl *var)
 
void GenerateCode (GlobalDecl GD, llvm::Function *Fn, const CGFunctionInfo &FnInfo)
 
void StartFunction (GlobalDecl GD, QualType RetTy, llvm::Function *Fn, const CGFunctionInfo &FnInfo, const FunctionArgList &Args, SourceLocation Loc=SourceLocation(), SourceLocation StartLoc=SourceLocation())
 Emit code for the start of a function. More...
 
void EmitConstructorBody (FunctionArgList &Args)
 EmitConstructorBody - Emits the body of the current constructor. More...
 
void EmitDestructorBody (FunctionArgList &Args)
 EmitDestructorBody - Emits the body of the current destructor. More...
 
void emitImplicitAssignmentOperatorBody (FunctionArgList &Args)
 
void EmitFunctionBody (FunctionArgList &Args, const Stmt *Body)
 
void EmitBlockWithFallThrough (llvm::BasicBlock *BB, const Stmt *S)
 
void EmitForwardingCallToLambda (const CXXMethodDecl *LambdaCallOperator, CallArgList &CallArgs)
 
void EmitLambdaToBlockPointerBody (FunctionArgList &Args)
 
void EmitLambdaBlockInvokeBody ()
 
void EmitLambdaDelegatingInvokeBody (const CXXMethodDecl *MD)
 
void EmitLambdaStaticInvokeFunction (const CXXMethodDecl *MD)
 
void EmitAsanPrologueOrEpilogue (bool Prologue)
 
llvm::DebugLoc EmitReturnBlock ()
 Emit the unified return block, trying to avoid its emission when possible. More...
 
void FinishFunction (SourceLocation EndLoc=SourceLocation())
 
void StartThunk (llvm::Function *Fn, GlobalDecl GD, const CGFunctionInfo &FnInfo)
 
void EmitCallAndReturnForThunk (llvm::Value *Callee, const ThunkInfo *Thunk)
 
void EmitMustTailThunk (const CXXMethodDecl *MD, llvm::Value *AdjustedThisPtr, llvm::Value *Callee)
 Emit a musttail call for a thunk with a potentially adjusted this pointer. More...
 
void generateThunk (llvm::Function *Fn, const CGFunctionInfo &FnInfo, GlobalDecl GD, const ThunkInfo &Thunk)
 Generate a thunk for the given method. More...
 
llvm::Function * GenerateVarArgsThunk (llvm::Function *Fn, const CGFunctionInfo &FnInfo, GlobalDecl GD, const ThunkInfo &Thunk)
 
void EmitCtorPrologue (const CXXConstructorDecl *CD, CXXCtorType Type, FunctionArgList &Args)
 
void EmitInitializerForField (FieldDecl *Field, LValue LHS, Expr *Init, ArrayRef< VarDecl * > ArrayIndexes)
 
void InitializeVTablePointer (BaseSubobject Base, const CXXRecordDecl *NearestVBase, CharUnits OffsetFromNearestVBase, const CXXRecordDecl *VTableClass)
 
void InitializeVTablePointers (BaseSubobject Base, const CXXRecordDecl *NearestVBase, CharUnits OffsetFromNearestVBase, bool BaseIsNonVirtualPrimaryBase, const CXXRecordDecl *VTableClass, VisitedVirtualBasesSetTy &VBases)
 
void InitializeVTablePointers (const CXXRecordDecl *ClassDecl)
 
llvm::ValueGetVTablePtr (llvm::Value *This, llvm::Type *Ty)
 
void EmitVTablePtrCheckForCast (QualType T, llvm::Value *Derived, bool MayBeNull, CFITypeCheckKind TCK, SourceLocation Loc)
 Derived is the presumed address of an object of type T after a cast. If T is a polymorphic class type, emit a check that the virtual table for Derived belongs to a class derived from T. More...
 
void EmitVTablePtrCheckForCall (const CXXMethodDecl *MD, llvm::Value *VTable, CFITypeCheckKind TCK, SourceLocation Loc)
 
void EmitVTablePtrCheck (const CXXRecordDecl *RD, llvm::Value *VTable, CFITypeCheckKind TCK, SourceLocation Loc)
 
bool CanDevirtualizeMemberFunctionCall (const Expr *Base, const CXXMethodDecl *MD)
 
void EnterDtorCleanups (const CXXDestructorDecl *Dtor, CXXDtorType Type)
 Emit all code that comes at the end of class's destructor. This is to call destructors on members and base classes in reverse order of their construction. More...
 
bool ShouldInstrumentFunction ()
 
void EmitFunctionInstrumentation (const char *Fn)
 
void EmitMCountInstrumentation ()
 EmitMCountInstrumentation - Emit call to .mcount. More...
 
void EmitFunctionProlog (const CGFunctionInfo &FI, llvm::Function *Fn, const FunctionArgList &Args)
 
void EmitFunctionEpilog (const CGFunctionInfo &FI, bool EmitRetDbgLoc, SourceLocation EndLoc)
 
void EmitStartEHSpec (const Decl *D)
 EmitStartEHSpec - Emit the start of the exception spec. More...
 
void EmitEndEHSpec (const Decl *D)
 EmitEndEHSpec - Emit the end of the exception spec. More...
 
llvm::BasicBlock * getTerminateLandingPad ()
 getTerminateLandingPad - Return a landing pad that just calls terminate. More...
 
llvm::BasicBlock * getTerminateHandler ()
 
llvm::Type * ConvertTypeForMem (QualType T)
 
llvm::Type * ConvertType (QualType T)
 
llvm::Type * ConvertType (const TypeDecl *T)
 
llvm::ValueLoadObjCSelf ()
 
QualType TypeOfSelfObject ()
 TypeOfSelfObject - Return type of object that this self represents. More...
 
llvm::BasicBlock * createBasicBlock (const Twine &name="", llvm::Function *parent=nullptr, llvm::BasicBlock *before=nullptr)
 createBasicBlock - Create an LLVM basic block. More...
 
JumpDest getJumpDestForLabel (const LabelDecl *S)
 
void SimplifyForwardingBlocks (llvm::BasicBlock *BB)
 
void EmitBlock (llvm::BasicBlock *BB, bool IsFinished=false)
 
void EmitBlockAfterUses (llvm::BasicBlock *BB)
 
void EmitBranch (llvm::BasicBlock *Block)
 
bool HaveInsertPoint () const
 
void EnsureInsertPoint ()
 
void ErrorUnsupported (const Stmt *S, const char *Type)
 
LValue MakeAddrLValue (llvm::Value *V, QualType T, CharUnits Alignment=CharUnits())
 
LValue MakeNaturalAlignAddrLValue (llvm::Value *V, QualType T)
 
llvm::AllocaInst * CreateTempAlloca (llvm::Type *Ty, const Twine &Name="tmp")
 
void InitTempAlloca (llvm::AllocaInst *Alloca, llvm::Value *Value)
 InitTempAlloca - Provide an initial value for the given alloca. More...
 
llvm::AllocaInst * CreateIRTemp (QualType T, const Twine &Name="tmp")
 
llvm::AllocaInst * CreateMemTemp (QualType T, const Twine &Name="tmp")
 
AggValueSlot CreateAggTemp (QualType T, const Twine &Name="tmp")
 
AggValueSlot CreateInAllocaTmp (QualType T, const Twine &Name="inalloca")
 
llvm::ValueEmitCastToVoidPtr (llvm::Value *value)
 Emit a cast to void* in the appropriate address space. More...
 
llvm::ValueEvaluateExprAsBool (const Expr *E)
 
void EmitIgnoredExpr (const Expr *E)
 EmitIgnoredExpr - Emit an expression in a context which ignores the result. More...
 
RValue EmitAnyExpr (const Expr *E, AggValueSlot aggSlot=AggValueSlot::ignored(), bool ignoreResult=false)
 
llvm::ValueEmitVAListRef (const Expr *E)
 
RValue EmitAnyExprToTemp (const Expr *E)
 
void EmitAnyExprToMem (const Expr *E, llvm::Value *Location, Qualifiers Quals, bool IsInitializer)
 
void EmitAnyExprToExn (const Expr *E, llvm::Value *Addr)
 
void EmitExprAsInit (const Expr *init, const ValueDecl *D, LValue lvalue, bool capturedByInit)
 
bool hasVolatileMember (QualType T)
 
void EmitAggregateAssign (llvm::Value *DestPtr, llvm::Value *SrcPtr, QualType EltTy)
 
void EmitAggregateCopyCtor (llvm::Value *DestPtr, llvm::Value *SrcPtr, QualType DestTy, QualType SrcTy)
 
void EmitAggregateCopy (llvm::Value *DestPtr, llvm::Value *SrcPtr, QualType EltTy, bool isVolatile=false, CharUnits Alignment=CharUnits::Zero(), bool isAssignment=false)
 
void StartBlock (const char *N)
 
llvm::ValueGetAddrOfLocalVar (const VarDecl *VD)
 GetAddrOfLocalVar - Return the address of a local variable. More...
 
const LValuegetOpaqueLValueMapping (const OpaqueValueExpr *e)
 
const RValuegetOpaqueRValueMapping (const OpaqueValueExpr *e)
 
llvm::BlockAddress * GetAddrOfLabel (const LabelDecl *L)
 
llvm::BasicBlock * GetIndirectGotoBlock ()
 
void EmitNullInitialization (llvm::Value *DestPtr, QualType Ty)
 
llvm::ValueEmitVAArg (llvm::Value *VAListAddr, QualType Ty)
 
llvm::ValueemitArrayLength (const ArrayType *arrayType, QualType &baseType, llvm::Value *&addr)
 
void EmitVariablyModifiedType (QualType Ty)
 
std::pair< llvm::Value
*, QualType
getVLASize (const VariableArrayType *vla)
 
std::pair< llvm::Value
*, QualType
getVLASize (QualType vla)
 
llvm::ValueLoadCXXThis ()
 
llvm::ValueLoadCXXVTT ()
 
llvm::ValueLoadCXXStructorImplicitParam ()
 
llvm::ValueGetAddressOfDirectBaseInCompleteClass (llvm::Value *Value, const CXXRecordDecl *Derived, const CXXRecordDecl *Base, bool BaseIsVirtual)
 
llvm::ValueGetAddressOfBaseClass (llvm::Value *Value, const CXXRecordDecl *Derived, CastExpr::path_const_iterator PathBegin, CastExpr::path_const_iterator PathEnd, bool NullCheckValue, SourceLocation Loc)
 
llvm::ValueGetAddressOfDerivedClass (llvm::Value *Value, const CXXRecordDecl *Derived, CastExpr::path_const_iterator PathBegin, CastExpr::path_const_iterator PathEnd, bool NullCheckValue)
 
llvm::ValueGetVTTParameter (GlobalDecl GD, bool ForVirtualBase, bool Delegating)
 
void EmitDelegateCXXConstructorCall (const CXXConstructorDecl *Ctor, CXXCtorType CtorType, const FunctionArgList &Args, SourceLocation Loc)
 
void EmitDelegatingCXXConstructorCall (const CXXConstructorDecl *Ctor, const FunctionArgList &Args)
 
void EmitCXXConstructorCall (const CXXConstructorDecl *D, CXXCtorType Type, bool ForVirtualBase, bool Delegating, llvm::Value *This, const CXXConstructExpr *E)
 
void EmitSynthesizedCXXCopyCtorCall (const CXXConstructorDecl *D, llvm::Value *This, llvm::Value *Src, const CXXConstructExpr *E)
 
void EmitCXXAggrConstructorCall (const CXXConstructorDecl *D, const ConstantArrayType *ArrayTy, llvm::Value *ArrayPtr, const CXXConstructExpr *E, bool ZeroInitialization=false)
 
void EmitCXXAggrConstructorCall (const CXXConstructorDecl *D, llvm::Value *NumElements, llvm::Value *ArrayPtr, const CXXConstructExpr *E, bool ZeroInitialization=false)
 
void EmitCXXDestructorCall (const CXXDestructorDecl *D, CXXDtorType Type, bool ForVirtualBase, bool Delegating, llvm::Value *This)
 
void EmitNewArrayInitializer (const CXXNewExpr *E, QualType elementType, llvm::Type *ElementTy, llvm::Value *NewPtr, llvm::Value *NumElements, llvm::Value *AllocSizeWithoutCookie)
 
void EmitCXXTemporary (const CXXTemporary *Temporary, QualType TempType, llvm::Value *Ptr)
 Emits all the code to cause the given temporary to be cleaned up. More...
 
llvm::ValueEmitLifetimeStart (uint64_t Size, llvm::Value *Addr)
 
void EmitLifetimeEnd (llvm::Value *Size, llvm::Value *Addr)
 
llvm::ValueEmitCXXNewExpr (const CXXNewExpr *E)
 
void EmitCXXDeleteExpr (const CXXDeleteExpr *E)
 
void EmitDeleteCall (const FunctionDecl *DeleteFD, llvm::Value *Ptr, QualType DeleteTy)
 
RValue EmitBuiltinNewDeleteCall (const FunctionProtoType *Type, const Expr *Arg, bool IsDelete)
 
llvm::ValueEmitCXXTypeidExpr (const CXXTypeidExpr *E)
 
llvm::ValueEmitDynamicCast (llvm::Value *V, const CXXDynamicCastExpr *DCE)
 
llvm::ValueEmitCXXUuidofExpr (const CXXUuidofExpr *E)
 
bool sanitizePerformTypeCheck () const
 Whether any type-checking sanitizers are enabled. If false, calls to EmitTypeCheck can be skipped. More...
 
void EmitTypeCheck (TypeCheckKind TCK, SourceLocation Loc, llvm::Value *V, QualType Type, CharUnits Alignment=CharUnits::Zero(), bool SkipNullCheck=false)
 Emit a check that V is the address of storage of the appropriate size and alignment for an object of type Type. More...
 
void EmitBoundsCheck (const Expr *E, const Expr *Base, llvm::Value *Index, QualType IndexType, bool Accessed)
 Emit a check that Base points into an array object, which we can access at index Index. Accessed should be false if we this expression is used as an lvalue, for instance in "&Arr[Idx]". More...
 
llvm::ValueEmitScalarPrePostIncDec (const UnaryOperator *E, LValue LV, bool isInc, bool isPre)
 
ComplexPairTy EmitComplexPrePostIncDec (const UnaryOperator *E, LValue LV, bool isInc, bool isPre)
 
void EmitAlignmentAssumption (llvm::Value *PtrValue, unsigned Alignment, llvm::Value *OffsetValue=nullptr)
 
void EmitDecl (const Decl &D)
 
void EmitVarDecl (const VarDecl &D)
 
void EmitScalarInit (const Expr *init, const ValueDecl *D, LValue lvalue, bool capturedByInit)
 
void EmitScalarInit (llvm::Value *init, LValue lvalue)
 EmitScalarInit - Initialize the given lvalue with the given object. More...
 
bool isTrivialInitializer (const Expr *Init)
 Determine whether the given initializer is trivial in the sense that it requires no code to be generated. More...
 
void EmitAutoVarDecl (const VarDecl &D)
 
AutoVarEmission EmitAutoVarAlloca (const VarDecl &var)
 
void EmitAutoVarInit (const AutoVarEmission &emission)
 
void EmitAutoVarCleanups (const AutoVarEmission &emission)
 
void emitAutoVarTypeCleanup (const AutoVarEmission &emission, QualType::DestructionKind dtorKind)
 Enter a destroy cleanup for the given local variable. More...
 
void EmitStaticVarDecl (const VarDecl &D, llvm::GlobalValue::LinkageTypes Linkage)
 
void EmitParmDecl (const VarDecl &D, llvm::Value *Arg, bool ArgIsPointer, unsigned ArgNo)
 EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl. More...
 
PeepholeProtection protectFromPeepholes (RValue rvalue)
 
void unprotectFromPeepholes (PeepholeProtection protection)
 
void EmitStopPoint (const Stmt *S)
 EmitStopPoint - Emit a debug stoppoint if we are emitting debug info. More...
 
void EmitStmt (const Stmt *S)
 
bool EmitSimpleStmt (const Stmt *S)
 
llvm::ValueEmitCompoundStmt (const CompoundStmt &S, bool GetLast=false, AggValueSlot AVS=AggValueSlot::ignored())
 
llvm::ValueEmitCompoundStmtWithoutScope (const CompoundStmt &S, bool GetLast=false, AggValueSlot AVS=AggValueSlot::ignored())
 
void EmitLabel (const LabelDecl *D)
 
void EmitLabelStmt (const LabelStmt &S)
 
void EmitAttributedStmt (const AttributedStmt &S)
 
void EmitGotoStmt (const GotoStmt &S)
 
void EmitIndirectGotoStmt (const IndirectGotoStmt &S)
 
void EmitIfStmt (const IfStmt &S)
 
void EmitCondBrHints (llvm::LLVMContext &Context, llvm::BranchInst *CondBr, ArrayRef< const Attr * > Attrs)
 
void EmitWhileStmt (const WhileStmt &S, ArrayRef< const Attr * > Attrs=None)
 
void EmitDoStmt (const DoStmt &S, ArrayRef< const Attr * > Attrs=None)
 
void EmitForStmt (const ForStmt &S, ArrayRef< const Attr * > Attrs=None)
 
void EmitReturnStmt (const ReturnStmt &S)
 
void EmitDeclStmt (const DeclStmt &S)
 
void EmitBreakStmt (const BreakStmt &S)
 
void EmitContinueStmt (const ContinueStmt &S)
 
void EmitSwitchStmt (const SwitchStmt &S)
 
void EmitDefaultStmt (const DefaultStmt &S)
 
void EmitCaseStmt (const CaseStmt &S)
 
void EmitCaseStmtRange (const CaseStmt &S)
 
void EmitAsmStmt (const AsmStmt &S)
 
void EmitObjCForCollectionStmt (const ObjCForCollectionStmt &S)
 
void EmitObjCAtTryStmt (const ObjCAtTryStmt &S)
 
void EmitObjCAtThrowStmt (const ObjCAtThrowStmt &S)
 
void EmitObjCAtSynchronizedStmt (const ObjCAtSynchronizedStmt &S)
 
void EmitObjCAutoreleasePoolStmt (const ObjCAutoreleasePoolStmt &S)
 
void EnterCXXTryStmt (const CXXTryStmt &S, bool IsFnTryBlock=false)
 
void ExitCXXTryStmt (const CXXTryStmt &S, bool IsFnTryBlock=false)
 
void EmitCXXTryStmt (const CXXTryStmt &S)
 
void EmitSEHTryStmt (const SEHTryStmt &S)
 
void EmitSEHLeaveStmt (const SEHLeaveStmt &S)
 
void EnterSEHTryStmt (const SEHTryStmt &S)
 
void ExitSEHTryStmt (const SEHTryStmt &S)
 
void startOutlinedSEHHelper (CodeGenFunction &ParentCGF, bool IsFilter, const Stmt *OutlinedStmt)
 
llvm::Function * GenerateSEHFilterFunction (CodeGenFunction &ParentCGF, const SEHExceptStmt &Except)
 
llvm::Function * GenerateSEHFinallyFunction (CodeGenFunction &ParentCGF, const SEHFinallyStmt &Finally)
 
void EmitSEHExceptionCodeSave (CodeGenFunction &ParentCGF, llvm::Value *ParentFP, llvm::Value *EntryEBP)
 
llvm::ValueEmitSEHExceptionCode ()
 
llvm::ValueEmitSEHExceptionInfo ()
 
llvm::ValueEmitSEHAbnormalTermination ()
 
void EmitCapturedLocals (CodeGenFunction &ParentCGF, const Stmt *OutlinedStmt, bool IsFilter)
 
llvm::ValuerecoverAddrOfEscapedLocal (CodeGenFunction &ParentCGF, llvm::Value *ParentVar, llvm::Value *ParentFP)
 
void EmitCXXForRangeStmt (const CXXForRangeStmt &S, ArrayRef< const Attr * > Attrs=None)
 
LValue InitCapturedStruct (const CapturedStmt &S)
 
llvm::Function * EmitCapturedStmt (const CapturedStmt &S, CapturedRegionKind K)
 
void GenerateCapturedStmtFunctionProlog (const CapturedStmt &S)
 
llvm::Function * GenerateCapturedStmtFunctionEpilog (const CapturedStmt &S)
 
llvm::Function * GenerateCapturedStmtFunction (const CapturedStmt &S)
 Creates the outlined function for a CapturedStmt. More...
 
llvm::ValueGenerateCapturedStmtArgument (const CapturedStmt &S)
 
void EmitOMPAggregateAssign (llvm::Value *DestAddr, llvm::Value *SrcAddr, QualType OriginalType, const llvm::function_ref< void(llvm::Value *, llvm::Value *)> &CopyGen)
 Perform element by element copying of arrays with type OriginalType from SrcAddr to DestAddr using copying procedure generated by CopyGen. More...
 
void EmitOMPCopy (CodeGenFunction &CGF, QualType OriginalType, llvm::Value *DestAddr, llvm::Value *SrcAddr, const VarDecl *DestVD, const VarDecl *SrcVD, const Expr *Copy)
 Emit proper copying of data from one variable to another. More...
 
std::pair< bool, RValueEmitOMPAtomicSimpleUpdateExpr (LValue X, RValue E, BinaryOperatorKind BO, bool IsXLHSInRHSPart, llvm::AtomicOrdering AO, SourceLocation Loc, const llvm::function_ref< RValue(RValue)> &CommonGen)
 Emit atomic update code for constructs: X = X BO E or X = E BO E. More...
 
bool EmitOMPFirstprivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
 
void EmitOMPPrivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
 
bool EmitOMPCopyinClause (const OMPExecutableDirective &D)
 Emit code for copyin clause in D directive. The next code is generated at the start of outlined functions for directives: More...
 
bool EmitOMPLastprivateClauseInit (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
 Emit initial code for lastprivate variables. If some variable is not also firstprivate, then the default initialization is used. Otherwise initialization of this variable is performed by EmitOMPFirstprivateClause method. More...
 
void EmitOMPLastprivateClauseFinal (const OMPExecutableDirective &D, llvm::Value *IsLastIterCond=nullptr)
 Emit final copying of lastprivate values to original variables at the end of the worksharing or simd directive. More...
 
void EmitOMPReductionClauseInit (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
 Emit initial code for reduction variables. Creates reduction copies and initializes them with the values according to OpenMP standard. More...
 
void EmitOMPReductionClauseFinal (const OMPExecutableDirective &D)
 Emit final update of reduction values to original variables at the end of the directive. More...
 
void EmitOMPLinearClauseInit (const OMPLoopDirective &D)
 Emit initial code for linear variables. Creates private copies and initializes them with the values according to OpenMP standard. More...
 
void EmitOMPParallelDirective (const OMPParallelDirective &S)
 
void EmitOMPSimdDirective (const OMPSimdDirective &S)
 
void EmitOMPForDirective (const OMPForDirective &S)
 
void EmitOMPForSimdDirective (const OMPForSimdDirective &S)
 
void EmitOMPSectionsDirective (const OMPSectionsDirective &S)
 
void EmitOMPSectionDirective (const OMPSectionDirective &S)
 
void EmitOMPSingleDirective (const OMPSingleDirective &S)
 
void EmitOMPMasterDirective (const OMPMasterDirective &S)
 
void EmitOMPCriticalDirective (const OMPCriticalDirective &S)
 
void EmitOMPParallelForDirective (const OMPParallelForDirective &S)
 
void EmitOMPParallelForSimdDirective (const OMPParallelForSimdDirective &S)
 
void EmitOMPParallelSectionsDirective (const OMPParallelSectionsDirective &S)
 
void EmitOMPTaskDirective (const OMPTaskDirective &S)
 
void EmitOMPTaskyieldDirective (const OMPTaskyieldDirective &S)
 
void EmitOMPBarrierDirective (const OMPBarrierDirective &S)
 
void EmitOMPTaskwaitDirective (const OMPTaskwaitDirective &S)
 
void EmitOMPTaskgroupDirective (const OMPTaskgroupDirective &S)
 
void EmitOMPFlushDirective (const OMPFlushDirective &S)
 
void EmitOMPOrderedDirective (const OMPOrderedDirective &S)
 
void EmitOMPAtomicDirective (const OMPAtomicDirective &S)
 
void EmitOMPTargetDirective (const OMPTargetDirective &S)
 
void EmitOMPTeamsDirective (const OMPTeamsDirective &S)
 
void EmitOMPCancellationPointDirective (const OMPCancellationPointDirective &S)
 
void EmitOMPCancelDirective (const OMPCancelDirective &S)
 
void EmitOMPInnerLoop (const Stmt &S, bool RequiresCleanup, const Expr *LoopCond, const Expr *IncExpr, const llvm::function_ref< void(CodeGenFunction &)> &BodyGen, const llvm::function_ref< void(CodeGenFunction &)> &PostIncGen)
 Emit inner loop of the worksharing/simd construct. More...
 
JumpDest getOMPCancelDestination (OpenMPDirectiveKind Kind)
 
RValue GetUndefRValue (QualType Ty)
 GetUndefRValue - Get an appropriate 'undef' rvalue for the given type. More...
 
RValue EmitUnsupportedRValue (const Expr *E, const char *Name)
 
LValue EmitUnsupportedLValue (const Expr *E, const char *Name)
 
LValue EmitLValue (const Expr *E)
 
LValue EmitCheckedLValue (const Expr *E, TypeCheckKind TCK)
 Same as EmitLValue but additionally we generate checking code to guard against undefined behavior. This is only suitable when we know that the address will be used to access the object. More...
 
RValue convertTempToRValue (llvm::Value *addr, QualType type, SourceLocation Loc)
 
void EmitAtomicInit (Expr *E, LValue lvalue)
 
bool LValueIsSuitableForInlineAtomic (LValue Src)
 
bool typeIsSuitableForInlineAtomic (QualType Ty, bool IsVolatile) const
 
RValue EmitAtomicLoad (LValue LV, SourceLocation SL, AggValueSlot Slot=AggValueSlot::ignored())
 
RValue EmitAtomicLoad (LValue lvalue, SourceLocation loc, llvm::AtomicOrdering AO, bool IsVolatile=false, AggValueSlot slot=AggValueSlot::ignored())
 
void EmitAtomicStore (RValue rvalue, LValue lvalue, bool isInit)
 
void EmitAtomicStore (RValue rvalue, LValue lvalue, llvm::AtomicOrdering AO, bool IsVolatile, bool isInit)
 
std::pair< RValue, llvm::Value * > EmitAtomicCompareExchange (LValue Obj, RValue Expected, RValue Desired, SourceLocation Loc, llvm::AtomicOrdering Success=llvm::SequentiallyConsistent, llvm::AtomicOrdering Failure=llvm::SequentiallyConsistent, bool IsWeak=false, AggValueSlot Slot=AggValueSlot::ignored())
 
void EmitAtomicUpdate (LValue LVal, llvm::AtomicOrdering AO, const llvm::function_ref< RValue(RValue)> &UpdateOp, bool IsVolatile)
 
llvm::ValueEmitToMemory (llvm::Value *Value, QualType Ty)
 
llvm::ValueEmitFromMemory (llvm::Value *Value, QualType Ty)
 
llvm::ValueEmitLoadOfScalar (llvm::Value *Addr, bool Volatile, unsigned Alignment, QualType Ty, SourceLocation Loc, llvm::MDNode *TBAAInfo=nullptr, QualType TBAABaseTy=QualType(), uint64_t TBAAOffset=0)
 
llvm::ValueEmitLoadOfScalar (LValue lvalue, SourceLocation Loc)
 
void EmitStoreOfScalar (llvm::Value *Value, llvm::Value *Addr, bool Volatile, unsigned Alignment, QualType Ty, llvm::MDNode *TBAAInfo=nullptr, bool isInit=false, QualType TBAABaseTy=QualType(), uint64_t TBAAOffset=0)
 
void EmitStoreOfScalar (llvm::Value *value, LValue lvalue, bool isInit=false)
 
RValue EmitLoadOfLValue (LValue V, SourceLocation Loc)
 
RValue EmitLoadOfExtVectorElementLValue (LValue V)
 
RValue EmitLoadOfBitfieldLValue (LValue LV)
 
RValue EmitLoadOfGlobalRegLValue (LValue LV)
 Load of global gamed gegisters are always calls to intrinsics. More...
 
void EmitStoreThroughLValue (RValue Src, LValue Dst, bool isInit=false)
 
void EmitStoreThroughExtVectorComponentLValue (RValue Src, LValue Dst)
 
void EmitStoreThroughGlobalRegLValue (RValue Src, LValue Dst)
 Store of global named registers are always calls to intrinsics. More...
 
void EmitStoreThroughBitfieldLValue (RValue Src, LValue Dst, llvm::Value **Result=nullptr)
 
LValue EmitComplexAssignmentLValue (const BinaryOperator *E)
 Emit an l-value for an assignment (simple or compound) of complex type. More...
 
LValue EmitComplexCompoundAssignmentLValue (const CompoundAssignOperator *E)
 
LValue EmitScalarCompoundAssignWithComplex (const CompoundAssignOperator *E, llvm::Value *&Result)
 
LValue EmitBinaryOperatorLValue (const BinaryOperator *E)
 
LValue EmitCompoundAssignmentLValue (const CompoundAssignOperator *E)
 
LValue EmitCallExprLValue (const CallExpr *E)
 
LValue EmitVAArgExprLValue (const VAArgExpr *E)
 
LValue EmitDeclRefLValue (const DeclRefExpr *E)
 
LValue EmitReadRegister (const VarDecl *VD)
 
LValue EmitStringLiteralLValue (const StringLiteral *E)
 
LValue EmitObjCEncodeExprLValue (const ObjCEncodeExpr *E)
 
LValue EmitPredefinedLValue (const PredefinedExpr *E)
 
LValue EmitUnaryOpLValue (const UnaryOperator *E)
 
LValue EmitArraySubscriptExpr (const ArraySubscriptExpr *E, bool Accessed=false)
 
LValue EmitExtVectorElementExpr (const ExtVectorElementExpr *E)
 
LValue EmitMemberExpr (const MemberExpr *E)
 
LValue EmitObjCIsaExpr (const ObjCIsaExpr *E)
 
LValue EmitCompoundLiteralLValue (const CompoundLiteralExpr *E)
 
LValue EmitInitListLValue (const InitListExpr *E)
 
LValue EmitConditionalOperatorLValue (const AbstractConditionalOperator *E)
 
LValue EmitCastLValue (const CastExpr *E)
 
LValue EmitMaterializeTemporaryExpr (const MaterializeTemporaryExpr *E)
 
LValue EmitOpaqueValueLValue (const OpaqueValueExpr *e)
 
llvm::ValueEmitExtVectorElementLValue (LValue V)
 Generates lvalue for partial ext_vector access. More...
 
RValue EmitRValueForField (LValue LV, const FieldDecl *FD, SourceLocation Loc)
 
ConstantEmission tryEmitAsConstant (DeclRefExpr *refExpr)
 
RValue EmitPseudoObjectRValue (const PseudoObjectExpr *e, AggValueSlot slot=AggValueSlot::ignored())
 
LValue EmitPseudoObjectLValue (const PseudoObjectExpr *e)
 
llvm::ValueEmitIvarOffset (const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar)
 
LValue EmitLValueForField (LValue Base, const FieldDecl *Field)
 
LValue EmitLValueForLambdaField (const FieldDecl *Field)
 
LValue EmitLValueForFieldInitialization (LValue Base, const FieldDecl *Field)
 
LValue EmitLValueForIvar (QualType ObjectTy, llvm::Value *Base, const ObjCIvarDecl *Ivar, unsigned CVRQualifiers)
 
LValue EmitCXXConstructLValue (const CXXConstructExpr *E)
 
LValue EmitCXXBindTemporaryLValue (const CXXBindTemporaryExpr *E)
 
LValue EmitLambdaLValue (const LambdaExpr *E)
 
LValue EmitCXXTypeidLValue (const CXXTypeidExpr *E)
 
LValue EmitCXXUuidofLValue (const CXXUuidofExpr *E)
 
LValue EmitObjCMessageExprLValue (const ObjCMessageExpr *E)
 
LValue EmitObjCIvarRefLValue (const ObjCIvarRefExpr *E)
 
LValue EmitStmtExprLValue (const StmtExpr *E)
 
LValue EmitPointerToDataMemberBinaryExpr (const BinaryOperator *E)
 
LValue EmitObjCSelectorLValue (const ObjCSelectorExpr *E)
 
void EmitDeclRefExprDbgValue (const DeclRefExpr *E, llvm::Constant *Init)
 
RValue EmitCall (const CGFunctionInfo &FnInfo, llvm::Value *Callee, ReturnValueSlot ReturnValue, const CallArgList &Args, const Decl *TargetDecl=nullptr, llvm::Instruction **callOrInvoke=nullptr)
 
RValue EmitCall (QualType FnType, llvm::Value *Callee, const CallExpr *E, ReturnValueSlot ReturnValue, const Decl *TargetDecl=nullptr, llvm::Value *Chain=nullptr)
 
RValue EmitCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue=ReturnValueSlot())
 
llvm::CallInst * EmitRuntimeCall (llvm::Value *callee, const Twine &name="")
 
llvm::CallInst * EmitRuntimeCall (llvm::Value *callee, ArrayRef< llvm::Value * > args, const Twine &name="")
 
llvm::CallInst * EmitNounwindRuntimeCall (llvm::Value *callee, const Twine &name="")
 
llvm::CallInst * EmitNounwindRuntimeCall (llvm::Value *callee, ArrayRef< llvm::Value * > args, const Twine &name="")
 
llvm::CallSite EmitCallOrInvoke (llvm::Value *Callee, ArrayRef< llvm::Value * > Args, const Twine &Name="")
 
llvm::CallSite EmitCallOrInvoke (llvm::Value *Callee, const Twine &Name="")
 
llvm::CallSite EmitRuntimeCallOrInvoke (llvm::Value *callee, ArrayRef< llvm::Value * > args, const Twine &name="")
 Emits a call or invoke instruction to the given runtime function. More...
 
llvm::CallSite EmitRuntimeCallOrInvoke (llvm::Value *callee, const Twine &name="")
 
void EmitNoreturnRuntimeCallOrInvoke (llvm::Value *callee, ArrayRef< llvm::Value * > args)
 Emits a call or invoke to the given noreturn runtime function. More...
 
llvm::ValueBuildAppleKextVirtualCall (const CXXMethodDecl *MD, NestedNameSpecifier *Qual, llvm::Type *Ty)
 
llvm::ValueBuildAppleKextVirtualDestructorCall (const CXXDestructorDecl *DD, CXXDtorType Type, const CXXRecordDecl *RD)
 
RValue EmitCXXMemberOrOperatorCall (const CXXMethodDecl *MD, llvm::Value *Callee, ReturnValueSlot ReturnValue, llvm::Value *This, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E)
 
RValue EmitCXXStructorCall (const CXXMethodDecl *MD, llvm::Value *Callee, ReturnValueSlot ReturnValue, llvm::Value *This, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E, StructorType Type)
 
RValue EmitCXXMemberCallExpr (const CXXMemberCallExpr *E, ReturnValueSlot ReturnValue)
 
RValue EmitCXXMemberOrOperatorMemberCallExpr (const CallExpr *CE, const CXXMethodDecl *MD, ReturnValueSlot ReturnValue, bool HasQualifier, NestedNameSpecifier *Qualifier, bool IsArrow, const Expr *Base)
 
RValue EmitCXXMemberPointerCallExpr (const CXXMemberCallExpr *E, ReturnValueSlot ReturnValue)
 
RValue EmitCXXOperatorMemberCallExpr (const CXXOperatorCallExpr *E, const CXXMethodDecl *MD, ReturnValueSlot ReturnValue)
 
RValue EmitCUDAKernelCallExpr (const CUDAKernelCallExpr *E, ReturnValueSlot ReturnValue)
 
RValue EmitBuiltinExpr (const FunctionDecl *FD, unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue)
 
RValue EmitBlockCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue)
 
llvm::ValueEmitTargetBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitAArch64CompareBuiltinExpr (llvm::Value *Op, llvm::Type *Ty, const llvm::CmpInst::Predicate Fp, const llvm::CmpInst::Predicate Ip, const llvm::Twine &Name="")
 
llvm::ValueEmitARMBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitCommonNeonBuiltinExpr (unsigned BuiltinID, unsigned LLVMIntrinsic, unsigned AltLLVMIntrinsic, const char *NameHint, unsigned Modifier, const CallExpr *E, SmallVectorImpl< llvm::Value * > &Ops, llvm::Value *Align=nullptr)
 
llvm::Function * LookupNeonLLVMIntrinsic (unsigned IntrinsicID, unsigned Modifier, llvm::Type *ArgTy, const CallExpr *E)
 
llvm::ValueEmitNeonCall (llvm::Function *F, SmallVectorImpl< llvm::Value * > &O, const char *name, unsigned shift=0, bool rightshift=false)
 
llvm::ValueEmitNeonSplat (llvm::Value *V, llvm::Constant *Idx)
 
llvm::ValueEmitNeonShiftVector (llvm::Value *V, llvm::Type *Ty, bool negateForRightShift)
 
llvm::ValueEmitNeonRShiftImm (llvm::Value *Vec, llvm::Value *Amt, llvm::Type *Ty, bool usgn, const char *name)
 
llvm::ValuevectorWrapScalar8 (llvm::Value *Op)
 
llvm::ValuevectorWrapScalar16 (llvm::Value *Op)
 
llvm::ValueEmitAArch64BuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueBuildVector (ArrayRef< llvm::Value * > Ops)
 
llvm::ValueEmitX86BuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitPPCBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitAMDGPUBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitSystemZBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitNVPTXBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
 
llvm::ValueEmitObjCProtocolExpr (const ObjCProtocolExpr *E)
 
llvm::ValueEmitObjCStringLiteral (const ObjCStringLiteral *E)
 Emits an instance of NSConstantString representing the object. More...
 
llvm::ValueEmitObjCBoxedExpr (const ObjCBoxedExpr *E)
 
llvm::ValueEmitObjCArrayLiteral (const ObjCArrayLiteral *E)
 
llvm::ValueEmitObjCDictionaryLiteral (const ObjCDictionaryLiteral *E)
 
llvm::ValueEmitObjCCollectionLiteral (const Expr *E, const ObjCMethodDecl *MethodWithObjects)
 
llvm::ValueEmitObjCSelectorExpr (const ObjCSelectorExpr *E)
 Emit a selector. More...
 
RValue EmitObjCMessageExpr (const ObjCMessageExpr *E, ReturnValueSlot Return=ReturnValueSlot())
 
CleanupKind getARCCleanupKind ()
 
void EmitARCInitWeak (llvm::Value *value, llvm::Value *addr)
 
void EmitARCDestroyWeak (llvm::Value *addr)
 
llvm::ValueEmitARCLoadWeak (llvm::Value *addr)
 
llvm::ValueEmitARCLoadWeakRetained (llvm::Value *addr)
 i8* @objc_loadWeakRetained(i8** addr) More...
 
llvm::ValueEmitARCStoreWeak (llvm::Value *value, llvm::Value *addr, bool ignored)
 
void EmitARCCopyWeak (llvm::Value *dst, llvm::Value *src)
 
void EmitARCMoveWeak (llvm::Value *dst, llvm::Value *src)
 
llvm::ValueEmitARCRetainAutorelease (QualType type, llvm::Value *value)
 
llvm::ValueEmitARCRetainAutoreleaseNonBlock (llvm::Value *value)
 
llvm::ValueEmitARCStoreStrong (LValue lvalue, llvm::Value *value, bool resultIgnored)
 
llvm::ValueEmitARCStoreStrongCall (llvm::Value *addr, llvm::Value *value, bool resultIgnored)
 
llvm::ValueEmitARCRetain (QualType type, llvm::Value *value)
 
llvm::ValueEmitARCRetainNonBlock (llvm::Value *value)
 
llvm::ValueEmitARCRetainBlock (llvm::Value *value, bool mandatory)
 
void EmitARCDestroyStrong (llvm::Value *addr, ARCPreciseLifetime_t precise)
 
void EmitARCRelease (llvm::Value *value, ARCPreciseLifetime_t precise)
 
llvm::ValueEmitARCAutorelease (llvm::Value *value)
 
llvm::ValueEmitARCAutoreleaseReturnValue (llvm::Value *value)
 
llvm::ValueEmitARCRetainAutoreleaseReturnValue (llvm::Value *value)
 
llvm::ValueEmitARCRetainAutoreleasedReturnValue (llvm::Value *value)
 
std::pair< LValue, llvm::Value * > EmitARCStoreAutoreleasing (const BinaryOperator *e)
 
std::pair< LValue, llvm::Value * > EmitARCStoreStrong (const BinaryOperator *e, bool ignored)
 
llvm::ValueEmitObjCThrowOperand (const Expr *expr)
 
llvm::ValueEmitObjCProduceObject (QualType T, llvm::Value *Ptr)
 
llvm::ValueEmitObjCConsumeObject (QualType T, llvm::Value *Ptr)
 
llvm::ValueEmitObjCExtendObjectLifetime (QualType T, llvm::Value *Ptr)
 
llvm::ValueEmitARCExtendBlockObject (const Expr *expr)
 
llvm::ValueEmitARCRetainScalarExpr (const Expr *expr)
 
llvm::ValueEmitARCRetainAutoreleaseScalarExpr (const Expr *expr)
 
void EmitARCIntrinsicUse (ArrayRef< llvm::Value * > values)
 
void EmitObjCAutoreleasePoolPop (llvm::Value *Ptr)
 
llvm::ValueEmitObjCAutoreleasePoolPush ()
 
llvm::ValueEmitObjCMRRAutoreleasePoolPush ()
 
void EmitObjCAutoreleasePoolCleanup (llvm::Value *Ptr)
 
void EmitObjCMRRAutoreleasePoolPop (llvm::Value *Ptr)
 
RValue EmitReferenceBindingToExpr (const Expr *E)
 Emits a reference binding to the passed in expression. More...
 
llvm::ValueEmitScalarExpr (const Expr *E, bool IgnoreResultAssign=false)
 
llvm::ValueEmitScalarConversion (llvm::Value *Src, QualType SrcTy, QualType DstTy)
 
llvm::ValueEmitComplexToScalarConversion (ComplexPairTy Src, QualType SrcTy, QualType DstTy)
 
void EmitAggExpr (const Expr *E, AggValueSlot AS)
 
LValue EmitAggExprToLValue (const Expr *E)
 
void EmitGCMemmoveCollectable (llvm::Value *DestPtr, llvm::Value *SrcPtr, QualType Ty)
 
void EmitExtendGCLifetime (llvm::Value *object)
 
ComplexPairTy EmitComplexExpr (const Expr *E, bool IgnoreReal=false, bool IgnoreImag=false)
 
void EmitComplexExprIntoLValue (const Expr *E, LValue dest, bool isInit)
 
void EmitStoreOfComplex (ComplexPairTy V, LValue dest, bool isInit)
 EmitStoreOfComplex - Store a complex number into the specified l-value. More...
 
ComplexPairTy EmitLoadOfComplex (LValue src, SourceLocation loc)
 EmitLoadOfComplex - Load a complex number from the specified l-value. More...
 
llvm::GlobalVariable * AddInitializerToStaticVarDecl (const VarDecl &D, llvm::GlobalVariable *GV)
 
void EmitCXXGlobalVarDeclInit (const VarDecl &D, llvm::Constant *DeclPtr, bool PerformInit)
 
llvm::Constant * createAtExitStub (const VarDecl &VD, llvm::Constant *Dtor, llvm::Constant *Addr)
 
void registerGlobalDtorWithAtExit (const VarDecl &D, llvm::Constant *fn, llvm::Constant *addr)
 Register a global destructor using the C atexit runtime function. More...
 
void EmitCXXGuardedInit (const VarDecl &D, llvm::GlobalVariable *DeclPtr, bool PerformInit)
 
void GenerateCXXGlobalInitFunc (llvm::Function *Fn, ArrayRef< llvm::Function * > CXXThreadLocals, llvm::GlobalVariable *Guard=nullptr)
 
void GenerateCXXGlobalDtorsFunc (llvm::Function *Fn, const std::vector< std::pair< llvm::WeakVH, llvm::Constant * > > &DtorsAndObjects)
 
void GenerateCXXGlobalVarDeclInitFunc (llvm::Function *Fn, const VarDecl *D, llvm::GlobalVariable *Addr, bool PerformInit)
 Emit the code necessary to initialize the given global variable. More...
 
void EmitCXXConstructExpr (const CXXConstructExpr *E, AggValueSlot Dest)
 
void EmitSynthesizedCXXCopyCtor (llvm::Value *Dest, llvm::Value *Src, const Expr *Exp)
 
void enterFullExpression (const ExprWithCleanups *E)
 
void enterNonTrivialFullExpression (const ExprWithCleanups *E)
 
void EmitCXXThrowExpr (const CXXThrowExpr *E, bool KeepInsertionPoint=true)
 
void EmitLambdaExpr (const LambdaExpr *E, AggValueSlot Dest)
 
RValue EmitAtomicExpr (AtomicExpr *E, llvm::Value *Dest=nullptr)
 
llvm::ValueEmitAnnotationCall (llvm::Value *AnnotationFn, llvm::Value *AnnotatedVal, StringRef AnnotationStr, SourceLocation Location)
 Emit an annotation call (intrinsic or builtin). More...
 
void EmitVarAnnotations (const VarDecl *D, llvm::Value *V)
 Emit local annotations for the local variable V, declared by D. More...
 
llvm::ValueEmitFieldAnnotations (const FieldDecl *D, llvm::Value *V)
 
bool ConstantFoldsToSimpleInteger (const Expr *Cond, bool &Result)
 
bool ConstantFoldsToSimpleInteger (const Expr *Cond, llvm::APSInt &Result)
 
void EmitBranchOnBoolExpr (const Expr *Cond, llvm::BasicBlock *TrueBlock, llvm::BasicBlock *FalseBlock, uint64_t TrueCount)
 
llvm::Constant * EmitCheckTypeDescriptor (QualType T)
 Emit a description of a type in a format suitable for passing to a runtime sanitizer handler. More...
 
llvm::ValueEmitCheckValue (llvm::Value *V)
 Convert a value into a format suitable for passing to a runtime sanitizer handler. More...
 
llvm::Constant * EmitCheckSourceLocation (SourceLocation Loc)
 Emit a description of a source location in a format suitable for passing to a runtime sanitizer handler. More...
 
void EmitCheck (ArrayRef< std::pair< llvm::Value *, SanitizerMask >> Checked, StringRef CheckName, ArrayRef< llvm::Constant * > StaticArgs, ArrayRef< llvm::Value * > DynamicArgs)
 Create a basic block that will call a handler function in a sanitizer runtime with the provided arguments, and create a conditional branch to it. More...
 
void EmitTrapCheck (llvm::Value *Checked)
 Create a basic block that will call the trap intrinsic, and emit a conditional branch to it, for the -ftrapv checks. More...
 
llvm::CallInst * EmitTrapCall (llvm::Intrinsic::ID IntrID)
 Emit a call to trap or debugtrap and attach function attribute "trap-func-name" if specified. More...
 
void EmitNonNullArgCheck (RValue RV, QualType ArgType, SourceLocation ArgLoc, const FunctionDecl *FD, unsigned ParmNum)
 Create a check for a function parameter that may potentially be declared as non-null. More...
 
void EmitCallArg (CallArgList &args, const Expr *E, QualType ArgType)
 EmitCallArg - Emit a single call argument. More...
 
void EmitDelegateCallArg (CallArgList &args, const VarDecl *param, SourceLocation loc)
 
void SetFPAccuracy (llvm::Value *Val, float Accuracy)
 
template<typename T >
void EmitCallArgs (CallArgList &Args, const T *CallArgTypeInfo, CallExpr::const_arg_iterator ArgBeg, CallExpr::const_arg_iterator ArgEnd, const FunctionDecl *CalleeDecl=nullptr, unsigned ParamsToSkip=0)
 EmitCallArgs - Emit call arguments for a function. More...
 
void EmitCallArgs (CallArgList &Args, ArrayRef< QualType > ArgTypes, CallExpr::const_arg_iterator ArgBeg, CallExpr::const_arg_iterator ArgEnd, const FunctionDecl *CalleeDecl=nullptr, unsigned ParamsToSkip=0)
 
- Public Member Functions inherited from clang::CodeGen::CodeGenTypeCache
llvm::CallingConv::ID getRuntimeCC () const
 
llvm::CallingConv::ID getBuiltinCC () const
 

Static Public Member Functions

static void destroyBlockInfos (CGBlockInfo *info)
 Destroy a chain of block layouts. More...
 
static TypeEvaluationKind getEvaluationKind (QualType T)
 
static bool hasScalarEvaluationKind (QualType T)
 
static bool hasAggregateEvaluationKind (QualType T)
 
static unsigned getAccessedFieldNo (unsigned Idx, const llvm::Constant *Elts)
 
static bool ContainsLabel (const Stmt *S, bool IgnoreCaseStmts=false)
 
static bool containsBreak (const Stmt *S)
 
static bool isObjCMethodWithTypeParams (const ObjCMethodDecl *method)
 
template<typename T >
static bool isObjCMethodWithTypeParams (const T *)
 

Public Attributes

CodeGenModuleCGM
 
const TargetInfoTarget
 
LoopInfoStack LoopStack
 
CGBuilderTy Builder
 
const DeclCurFuncDecl
 
const DeclCurCodeDecl
 CurCodeDecl - This is the inner-most code context, which includes blocks. More...
 
const CGFunctionInfoCurFnInfo
 
QualType FnRetTy
 
llvm::Function * CurFn
 
GlobalDecl CurGD
 CurGD - The GlobalDecl for the current function being compiled. More...
 
EHScopeStack::stable_iterator PrologueCleanupDepth
 
JumpDest ReturnBlock
 ReturnBlock - Unified return block. More...
 
llvm::ValueReturnValue
 
llvm::AssertingVH
< llvm::Instruction > 
AllocaInsertPt
 
CGCapturedStmtInfoCapturedStmtInfo
 
unsigned char BoundsChecking
 
SanitizerSet SanOpts
 Sanitizers enabled for this function. More...
 
bool IsSanitizerScope
 True if CodeGen currently emits code implementing sanitizer checks. More...
 
bool CurFuncIsThunk
 
bool AutoreleaseResult
 In ARC, whether we should autorelease the return value. More...
 
bool SawAsmBlock
 
bool IsOutlinedSEHHelper
 
const CodeGen::CGBlockInfoBlockInfo
 
llvm::ValueBlockPointer
 
llvm::DenseMap< const VarDecl
*, FieldDecl * > 
LambdaCaptureFields
 
FieldDeclLambdaThisCaptureField
 
llvm::DenseMap< const VarDecl
*, llvm::Value * > 
NRVOFlags
 A mapping from NRVO variables to the flags used to indicate when the NRVO has been applied to this variable. More...
 
EHScopeStack EHStack
 
llvm::SmallVector< char, 256 > LifetimeExtendedCleanupStack
 
llvm::SmallVector< const
JumpDest *, 2 > 
SEHTryEpilogueStack
 
llvm::AllocaInst * NormalCleanupDest
 i32s containing the indexes of the cleanup destinations. More...
 
unsigned NextCleanupDestIndex
 
CGBlockInfoFirstBlockInfo
 FirstBlockInfo - The head of a singly-linked-list of block layouts. More...
 
llvm::BasicBlock * EHResumeBlock
 EHResumeBlock - Unified block containing a call to llvm.eh.resume. More...
 
llvm::ValueExceptionSlot
 
llvm::AllocaInst * EHSelectorSlot
 
SmallVector< llvm::Value *, 1 > SEHCodeSlotStack
 
llvm::ValueSEHInfo = nullptr
 Value returned by __exception_info intrinsic. More...
 
SmallVector< llvm::Value *, 8 > ObjCEHValueStack
 
- Public Attributes inherited from clang::CodeGen::CodeGenTypeCache
llvm::Type * VoidTy
 void More...
 
llvm::IntegerType * Int8Ty
 i8, i16, i32, and i64 More...
 
llvm::IntegerType * Int16Ty
 
llvm::IntegerType * Int32Ty
 
llvm::IntegerType * Int64Ty
 
llvm::Type * FloatTy
 float, double More...
 
llvm::Type * DoubleTy
 
llvm::IntegerType * IntTy
 int More...
 
union {
   llvm::IntegerType *   IntPtrTy
 
   llvm::IntegerType *   SizeTy
 
   llvm::IntegerType *   PtrDiffTy
 
}; 
 intptr_t, size_t, and ptrdiff_t, which we assume are the same size. More...
 
union {
   llvm::PointerType *   VoidPtrTy
 
   llvm::PointerType *   Int8PtrTy
 
}; 
 void* in address space 0 More...
 
union {
   llvm::PointerType *   VoidPtrPtrTy
 
   llvm::PointerType *   Int8PtrPtrTy
 
}; 
 void** in address space 0 More...
 
unsigned char PointerWidthInBits
 The width of a pointer into the generic address space. More...
 
union {
   unsigned char   PointerAlignInBytes
 
   unsigned char   PointerSizeInBytes
 
   unsigned char   SizeSizeInBytes
 
}; 
 
llvm::CallingConv::ID RuntimeCC
 
llvm::CallingConv::ID BuiltinCC
 

Static Public Attributes

static Destroyer destroyCXXObject
 
static Destroyer destroyARCStrongImprecise
 
static Destroyer destroyARCStrongPrecise
 
static Destroyer destroyARCWeak
 

Friends

class CGCXXABI
 

Detailed Description

CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code.

Definition at line 99 of file CodeGenFunction.h.

Member Typedef Documentation

Definition at line 133 of file CodeGenFunction.h.

typedef void clang::CodeGen::CodeGenFunction::Destroyer(CodeGenFunction &CGF, llvm::Value *addr, QualType ty)

Definition at line 1124 of file CodeGenFunction.h.

typedef void clang::CodeGen::CodeGenFunction::SpecialInitFn(CodeGenFunction &Init, const VarDecl &D, llvm::Value *Address)

Definition at line 1882 of file CodeGenFunction.h.

Definition at line 1319 of file CodeGenFunction.h.

Member Enumeration Documentation

Enumerator
CFITCK_VCall 
CFITCK_NVCall 
CFITCK_DerivedCast 
CFITCK_UnrelatedCast 

Definition at line 1333 of file CodeGenFunction.h.

Situations in which we might emit a check for the suitability of a pointer or glvalue.

Enumerator
TCK_Load 

Checking the operand of a load. Must be suitably sized and aligned.

TCK_Store 

Checking the destination of a store. Must be suitably sized and aligned.

TCK_ReferenceBinding 

Checking the bound value in a reference binding. Must be suitably sized and aligned, but is not required to refer to an object (until the reference is used), per core issue 453.

TCK_MemberAccess 

Checking the object expression in a non-static data member access. Must be an object within its lifetime.

TCK_MemberCall 

Checking the 'this' pointer for a call to a non-static member function. Must be an object within its lifetime.

TCK_ConstructorCall 

Checking the 'this' pointer for a constructor call.

TCK_DowncastPointer 

Checking the operand of a static_cast to a derived pointer type. Must be null or an object within its lifetime.

TCK_DowncastReference 

Checking the operand of a static_cast to a derived reference type. Must be an object within its lifetime.

TCK_Upcast 

Checking the operand of a cast to a base object. Must be suitably sized and aligned.

TCK_UpcastToVirtualBase 

Checking the operand of a cast to a virtual base object. Must be an object within its lifetime.

Definition at line 1806 of file CodeGenFunction.h.

Constructor & Destructor Documentation

CodeGenFunction::CodeGenFunction ( CodeGenModule cgm,
bool  suppressNewContext = false 
)
CodeGenFunction::~CodeGenFunction ( )

Member Function Documentation

void CodeGenFunction::ActivateCleanupBlock ( EHScopeStack::stable_iterator  Cleanup,
llvm::Instruction *  DominatingIP 
)

Activate a cleanup that was created in an inactivated state.

ActivateCleanupBlock - Activates an initially-inactive cleanup. Cannot be used to resurrect a deactivated cleanup.

Parameters
DominatingIP- An instruction which is known to dominate the current IP (if set) and which lies along all paths of execution between the current IP and the the point at which the cleanup comes into scope.

Definition at line 1123 of file CGCleanup.cpp.

References ForActivation, and SetupCleanupBlockActivation().

Referenced by pushCleanupAfterFullExpr().

llvm::GlobalVariable * CodeGenFunction::AddInitializerToStaticVarDecl ( const VarDecl D,
llvm::GlobalVariable *  GV 
)

AddInitializerToStaticVarDecl - Add the initializer for 'D' to the global variable that has already been created for it. If the initializer has a different type than GV does, this may free GV and return a different one. Otherwise it just returns GV.

Definition at line 281 of file CGDecl.cpp.

References Builder, CGM, clang::frontend::CPlusPlus, clang::CodeGen::CodeGenModule::EmitConstantInit(), EmitCXXGuardedInit(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::CodeGenModule::getContext(), clang::VarDecl::getInit(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::ASTContext::getTargetAddressSpace(), clang::ValueDecl::getType(), hasNontrivialDestruction(), and clang::CodeGen::CodeGenModule::isTypeConstant().

Referenced by EmitStaticVarDecl().

void clang::CodeGen::CodeGenFunction::AllocateBlockCXXThisPointer ( const CXXThisExpr E)
void clang::CodeGen::CodeGenFunction::AllocateBlockDecl ( const DeclRefExpr E)
llvm::Value * CodeGenFunction::BuildAppleKextVirtualCall ( const CXXMethodDecl MD,
NestedNameSpecifier Qual,
llvm::Type *  Ty 
)

BuildAppleKextVirtualCall - This routine is to support gcc's kext ABI making indirect call to virtual functions. It makes the call through indexing into the vtable.

Definition at line 280 of file CGCXX.cpp.

References BuildAppleKextVirtualCall(), BuildAppleKextVirtualDestructorCall(), clang::Dtor_Complete, clang::Type::getAs(), clang::NestedNameSpecifier::getAsType(), clang::RecordType::getDecl(), clang::NestedNameSpecifier::getKind(), and clang::NestedNameSpecifier::TypeSpec.

Referenced by EmitCXXMemberOrOperatorMemberCallExpr().

llvm::Value * CodeGenFunction::BuildAppleKextVirtualDestructorCall ( const CXXDestructorDecl DD,
CXXDtorType  Type,
const CXXRecordDecl RD 
)

BuildVirtualCall - This routine makes indirect vtable call for call to virtual destructors. It returns 0 if it could not do it.

Definition at line 301 of file CGCXX.cpp.

References clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), BuildAppleKextVirtualCall(), CGM, clang::CodeGen::Complete, clang::Dtor_Base, clang::CodeGen::CodeGenTypes::GetFunctionType(), and clang::CodeGen::CodeGenModule::getTypes().

Referenced by BuildAppleKextVirtualCall().

llvm::Value * CodeGenFunction::BuildBlockByrefAddress ( llvm::Value BaseAddr,
const VarDecl V 
)

BuildBlockByrefAddress - Computes address location of the variable which is declared as __block.

Definition at line 2011 of file CGBlocks.cpp.

References Builder, clang::NamedDecl::getNameAsString(), and P.

Referenced by drillIntoBlockVariable().

void CodeGenFunction::BuildBlockRelease ( llvm::Value DeclPtr,
BlockFieldFlags  flags 
)
llvm::Type * CodeGenFunction::BuildByRefType ( const VarDecl D)

BuildByRefType - This routine changes a __block variable declared as T x into:

struct { void *__isa; void *__forwarding; int32_t __flags; int32_t __size; void *__copy_helper; // only if needed void *__destroy_helper; // only if needed void *__byref_variable_layout;// only if needed char padding[X]; // only if needed T x; } x

void *__copy_helper;

void *__destroy_helper;

void *__byref_variable_layout;

Definition at line 2036 of file CGBlocks.cpp.

References clang::ASTContext::BlockRequiresCopying(), clang::serialized_diags::create(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::NamedDecl::getNameAsString(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getTarget(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::Int8Ty.

Referenced by EmitAutoVarAlloca().

llvm::Constant* clang::CodeGen::CodeGenFunction::BuildDescriptorBlockDecl ( const BlockExpr ,
const CGBlockInfo Info,
llvm::StructType *  ,
llvm::Constant *  BlockVarLayout 
)
llvm::Value * CodeGenFunction::BuildVector ( ArrayRef< llvm::Value * >  Ops)

Definition at line 6048 of file CGBuiltin.cpp.

References Builder.

Referenced by EmitX86BuiltinExpr().

bool CodeGenFunction::CanDevirtualizeMemberFunctionCall ( const Expr Base,
const CXXMethodDecl MD 
)

CanDevirtualizeMemberFunctionCalls - Checks whether virtual calls on given expr can be devirtualized.

Definition at line 2300 of file CGClass.cpp.

References clang::Expr::getBestDynamicClassType(), getContext(), getLangOpts(), clang::MemberExpr::getMemberDecl(), clang::CXXMethodDecl::getParent(), clang::Decl::hasAttr(), and skipNoOpCastsAndParens().

Referenced by EmitCXXMemberOrOperatorMemberCallExpr().

bool CodeGenFunction::ConstantFoldsToSimpleInteger ( const Expr Cond,
bool ResultBool 
)

ConstantFoldsToSimpleInteger - If the specified expression does not fold to a constant, or if it does but contains a label, return false. If it constant folds return true and set the boolean result in Result.

Definition at line 1009 of file CodeGenFunction.cpp.

Referenced by EmitBranchOnBoolExpr(), EmitIfStmt(), emitOMPIfClause(), and EmitSwitchStmt().

bool CodeGenFunction::ConstantFoldsToSimpleInteger ( const Expr Cond,
llvm::APSInt &  ResultInt 
)

ConstantFoldsToSimpleInteger - If the specified expression does not fold to a constant, or if it does but contains a label, return false. If it constant folds return true and set the folded value.

Definition at line 1023 of file CodeGenFunction.cpp.

References ContainsLabel(), clang::Expr::EvaluateAsInt(), and getContext().

bool CodeGenFunction::containsBreak ( const Stmt S)
static

containsBreak - Return true if the statement contains a break out of it. If the statement (recursively) contains a switch or loop with a break inside of it, this is fine.

Definition at line 984 of file CodeGenFunction.cpp.

Referenced by CollectStatementsForCase().

bool CodeGenFunction::ContainsLabel ( const Stmt S,
bool  IgnoreCaseStmts = false 
)
static

ContainsLabel - Return true if the statement contains a label in it. If this statement is not executed normally, it not containing a label means that we can just remove the code.

Definition at line 952 of file CodeGenFunction.cpp.

Referenced by CollectStatementsForCase(), ConstantFoldsToSimpleInteger(), EmitAutoVarInit(), EmitIfStmt(), EmitStmt(), and FindCaseStatementsForValue().

RValue CodeGenFunction::convertTempToRValue ( llvm::Value addr,
QualType  type,
SourceLocation  loc 
)

Given the address of a temporary variable, produce an r-value of its type.

Definition at line 3471 of file CGExpr.cpp.

References clang::CodeGen::LValue::asAggregateRValue(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.

Referenced by EmitAtomicExpr().

llvm::Type * CodeGenFunction::ConvertType ( QualType  T)
llvm::Type* clang::CodeGen::CodeGenFunction::ConvertType ( const TypeDecl T)
inline

Definition at line 1408 of file CodeGenFunction.h.

References ConvertType(), and getContext().

llvm::Type * CodeGenFunction::ConvertTypeForMem ( QualType  T)
AggValueSlot clang::CodeGen::CodeGenFunction::CreateAggTemp ( QualType  T,
const Twine &  Name = "tmp" 
)
inline
llvm::Constant * CodeGenFunction::createAtExitStub ( const VarDecl VD,
llvm::Constant *  dtor,
llvm::Constant *  addr 
)
llvm::BasicBlock* clang::CodeGen::CodeGenFunction::createBasicBlock ( const Twine &  name = "",
llvm::Function *  parent = nullptr,
llvm::BasicBlock *  before = nullptr 
)
inline

createBasicBlock - Create an LLVM basic block.

Definition at line 1432 of file CodeGenFunction.h.

References clang::Create(), and getLLVMContext().

Referenced by CreateNormalEntry(), EmitAggMemberInitializer(), emitArrayDestroy(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitCaseStmt(), EmitCaseStmtRange(), emitCatchDispatchBlock(), EmitCleanup(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), emitFilterDispatchBlock(), EmitForStmt(), emitIfStmt(), EmitIfStmt(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPCopyinClause(), emitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitVTablePtrCheckForCast(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), EnterCXXTryStmt(), EnterSEHTryStmt(), ExitCXXTryStmt(), ExitSEHTryStmt(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), getEHDispatchBlock(), getEHResumeBlock(), GetIndirectGotoBlock(), getJumpDestForLabel(), getJumpDestInCurrentScope(), getTerminateHandler(), getTerminateLandingPad(), getUnreachableBlock(), PerformReturnAdjustment(), and StartFunction().

AggValueSlot clang::CodeGen::CodeGenFunction::CreateInAllocaTmp ( QualType  T,
const Twine &  Name = "inalloca" 
)

CreateInAllocaTmp - Create a temporary memory object for the given aggregate type.

llvm::AllocaInst * CodeGenFunction::CreateIRTemp ( QualType  T,
const Twine &  Name = "tmp" 
)

CreateIRTemp - Create a temporary IR object of the given type, with appropriate alignment. This routine should only be used when an temporary value needs to be stored into an alloca (for example, to avoid explicit PHI construction), but the type is the IR type, not the type appropriate for storing in memory.

Definition at line 71 of file CGExpr.cpp.

References ConvertType(), CreateTempAlloca(), getContext(), clang::CharUnits::getQuantity(), and clang::ASTContext::getTypeAlignInChars().

Referenced by StartFunction().

llvm::AllocaInst * CodeGenFunction::CreateMemTemp ( QualType  T,
const Twine &  Name = "tmp" 
)
llvm::AllocaInst * CodeGenFunction::CreateTempAlloca ( llvm::Type *  Ty,
const Twine &  Name = "tmp" 
)

CreateTempAlloca - This creates a alloca and inserts it into the entry block. The caller is responsible for setting an appropriate alignment on the alloca.

CreateTempAlloca - This creates a alloca and inserts it into the entry block.

Definition at line 57 of file CGExpr.cpp.

References AllocaInsertPt, and Builder.

Referenced by clang::CodeGen::CallArgList::allocateArgumentMemory(), CreateCoercedLoad(), CreateCoercedStore(), CreateIRTemp(), CreateMemTemp(), EmitAutoVarAlloca(), EmitInitializerForField(), EmitNewArrayInitializer(), EmitParmDecl(), emitWritebackArg(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), getEHSelectorSlot(), getExceptionSlot(), InitCatchParam(), initFullExprCleanup(), clang::CodeGen::DominatingLLVMValue::save(), and SetupCleanupBlockActivation().

bool clang::CodeGen::CodeGenFunction::currentFunctionUsesSEHTry ( ) const
inline

Definition at line 1112 of file CodeGenFunction.h.

References CurCodeDecl.

Referenced by getInvokeDestImpl().

void CodeGenFunction::DeactivateCleanupBlock ( EHScopeStack::stable_iterator  Cleanup,
llvm::Instruction *  DominatingIP 
)

Deactive a cleanup that was created in an active state.

DeactivateCleanupBlock - Deactivates the given cleanup block. The block cannot be reactivated. Pops it if it's the top of the stack.

Parameters
DominatingIP- An instruction which is known to dominate the current IP (if set) and which lies along all paths of execution between the current IP and the the point at which the cleanup comes into scope.

Definition at line 1135 of file CGCleanup.cpp.

References Builder, ForDeactivation, and SetupCleanupBlockActivation().

Referenced by deactivateArgCleanupsBeforeCall(), EmitAnyExprToExn(), EmitCXXNewExpr(), EmitNewArrayInitializer(), clang::CodeGen::CallArgList::freeArgumentMemory(), and pushCleanupAfterFullExpr().

void CodeGenFunction::destroyBlockInfos ( CGBlockInfo info)
static

Destroy a chain of block layouts.

Definition at line 674 of file CGBlocks.cpp.

References clang::CodeGen::CGBlockInfo::NextBlockInfo.

Referenced by ~CodeGenFunction().

void clang::CodeGen::CodeGenFunction::disableDebugInfo ( )
inline
Value * CodeGenFunction::EmitAArch64BuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)

Definition at line 4168 of file CGBuiltin.cpp.

References NeonIntrinsicInfo::AltLLVMIntrinsic, Builder, NeonIntrinsicInfo::BuiltinID, ceil, CGM, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::DoubleTy, EmitAArch64CompareBuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonSplat(), EmitNounwindRuntimeCall(), EmitScalarExpr(), EmitSpecialRegisterBuiltin(), findNeonIntrinsicInMap(), clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::CodeGen::CodeGenTypeCache::FloatTy, floor, fma, clang::ASTContext::GE_None, clang::CallExpr::getArg(), clang::ASTContext::GetBuiltinType(), clang::CallExpr::getCallReturnType(), getContext(), clang::CallExpr::getDirectCallee(), clang::NeonTypeFlags::getEltType(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), GetNeonType(), clang::CallExpr::getNumArgs(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSize(), getValue(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::Expr::isIntegerConstantExpr(), clang::NeonTypeFlags::isPoly(), clang::NeonTypeFlags::isQuad(), clang::NeonTypeFlags::isUnsigned(), NeonIntrinsicInfo::LLVMIntrinsic, NeonIntrinsicInfo::NameHint, nearbyint, P, rint, round, clang::CodeGen::CodeGenTypeCache::SizeTy, sqrt, trunc, NeonIntrinsicInfo::TypeModifier, vectorWrapScalar16(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.

Referenced by EmitTargetBuiltinExpr().

Value * CodeGenFunction::EmitAArch64CompareBuiltinExpr ( llvm::Value Op,
llvm::Type *  Ty,
const llvm::CmpInst::Predicate  Fp,
const llvm::CmpInst::Predicate  Ip,
const llvm::Twine &  Name = "" 
)

Definition at line 3194 of file CGBuiltin.cpp.

References Builder.

Referenced by EmitAArch64BuiltinExpr().

void CodeGenFunction::EmitAggExpr ( const Expr E,
AggValueSlot  Slot 
)

EmitAggExpr - Emit the computation of the specified expression of aggregate type. The result is computed into the given slot, which may be null to indicate that the value is not needed.

EmitAggExpr - Emit the computation of the specified expression of aggregate type. The result is computed into DestPtr. Note that if DestPtr is null, the value of the aggregate expression is not needed. If VolatileDest is true, DestPtr cannot be 0.

Definition at line 1403 of file CGExprAgg.cpp.

References CheckAggExprForMemSetUse(), clang::CodeGen::AggValueSlot::getAddr(), clang::Expr::getType(), hasAggregateEvaluationKind(), and clang::CodeGen::AggValueSlot::isIgnored().

Referenced by EmitAggExprToLValue(), EmitAggMemberInitializer(), EmitAnyExpr(), EmitAnyExprToMem(), EmitAtomicInit(), EmitBaseInitializer(), EmitCompoundStmtWithoutScope(), EmitCXXConstructExpr(), EmitDeclInit(), EmitDelegatingCXXConstructorCall(), EmitExprAsInit(), EmitMaterializeTemporaryExpr(), emitPseudoObjectExpr(), EmitReturnStmt(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), InitCatchParam(), and StoreAnyExprIntoOneUnit().

LValue CodeGenFunction::EmitAggExprToLValue ( const Expr E)
void clang::CodeGen::CodeGenFunction::EmitAggregateAssign ( llvm::Value DestPtr,
llvm::Value SrcPtr,
QualType  EltTy 
)
inline

EmitAggregateCopy - Emit an aggregate assignment.

The difference to EmitAggregateCopy is that tail padding is not copied. This is required for correctness when assigning non-POD structures in C++.

Definition at line 1594 of file CodeGenFunction.h.

References EmitAggregateCopy(), hasVolatileMember(), and clang::CharUnits::Zero().

Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), EmitOMPCopy(), and EmitOMPFirstprivateClause().

void CodeGenFunction::EmitAggregateCopy ( llvm::Value DestPtr,
llvm::Value SrcPtr,
QualType  EltTy,
bool  isVolatile = false,
CharUnits  Alignment = CharUnits::Zero(),
bool  isAssignment = false 
)
void clang::CodeGen::CodeGenFunction::EmitAggregateCopyCtor ( llvm::Value DestPtr,
llvm::Value SrcPtr,
QualType  DestTy,
QualType  SrcTy 
)
inline
void clang::CodeGen::CodeGenFunction::EmitAlignmentAssumption ( llvm::Value PtrValue,
unsigned  Alignment,
llvm::Value OffsetValue = nullptr 
)
inline

Definition at line 1858 of file CodeGenFunction.h.

References Builder, CGM, and clang::CodeGen::CodeGenModule::getDataLayout().

Referenced by emitAlignedClause().

Value * CodeGenFunction::EmitAMDGPUBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
llvm::Value * CodeGenFunction::EmitAnnotationCall ( llvm::Value AnnotationFn,
llvm::Value AnnotatedVal,
StringRef  AnnotationStr,
SourceLocation  Location 
)
RValue CodeGenFunction::EmitAnyExpr ( const Expr E,
AggValueSlot  aggSlot = AggValueSlot::ignored(),
bool  ignoreResult = false 
)

EmitAnyExpr - Emit code to compute the specified expression which can have any type. The result is returned as an RValue struct. If this is an aggregate expression, the aggloc/agglocvolatile arguments indicate where the result should be returned.

Parameters
ignoreResultTrue if the resulting value isn't used.

EmitAnyExpr - Emit code to compute the specified expression which can have any type. The result is returned as an RValue struct. If this is an aggregate expression, AggSlot indicates where the result should be returned.

Definition at line 119 of file CGExpr.cpp.

References clang::CodeGen::AggValueSlot::asRValue(), CreateAggTemp(), EmitAggExpr(), EmitComplexExpr(), EmitScalarExpr(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getComplex(), getEvaluationKind(), clang::Expr::getType(), clang::CodeGen::AggValueSlot::isIgnored(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.

Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitAnyExprToTemp(), EmitIgnoredExpr(), EmitObjCBoxedExpr(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), emitPseudoObjectExpr(), EmitReturnStmt(), emitSafelenClause(), emitScheduleClause(), and GenerateObjCAtomicGetterCopyHelperFunction().

void CodeGenFunction::EmitAnyExprToExn ( const Expr E,
llvm::Value Addr 
)
void CodeGenFunction::EmitAnyExprToMem ( const Expr E,
llvm::Value Location,
Qualifiers  Quals,
bool  IsInit 
)
RValue CodeGenFunction::EmitAnyExprToTemp ( const Expr E)

EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will always be accessible even if no aggregate location is provided.

Definition at line 138 of file CGExpr.cpp.

References CreateAggTemp(), EmitAnyExpr(), clang::Expr::getType(), hasAggregateEvaluationKind(), and clang::CodeGen::AggValueSlot::ignored().

llvm::Value * CodeGenFunction::EmitARCAutorelease ( llvm::Value value)

Autorelease the given object. call i8* @objc_autorelease(i8* value)

Definition at line 2131 of file CGObjC.cpp.

References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_autorelease.

Referenced by EmitARCRetainAutorelease(), and EmitARCRetainAutoreleaseScalarExpr().

llvm::Value * CodeGenFunction::EmitARCAutoreleaseReturnValue ( llvm::Value value)

Autorelease the given object. call i8* @objc_autoreleaseReturnValue(i8* value)

Definition at line 2140 of file CGObjC.cpp.

References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_autoreleaseReturnValue.

Referenced by emitAutoreleaseOfResult().

void CodeGenFunction::EmitARCCopyWeak ( llvm::Value dst,
llvm::Value src 
)

void @objc_copyWeak(i8** dest, i8** src) Disregards the current value in dest. Essentially objc_release(objc_initWeak(dest, objc_readWeakRetained(src)))

Definition at line 2258 of file CGObjC.cpp.

References emitARCCopyOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_copyWeak.

void CodeGenFunction::EmitARCDestroyStrong ( llvm::Value addr,
ARCPreciseLifetime_t  precise 
)

Destroy a __strong variable.

At -O0, emit a call to store 'null' into the address; instrumenting tools prefer this because the address is exposed, but it's relatively cumbersome to optimize.

At -O1 and above, just load and call objc_release.

call void @objc_storeStrong(i8** addr, i8* null)

Definition at line 2053 of file CGObjC.cpp.

References Builder, EmitARCRelease(), EmitARCStoreStrongCall(), and clang::CodeGen::CodeGenModule::getCodeGenOpts().

void CodeGenFunction::EmitARCDestroyWeak ( llvm::Value addr)
llvm::Value * CodeGenFunction::EmitARCExtendBlockObject ( const Expr expr)
void CodeGenFunction::EmitARCInitWeak ( llvm::Value addr,
llvm::Value value 
)

i8* @objc_initWeak(i8** addr, i8* value) Returns value. addr is known to not have a current weak entry. Essentially equivalent to: *addr = nil; objc_storeWeak(addr, value);

Definition at line 2214 of file CGObjC.cpp.

References Builder, emitARCStoreOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::ARCEntrypoints::objc_initWeak.

Referenced by EmitParmDecl(), EmitScalarInit(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), and InitCatchParam().

void CodeGenFunction::EmitARCIntrinsicUse ( ArrayRef< llvm::Value * >  values)

Given a number of pointers, inform the optimizer that they're being intrinsically used up until this point in the program.

Definition at line 1774 of file CGObjC.cpp.

References clang::CodeGen::ARCEntrypoints::clang_arc_use, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), clang::None, and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by EmitObjCCollectionLiteral(), and emitWriteback().

llvm::Value * CodeGenFunction::EmitARCLoadWeak ( llvm::Value addr)

i8* @objc_loadWeak(i8** addr) Essentially objc_autorelease(objc_loadWeakRetained(addr)).

Definition at line 2187 of file CGObjC.cpp.

References emitARCLoadOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_loadWeak.

llvm::Value * CodeGenFunction::EmitARCLoadWeakRetained ( llvm::Value addr)
void CodeGenFunction::EmitARCMoveWeak ( llvm::Value dst,
llvm::Value src 
)

void @objc_moveWeak(i8** dest, i8** src) Disregards the current value in dest. Leaves src pointing to nothing. Essentially (objc_copyWeak(dest, src), objc_destroyWeak(src)).

Definition at line 2249 of file CGObjC.cpp.

References emitARCCopyOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_moveWeak.

void CodeGenFunction::EmitARCRelease ( llvm::Value value,
ARCPreciseLifetime_t  precise 
)
llvm::Value * CodeGenFunction::EmitARCRetain ( QualType  type,
llvm::Value value 
)

Produce the code to do a retain. Based on the type, calls one of: call i8* @objc_retain(i8* value) call i8* @objc_retainBlock(i8* value)

Definition at line 1924 of file CGObjC.cpp.

References EmitARCRetainBlock(), EmitARCRetainNonBlock(), and clang::Type::isBlockPointerType().

Referenced by emitARCRetainLoadOfScalar(), EmitARCRetainScalarExpr(), EmitARCStoreStrong(), EmitObjCProduceObject(), and EmitScalarInit().

llvm::Value * CodeGenFunction::EmitARCRetainAutorelease ( QualType  type,
llvm::Value value 
)

Do a fused retain/autorelease of the given object. call i8* @objc_retainAutorelease(i8* value) or retain = call i8* @objc_retainBlock(i8* value) call i8* @objc_autorelease(i8* retain)

Definition at line 2162 of file CGObjC.cpp.

References Builder, EmitARCAutorelease(), EmitARCRetainAutoreleaseNonBlock(), EmitARCRetainBlock(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::Type::isBlockPointerType().

Referenced by EmitARCRetainAutoreleaseScalarExpr(), EmitObjCExtendObjectLifetime(), EmitObjCMessageExpr(), and EmitScalarInit().

llvm::Value * CodeGenFunction::EmitARCRetainAutoreleasedReturnValue ( llvm::Value value)
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseNonBlock ( llvm::Value value)

Do a fused retain/autorelease of the given object. call i8* @objc_retainAutorelease(i8* value)

Definition at line 2179 of file CGObjC.cpp.

References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_retainAutorelease.

Referenced by EmitARCRetainAutorelease().

llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseReturnValue ( llvm::Value value)

Do a fused retain/autorelease of the given object. call i8* @objc_retainAutoreleaseReturnValue(i8* value)

Definition at line 2150 of file CGObjC.cpp.

References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_retainAutoreleaseReturnValue.

Referenced by tryEmitFusedAutoreleaseOfResult().

llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseScalarExpr ( const Expr expr)
llvm::Value * CodeGenFunction::EmitARCRetainBlock ( llvm::Value value,
bool  mandatory 
)

Retain the given block, with _Block_copy semantics. call i8* @objc_retainBlock(i8* value)

Parameters
mandatory- If false, emit the call with metadata indicating that it's okay for the optimizer to eliminate this call if it can prove that the block never escapes except down the stack.

Definition at line 1945 of file CGObjC.cpp.

References Builder, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), clang::None, and clang::CodeGen::ARCEntrypoints::objc_retainBlock.

Referenced by EmitARCExtendBlockObject(), EmitARCRetain(), EmitARCRetainAutorelease(), EmitARCStoreStrong(), and tryEmitARCRetainScalarExpr().

llvm::Value * CodeGenFunction::EmitARCRetainNonBlock ( llvm::Value value)
llvm::Value * CodeGenFunction::EmitARCRetainScalarExpr ( const Expr e)

EmitARCRetainScalarExpr - Semantically equivalent to EmitARCRetainObject(e->getType(), EmitScalarExpr(e)), but making a best-effort attempt to peephole expressions that naturally produce retained objects.

Definition at line 2731 of file CGObjC.cpp.

References EmitARCRetain(), enterFullExpression(), clang::Expr::getType(), and tryEmitARCRetainScalarExpr().

Referenced by clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitObjCForCollectionStmt(), and EmitScalarInit().

std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreAutoreleasing ( const BinaryOperator e)
llvm::Value * CodeGenFunction::EmitARCStoreStrong ( LValue  dst,
llvm::Value newValue,
bool  ignored 
)
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreStrong ( const BinaryOperator e,
bool  ignored 
)
llvm::Value * CodeGenFunction::EmitARCStoreStrongCall ( llvm::Value addr,
llvm::Value value,
bool  ignored 
)
llvm::Value * CodeGenFunction::EmitARCStoreWeak ( llvm::Value addr,
llvm::Value value,
bool  ignored 
)

i8* @objc_storeWeak(i8** addr, i8* value) Returns value.

Definition at line 2202 of file CGObjC.cpp.

References emitARCStoreOperation(), clang::CodeGen::CodeGenModule::getARCEntrypoints(), and clang::CodeGen::ARCEntrypoints::objc_storeWeak.

Referenced by EmitScalarInit().

Value * CodeGenFunction::EmitARMBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
void CodeGenFunction::emitArrayDestroy ( llvm::Value begin,
llvm::Value end,
QualType  type,
Destroyer destroyer,
bool  checkZeroLength,
bool  useEHCleanup 
)

emitArrayDestroy - Destroys all the elements of the given array, beginning from last to first. The array cannot be zero-length.

Parameters
begin- a type* denoting the first element of the array
end- a type* denoting one past the end of the array
type- the element type of the array
destroyer- the function to call to destroy elements
useEHCleanup- whether to push an EH cleanup to destroy the remaining elements in case the destruction of a single element throws

Definition at line 1467 of file CGDecl.cpp.

References Builder, createBasicBlock(), EmitBlock(), clang::Type::isArrayType(), PopCleanupBlock(), pushRegularPartialArrayCleanup(), and clang::CodeGen::CodeGenTypeCache::SizeTy.

Referenced by EmitArrayDelete(), emitDestroy(), and emitPartialArrayDestroy().

llvm::Value * CodeGenFunction::emitArrayLength ( const ArrayType origArrayType,
QualType baseType,
llvm::Value *&  addr 
)

emitArrayLength - Compute the length of an array, even if it's a VLA, and drill down to the base element type.

Computes the length of an array in elements, as well as the base element type and a properly-typed first element pointer.

Definition at line 1392 of file CodeGenFunction.cpp.

References Builder, ConvertType(), clang::ASTContext::getAsArrayType(), getContext(), clang::ArrayType::getElementType(), getElementType(), getVLASize(), and clang::CodeGen::CodeGenTypeCache::SizeTy.

Referenced by EmitAggregateCopy(), EmitCXXAggrConstructorCall(), emitDestroy(), and EmitOMPAggregateAssign().

LValue CodeGenFunction::EmitArraySubscriptExpr ( const ArraySubscriptExpr E,
bool  Accessed = false 
)
void CodeGenFunction::EmitAsanPrologueOrEpilogue ( bool  Prologue)
void CodeGenFunction::EmitAsmStmt ( const AsmStmt S)

Definition at line 1811 of file CGStmt.cpp.

References clang::TargetCodeGenInfo::addReturnRegisterOutputs(), AddVariableConstraints(), clang::TargetCodeGenInfo::adjustInlineAsmType(), clang::TargetInfo::ConstraintInfo::allowsMemory(), clang::TargetInfo::ConstraintInfo::allowsRegister(), Builder, CGM, ConvertType(), ConvertTypeForMem(), CurFnInfo, clang::TargetInfo::ConstraintInfo::earlyClobber(), EmitLValue(), EmitStoreThroughLValue(), FnRetTy, clang::AsmStmt::generateAsmString(), clang::CodeGen::RValue::get(), clang::AsmStmt::getAsmLoc(), getAsmSrcLocInfo(), clang::AsmStmt::getClobber(), clang::TargetInfo::getClobbers(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CodeGenModule::getDiags(), clang::Expr::getExprLoc(), clang::AsmStmt::getInputConstraint(), clang::AsmStmt::getInputExpr(), getLLVMContext(), clang::TargetInfo::getNormalizedGCCRegisterName(), clang::AsmStmt::getNumClobbers(), clang::AsmStmt::getNumInputs(), clang::AsmStmt::getNumOutputs(), clang::AsmStmt::getOutputConstraint(), clang::AsmStmt::getOutputExpr(), clang::SourceLocation::getRawEncoding(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), getTarget(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::TargetInfo::ConstraintInfo::getTiedOperand(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::TargetInfo::ConstraintInfo::hasMatchingInput(), hasScalarEvaluationKind(), clang::TargetInfo::ConstraintInfo::hasTiedOperand(), clang::Expr::IgnoreParenNoopCasts(), Input, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::ABIArgInfo::isDirect(), clang::CodeGen::ABIArgInfo::isExtend(), clang::TargetInfo::ConstraintInfo::isReadWrite(), clang::AsmStmt::isVolatile(), MakeAddrLValue(), clang::DiagnosticsEngine::Report(), ReturnValue, S, SawAsmBlock, SimplifyConstraint(), clang::TargetInfo::validateInputConstraint(), clang::TargetInfo::validateOutputConstraint(), and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by EmitStmt().

std::pair< RValue, llvm::Value * > CodeGenFunction::EmitAtomicCompareExchange ( LValue  Obj,
RValue  Expected,
RValue  Desired,
SourceLocation  Loc,
llvm::AtomicOrdering  Success = llvm::SequentiallyConsistent,
llvm::AtomicOrdering  Failure = llvm::SequentiallyConsistent,
bool  IsWeak = false,
AggValueSlot  Slot = AggValueSlot::ignored() 
)

Emit a compare-and-exchange op for atomic type.

Definition at line 1725 of file CGAtomic.cpp.

References clang::CodeGen::LValue::getAddress(), clang::CodeGen::RValue::getAggregateAddr(), and clang::CodeGen::RValue::isAggregate().

RValue CodeGenFunction::EmitAtomicExpr ( AtomicExpr E,
llvm::Value Dest = nullptr 
)

Definition at line 673 of file CGAtomic.cpp.

References clang::CodeGen::CallArgList::add(), AddDirectArgument(), clang::AtomicExpr::AO_ABI_memory_order_acq_rel, clang::AtomicExpr::AO_ABI_memory_order_acquire, clang::AtomicExpr::AO_ABI_memory_order_consume, clang::AtomicExpr::AO_ABI_memory_order_relaxed, clang::AtomicExpr::AO_ABI_memory_order_release, clang::AtomicExpr::AO_ABI_memory_order_seq_cst, clang::ASTContext::BoolTy, Builder, CGM, convertTempToRValue(), createBasicBlock(), CreateMemTemp(), CurFn, EmitAtomicInit(), emitAtomicLibcall(), EmitAtomicOp(), EmitCastToVoidPtr(), EmitScalarExpr(), EmitStoreOfScalar(), EmitUnsupportedRValue(), EmitValToTemp(), clang::CodeGen::RValue::get(), clang::Type::getAs(), getContext(), clang::Expr::getExprLoc(), clang::ASTContext::getIntPtrType(), clang::ASTContext::getIntTypeForBitwidth(), getLLVMContext(), clang::TargetInfo::getMaxAtomicInlineWidth(), clang::AtomicExpr::getNumSubExprs(), clang::AtomicExpr::getOp(), clang::AtomicExpr::getOrder(), clang::AtomicExpr::getOrderFail(), clang::Type::getPointeeType(), clang::AtomicExpr::getPtr(), clang::CharUnits::getQuantity(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenModule::getSize(), getTarget(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), clang::ASTContext::getTypeSizeInChars(), clang::QualType::getUnqualifiedType(), clang::AtomicExpr::getVal1(), clang::AtomicExpr::getVal2(), clang::AtomicExpr::getWeak(), clang::CodeGen::CodeGenTypeCache::IntTy, clang::AtomicExpr::isCmpXChg(), clang::Type::isPointerType(), clang::Type::isVoidType(), clang::CodeGen::LValue::MakeAddr(), MakeAddrLValue(), clang::CodeGen::CodeGenTypeCache::SizeTy, clang::ASTContext::toBits(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.

void CodeGenFunction::EmitAtomicInit ( Expr E,
LValue  lvalue 
)
RValue CodeGenFunction::EmitAtomicLoad ( LValue  LV,
SourceLocation  SL,
AggValueSlot  Slot = AggValueSlot::ignored() 
)
RValue CodeGenFunction::EmitAtomicLoad ( LValue  src,
SourceLocation  loc,
llvm::AtomicOrdering  AO,
bool  IsVolatile = false,
AggValueSlot  resultSlot = AggValueSlot::ignored() 
)

Emit a load from an l-value of atomic type. Note that the r-value we produce is an r-value of the atomic value type.

Definition at line 1258 of file CGAtomic.cpp.

void CodeGenFunction::EmitAtomicStore ( RValue  rvalue,
LValue  lvalue,
bool  isInit 
)
void CodeGenFunction::EmitAtomicStore ( RValue  rvalue,
LValue  dest,
llvm::AtomicOrdering  AO,
bool  IsVolatile,
bool  isInit 
)
void CodeGenFunction::EmitAtomicUpdate ( LValue  LVal,
llvm::AtomicOrdering  AO,
const llvm::function_ref< RValue(RValue)> &  UpdateOp,
bool  IsVolatile 
)

Definition at line 1743 of file CGAtomic.cpp.

Referenced by EmitOMPAtomicSimpleUpdateExpr().

void CodeGenFunction::EmitAttributedStmt ( const AttributedStmt S)
CodeGenFunction::AutoVarEmission CodeGenFunction::EmitAutoVarAlloca ( const VarDecl D)

EmitAutoVarAlloca - Emit the alloca and debug information for a local variable. Does not emit initialization or destruction.

Definition at line 885 of file CGDecl.cpp.

References BuildByRefType(), Builder, CGM, ConvertTypeForMem(), CreateTempAlloca(), EmitLifetimeStart(), EmitStaticVarDecl(), EmitVarAnnotations(), EmitVariablyModifiedType(), EnsureInsertPoint(), clang::Type::getAs(), clang::ASTContext::getBaseElementType(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::VarDecl::getInit(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLangOpts(), clang::Decl::getLocation(), clang::NamedDecl::getName(), clang::CharUnits::getQuantity(), getTarget(), clang::ValueDecl::getType(), getVLASize(), clang::Decl::hasAttr(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::InternalLinkage, clang::Type::isArrayType(), clang::Expr::isConstantInitializer(), clang::Type::isConstantSizeType(), clang::VarDecl::isConstexpr(), clang::VarDecl::isNRVOVariable(), clang::Type::isObjCObjectPointerType(), clang::QualType::isPODType(), clang::Type::isRecordType(), clang::CodeGen::CodeGenModule::isTypeConstant(), clang::Type::isVariablyModifiedType(), clang::CodeGenOptions::LimitedDebugInfo, clang::CodeGen::NormalCleanup, NRVOFlags, pushStackRestore(), ReturnValue, Stack, and clang::CodeGen::CodeGenFunction::AutoVarEmission::useLifetimeMarkers().

Referenced by EmitAutoVarDecl(), EmitObjCForCollectionStmt(), EmitOMPFirstprivateClause(), EmitOMPLinearClauseInit(), emitPrivateLinearVars(), and emitPrivateLoopCounters().

void CodeGenFunction::EmitAutoVarCleanups ( const AutoVarEmission emission)
void CodeGenFunction::EmitAutoVarDecl ( const VarDecl D)

EmitAutoVarDecl - Emit an auto variable declaration.

This function can be called with a null (unreachable) insert point.

EmitAutoVarDecl - Emit code and set up an entry in LocalDeclMap for a variable declaration with auto, register, or no storage class specifier. These turn into simple stack objects, or GlobalValues depending on target.

Definition at line 847 of file CGDecl.cpp.

References EmitAutoVarAlloca(), EmitAutoVarCleanups(), and EmitAutoVarInit().

Referenced by EmitForStmt(), EmitIfStmt(), EmitInitializerForField(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitVarDecl(), and EmitWhileStmt().

void CodeGenFunction::EmitAutoVarInit ( const AutoVarEmission emission)
void CodeGenFunction::emitAutoVarTypeCleanup ( const AutoVarEmission emission,
QualType::DestructionKind  dtorKind 
)
LValue CodeGenFunction::EmitBinaryOperatorLValue ( const BinaryOperator E)
void CodeGenFunction::EmitBlock ( llvm::BasicBlock *  BB,
bool  IsFinished = false 
)

EmitBlock - Emit the given block

  • BB and set it as the insert point, adding a fall-through branch from the current insert block if necessary. It is legal to call this function even if there is no current insertion point.

IsFinished - If true, indicates that the caller has finished emitting branches to the given block and does not expect to emit code into it. This means the block can be ignored if it is unreachable.

Definition at line 348 of file CGStmt.cpp.

References Builder, CurFn, and EmitBranch().

Referenced by EmitAggMemberInitializer(), emitArrayDestroy(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), emitCatchDispatchBlock(), EmitCleanup(), EmitCtorPrologue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), emitFilterDispatchBlock(), EmitForStmt(), emitIfStmt(), EmitIfStmt(), EmitLabel(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPCopyinClause(), emitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitReturnBlock(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitVTablePtrCheckForCast(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), FinishFunction(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), and PerformReturnAdjustment().

void CodeGenFunction::EmitBlockAfterUses ( llvm::BasicBlock *  BB)

EmitBlockAfterUses - Emit the given block somewhere hopefully near its uses, and leave the insertion point in it.

Definition at line 385 of file CGStmt.cpp.

References Builder, and CurFn.

Referenced by emitCatchDispatchBlock(), emitFilterDispatchBlock(), ExitCXXTryStmt(), and ExitSEHTryStmt().

RValue CodeGenFunction::EmitBlockCallExpr ( const CallExpr E,
ReturnValueSlot  ReturnValue 
)
llvm::Value * CodeGenFunction::EmitBlockCopyAndAutorelease ( llvm::Value Block,
QualType  Ty 
)
llvm::Value * CodeGenFunction::EmitBlockLiteral ( const BlockExpr blockExpr)

Emit a block literal expression in the current function.

Definition at line 684 of file CGBlocks.cpp.

References computeBlockInfo(), findAndRemoveBlockInfo(), clang::BlockExpr::getBlockDecl(), and clang::BlockDecl::hasCaptures().

llvm::Value * CodeGenFunction::EmitBlockLiteral ( const CGBlockInfo Info)

Definition at line 703 of file CGBlocks.cpp.

References clang::CodeGen::CGBlockInfo::Address, clang::CodeGen::BLOCK_HAS_COPY_DISPOSE, clang::CodeGen::BLOCK_HAS_CXX_OBJ, clang::CodeGen::BLOCK_HAS_EXTENDED_LAYOUT, clang::CodeGen::BLOCK_HAS_SIGNATURE, clang::CodeGen::BLOCK_USE_STRET, buildBlockDescriptor(), Builder, buildGlobalBlock(), clang::CodeGen::CGBlockInfo::CanBeGlobal, clang::BlockDecl::captures(), clang::BlockDecl::capturesCXXThis(), clang::CK_LValueToRValue, clang::CodeGen::CGBlockInfo::CXXThisIndex, clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::CGBlockInfo::DominatingIP, clang::CodeGen::AggValueSlot::forAddr(), GenerateBlockFunction(), clang::CodeGen::BlockFlags::getBitMask(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CGBlockInfo::Capture::getCleanup(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), clang::QualType::getObjCLifetime(), clang::CharUnits::getQuantity(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CGBlockInfo::HasCapturedVariableLayout, clang::CodeGen::CGBlockInfo::HasCXXObject, clang::CodeGen::CodeGenTypeCache::IntTy, clang::Type::isBlockPointerType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::BlockDecl::isConversionFromLambda(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::Type::isReferenceType(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), clang::CodeGen::CGBlockInfo::NeedsCopyDispose, clang::Qualifiers::OCL_Strong, clang::ImplicitCastExpr::OnStack, clang::CodeGen::CGBlockInfo::StructureType, clang::ast_matchers::type, clang::CodeGen::CGBlockInfo::UsesStret, clang::VK_LValue, clang::VK_RValue, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.

void CodeGenFunction::EmitBlockWithFallThrough ( llvm::BasicBlock *  BB,
const Stmt S 
)

When instrumenting to collect profile data, the counts for some blocks such as switch cases need to not include the fall-through counts, so emit a branch around the instrumentation code. When not instrumenting, this just calls EmitBlock().

Definition at line 803 of file CodeGenFunction.cpp.

References CGM, createBasicBlock(), EmitBlock(), EmitBranch(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getCurrentProfileCount(), HaveInsertPoint(), incrementProfileCounter(), and setCurrentProfileCount().

Referenced by EmitCaseStmt(), EmitCaseStmtRange(), EmitDefaultStmt(), and EmitDoStmt().

void CodeGenFunction::EmitBoundsCheck ( const Expr E,
const Expr Base,
llvm::Value Index,
QualType  IndexType,
bool  Accessed 
)

Emit a check that Base points into an array object, which we can access at index Index. Accessed should be false if we this expression is used as an lvalue, for instance in "&Arr[Idx]".

Definition at line 700 of file CGExpr.cpp.

References Builder, getArrayIndexingBound(), clang::Expr::getExprLoc(), and clang::Type::isSignedIntegerOrEnumerationType().

Referenced by emitPointerArithmetic().

void CodeGenFunction::EmitBranch ( llvm::BasicBlock *  Block)

EmitBranch - Emit a branch to the specified basic block from the current insert block, taking care to avoid creation of branches from dummy blocks. It is legal to call this function even if there is no current insertion point.

This function clears the current insertion point. The caller should follow calls to this function with calls to Emit*Block prior to generation new code.

Definition at line 368 of file CGStmt.cpp.

References Builder.

Referenced by EmitAggMemberInitializer(), EmitBlock(), EmitBlockWithFallThrough(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXForRangeStmt(), EmitDynamicCast(), EmitForStmt(), emitIfStmt(), EmitIfStmt(), EmitIndirectGotoStmt(), emitOMPIfClause(), EmitOMPInnerLoop(), and EmitWhileStmt().

void CodeGenFunction::EmitBranchOnBoolExpr ( const Expr Cond,
llvm::BasicBlock *  TrueBlock,
llvm::BasicBlock *  FalseBlock,
uint64_t  TrueCount 
)

EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if statement) to the specified blocks. Based on the condition, this might try to simplify the codegen of the conditional based on the branch. TrueCount should be the number of times we expect the condition to evaluate to true based on PGO data.

EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. for an if statement) to the specified blocks. Based on the condition, this might try to simplify the codegen of the conditional based on the branch.

Definition at line 1043 of file CodeGenFunction.cpp.

References clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), clang::BO_LAnd, clang::BO_LOr, Builder, ConstantFoldsToSimpleInteger(), createBasicBlock(), EmitBlock(), EmitCXXThrowExpr(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), EvaluateExprAsBool(), getCurrentProfileCount(), getProfileCount(), clang::Expr::IgnoreParens(), incrementProfileCounter(), setCurrentProfileCount(), and clang::UO_LNot.

Referenced by clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitIfStmt(), emitOMPIfClause(), EmitOMPInnerLoop(), and emitPreCond().

void CodeGenFunction::EmitBranchThroughCleanup ( JumpDest  Dest)

EmitBranchThroughCleanup - Emit a branch from the current insert block through the normal cleanup handling code (if any) and then on to

  • Dest.

Terminate the current block by emitting a branch which might leave the current cleanup-protected scope. The target scope may not yet be known, in which case this will require a fixup.

As a side-effect, this method clears the insertion point.

Definition at line 940 of file CGCleanup.cpp.

References clang::CodeGen::EHCleanupScope::addBranchAfter(), clang::CodeGen::EHCleanupScope::addBranchThrough(), Builder, CreateNormalEntry(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, clang::CodeGen::EHScopeStack::stable_iterator::encloses(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CodeGen::CodeGenFunction::JumpDest::getDestIndex(), clang::CodeGen::EHCleanupScope::getEnclosingNormalCleanup(), clang::CodeGen::CodeGenFunction::JumpDest::getScopeDepth(), clang::CodeGen::BranchFixup::InitialBranch, clang::CodeGen::EHCleanupScope::isNormalCleanup(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), clang::CodeGen::BranchFixup::OptimisticBranchBlock, and clang::CodeGen::EHScopeStack::stable_iterator::strictlyEncloses().

Referenced by EmitBreakStmt(), EmitContinueStmt(), EmitCXXForRangeStmt(), EmitForStmt(), EmitForwardingCallToLambda(), EmitGotoStmt(), EmitIndirectGotoStmt(), EmitOMPInnerLoop(), EmitReturnStmt(), EmitSEHLeaveStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), and clang::CodeGen::CodeGenFunction::FinallyInfo::exit().

void CodeGenFunction::EmitBreakStmt ( const BreakStmt S)

Definition at line 1112 of file CGStmt.cpp.

References EmitBranchThroughCleanup(), EmitStopPoint(), and HaveInsertPoint().

Referenced by EmitSimpleStmt().

RValue CodeGenFunction::EmitBuiltinExpr ( const FunctionDecl FD,
unsigned  BuiltinID,
const CallExpr E,
ReturnValueSlot  ReturnValue 
)
RValue CodeGenFunction::EmitBuiltinNewDeleteCall ( const FunctionProtoType Type,
const Expr Arg,
bool  IsDelete 
)
void CodeGenFunction::emitByrefStructureInit ( const AutoVarEmission emission)
RValue CodeGenFunction::EmitCall ( const CGFunctionInfo FnInfo,
llvm::Value Callee,
ReturnValueSlot  ReturnValue,
const CallArgList Args,
const Decl TargetDecl = nullptr,
llvm::Instruction **  callOrInvoke = nullptr 
)

EmitCall - Generate a call of the given function, expecting the given result type, and using the given argument list which specifies both the LLVM arguments and the types they were derived from.

Parameters
TargetDecl- If given, the decl of the function in a direct call; used to set attributes on the call (noreturn, etc.).

Definition at line 3106 of file CGCall.cpp.

References clang::CharUnits::alignmentAtOffset(), clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::CGFunctionInfo::arg_size(), BuildAggStore(), Builder, clang::CodeGen::CodeGenModule::ConstructAttributeList(), clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), CreateCoercedLoad(), CreateCoercedStore(), deactivateArgCleanupsBeforeCall(), clang::CodeGen::ABIArgInfo::Direct, EmitInitStoreOfNonAggregate(), emitWritebacks(), clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CodeGen::CallArgList::freeArgumentMemory(), clang::CharUnits::fromQuantity(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getAggregate(), clang::CodeGen::RValue::getAggregateAddr(), clang::CodeGen::CGFunctionInfo::getArgStruct(), clang::Decl::getAttr(), clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::CallArgList::getCleanupsToDeactivate(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::RValue::getComplex(), clang::CodeGen::CodeGenTypes::getContext(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::ABIArgInfo::getDirectOffset(), getElementType(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getIndirectAlign(), clang::CodeGen::ABIArgInfo::getIndirectByVal(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenTypes::getLLVMContext(), clang::CodeGen::ABIArgInfo::getPaddingType(), clang::CharUnits::getQuantity(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CallArgList::getStackBase(), clang::CodeGen::CodeGenTypes::getTarget(), clang::ASTContext::getTypeAlignInChars(), clang::CodeGen::ReturnValueSlot::getValue(), clang::CodeGen::CallArgList::hasWritebacks(), clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::RValue::isAggregate(), clang::CodeGen::RValue::isComplex(), clang::CodeGen::ABIArgInfo::isDirect(), clang::CodeGen::ABIArgInfo::isInAlloca(), clang::CodeGen::ABIArgInfo::isIndirect(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::ReturnValueSlot::isUnused(), clang::CodeGen::CGFunctionInfo::isVariadic(), clang::CodeGen::ReturnValueSlot::isVolatile(), clang::CodeGen::RValue::isVolatileQualified(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.

Referenced by emitAtomicLibcall(), EmitCallAndReturnForThunk(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXConstructorCall(), EmitCXXMemberCallExpr(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberPointerCallExpr(), EmitCXXStructorCall(), EmitDelegateCXXConstructorCall(), EmitForwardingCallToLambda(), emitLibraryCall(), EmitNewDeleteCall(), EmitObjCForCollectionStmt(), emitStructGetterCall(), emitStructSetterCall(), EmitSynthesizedCXXCopyCtorCall(), generateObjCGetterBody(), and generateObjCSetterBody().

RValue CodeGenFunction::EmitCall ( QualType  FnType,
llvm::Value Callee,
const CallExpr E,
ReturnValueSlot  ReturnValue,
const Decl TargetDecl = nullptr,
llvm::Value Chain = nullptr 
)
void CodeGenFunction::EmitCallAndReturnForThunk ( llvm::Value Callee,
const ThunkInfo Thunk 
)

Definition at line 241 of file CGVTables.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::CGCXXABI::adjustCallArgsForDestructorThunk(), clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::CGFunctionInfo::arg_size(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), AutoreleaseResult, CGM, CurFnInfo, CurGD, EmitCall(), EmitDelegateCallArg(), EmitMustTailThunk(), clang::CodeGen::CGCXXABI::EmitReturnFromThunk(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), FinishFunction(), clang::CodeGen::RequiredArgs::forPrototypePlus(), clang::CodeGen::RValue::get(), clang::Type::getAs(), clang::CodeGen::CGFunctionInfo::getCallingConvention(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CGFunctionInfo::getRegParm(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::FunctionType::getReturnType(), clang::CXXMethodDecl::getThisType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), hasScalarEvaluationKind(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::CodeGen::ABIArgInfo::Indirect, clang::ReturnAdjustment::isEmpty(), clang::CodeGen::CGFunctionInfo::isNoReturn(), clang::CodeGen::ReturnValueSlot::isNull(), clang::Type::isVoidType(), clang::QualType::isVolatileQualified(), LoadCXXThis(), clang::FunctionDecl::params(), PerformReturnAdjustment(), clang::CodeGen::CGCXXABI::performThisAdjustment(), clang::ThunkInfo::Return, ReturnValue, similar(), clang::ThunkInfo::This, clang::CodeGen::CGFunctionInfo::usesInAlloca(), and clang::ASTContext::VoidPtrTy.

Referenced by generateThunk().

void CodeGenFunction::EmitCallArg ( CallArgList args,
const Expr E,
QualType  ArgType 
)
template<typename T >
void clang::CodeGen::CodeGenFunction::EmitCallArgs ( CallArgList Args,
const T *  CallArgTypeInfo,
CallExpr::const_arg_iterator  ArgBeg,
CallExpr::const_arg_iterator  ArgEnd,
const FunctionDecl CalleeDecl = nullptr,
unsigned  ParamsToSkip = 0 
)
inline
void CodeGenFunction::EmitCallArgs ( CallArgList Args,
ArrayRef< QualType ArgTypes,
CallExpr::const_arg_iterator  ArgBeg,
CallExpr::const_arg_iterator  ArgEnd,
const FunctionDecl CalleeDecl = nullptr,
unsigned  ParamsToSkip = 0 
)
RValue CodeGenFunction::EmitCallExpr ( const CallExpr E,
ReturnValueSlot  ReturnValue = ReturnValueSlot() 
)
LValue CodeGenFunction::EmitCallExprLValue ( const CallExpr E)
llvm::CallSite CodeGenFunction::EmitCallOrInvoke ( llvm::Value Callee,
ArrayRef< llvm::Value * >  Args,
const Twine &  Name = "" 
)

Emits a call or invoke instruction to the given function, depending on the current state of the EH stack.

Definition at line 3069 of file CGCall.cpp.

References Builder, and clang::CodeGen::CodeGenModule::getLangOpts().

Referenced by EmitCapturedStmt(), and emitProxyTaskFunction().

llvm::CallSite CodeGenFunction::EmitCallOrInvoke ( llvm::Value Callee,
const Twine &  Name = "" 
)

Definition at line 3061 of file CGCall.cpp.

References clang::None.

void CodeGenFunction::EmitCapturedLocals ( CodeGenFunction ParentCGF,
const Stmt OutlinedStmt,
bool  IsFilter 
)
llvm::Function * CodeGenFunction::EmitCapturedStmt ( const CapturedStmt S,
CapturedRegionKind  K 
)

Generate an outlined function for the body of a CapturedStmt, store any captured variables into the captured struct, and call the outlined function.

Definition at line 2177 of file CGStmt.cpp.

References CapturedStmtInfo, CGM, EmitCallOrInvoke(), GenerateCapturedStmtFunction(), clang::CodeGen::LValue::getAddress(), and InitCapturedStruct().

Referenced by EmitStmt().

void CodeGenFunction::EmitCaseStmt ( const CaseStmt S)
void CodeGenFunction::EmitCaseStmtRange ( const CaseStmt S)

EmitCaseStmtRange - If case statement range is not too big then add multiple cases to switch instruction, one for each value within the range. If range is too big then emit "if" condition check.

Definition at line 1139 of file CGStmt.cpp.

References Builder, createBasicBlock(), CurFn, EmitBlockWithFallThrough(), EmitStmt(), clang::Expr::EvaluateKnownConstInt(), getContext(), clang::CaseStmt::getLHS(), getProfileCount(), clang::CaseStmt::getRHS(), and clang::CaseStmt::getSubStmt().

Referenced by EmitCaseStmt().

LValue CodeGenFunction::EmitCastLValue ( const CastExpr E)

EmitCastLValue - Casts are never lvalues unless that cast is to a reference type. If the cast is to a reference, we can have the usual lvalue result, otherwise if a cast is needed by the code generator in an lvalue context, then it must mean that we need the address of an aggregate in order to access one of its members. This can happen for all the reasons that casts are permitted with aggregate result, including noop aggregate casts, and cast from scalar to union.

Definition at line 2945 of file CGExpr.cpp.

References Builder, clang::CK_AddressSpaceConversion, clang::CK_AnyPointerToBlockPointerCast, clang::CK_ARCConsumeObject, clang::CK_ARCExtendBlockObject, clang::CK_ARCProduceObject, clang::CK_ARCReclaimReturnedObject, clang::CK_ArrayToPointerDecay, clang::CK_AtomicToNonAtomic, clang::CK_BaseToDerived, clang::CK_BaseToDerivedMemberPointer, clang::CK_BitCast, clang::CK_BlockPointerToObjCPointerCast, clang::CK_BuiltinFnToFnPtr, clang::CK_ConstructorConversion, clang::CK_CopyAndAutoreleaseBlockObject, clang::CK_CPointerToObjCPointerCast, clang::CK_Dependent, clang::CK_DerivedToBase, clang::CK_DerivedToBaseMemberPointer, clang::CK_Dynamic, clang::CK_FloatingCast, clang::CK_FloatingComplexCast, clang::CK_FloatingComplexToBoolean, clang::CK_FloatingComplexToIntegralComplex, clang::CK_FloatingComplexToReal, clang::CK_FloatingRealToComplex, clang::CK_FloatingToBoolean, clang::CK_FloatingToIntegral, clang::CK_FunctionToPointerDecay, clang::CK_IntegralCast, clang::CK_IntegralComplexCast, clang::CK_IntegralComplexToBoolean, clang::CK_IntegralComplexToFloatingComplex, clang::CK_IntegralComplexToReal, clang::CK_IntegralRealToComplex, clang::CK_IntegralToBoolean, clang::CK_IntegralToFloating, clang::CK_IntegralToPointer, clang::CK_LValueBitCast, clang::CK_LValueToRValue, clang::CK_MemberPointerToBoolean, clang::CK_NonAtomicToAtomic, clang::CK_NoOp, clang::CK_NullToMemberPointer, clang::CK_NullToPointer, clang::CK_ObjCObjectLValueCast, clang::CK_PointerToBoolean, clang::CK_PointerToIntegral, clang::CK_ReinterpretMemberPointer, clang::CK_ToUnion, clang::CK_ToVoid, clang::CK_UncheckedDerivedToBase, clang::CK_UserDefinedConversion, clang::CK_VectorSplat, clang::CK_ZeroToOCLEvent, clang::CodeGen::LValue::getAddress(), clang::Type::getAs(), clang::CastExpr::getCastKind(), clang::RecordType::getDecl(), clang::Expr::getExprLoc(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::CastExpr::path_begin(), and clang::CastExpr::path_end().

llvm::Value * CodeGenFunction::EmitCastToVoidPtr ( llvm::Value value)

Emit a cast to void* in the appropriate address space.

Definition at line 43 of file CGExpr.cpp.

References Builder, getLLVMContext(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.

Referenced by AddDirectArgument(), EmitAtomicExpr(), EmitAtomicStore(), and EmitNullBaseClassInitialization().

void CodeGenFunction::EmitCheck ( ArrayRef< std::pair< llvm::Value *, SanitizerMask >>  Checked,
StringRef  CheckName,
ArrayRef< llvm::Constant * >  StaticArgs,
ArrayRef< llvm::Value * >  DynamicArgs 
)

Create a basic block that will call a handler function in a sanitizer runtime with the provided arguments, and create a conditional branch to it.

Definition at line 2295 of file CGExpr.cpp.

References Builder, emitCheckHandlerCall(), getRecoverableKind(), and Node.

Referenced by EmitVariablyModifiedType(), EmitVTablePtrCheck(), and GenerateCode().

LValue CodeGenFunction::EmitCheckedLValue ( const Expr E,
TypeCheckKind  TCK 
)

Same as EmitLValue but additionally we generate checking code to guard against undefined behavior. This is only suitable when we know that the address will be used to access the object.

Definition at line 804 of file CGExpr.cpp.

References clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::CodeGen::LValue::isBitField(), and clang::CodeGen::LValue::isSimple().

llvm::Constant * CodeGenFunction::EmitCheckSourceLocation ( SourceLocation  Loc)

Emit a description of a source location in a format suitable for passing to a runtime sanitizer handler.

Emit a representation of a SourceLocation for passing to a handler in a sanitizer runtime library. The format for this data is:

struct SourceLocation {
const char *Filename;
int32_t Line, Column;
};

For an invalid SourceLocation, the Filename pointer is null.

Definition at line 2213 of file CGExpr.cpp.

References Builder, Column, clang::PresumedLoc::getColumn(), clang::PresumedLoc::getFilename(), clang::PresumedLoc::getLine(), clang::PresumedLoc::isValid(), and Line.

Referenced by EmitVariablyModifiedType(), EmitVTablePtrCheck(), and GenerateCode().

llvm::Constant * CodeGenFunction::EmitCheckTypeDescriptor ( QualType  T)

Emit a description of a type in a format suitable for passing to a runtime sanitizer handler.

Emit a type description suitable for use by a runtime sanitizer library. The format of a type descriptor is

{ i16 TypeKind, i16 TypeInfo }

followed by an array of i8 containing the type name. TypeKind is 0 for an integer, 1 for a floating point value, and -1 for anything else.

Definition at line 2135 of file CGExpr.cpp.

References clang::DiagnosticsEngine::ak_qualtype, Builder, AttributeLangSupport::C, clang::QualType::getAsOpaquePtr(), clang::Type::isFloatingType(), clang::Type::isIntegerType(), clang::Type::isSignedIntegerType(), and clang::None.

Referenced by EmitVariablyModifiedType(), and EmitVTablePtrCheck().

llvm::Value * CodeGenFunction::EmitCheckValue ( llvm::Value V)

Convert a value into a format suitable for passing to a runtime sanitizer handler.

Definition at line 2178 of file CGExpr.cpp.

References Builder.

Value * CodeGenFunction::EmitCommonNeonBuiltinExpr ( unsigned  BuiltinID,
unsigned  LLVMIntrinsic,
unsigned  AltLLVMIntrinsic,
const char *  NameHint,
unsigned  Modifier,
const CallExpr E,
SmallVectorImpl< llvm::Value * > &  Ops,
llvm::Value Align = nullptr 
)
LValue CodeGenFunction::EmitComplexAssignmentLValue ( const BinaryOperator E)

Emit an l-value for an assignment (simple or compound) of complex type.

Definition at line 1065 of file CGExprComplex.cpp.

References clang::BO_Assign, and clang::BinaryOperator::getOpcode().

LValue CodeGenFunction::EmitComplexCompoundAssignmentLValue ( const CompoundAssignOperator E)

Definition at line 1086 of file CGExprComplex.cpp.

References getComplexOp(), and clang::BinaryOperator::getOpcode().

ComplexPairTy CodeGenFunction::EmitComplexExpr ( const Expr E,
bool  IgnoreReal = false,
bool  IgnoreImag = false 
)

EmitComplexExpr - Emit the computation of the specified expression of complex type, returning the result.

EmitComplexExpr - Emit the computation of the specified expression of complex type, ignoring the result.

Definition at line 1035 of file CGExprComplex.cpp.

References getComplexType(), and clang::Expr::getType().

Referenced by EmitAnyExpr(), EmitAtomicInit(), EmitExprAsInit(), and EvaluateExprAsBool().

void CodeGenFunction::EmitComplexExprIntoLValue ( const Expr E,
LValue  dest,
bool  isInit 
)

EmitComplexExprIntoLValue - Emit the given expression of complex type and place its result into the specified l-value.

Definition at line 1044 of file CGExprComplex.cpp.

References getComplexType(), and clang::Expr::getType().

Referenced by EmitAggMemberInitializer(), EmitAnyExprToMem(), EmitDeclInit(), EmitInitializerForField(), EmitReturnStmt(), and StoreAnyExprIntoOneUnit().

CodeGenFunction::ComplexPairTy CodeGenFunction::EmitComplexPrePostIncDec ( const UnaryOperator E,
LValue  LV,
bool  isInc,
bool  isPre 
)
Value * CodeGenFunction::EmitComplexToScalarConversion ( ComplexPairTy  Src,
QualType  SrcTy,
QualType  DstTy 
)

EmitComplexToScalarConversion - Emit a conversion from the specified complex type to the specified destination type, where the destination type is an LLVM scalar type.

Definition at line 3490 of file CGExprScalar.cpp.

References hasScalarEvaluationKind(), and clang::Type::isAnyComplexType().

Referenced by convertToScalarValue(), and EvaluateExprAsBool().

LValue CodeGenFunction::EmitCompoundAssignmentLValue ( const CompoundAssignOperator E)
LValue CodeGenFunction::EmitCompoundLiteralLValue ( const CompoundLiteralExpr E)
llvm::Value * CodeGenFunction::EmitCompoundStmt ( const CompoundStmt S,
bool  GetLast = false,
AggValueSlot  AggSlot = AggValueSlot::ignored() 
)

EmitCompoundStmt - Emit a compound statement {..} node. If GetLast is true, this captures the expression result of the last sub-statement and returns it (for use by the statement expression extension).

Definition at line 275 of file CGStmt.cpp.

References EmitCompoundStmtWithoutScope(), getContext(), and clang::CompoundStmt::getLBracLoc().

Referenced by EmitSimpleStmt().

llvm::Value * CodeGenFunction::EmitCompoundStmtWithoutScope ( const CompoundStmt S,
bool  GetLast = false,
AggValueSlot  AVS = AggValueSlot::ignored() 
)
void CodeGenFunction::EmitCondBrHints ( llvm::LLVMContext &  Context,
llvm::BranchInst *  CondBr,
ArrayRef< const Attr * >  Attrs 
)
LValue CodeGenFunction::EmitConditionalOperatorLValue ( const AbstractConditionalOperator E)
void CodeGenFunction::EmitConstructorBody ( FunctionArgList Args)
void CodeGenFunction::EmitContinueStmt ( const ContinueStmt S)

Definition at line 1124 of file CGStmt.cpp.

References EmitBranchThroughCleanup(), EmitStopPoint(), and HaveInsertPoint().

Referenced by EmitSimpleStmt().

void CodeGenFunction::EmitCtorPrologue ( const CXXConstructorDecl CD,
CXXCtorType  CtorType,
FunctionArgList Args 
)
RValue CodeGenFunction::EmitCUDAKernelCallExpr ( const CUDAKernelCallExpr E,
ReturnValueSlot  ReturnValue 
)
void CodeGenFunction::EmitCXXAggrConstructorCall ( const CXXConstructorDecl ctor,
const ConstantArrayType arrayType,
llvm::Value arrayBegin,
const CXXConstructExpr E,
bool  zeroInitialize = false 
)

EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array.

Parameters
ctorthe constructor to call for each element
arrayTypethe type of the array to initialize
arrayBeginan arrayType*
zeroInitializetrue if each element should be zero-initialized before it is constructed

Definition at line 1656 of file CGClass.cpp.

References emitArrayLength().

Referenced by EmitCXXConstructExpr(), and EmitNewArrayInitializer().

void CodeGenFunction::EmitCXXAggrConstructorCall ( const CXXConstructorDecl ctor,
llvm::Value numElements,
llvm::Value arrayBegin,
const CXXConstructExpr E,
bool  zeroInitialize = false 
)

EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array.

Parameters
ctorthe constructor to call for each element
numElementsthe number of elements in the array; may be zero
arrayBegina T*, where T is the type constructed by ctor
zeroInitializetrue if each element should be zero-initialized before it is constructed

Definition at line 1675 of file CGClass.cpp.

References Builder, createBasicBlock(), clang::Ctor_Complete, destroyCXXObject, EmitBlock(), EmitCXXConstructorCall(), EmitNullInitialization(), getContext(), getLangOpts(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getTypeDeclType(), clang::CXXRecordDecl::hasTrivialDestructor(), pushRegularPartialArrayCleanup(), clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::ast_matchers::type.

LValue CodeGenFunction::EmitCXXBindTemporaryLValue ( const CXXBindTemporaryExpr E)
void CodeGenFunction::EmitCXXConstructExpr ( const CXXConstructExpr E,
AggValueSlot  Dest 
)
LValue CodeGenFunction::EmitCXXConstructLValue ( const CXXConstructExpr E)
void CodeGenFunction::EmitCXXConstructorCall ( const CXXConstructorDecl D,
CXXCtorType  Type,
bool  ForVirtualBase,
bool  Delegating,
llvm::Value This,
const CXXConstructExpr E 
)
void CodeGenFunction::EmitCXXDeleteExpr ( const CXXDeleteExpr E)
void CodeGenFunction::EmitCXXDestructorCall ( const CXXDestructorDecl D,
CXXDtorType  Type,
bool  ForVirtualBase,
bool  Delegating,
llvm::Value This 
)
void CodeGenFunction::EmitCXXForRangeStmt ( const CXXForRangeStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
void CodeGenFunction::EmitCXXGlobalVarDeclInit ( const VarDecl D,
llvm::Constant *  DeclPtr,
bool  PerformInit 
)
void CodeGenFunction::EmitCXXGuardedInit ( const VarDecl D,
llvm::GlobalVariable *  DeclPtr,
bool  PerformInit 
)

Emit code in this function to perform a guarded variable initialization. Guarded initializations are used when it's not possible to prove that an initialization will be done exactly once, e.g. with a static local variable or a static data member of a class template.

Definition at line 237 of file CGDeclCXX.cpp.

References CGM, clang::CodeGen::CGCXXABI::EmitGuardedInit(), clang::CodeGen::CodeGenModule::Error(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getCXXABI(), and clang::Decl::getLocation().

Referenced by AddInitializerToStaticVarDecl(), and GenerateCXXGlobalVarDeclInitFunc().

RValue CodeGenFunction::EmitCXXMemberCallExpr ( const CXXMemberCallExpr E,
ReturnValueSlot  ReturnValue 
)
RValue CodeGenFunction::EmitCXXMemberOrOperatorCall ( const CXXMethodDecl MD,
llvm::Value Callee,
ReturnValueSlot  ReturnValue,
llvm::Value This,
llvm::Value ImplicitParam,
QualType  ImplicitParamTy,
const CallExpr E 
)
RValue CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr ( const CallExpr CE,
const CXXMethodDecl MD,
ReturnValueSlot  ReturnValue,
bool  HasQualifier,
NestedNameSpecifier Qualifier,
bool  IsArrow,
const Expr Base 
)

Definition at line 132 of file CGExprCXX.cpp.

References clang::CodeGen::CGCXXABI::adjustThisArgumentForVirtualFunctionCall(), clang::CallExpr::arg_begin(), clang::CallExpr::arg_end(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), BuildAppleKextVirtualCall(), CanDevirtualizeMemberFunctionCall(), CFITCK_NVCall, CGM, clang::CodeGen::Complete, clang::Ctor_Complete, clang::Dtor_Complete, EmitAggregateAssign(), EmitAggregateCopy(), EmitCXXMemberOrOperatorCall(), EmitLValue(), EmitScalarExpr(), clang::CodeGen::CGCXXABI::EmitVirtualDestructorCall(), EmitVTablePtrCheckForCall(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getAddrOfCXXStructor(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::Expr::getBestDynamicClassType(), clang::QualType::getCanonicalType(), clang::CXXMethodDecl::getCorrespondingMethodInClass(), clang::CodeGen::CodeGenModule::getCXXABI(), getCXXRecord(), clang::CodeGen::CodeGenTypes::GetFunctionType(), getLangOpts(), clang::CallExpr::getLocStart(), clang::CallExpr::getNumArgs(), clang::CXXMethodDecl::getParent(), clang::FunctionDecl::getReturnType(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGCXXABI::getVirtualFunctionPointer(), GetVTablePtr(), clang::SanitizerSet::has(), clang::Expr::ignoreParenBaseCasts(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CXXMethodDecl::isCopyAssignmentOperator(), clang::FunctionDecl::isDefaulted(), clang::CXXRecordDecl::isDynamicClass(), clang::CXXMethodDecl::isMoveAssignmentOperator(), clang::CodeGen::ReturnValueSlot::isNull(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), clang::CXXMethodDecl::isVirtual(), clang::RecordDecl::mayInsertExtraPadding(), and SanOpts.

Referenced by EmitCXXMemberCallExpr(), and EmitCXXOperatorMemberCallExpr().

RValue CodeGenFunction::EmitCXXMemberPointerCallExpr ( const CXXMemberCallExpr E,
ReturnValueSlot  ReturnValue 
)
llvm::Value * CodeGenFunction::EmitCXXNewExpr ( const CXXNewExpr E)
RValue CodeGenFunction::EmitCXXOperatorMemberCallExpr ( const CXXOperatorCallExpr E,
const CXXMethodDecl MD,
ReturnValueSlot  ReturnValue 
)
RValue CodeGenFunction::EmitCXXStructorCall ( const CXXMethodDecl MD,
llvm::Value Callee,
ReturnValueSlot  ReturnValue,
llvm::Value This,
llvm::Value ImplicitParam,
QualType  ImplicitParamTy,
const CallExpr E,
StructorType  Type 
)
void CodeGenFunction::EmitCXXTemporary ( const CXXTemporary Temporary,
QualType  TempType,
llvm::Value Ptr 
)

Emits all the code to cause the given temporary to be cleaned up.

Definition at line 1165 of file CGCleanup.cpp.

References clang::CodeGen::NormalAndEHCleanup.

void CodeGenFunction::EmitCXXThrowExpr ( const CXXThrowExpr E,
bool  KeepInsertionPoint = true 
)
void CodeGenFunction::EmitCXXTryStmt ( const CXXTryStmt S)

Definition at line 549 of file CGException.cpp.

References EmitStmt(), EnterCXXTryStmt(), ExitCXXTryStmt(), and clang::CXXTryStmt::getTryBlock().

Referenced by EmitStmt().

llvm::Value * CodeGenFunction::EmitCXXTypeidExpr ( const CXXTypeidExpr E)
LValue CodeGenFunction::EmitCXXTypeidLValue ( const CXXTypeidExpr E)

Definition at line 3263 of file CGExpr.cpp.

References clang::Expr::getType().

llvm::Value * CodeGenFunction::EmitCXXUuidofExpr ( const CXXUuidofExpr E)

Definition at line 3267 of file CGExpr.cpp.

References Builder, and clang::Expr::getType().

LValue CodeGenFunction::EmitCXXUuidofLValue ( const CXXUuidofExpr E)

Definition at line 3272 of file CGExpr.cpp.

References clang::Expr::getType().

void CodeGenFunction::EmitDecl ( const Decl D)
void CodeGenFunction::EmitDeclRefExprDbgValue ( const DeclRefExpr E,
llvm::Constant *  Init 
)
LValue CodeGenFunction::EmitDeclRefLValue ( const DeclRefExpr E)
void CodeGenFunction::EmitDeclStmt ( const DeclStmt S)

Definition at line 1102 of file CGStmt.cpp.

References clang::DeclStmt::decls(), EmitDecl(), EmitStopPoint(), and HaveInsertPoint().

Referenced by EmitSimpleStmt().

void CodeGenFunction::EmitDefaultStmt ( const DefaultStmt S)

Definition at line 1300 of file CGStmt.cpp.

References EmitBlockWithFallThrough(), EmitStmt(), and clang::DefaultStmt::getSubStmt().

Referenced by EmitSimpleStmt().

void CodeGenFunction::EmitDelegateCallArg ( CallArgList args,
const VarDecl param,
SourceLocation  loc 
)

EmitDelegateCallArg - We are performing a delegate call; that is, the current function is delegating to another one. Produce a r-value suitable for passing the given parameter.

Definition at line 2499 of file CGCall.cpp.

References clang::CodeGen::CallArgList::add(), Builder, clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getAggregate(), clang::Type::getAs(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::ValueDecl::getType(), isInAllocaArgument(), and clang::ast_matchers::type.

Referenced by EmitCallAndReturnForThunk(), EmitDelegateCXXConstructorCall(), EmitLambdaBlockInvokeBody(), and EmitLambdaDelegatingInvokeBody().

void CodeGenFunction::EmitDelegateCXXConstructorCall ( const CXXConstructorDecl Ctor,
CXXCtorType  CtorType,
const FunctionArgList Args,
SourceLocation  Loc 
)
void CodeGenFunction::EmitDelegatingCXXConstructorCall ( const CXXConstructorDecl Ctor,
const FunctionArgList Args 
)
void CodeGenFunction::EmitDeleteCall ( const FunctionDecl DeleteFD,
llvm::Value Ptr,
QualType  DeleteTy 
)
void CodeGenFunction::emitDestroy ( llvm::Value addr,
QualType  type,
Destroyer destroyer,
bool  useEHCleanupForArray 
)

emitDestroy - Immediately perform the destruction of the given object.

Parameters
addr- the address of the object; a type*
type- the type of the object; if an array type, all objects are destroyed in reverse order
destroyer- the function to call to destroy individual elements
useEHCleanupForArray- whether an EH cleanup should be used when destroying array elements, in case one of the destructions throws an exception

Definition at line 1432 of file CGDecl.cpp.

References Builder, emitArrayDestroy(), emitArrayLength(), clang::ASTContext::getAsArrayType(), and getContext().

Referenced by generateDestroyHelper().

void CodeGenFunction::EmitDestructorBody ( FunctionArgList Args)
void CodeGenFunction::EmitDoStmt ( const DoStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
llvm::Value * CodeGenFunction::EmitDynamicCast ( llvm::Value V,
const CXXDynamicCastExpr DCE 
)
void CodeGenFunction::EmitEndEHSpec ( const Decl D)
void CodeGenFunction::EmitExprAsInit ( const Expr init,
const ValueDecl D,
LValue  lvalue,
bool  capturedByInit 
)

EmitExprAsInit - Emits the code necessary to initialize a location in memory with the given initializer.

Emit an expression as an initializer for a variable at the given location. The expression is not necessarily the normal initializer for the variable, and the address is not necessarily its normal location.

Parameters
initthe initializing expression
varthe variable to act as if we're initializing
locthe address to initialize; its type is a pointer to the LLVM mapping of the variable's type
alignmentthe alignment of the address
capturedByInittrue if the variable is a __block variable whose address is potentially changed by the initializer

Definition at line 1211 of file CGDecl.cpp.

References clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, drillIntoBlockVariable(), EmitAggExpr(), EmitAtomicInit(), EmitComplexExpr(), EmitReferenceBindingToExpr(), EmitScalarInit(), EmitStoreOfComplex(), EmitStoreThroughLValue(), clang::CodeGen::AggValueSlot::forLValue(), getEvaluationKind(), clang::ValueDecl::getType(), clang::Type::isAtomicType(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::Type::isReferenceType(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::ast_matchers::type.

Referenced by EmitAutoVarInit(), EmitInitializerForField(), and EmitOMPLinearClauseInit().

void CodeGenFunction::EmitExtendGCLifetime ( llvm::Value object)

EmitExtendGCLifetime - Given a pointer to an Objective-C object, make sure it survives garbage collection until this point.

Definition at line 2867 of file CGObjC.cpp.

References clang::CodeGen::RequiredArgs::All, Builder, EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.

LValue CodeGenFunction::EmitExtVectorElementExpr ( const ExtVectorElementExpr E)
llvm::Value * CodeGenFunction::EmitExtVectorElementLValue ( LValue  V)
llvm::Value * CodeGenFunction::EmitFieldAnnotations ( const FieldDecl D,
llvm::Value V 
)
void CodeGenFunction::EmitForStmt ( const ForStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
void CodeGenFunction::EmitForwardingCallToLambda ( const CXXMethodDecl LambdaCallOperator,
CallArgList CallArgs 
)
llvm::Value * CodeGenFunction::EmitFromMemory ( llvm::Value Value,
QualType  Ty 
)

EmitFromMemory - Change a scalar value from its memory representation to its value representation.

Definition at line 1233 of file CGExpr.cpp.

References Builder, and hasBooleanRepresentation().

Referenced by EmitFromInt().

void CodeGenFunction::EmitFunctionBody ( FunctionArgList Args,
const Stmt Body 
)
void CodeGenFunction::EmitFunctionEpilog ( const CGFunctionInfo FI,
bool  EmitRetDbgLoc,
SourceLocation  EndLoc 
)
void CodeGenFunction::EmitFunctionInstrumentation ( const char *  Fn)

EmitFunctionInstrumentation - Emit LLVM code to call the specified instrumentation function with the current function and the call site, if function instrumentation is enabled.

Definition at line 346 of file CodeGenFunction.cpp.

References Builder, CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), CurFn, EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by FinishFunction(), and StartFunction().

void CodeGenFunction::EmitFunctionProlog ( const CGFunctionInfo FI,
llvm::Function *  Fn,
const FunctionArgList Args 
)

EmitFunctionProlog - Emit the target specific LLVM code to load the arguments for the given function. This is also responsible for naming the LLVM function arguments.

Definition at line 1762 of file CGCall.cpp.

References clang::CharUnits::alignmentAtOffset(), clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::CGFunctionInfo::arg_size(), Builder, clang::CodeGen::CodeGenTypes::ConvertType(), CreateCoercedStore(), clang::CodeGen::ABIArgInfo::Direct, emitArgumentDemotion(), clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CharUnits::fromQuantity(), clang::CodeGen::CGFunctionInfo::getArgStruct(), clang::ASTContext::getAsVariableArrayType(), clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::CodeGenTypes::getContext(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenTypes::getCXXABI(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::ASTContext::getDeclAlign(), clang::CodeGen::ABIArgInfo::getDirectOffset(), getElementType(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getIndirectAlign(), clang::CodeGen::ABIArgInfo::getIndirectRealign(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CodeGenTypes::getLLVMContext(), clang::DeclaratorDecl::getLocStart(), clang::NamedDecl::getName(), getNonNullAttr(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenTypes::getTarget(), clang::ASTContext::getTargetAddressSpace(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSizeInChars(), hasScalarEvaluationKind(), clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::Type::isConstantSizeType(), clang::CodeGen::ABIArgInfo::isDirect(), clang::Type::isIncompleteType(), clang::QualType::isRestrictQualified(), clang::CXXMethodDecl::isVirtual(), and clang::ArrayType::Static.

Referenced by StartFunction().

void clang::CodeGen::CodeGenFunction::EmitGCMemmoveCollectable ( llvm::Value DestPtr,
llvm::Value SrcPtr,
QualType  Ty 
)

EmitGCMemmoveCollectable - Emit special API for structs with object pointers.

void CodeGenFunction::EmitGotoStmt ( const GotoStmt S)
void CodeGenFunction::EmitIfStmt ( const IfStmt S)
void CodeGenFunction::EmitIgnoredExpr ( const Expr E)

EmitIgnoredExpr - Emit an expression in a context which ignores the result.

EmitIgnoredExpr - Emit code to compute the specified expression, ignoring the result.

Definition at line 107 of file CGExpr.cpp.

References EmitAnyExpr(), EmitLValue(), clang::CodeGen::AggValueSlot::ignored(), and clang::Expr::isRValue().

Referenced by emitLinearClauseFinal(), EmitMaterializeTemporaryExpr(), EmitOMPCopy(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLinearClauseInit(), emitPreCond(), emitPseudoObjectExpr(), emitReductionFunction(), EmitStmt(), EmitVariablyModifiedType(), and tryEmitARCRetainPseudoObject().

void CodeGenFunction::emitImplicitAssignmentOperatorBody ( FunctionArgList Args)
void CodeGenFunction::EmitIndirectGotoStmt ( const IndirectGotoStmt S)
void CodeGenFunction::EmitInitializerForField ( FieldDecl Field,
LValue  LHS,
Expr Init,
ArrayRef< VarDecl * >  ArrayIndexes 
)
LValue CodeGenFunction::EmitInitListLValue ( const InitListExpr E)
llvm::Value * CodeGenFunction::EmitIvarOffset ( const ObjCInterfaceDecl Interface,
const ObjCIvarDecl Ivar 
)

Definition at line 3311 of file CGExpr.cpp.

Referenced by generateObjCGetterBody(), and generateObjCSetterBody().

void CodeGenFunction::EmitLabel ( const LabelDecl D)
void CodeGenFunction::EmitLabelStmt ( const LabelStmt S)
void CodeGenFunction::EmitLambdaBlockInvokeBody ( )
void CodeGenFunction::EmitLambdaDelegatingInvokeBody ( const CXXMethodDecl MD)
void CodeGenFunction::EmitLambdaExpr ( const LambdaExpr E,
AggValueSlot  Dest 
)
LValue CodeGenFunction::EmitLambdaLValue ( const LambdaExpr E)

Definition at line 3286 of file CGExpr.cpp.

References clang::CodeGen::AggValueSlot::getAddr(), and clang::Expr::getType().

void CodeGenFunction::EmitLambdaStaticInvokeFunction ( const CXXMethodDecl MD)
void CodeGenFunction::EmitLambdaToBlockPointerBody ( FunctionArgList Args)
llvm::BasicBlock * CodeGenFunction::EmitLandingPad ( )
void CodeGenFunction::EmitLifetimeEnd ( llvm::Value Size,
llvm::Value Addr 
)
llvm::Value * CodeGenFunction::EmitLifetimeStart ( uint64_t  Size,
llvm::Value Addr 
)

Emit a lifetime.begin marker if some criteria are satisfied.

Returns
a pointer to the temporary size Value if a marker was emitted, null otherwise

Definition at line 856 of file CGDecl.cpp.

References Builder, AttributeLangSupport::C, CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMLifetimeStartFn(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::LangOptions::Sanitize.

Referenced by EmitAutoVarAlloca().

RValue CodeGenFunction::EmitLoadOfBitfieldLValue ( LValue  LV)
ComplexPairTy CodeGenFunction::EmitLoadOfComplex ( LValue  src,
SourceLocation  loc 
)

EmitLoadOfComplex - Load a complex number from the specified l-value.

EmitLoadOfComplex - Load a complex number from the specified address.

Definition at line 1060 of file CGExprComplex.cpp.

Referenced by generateObjCGetterBody(), and InitCatchParam().

RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue ( LValue  V)
RValue CodeGenFunction::EmitLoadOfGlobalRegLValue ( LValue  LV)

Load of global gamed gegisters are always calls to intrinsics.

Definition at line 1444 of file CGExpr.cpp.

References Builder, clang::CodeGen::LValue::getGlobalReg(), clang::CodeGen::LValue::getType(), clang::Type::isIntegerType(), and clang::Type::isPointerType().

RValue CodeGenFunction::EmitLoadOfLValue ( LValue  LV,
SourceLocation  Loc 
)
llvm::Value * CodeGenFunction::EmitLoadOfScalar ( llvm::Value Addr,
bool  Volatile,
unsigned  Alignment,
QualType  Ty,
SourceLocation  Loc,
llvm::MDNode *  TBAAInfo = nullptr,
QualType  TBAABaseTy = QualType(),
uint64_t  TBAAOffset = 0 
)

EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation.

Definition at line 1120 of file CGExpr.cpp.

References Builder, End, clang::CharUnits::fromQuantity(), clang::Type::getAs(), getElementType(), getRangeForType(), hasBooleanRepresentation(), clang::Type::isAtomicType(), and clang::Type::isVectorType().

Referenced by AddDirectArgument(), EmitARCStoreStrong(), emitProxyTaskFunction(), EmitScalarInit(), emitWriteback(), InitCatchParam(), and LoadObjCSelf().

llvm::Value * CodeGenFunction::EmitLoadOfScalar ( LValue  lvalue,
SourceLocation  Loc 
)

EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation. The l-value must be a simple l-value.

Definition at line 1055 of file CGExpr.cpp.

References clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CharUnits::getQuantity(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), and clang::CodeGen::LValue::isVolatile().

LValue CodeGenFunction::EmitLValue ( const Expr E)

EmitLValue - Emit code to compute a designator that specifies the location of the expression.

This can return one of two things: a simple address or a bitfield reference. In either case, the LLVM Value* in the LValue structure is guaranteed to be an LLVM pointer type.

If this returns a bitfield reference, nothing about the pointee type of the LLVM value is known: For example, it may not be a pointer to an integer.

If this returns a normal address, and if the lvalue's C type is fixed size, this method guarantees that the returned pointer type will point to an LLVM type of the same size of the lvalue's type. If the lvalue has a variable length type, this is not possible.

Definition at line 831 of file CGExpr.cpp.

References clang::Type::getAs(), clang::Expr::getType(), and clang::Type::isAnyComplexType().

Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), EmitAsmStmt(), emitCPPObjectAtomicSetterCall(), EmitCXXConstructorCall(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitIgnoredExpr(), emitLinearClauseFinal(), EmitLValueOrThrowExpression(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicReadExpr(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), EmitOMPCopyinClause(), EmitOMPFirstprivateClause(), EmitOMPHelperVar(), EmitOMPLastprivateClauseFinal(), EmitOMPLastprivateClauseInit(), EmitOMPReductionClauseInit(), emitPseudoObjectExpr(), EmitReferenceBindingToExpr(), emitStructSetterCall(), EmitTypeidFromVTable(), EmitVAListRef(), emitWritebackArg(), and tryEmitARCRetainLoadOfScalar().

LValue CodeGenFunction::EmitLValueForField ( LValue  Base,
const FieldDecl Field 
)

Definition at line 2680 of file CGExpr.cpp.

References clang::Qualifiers::addCVRQualifiers(), Builder, EmitBitCastOfLValueToProperType(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::Type::getAs(), clang::CodeGen::CGRecordLayout::getBitFieldInfo(), clang::FieldDecl::getFieldIndex(), clang::ASTRecordLayout::getFieldOffset(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::NamedDecl::getName(), clang::Qualifiers::getObjCGCAttr(), clang::FieldDecl::getParent(), clang::Type::getPointeeType(), clang::CodeGen::LValue::getQuals(), clang::CharUnits::getQuantity(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), clang::ValueDecl::getType(), clang::CodeGen::LValue::getVRQualifiers(), clang::Decl::hasAttr(), clang::FieldDecl::isBitField(), clang::Type::isIncompleteType(), clang::Type::isReferenceType(), clang::TagDecl::isUnion(), clang::CharUnits::isZero(), clang::Qualifiers::removeObjCGCAttr(), clang::CodeGen::LValue::setTBAABaseType(), clang::CodeGen::LValue::setTBAAInfo(), clang::CodeGen::LValue::setTBAAOffset(), clang::CodeGen::CGBitFieldInfo::StorageSize, clang::ast_matchers::type, clang::Qualifiers::Volatile, clang::Qualifiers::Weak, and clang::QualType::withCVRQualifiers().

Referenced by EmitCapturedFieldLValue(), emitDestructorsFunction(), EmitMaterializeTemporaryExpr(), emitProxyTaskFunction(), emitTaskPrivateMappingFunction(), and GenerateCapturedStmtFunction().

LValue CodeGenFunction::EmitLValueForFieldInitialization ( LValue  Base,
const FieldDecl Field 
)

EmitLValueForFieldInitialization - Like EmitLValueForField, except that if the Field is a reference, this will return the address of the reference and not the address of the value stored in the reference.

Definition at line 2794 of file CGExpr.cpp.

References Builder, EmitBitCastOfLValueToProperType(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::NamedDecl::getName(), clang::QualType::getObjCGCAttr(), clang::FieldDecl::getParent(), clang::ValueDecl::getType(), clang::Type::isReferenceType(), and clang::CharUnits::isZero().

Referenced by EmitLambdaExpr(), EmitLValueForAnyFieldInitialization(), EmitMemberInitializer(), and InitCapturedStruct().

LValue CodeGenFunction::EmitLValueForIvar ( QualType  ObjectTy,
llvm::Value Base,
const ObjCIvarDecl Ivar,
unsigned  CVRQualifiers 
)
LValue CodeGenFunction::EmitLValueForLambdaField ( const FieldDecl Field)

Given that we are currently emitting a lambda, emit an l-value for one of its members.

Definition at line 2671 of file CGExpr.cpp.

References clang::FieldDecl::getParent().

Referenced by StartFunction().

LValue CodeGenFunction::EmitMaterializeTemporaryExpr ( const MaterializeTemporaryExpr E)

Definition at line 335 of file CGExpr.cpp.

References clang::SubobjectAdjustment::DTB::BasePath, CGM, ConvertTypeForMem(), createReferenceTemporary(), clang::SubobjectAdjustment::DTB::DerivedClass, clang::SubobjectAdjustment::DerivedToBase, clang::SubobjectAdjustment::DerivedToBaseAdjustment, clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), EmitAnyExprToMem(), EmitIgnoredExpr(), EmitLValueForField(), clang::CodeGen::CGCXXABI::EmitMemberDataPointerAddress(), clang::CodeGen::CodeGenModule::EmitNullConstant(), EmitOpaqueValueLValue(), EmitScalarExpr(), EmitScalarInit(), clang::SubobjectAdjustment::Field, clang::SubobjectAdjustment::FieldAdjustment, clang::CodeGen::AggValueSlot::forAddr(), GetAddressOfBaseClass(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), getEvaluationKind(), clang::Expr::getExprLoc(), clang::MaterializeTemporaryExpr::getExtendingDecl(), getLangOpts(), clang::QualType::getObjCLifetime(), clang::QualType::getQualifiers(), clang::MaterializeTemporaryExpr::GetTemporaryExpr(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::Type::isObjCLifetimeType(), clang::SubobjectAdjustment::Kind, MakeAddrLValue(), clang::SubobjectAdjustment::MemberPointerAdjustment, clang::SubobjectAdjustment::P::MPT, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::CastExpr::path_begin(), clang::CastExpr::path_end(), clang::SubobjectAdjustment::Ptr, pushTemporaryCleanup(), clang::SubobjectAdjustment::P::RHS, clang::Expr::skipRValueSubobjectAdjustments(), clang::CodeGen::TEK_Aggregate, and clang::CodeGen::TEK_Scalar.

void CodeGenFunction::EmitMCountInstrumentation ( )

EmitMCountInstrumentation - Emit call to .mcount.

Definition at line 367 of file CodeGenFunction.cpp.

References CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), getTarget(), and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by StartFunction().

LValue CodeGenFunction::EmitMemberExpr ( const MemberExpr E)
void CodeGenFunction::EmitMustTailThunk ( const CXXMethodDecl MD,
llvm::Value AdjustedThisPtr,
llvm::Value Callee 
)
Value * CodeGenFunction::EmitNeonCall ( llvm::Function *  F,
SmallVectorImpl< llvm::Value * > &  O,
const char *  name,
unsigned  shift = 0,
bool  rightshift = false 
)
Value * CodeGenFunction::EmitNeonRShiftImm ( llvm::Value Vec,
llvm::Value Amt,
llvm::Type *  Ty,
bool  usgn,
const char *  name 
)
Value * CodeGenFunction::EmitNeonShiftVector ( llvm::Value V,
llvm::Type *  Ty,
bool  negateForRightShift 
)
Value * CodeGenFunction::EmitNeonSplat ( llvm::Value V,
llvm::Constant *  Idx 
)

Definition at line 1920 of file CGBuiltin.cpp.

References Builder.

Referenced by EmitAArch64BuiltinExpr(), EmitARMBuiltinExpr(), and EmitCommonNeonBuiltinExpr().

void CodeGenFunction::EmitNewArrayInitializer ( const CXXNewExpr E,
QualType  elementType,
llvm::Type *  ElementTy,
llvm::Value NewPtr,
llvm::Value NumElements,
llvm::Value AllocSizeWithoutCookie 
)
void CodeGenFunction::EmitNonNullArgCheck ( RValue  RV,
QualType  ArgType,
SourceLocation  ArgLoc,
const FunctionDecl FD,
unsigned  ParmNum 
)

Create a check for a function parameter that may potentially be declared as non-null.

Definition at line 2783 of file CGCall.cpp.

References Builder, getNonNullAttr(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::RValue::isScalar(), and clang::None.

void CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke ( llvm::Value callee,
ArrayRef< llvm::Value * >  args 
)

Emits a call or invoke to the given noreturn runtime function.

Definition at line 3024 of file CGCall.cpp.

References Builder.

llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall ( llvm::Value callee,
const Twine &  name = "" 
)
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall ( llvm::Value callee,
ArrayRef< llvm::Value * >  args,
const Twine &  name = "" 
)
void CodeGenFunction::EmitNullInitialization ( llvm::Value DestPtr,
QualType  Ty 
)
Value * CodeGenFunction::EmitNVPTXBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
llvm::Value * CodeGenFunction::EmitObjCArrayLiteral ( const ObjCArrayLiteral E)
void CodeGenFunction::EmitObjCAtSynchronizedStmt ( const ObjCAtSynchronizedStmt S)
void CodeGenFunction::EmitObjCAtThrowStmt ( const ObjCAtThrowStmt S)
void CodeGenFunction::EmitObjCAtTryStmt ( const ObjCAtTryStmt S)
void CodeGenFunction::EmitObjCAutoreleasePoolCleanup ( llvm::Value Ptr)
void CodeGenFunction::EmitObjCAutoreleasePoolPop ( llvm::Value value)

Produce the code to do a primitive release. call void @objc_autoreleasePoolPop(i8* ptr)

Definition at line 2279 of file CGObjC.cpp.

References Builder, createARCRuntimeFunction(), EmitRuntimeCallOrInvoke(), clang::CodeGen::CodeGenModule::getRREntrypoints(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::RREntrypoints::objc_autoreleasePoolPop.

llvm::Value * CodeGenFunction::EmitObjCAutoreleasePoolPush ( )
void CodeGenFunction::EmitObjCAutoreleasePoolStmt ( const ObjCAutoreleasePoolStmt S)
llvm::Value * CodeGenFunction::EmitObjCBoxedExpr ( const ObjCBoxedExpr E)
llvm::Value * CodeGenFunction::EmitObjCCollectionLiteral ( const Expr E,
const ObjCMethodDecl MethodWithObjects 
)

Definition at line 115 of file CGObjC.cpp.

References clang::CodeGen::CallArgList::add(), Builder, CGM, Context, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::LangAS::Count, CreateMemTemp(), EmitARCIntrinsicUse(), EmitScalarExpr(), EmitStoreThroughLValue(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::CodeGen::RValue::get(), clang::Type::getAsObjCInterfacePointerType(), clang::CodeGen::CGObjCRuntime::GetClass(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), clang::ObjCArrayLiteral::getElement(), clang::ObjCObjectType::getInterface(), clang::ObjCDictionaryLiteral::getKeyValueElement(), getLangOpts(), clang::ObjCArrayLiteral::getNumElements(), clang::ObjCDictionaryLiteral::getNumElements(), clang::ASTContext::getObjCIdType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ObjCObjectPointerType::getObjectType(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCMethodDecl::getSelector(), clang::ASTContext::getSizeType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeAlignInChars(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSize(), clang::QualType::getUnqualifiedType(), clang::ObjCDictionaryElement::Key, clang::CodeGen::LValue::MakeAddr(), clang::ArrayType::Normal, clang::ObjCMethodDecl::param_begin(), clang::ObjCDictionaryElement::Value, and clang::QualType::withConst().

Referenced by EmitObjCArrayLiteral(), and EmitObjCDictionaryLiteral().

llvm::Value * CodeGenFunction::EmitObjCConsumeObject ( QualType  type,
llvm::Value object 
)

Produce the code for a CK_ARCConsumeObject. Does a primitive release at the end of the full-expression.

Definition at line 1759 of file CGObjC.cpp.

References getARCCleanupKind().

Referenced by EmitARCExtendBlockObject(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), and EmitObjCForCollectionStmt().

llvm::Value * CodeGenFunction::EmitObjCDictionaryLiteral ( const ObjCDictionaryLiteral E)
LValue CodeGenFunction::EmitObjCEncodeExprLValue ( const ObjCEncodeExpr E)

Definition at line 2104 of file CGExpr.cpp.

References clang::Expr::getType().

llvm::Value * CodeGenFunction::EmitObjCExtendObjectLifetime ( QualType  T,
llvm::Value Ptr 
)

Definition at line 1767 of file CGObjC.cpp.

References EmitARCRetainAutorelease().

void CodeGenFunction::EmitObjCForCollectionStmt ( const ObjCForCollectionStmt S)

Definition at line 1439 of file CGObjC.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), Builder, ConvertType(), clang::LangAS::Count, createBasicBlock(), CreateMemTemp(), EmitARCRetainScalarExpr(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBlock(), EmitCall(), clang::CodeGen::CGDebugInfo::EmitLexicalBlockEnd(), clang::CodeGen::CGDebugInfo::EmitLexicalBlockStart(), EmitLValue(), EmitNullInitialization(), EmitObjCConsumeObject(), EmitScalarExpr(), EmitScalarInit(), EmitStmt(), EmitStoreThroughLValue(), clang::CodeGen::CGObjCRuntime::EnumerationMutationFunction(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::CodeGen::RValue::get(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::ObjCForCollectionStmt::getBody(), clang::ObjCForCollectionStmt::getCollection(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), getContext(), getCurrentProfileCount(), getDebugInfo(), clang::ObjCForCollectionStmt::getElement(), getJumpDestInCurrentScope(), getLangOpts(), clang::CodeGen::CodeGenModule::getObjCFastEnumerationStateType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), getProfileCount(), clang::CodeGen::RValue::getScalarVal(), clang::SelectorTable::getSelector(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::Idents, incrementProfileCounter(), clang::CodeGen::CodeGenFunction::AutoVarEmission::invalid(), clang::VarDecl::isARCPseudoStrong(), clang::ArrayType::Normal, clang::Qualifiers::OCL_ExplicitNone, PopCleanupBlock(), clang::ASTContext::Selectors, clang::VK_LValue, and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by EmitStmt().

LValue CodeGenFunction::EmitObjCIsaExpr ( const ObjCIsaExpr E)
LValue CodeGenFunction::EmitObjCIvarRefLValue ( const ObjCIvarRefExpr E)
RValue CodeGenFunction::EmitObjCMessageExpr ( const ObjCMessageExpr E,
ReturnValueSlot  Return = ReturnValueSlot() 
)
LValue CodeGenFunction::EmitObjCMessageExprLValue ( const ObjCMessageExpr E)
void CodeGenFunction::EmitObjCMRRAutoreleasePoolPop ( llvm::Value Arg)
llvm::Value * CodeGenFunction::EmitObjCMRRAutoreleasePoolPush ( )

Produce the code to do an MRR version objc_autoreleasepool_push. Which is: [[NSAutoreleasePool alloc] init]; Where alloc is declared as: + (id) alloc; in NSAutoreleasePool class. init is declared as: - (id) init; in its NSObject super class.

Definition at line 2301 of file CGObjC.cpp.

References clang::CodeGen::CGObjCRuntime::EmitNSAutoreleasePoolClassRef(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::RValue::getScalarVal(), clang::SelectorTable::getSelector(), clang::ASTContext::Idents, and clang::ASTContext::Selectors.

Referenced by EmitObjCAutoreleasePoolStmt().

llvm::Value * CodeGenFunction::EmitObjCProduceObject ( QualType  type,
llvm::Value value 
)

Produce the code for a CK_ARCProduceObject. Just does a primitive retain.

Definition at line 1740 of file CGObjC.cpp.

References EmitARCRetain().

llvm::Value * CodeGenFunction::EmitObjCProtocolExpr ( const ObjCProtocolExpr E)
llvm::Value * CodeGenFunction::EmitObjCSelectorExpr ( const ObjCSelectorExpr E)
LValue CodeGenFunction::EmitObjCSelectorLValue ( const ObjCSelectorExpr E)

Definition at line 3305 of file CGExpr.cpp.

References clang::ObjCSelectorExpr::getSelector(), and clang::Expr::getType().

llvm::Value * CodeGenFunction::EmitObjCStringLiteral ( const ObjCStringLiteral E)
llvm::Value * CodeGenFunction::EmitObjCThrowOperand ( const Expr expr)
void CodeGenFunction::EmitOMPAggregateAssign ( llvm::Value DestAddr,
llvm::Value SrcAddr,
QualType  OriginalType,
const llvm::function_ref< void(llvm::Value *, llvm::Value *)> &  CopyGen 
)

Perform element by element copying of arrays with type OriginalType from SrcAddr to DestAddr using copying procedure generated by CopyGen.

Parameters
DestAddrAddress of the destination array.
SrcAddrAddress of the source array.
OriginalTypeType of destination and source arrays.
CopyGenCopying procedure that copies value of single array element to another single array element.

Definition at line 26 of file CGStmtOpenMP.cpp.

References Builder, createBasicBlock(), emitArrayLength(), EmitBlock(), and clang::Type::getAsArrayTypeUnsafe().

Referenced by EmitOMPCopy(), and EmitOMPFirstprivateClause().

void CodeGenFunction::EmitOMPAtomicDirective ( const OMPAtomicDirective S)
std::pair< bool, RValue > CodeGenFunction::EmitOMPAtomicSimpleUpdateExpr ( LValue  X,
RValue  E,
BinaryOperatorKind  BO,
bool  IsXLHSInRHSPart,
llvm::AtomicOrdering  AO,
SourceLocation  Loc,
const llvm::function_ref< RValue(RValue)> &  CommonGen 
)

Emit atomic update code for constructs: X = X BO E or X = E BO E.

Parameters
XValue to be updated.
EUpdate value.
BOBinary operation for update operation.
IsXLHSInRHSParttrue if X is LHS in RHS part of the update expression, false otherwise.
AOAtomic ordering of the generated atomic instructions.
CommonGenCode generator for complex expressions that cannot be expressed through atomicrmw instruction.
Returns
<true, OldAtomicValue> if simple 'atomicrmw' instruction was generated, <false, RValue::get(nullptr)> otherwise.

Definition at line 1851 of file CGStmtOpenMP.cpp.

References EmitAtomicUpdate(), EmitLoadOfLValue(), emitOMPAtomicRMW(), EmitStoreThroughLValue(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isGlobalReg(), and clang::QualType::isVolatileQualified().

Referenced by EmitOMPAtomicCaptureExpr(), and EmitOMPAtomicUpdateExpr().

void CodeGenFunction::EmitOMPBarrierDirective ( const OMPBarrierDirective S)
void CodeGenFunction::EmitOMPCancelDirective ( const OMPCancelDirective S)
void CodeGenFunction::EmitOMPCancellationPointDirective ( const OMPCancellationPointDirective S)
void CodeGenFunction::EmitOMPCopy ( CodeGenFunction CGF,
QualType  OriginalType,
llvm::Value DestAddr,
llvm::Value SrcAddr,
const VarDecl DestVD,
const VarDecl SrcVD,
const Expr Copy 
)

Emit proper copying of data from one variable to another.

Parameters
OriginalTypeOriginal type of the copied variables.
DestAddrDestination address.
SrcAddrSource address.
DestVDDestination variable used in CopyExpr (for arrays, has type of the base array element).
SrcVDSource variable used in CopyExpr (for arrays, has type of the base array element).
CopyActual copygin expression for copying data from SrcVD to DestVD.

Definition at line 75 of file CGStmtOpenMP.cpp.

References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), clang::BO_Assign, EmitAggregateAssign(), EmitIgnoredExpr(), EmitOMPAggregateAssign(), clang::Type::isArrayType(), and clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize().

Referenced by emitCopyprivateCopyFunction(), EmitOMPCopyinClause(), and EmitOMPLastprivateClauseFinal().

bool CodeGenFunction::EmitOMPCopyinClause ( const OMPExecutableDirective D)

Emit code for copyin clause in D directive. The next code is generated at the start of outlined functions for directives:

threadprivate_var1 = master_threadprivate_var1;
operator=(threadprivate_var2, master_threadprivate_var2);
...
__kmpc_barrier(&loc, global_tid);
Parameters
DOpenMP directive possibly with 'copyin' clause(s).
Returns
true if at least one copyin variable is found, false otherwise.

Definition at line 214 of file CGStmtOpenMP.cpp.

References Builder, AttributeLangSupport::C, CapturedStmtInfo, CGM, createBasicBlock(), EmitBlock(), EmitLValue(), EmitOMPCopy(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::GetAddrOfGlobal(), clang::OMPExecutableDirective::getClausesOfKind(), getContext(), getLangOpts(), clang::CodeGen::CodeGenModule::getStaticLocalDeclAddress(), clang::ASTContext::getTargetInfo(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::TargetInfo::isTLSSupported(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.

void CodeGenFunction::EmitOMPCriticalDirective ( const OMPCriticalDirective S)
bool CodeGenFunction::EmitOMPFirstprivateClause ( const OMPExecutableDirective D,
OMPPrivateScope PrivateScope 
)
void CodeGenFunction::EmitOMPFlushDirective ( const OMPFlushDirective S)
void CodeGenFunction::EmitOMPForDirective ( const OMPForDirective S)
void CodeGenFunction::EmitOMPForSimdDirective ( const OMPForSimdDirective S)
void CodeGenFunction::EmitOMPInnerLoop ( const Stmt S,
bool  RequiresCleanup,
const Expr LoopCond,
const Expr IncExpr,
const llvm::function_ref< void(CodeGenFunction &)> &  BodyGen,
const llvm::function_ref< void(CodeGenFunction &)> &  PostIncGen 
)

Emit inner loop of the worksharing/simd construct.

Parameters
SDirective, for which the inner loop must be emitted.
RequiresCleanuptrue, if directive has some associated private variables.
LoopCondBollean condition for loop continuation.
IncExprIncrement expression for loop control variable.
BodyGenGenerator for the inner body of the inner loop.
PostIncGenGenrator for post-increment code (required for ordered loop directvies).

Definition at line 550 of file CGStmtOpenMP.cpp.

References createBasicBlock(), EmitBlock(), EmitBranch(), EmitBranchOnBoolExpr(), EmitBranchThroughCleanup(), EmitIgnoredExpr(), getJumpDestInCurrentScope(), getProfileCount(), incrementProfileCounter(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), and clang::CodeGen::LoopInfoStack::push().

void CodeGenFunction::EmitOMPLastprivateClauseFinal ( const OMPExecutableDirective D,
llvm::Value IsLastIterCond = nullptr 
)

Emit final copying of lastprivate values to original variables at the end of the worksharing or simd directive.

Parameters
DDirective that has at least one 'lastprivate' directives.
IsLastIterCondBoolean condition that must be set to 'i1 true' if it is the last iteration of the loop code in associated directive, or to 'i1 false' otherwise. If this item is nullptr, no final check is required.

Definition at line 323 of file CGStmtOpenMP.cpp.

References Builder, AttributeLangSupport::C, createBasicBlock(), EmitAnyExprToMem(), EmitBlock(), EmitIgnoredExpr(), EmitLValue(), EmitOMPCopy(), GetAddrOfLocalVar(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getDirectiveKind(), clang::QualType::getQualifiers(), clang::Expr::getType(), and clang::isOpenMPWorksharingDirective().

bool CodeGenFunction::EmitOMPLastprivateClauseInit ( const OMPExecutableDirective D,
OMPPrivateScope PrivateScope 
)

Emit initial code for lastprivate variables. If some variable is not also firstprivate, then the default initialization is used. Otherwise initialization of this variable is performed by EmitOMPFirstprivateClause method.

Parameters
DDirective that may have 'lastprivate' directives.
PrivateScopePrivate scope for capturing lastprivate variables for proper codegen in internal captured statement.
Returns
true if there is at least one lastprivate variable, false otherwise.

Definition at line 278 of file CGStmtOpenMP.cpp.

References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), AttributeLangSupport::C, CapturedStmtInfo, EmitDecl(), EmitLValue(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::OMPExecutableDirective::getClausesOfKind(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.

void CodeGenFunction::EmitOMPLinearClauseInit ( const OMPLoopDirective D)

Emit initial code for linear variables. Creates private copies and initializes them with the values according to OpenMP standard.

Parameters
DDirective (possibly) with the 'linear' clause.

Definition at line 597 of file CGStmtOpenMP.cpp.

References AttributeLangSupport::C, CapturedStmtInfo, EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitExprAsInit(), EmitIgnoredExpr(), EmitVarDecl(), clang::OMPExecutableDirective::getClausesOfKind(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), MakeAddrLValue(), and clang::VK_LValue.

void CodeGenFunction::EmitOMPMasterDirective ( const OMPMasterDirective S)
void CodeGenFunction::EmitOMPOrderedDirective ( const OMPOrderedDirective S)
void CodeGenFunction::EmitOMPParallelDirective ( const OMPParallelDirective S)
void CodeGenFunction::EmitOMPParallelForDirective ( const OMPParallelForDirective S)
void CodeGenFunction::EmitOMPParallelForSimdDirective ( const OMPParallelForSimdDirective S)
void CodeGenFunction::EmitOMPParallelSectionsDirective ( const OMPParallelSectionsDirective S)
void CodeGenFunction::EmitOMPPrivateClause ( const OMPExecutableDirective D,
CodeGenFunction::OMPPrivateScope PrivateScope 
)
void CodeGenFunction::EmitOMPReductionClauseFinal ( const OMPExecutableDirective D)

Emit final update of reduction values to original variables at the end of the directive.

Parameters
DDirective that has at least one 'reduction' directives.

Definition at line 439 of file CGStmtOpenMP.cpp.

References AttributeLangSupport::C, CGM, clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getDirectiveKind(), clang::OMPExecutableDirective::getLocEnd(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::isOpenMPParallelDirective().

void CodeGenFunction::EmitOMPReductionClauseInit ( const OMPExecutableDirective D,
CodeGenFunction::OMPPrivateScope PrivateScope 
)

Emit initial code for reduction variables. Creates reduction copies and initializes them with the values according to OpenMP standard.

Parameters
DDirective (possibly) with the 'reduction' clause.
PrivateScopePrivate scope for capturing reduction variables for proper codegen in internal captured statement.

Definition at line 405 of file CGStmtOpenMP.cpp.

References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), AttributeLangSupport::C, CapturedStmtInfo, EmitDecl(), EmitLValue(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::OMPExecutableDirective::getClausesOfKind(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.

void CodeGenFunction::EmitOMPSectionDirective ( const OMPSectionDirective S)

Definition at line 1367 of file CGStmtOpenMP.cpp.

References clang::OMPExecutableDirective::getAssociatedStmt(), and S.

Referenced by EmitStmt().

void CodeGenFunction::EmitOMPSectionsDirective ( const OMPSectionsDirective S)
void CodeGenFunction::EmitOMPSimdDirective ( const OMPSimdDirective S)
void CodeGenFunction::EmitOMPSingleDirective ( const OMPSingleDirective S)
void CodeGenFunction::EmitOMPTargetDirective ( const OMPTargetDirective S)

Definition at line 2090 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

void CodeGenFunction::EmitOMPTaskDirective ( const OMPTaskDirective S)
void CodeGenFunction::EmitOMPTaskgroupDirective ( const OMPTaskgroupDirective S)
void CodeGenFunction::EmitOMPTaskwaitDirective ( const OMPTaskwaitDirective S)
void CodeGenFunction::EmitOMPTaskyieldDirective ( const OMPTaskyieldDirective S)
void CodeGenFunction::EmitOMPTeamsDirective ( const OMPTeamsDirective S)

Definition at line 2094 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

LValue CodeGenFunction::EmitOpaqueValueLValue ( const OpaqueValueExpr e)

Definition at line 3082 of file CGExpr.cpp.

Referenced by EmitMaterializeTemporaryExpr().

void CodeGenFunction::EmitParmDecl ( const VarDecl D,
llvm::Value Arg,
bool  ArgIsPointer,
unsigned  ArgNo 
)

EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl.

Emit an alloca (or GlobalValue depending on target) for the specified parameter and set up LocalDeclMap.

Definition at line 1659 of file CGDecl.cpp.

References clang::CodeGen::ARCImpreciseLifetime, clang::CodeGen::ARCPreciseLifetime, clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), BlockInfo, Builder, CGM, ConvertTypeForMem(), CreateTempAlloca(), CurCodeDecl, CurFuncIsThunk, clang::QualType::DK_cxx_destructor, EHStack, EmitARCInitWeak(), EmitARCRetainNonBlock(), EmitARCStoreStrongCall(), EmitAutoVarWithLifetime(), clang::CodeGen::CodeGenModule::EmitNullConstant(), EmitStoreOfScalar(), EmitVarAnnotations(), clang::CodeGen::LValue::getAddress(), getARCCleanupKind(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::TargetInfo::getCXXABI(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::Decl::getLocation(), clang::ObjCMethodDecl::getMethodFamily(), clang::NamedDecl::getName(), clang::Qualifiers::getObjCLifetime(), clang::QualType::getQualifiers(), clang::CharUnits::getQuantity(), clang::ObjCMethodDecl::getSelfDecl(), getTarget(), clang::ValueDecl::getType(), clang::Decl::hasAttr(), clang::Qualifiers::hasConst(), clang::CXXRecordDecl::hasNonTrivialDestructor(), hasScalarEvaluationKind(), clang::VarDecl::isARCPseudoStrong(), clang::CodeGenOptions::LimitedDebugInfo, MakeAddrLValue(), clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::OMF_init, and pushDestroy().

LValue CodeGenFunction::EmitPointerToDataMemberBinaryExpr ( const BinaryOperator E)
Value * CodeGenFunction::EmitPPCBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
LValue CodeGenFunction::EmitPredefinedLValue ( const PredefinedExpr E)
LValue CodeGenFunction::EmitPseudoObjectLValue ( const PseudoObjectExpr e)

Definition at line 3575 of file CGExpr.cpp.

References emitPseudoObjectExpr().

RValue CodeGenFunction::EmitPseudoObjectRValue ( const PseudoObjectExpr e,
AggValueSlot  slot = AggValueSlot::ignored() 
)

Definition at line 3570 of file CGExpr.cpp.

References emitPseudoObjectExpr().

LValue clang::CodeGen::CodeGenFunction::EmitReadRegister ( const VarDecl VD)
RValue CodeGenFunction::EmitReferenceBindingToExpr ( const Expr E)
llvm::DebugLoc CodeGenFunction::EmitReturnBlock ( )

Emit the unified return block, trying to avoid its emission when possible.

Returns
The debug location of the user written return statement if the return block is is avoided.

Definition at line 166 of file CodeGenFunction.cpp.

References Builder, EmitBlock(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), and ReturnBlock.

Referenced by FinishFunction().

void CodeGenFunction::EmitReturnStmt ( const ReturnStmt S)
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitRuntimeCall ( llvm::Value callee,
const Twine &  name = "" 
)
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitRuntimeCall ( llvm::Value callee,
ArrayRef< llvm::Value * >  args,
const Twine &  name = "" 
)
llvm::CallSite CodeGenFunction::EmitRuntimeCallOrInvoke ( llvm::Value callee,
ArrayRef< llvm::Value * >  args,
const Twine &  name = "" 
)

Emits a call or invoke instruction to the given runtime function.

Definition at line 3052 of file CGCall.cpp.

Referenced by EmitObjCAutoreleasePoolPop(), and emitRTtypeidCall().

llvm::CallSite CodeGenFunction::EmitRuntimeCallOrInvoke ( llvm::Value callee,
const Twine &  name = "" 
)

Emits a call or invoke instruction to the given nullary runtime function.

Definition at line 3045 of file CGCall.cpp.

References clang::None.

RValue CodeGenFunction::EmitRValueForField ( LValue  LV,
const FieldDecl FD,
SourceLocation  Loc 
)
LValue CodeGenFunction::EmitScalarCompoundAssignWithComplex ( const CompoundAssignOperator E,
llvm::Value *&  Result 
)

Definition at line 1093 of file CGExprComplex.cpp.

References getComplexOp(), and clang::BinaryOperator::getOpcode().

Value * CodeGenFunction::EmitScalarConversion ( llvm::Value Src,
QualType  SrcTy,
QualType  DstTy 
)

EmitScalarConversion - Emit a conversion from the specified type to the specified destination type, both of which are LLVM scalar types.

Definition at line 3480 of file CGExprScalar.cpp.

References hasScalarEvaluationKind().

Referenced by convertToComplexValue(), convertToScalarValue(), emitIfStmt(), emitScheduleClause(), and EvaluateExprAsBool().

Value * CodeGenFunction::EmitScalarExpr ( const Expr E,
bool  IgnoreResultAssign = false 
)

EmitScalarExpr - Emit the computation of the specified expression of LLVM scalar type, returning the result.

EmitScalarExpr - Emit the computation of the specified expression of scalar type, ignoring the result.

Definition at line 3470 of file CGExprScalar.cpp.

References clang::Expr::getType(), and hasScalarEvaluationKind().

Referenced by EmitAArch64BuiltinExpr(), emitAlignedClause(), EmitAMDGPUBuiltinExpr(), EmitAnyExpr(), EmitAnyExprToMem(), EmitARCExtendBlockObject(), emitARCRetainCall(), EmitARMBuiltinExpr(), EmitAtomicExpr(), EmitAtomicInit(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitBinaryAtomicPost(), emitCommonOMPParallelDirective(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXDeleteExpr(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitDeclInit(), emitFPIntBuiltin(), EmitIndirectGotoStmt(), EmitInitializerForField(), EmitMaterializeTemporaryExpr(), EmitNVPTXBuiltinExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), EmitObjCThrowOperand(), EmitPPCBuiltinExpr(), EmitReturnStmt(), EmitScalarInit(), emitScheduleClause(), EmitSpecialRegisterBuiltin(), EmitSwitchStmt(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), emitTernaryFPBuiltin(), emitUnaryFPBuiltin(), EmitVAListRef(), EmitVariablyModifiedType(), emitWritebackArg(), EmitX86BuiltinExpr(), EvaluateExprAsBool(), GenerateSEHFilterFunction(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), tryEmitARCRetainLoadOfScalar(), and tryEmitARCRetainScalarExpr().

void CodeGenFunction::EmitScalarInit ( const Expr init,
const ValueDecl D,
LValue  lvalue,
bool  capturedByInit 
)
void CodeGenFunction::EmitScalarInit ( llvm::Value init,
LValue  lvalue 
)
llvm::Value * CodeGenFunction::EmitScalarPrePostIncDec ( const UnaryOperator E,
LValue  LV,
bool  isInc,
bool  isPre 
)

Definition at line 3501 of file CGExprScalar.cpp.

llvm::Value * CodeGenFunction::EmitSEHAbnormalTermination ( )

Definition at line 1669 of file CGException.cpp.

References Builder, CurFn, and clang::CodeGen::CodeGenTypeCache::Int32Ty.

llvm::Value * CodeGenFunction::EmitSEHExceptionCode ( )
void CodeGenFunction::EmitSEHExceptionCodeSave ( CodeGenFunction ParentCGF,
llvm::Value ParentFP,
llvm::Value EntryEBP 
)
llvm::Value * CodeGenFunction::EmitSEHExceptionInfo ( )

Definition at line 1655 of file CGException.cpp.

References clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and SEHInfo.

void CodeGenFunction::EmitSEHLeaveStmt ( const SEHLeaveStmt S)
void CodeGenFunction::EmitSEHTryStmt ( const SEHTryStmt S)
bool CodeGenFunction::EmitSimpleStmt ( const Stmt S)

EmitSimpleStmt - Try to emit a "simple" statement which does not necessarily require an insertion point or debug information; typically because the statement amounts to a jump or a container of other statements.

Returns
True if the statement was handled.

Definition at line 252 of file CGStmt.cpp.

References EmitAttributedStmt(), EmitBreakStmt(), EmitCaseStmt(), EmitCompoundStmt(), EmitContinueStmt(), EmitDeclStmt(), EmitDefaultStmt(), EmitGotoStmt(), EmitLabelStmt(), and EmitSEHLeaveStmt().

Referenced by EmitStmt().

void CodeGenFunction::EmitStartEHSpec ( const Decl D)
void CodeGenFunction::EmitStaticVarDecl ( const VarDecl D,
llvm::GlobalValue::LinkageTypes  Linkage 
)
void CodeGenFunction::EmitStmt ( const Stmt S)

EmitStmt - Emit the code for the statement

  • S. It is legal to call this function even if there is no current insertion point.

This function may clear the current insertion point; callers should use EnsureInsertPoint if they wish to subsequently generate code without first calling EmitBlock, EmitBranch, or EmitStmt.

Definition at line 45 of file CGStmt.cpp.

References Builder, ContainsLabel(), EmitAsmStmt(), EmitCapturedStmt(), EmitCXXForRangeStmt(), EmitCXXTryStmt(), EmitDoStmt(), EmitForStmt(), EmitIfStmt(), EmitIgnoredExpr(), EmitIndirectGotoStmt(), EmitObjCAtSynchronizedStmt(), EmitObjCAtThrowStmt(), EmitObjCAtTryStmt(), EmitObjCAutoreleasePoolStmt(), EmitObjCForCollectionStmt(), EmitOMPAtomicDirective(), EmitOMPBarrierDirective(), EmitOMPCancelDirective(), EmitOMPCancellationPointDirective(), EmitOMPCriticalDirective(), EmitOMPFlushDirective(), EmitOMPForDirective(), EmitOMPForSimdDirective(), EmitOMPMasterDirective(), EmitOMPOrderedDirective(), EmitOMPParallelDirective(), EmitOMPParallelForDirective(), EmitOMPParallelForSimdDirective(), EmitOMPParallelSectionsDirective(), EmitOMPSectionDirective(), EmitOMPSectionsDirective(), EmitOMPSimdDirective(), EmitOMPSingleDirective(), EmitOMPTargetDirective(), EmitOMPTaskDirective(), EmitOMPTaskgroupDirective(), EmitOMPTaskwaitDirective(), EmitOMPTaskyieldDirective(), EmitOMPTeamsDirective(), EmitReturnStmt(), EmitSEHTryStmt(), EmitSimpleStmt(), EmitStopPoint(), EmitSwitchStmt(), EmitWhileStmt(), EnsureInsertPoint(), clang::CapturedStmt::getCapturedRegionKind(), HaveInsertPoint(), S, and clang::CodeGen::CodeGenPGO::setCurrentStmt().

Referenced by clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAttributedStmt(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCompoundStmtWithoutScope(), EmitConstructorBody(), EmitCXXForRangeStmt(), EmitCXXTryStmt(), EmitDefaultStmt(), EmitDestructorBody(), EmitDoStmt(), EmitForStmt(), EmitFunctionBody(), EmitIfStmt(), EmitLabelStmt(), EmitObjCAutoreleasePoolStmt(), EmitObjCForCollectionStmt(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), ExitCXXTryStmt(), ExitSEHTryStmt(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCSetterBody(), and GenerateSEHFinallyFunction().

LValue CodeGenFunction::EmitStmtExprLValue ( const StmtExpr E)
void CodeGenFunction::EmitStopPoint ( const Stmt S)

EmitStopPoint - Emit a debug stoppoint if we are emitting debug info.

Definition at line 35 of file CGStmt.cpp.

References Builder, and getDebugInfo().

Referenced by EmitBreakStmt(), EmitContinueStmt(), EmitCXXForRangeStmt(), EmitDeclStmt(), EmitForStmt(), EmitGotoStmt(), EmitSEHLeaveStmt(), EmitStmt(), and EmitWhileStmt().

void CodeGenFunction::EmitStoreOfComplex ( ComplexPairTy  V,
LValue  dest,
bool  isInit 
)

EmitStoreOfComplex - Store a complex number into the specified l-value.

Definition at line 1054 of file CGExprComplex.cpp.

Referenced by EmitAtomicUpdateValue(), EmitExprAsInit(), EmitInitStoreOfNonAggregate(), emitSimpleStore(), generateObjCGetterBody(), and InitCatchParam().

void CodeGenFunction::EmitStoreOfScalar ( llvm::Value Value,
llvm::Value Addr,
bool  Volatile,
unsigned  Alignment,
QualType  Ty,
llvm::MDNode *  TBAAInfo = nullptr,
bool  isInit = false,
QualType  TBAABaseTy = QualType(),
uint64_t  TBAAOffset = 0 
)

EmitStoreOfScalar - Store a scalar value to an address, taking care to appropriately convert from the memory representation to the LLVM value representation.

Definition at line 1244 of file CGExpr.cpp.

References Builder, clang::CharUnits::fromQuantity(), clang::Type::isAtomicType(), and clang::Type::isVectorType().

Referenced by EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), emitAtomicCmpXchg(), EmitAtomicExpr(), EmitCXXGlobalVarDeclInit(), EmitInitStoreOfNonAggregate(), EmitParmDecl(), EmitScalarInit(), emitTaskPrivateMappingFunction(), emitWriteback(), InitCatchParam(), and tryEmitARCRetainLoadOfScalar().

void CodeGenFunction::EmitStoreOfScalar ( llvm::Value value,
LValue  lvalue,
bool  isInit = false 
)

EmitStoreOfScalar - Store a scalar value to an address, taking care to appropriately convert from the memory representation to the LLVM value representation. The l-value must be a simple l-value. The isInit flag indicates whether this is an initialization. If so, atomic qualifiers are ignored and the store is always non-atomic.

Definition at line 1305 of file CGExpr.cpp.

References clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CharUnits::getQuantity(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), and clang::CodeGen::LValue::isVolatile().

void CodeGenFunction::EmitStoreThroughBitfieldLValue ( RValue  Src,
LValue  Dst,
llvm::Value **  Result = nullptr 
)
void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue ( RValue  Src,
LValue  Dst 
)
void CodeGenFunction::EmitStoreThroughGlobalRegLValue ( RValue  Src,
LValue  Dst 
)
void CodeGenFunction::EmitStoreThroughLValue ( RValue  Src,
LValue  Dst,
bool  isInit = false 
)

EmitStoreThroughLValue - Store the specified rvalue into the specified lvalue, where both are guaranteed to the have the same type, and that type is 'Ty'.

Definition at line 1469 of file CGExpr.cpp.

References Builder, clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CodeGen::LValue::getBaseIvarExp(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::LValue::getQuals(), clang::CharUnits::getQuantity(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::getVectorAddr(), clang::CodeGen::LValue::getVectorIdx(), clang::CodeGen::LValue::isBitField(), clang::CodeGen::LValue::isExtVectorElt(), clang::CodeGen::LValue::isGlobalObjCRef(), clang::CodeGen::LValue::isGlobalReg(), clang::CodeGen::LValue::isNonGC(), clang::CodeGen::LValue::isObjCIvar(), clang::CodeGen::LValue::isObjCStrong(), clang::CodeGen::LValue::isObjCWeak(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::LValue::isSimple(), clang::CodeGen::LValue::isThreadLocalRef(), clang::CodeGen::LValue::isVectorElt(), clang::CodeGen::LValue::isVolatileQualified(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.

Referenced by EmitAnyExprToMem(), EmitAsmStmt(), EmitAtomicUpdateValue(), EmitAutoVarInit(), EmitExprAsInit(), EmitInitializerForField(), EmitLambdaExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitOMPAtomicSimpleUpdateExpr(), emitProxyTaskFunction(), EmitScalarInit(), emitScheduleClause(), emitSimpleStore(), emitWriteback(), and InitCapturedStruct().

LValue CodeGenFunction::EmitStringLiteralLValue ( const StringLiteral E)

Definition at line 2099 of file CGExpr.cpp.

References clang::Expr::getType().

void CodeGenFunction::EmitSwitchStmt ( const SwitchStmt S)
void CodeGenFunction::EmitSynthesizedCXXCopyCtor ( llvm::Value Dest,
llvm::Value Src,
const Expr Exp 
)
void CodeGenFunction::EmitSynthesizedCXXCopyCtorCall ( const CXXConstructorDecl D,
llvm::Value This,
llvm::Value Src,
const CXXConstructExpr E 
)
Value * CodeGenFunction::EmitSystemZBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
Value * CodeGenFunction::EmitTargetBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)

EmitTargetBuiltinExpr - Emit the given builtin call. Returns 0 if the call is unhandled by the current target.

Definition at line 1859 of file CGBuiltin.cpp.

References EmitAArch64BuiltinExpr(), EmitAMDGPUBuiltinExpr(), EmitARMBuiltinExpr(), EmitNVPTXBuiltinExpr(), EmitPPCBuiltinExpr(), EmitSystemZBuiltinExpr(), EmitX86BuiltinExpr(), and getTarget().

llvm::Value * CodeGenFunction::EmitToMemory ( llvm::Value Value,
QualType  Ty 
)

EmitToMemory - Change a scalar value from its value representation to its in-memory representation.

Definition at line 1219 of file CGExpr.cpp.

References Builder, and hasBooleanRepresentation().

Referenced by EmitToInt().

llvm::CallInst * CodeGenFunction::EmitTrapCall ( llvm::Intrinsic::ID  IntrID)

Emit a call to trap or debugtrap and attach function attribute "trap-func-name" if specified.

Definition at line 2418 of file CGExpr.cpp.

References Builder.

Referenced by GenerateCode().

void CodeGenFunction::EmitTrapCheck ( llvm::Value Checked)

Create a basic block that will call the trap intrinsic, and emit a conditional branch to it, for the -ftrapv checks.

Definition at line 2398 of file CGExpr.cpp.

References Builder.

void CodeGenFunction::EmitTypeCheck ( TypeCheckKind  TCK,
SourceLocation  Loc,
llvm::Value V,
QualType  Type,
CharUnits  Alignment = CharUnits::Zero(),
bool  SkipNullCheck = false 
)
LValue CodeGenFunction::EmitUnaryOpLValue ( const UnaryOperator E)
LValue CodeGenFunction::EmitUnsupportedLValue ( const Expr E,
const char *  Name 
)

EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue an ErrorUnsupported style diagnostic (using the provided Name).

Definition at line 797 of file CGExpr.cpp.

References clang::Expr::getType().

RValue CodeGenFunction::EmitUnsupportedRValue ( const Expr E,
const char *  Name 
)

EmitUnsupportedRValue - Emit a dummy r-value using the type of E and issue an ErrorUnsupported style diagnostic (using the provided Name).

Definition at line 791 of file CGExpr.cpp.

References clang::Expr::getType().

Referenced by EmitAtomicExpr().

llvm::Value * CodeGenFunction::EmitVAArg ( llvm::Value VAListAddr,
QualType  Ty 
)
LValue CodeGenFunction::EmitVAArgExprLValue ( const VAArgExpr E)

Definition at line 3249 of file CGExpr.cpp.

llvm::Value * CodeGenFunction::EmitVAListRef ( const Expr E)
void CodeGenFunction::EmitVarAnnotations ( const VarDecl D,
llvm::Value V 
)
void CodeGenFunction::EmitVarDecl ( const VarDecl D)

EmitVarDecl - Emit a local variable declaration.

This function can be called with a null (unreachable) insert point.

EmitVarDecl - This method handles emission of any variable declaration inside a function, including static vars etc.

Definition at line 129 of file CGDecl.cpp.

References CGM, EmitAutoVarDecl(), EmitStaticVarDecl(), clang::CodeGen::CGOpenCLRuntime::EmitWorkGroupLocalVarDecl(), clang::CodeGen::CodeGenModule::getLLVMLinkageVarDefinition(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), clang::VarDecl::getStorageClass(), clang::VarDecl::hasExternalStorage(), clang::VarDecl::hasLocalStorage(), clang::VarDecl::isStaticLocal(), and clang::SC_OpenCLWorkGroupLocal.

Referenced by EmitDecl(), EmitOMPHelperVar(), EmitOMPLinearClauseInit(), and emitScheduleClause().

void CodeGenFunction::EmitVariablyModifiedType ( QualType  Ty)
void CodeGenFunction::EmitVTablePtrCheck ( const CXXRecordDecl RD,
llvm::Value VTable,
CFITypeCheckKind  TCK,
SourceLocation  Loc 
)
void CodeGenFunction::EmitVTablePtrCheckForCall ( const CXXMethodDecl MD,
llvm::Value VTable,
CFITypeCheckKind  TCK,
SourceLocation  Loc 
)

EmitVTablePtrCheckForCall - Virtual method MD is being called via VTable. If vptr CFI is enabled, emit a check that VTable is valid.

Definition at line 2165 of file CGClass.cpp.

References EmitVTablePtrCheck(), clang::CXXMethodDecl::getParent(), clang::SanitizerSet::has(), LeastDerivedClassWithSameLayout(), and SanOpts.

Referenced by EmitCXXMemberOrOperatorMemberCallExpr().

void CodeGenFunction::EmitVTablePtrCheckForCast ( QualType  T,
llvm::Value Derived,
bool  MayBeNull,
CFITypeCheckKind  TCK,
SourceLocation  Loc 
)
void CodeGenFunction::EmitWhileStmt ( const WhileStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
Value * CodeGenFunction::EmitX86BuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)
void clang::CodeGen::CodeGenFunction::enableDebugInfo ( )
inline
void clang::CodeGen::CodeGenFunction::EnsureInsertPoint ( )
inline

EnsureInsertPoint - Ensure that an insertion point is defined so that emitted IR has a place to go. Note that by definition, if this function creates a block then that block is unreachable; callers may do better to detect when no insertion point is defined and simply skip IR generation.

Definition at line 1485 of file CodeGenFunction.h.

References createBasicBlock(), EmitBlock(), and HaveInsertPoint().

Referenced by EmitAutoVarAlloca(), EmitAutoVarInit(), EmitCompoundStmtWithoutScope(), EmitStmt(), EmitVariablyModifiedType(), and clang::CodeGen::CodeGenFunction::StmtExprEvaluation::~StmtExprEvaluation().

void CodeGenFunction::enterByrefCleanup ( const AutoVarEmission emission)

Enter a cleanup to destroy a __block variable. Note that this cleanup should be a no-op if the variable hasn't left the stack yet; if a cleanup is required for the variable itself, that needs to be done externally.

Definition at line 2258 of file CGBlocks.cpp.

References clang::LangOptions::GCOnly, and clang::CodeGen::NormalAndEHCleanup.

Referenced by EmitAutoVarCleanups().

void CodeGenFunction::EnterCXXTryStmt ( const CXXTryStmt S,
bool  IsFnTryBlock = false 
)
void CodeGenFunction::EnterDtorCleanups ( const CXXDestructorDecl Dtor,
CXXDtorType  Type 
)

Emit all code that comes at the end of class's destructor. This is to call destructors on members and base classes in reverse order of their construction.

EnterDtorCleanups - Enter the cleanups necessary to complete the given phase of destruction for a destructor. The end result should call destructors on members and base classes in reverse order of their construction.

Definition at line 1564 of file CGClass.cpp.

References clang::CXXRecordDecl::bases(), clang::Dtor_Base, clang::Dtor_Complete, clang::Dtor_Deleting, clang::CodeGen::EHCleanup, EHStack, clang::RecordDecl::fields(), clang::Type::getAsUnionType(), getCleanupKind(), clang::RecordType::getDecl(), getDestroyer(), clang::CXXDestructorDecl::getOperatorDelete(), clang::CXXMethodDecl::getParent(), clang::ValueDecl::getType(), clang::Decl::hasAttr(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::RecordDecl::isAnonymousStructOrUnion(), clang::QualType::isDestructedType(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), clang::CodeGen::NormalAndEHCleanup, clang::ast_matchers::type, and clang::CXXRecordDecl::vbases().

Referenced by EmitDestructorBody().

void clang::CodeGen::CodeGenFunction::enterFullExpression ( const ExprWithCleanups E)
inline
void CodeGenFunction::enterNonTrivialFullExpression ( const ExprWithCleanups E)

Enter a full-expression with a non-trivial number of objects to clean up. This is in this file because, at the moment, the only kind of cleanup object is a BlockDecl*.

Definition at line 647 of file CGBlocks.cpp.

References enterBlockScope(), clang::ExprWithCleanups::getNumObjects(), and clang::ExprWithCleanups::getObjects().

Referenced by enterFullExpression().

void CodeGenFunction::EnterSEHTryStmt ( const SEHTryStmt S)
void CodeGenFunction::ErrorUnsupported ( const Stmt S,
const char *  Type 
)

ErrorUnsupported - Print out an error that codegen doesn't support the specified stmt yet.

Definition at line 1227 of file CodeGenFunction.cpp.

References CGM, and clang::CodeGen::CodeGenModule::ErrorUnsupported().

llvm::Value * CodeGenFunction::EvaluateExprAsBool ( const Expr E)
void CodeGenFunction::ExitCXXTryStmt ( const CXXTryStmt S,
bool  IsFnTryBlock = false 
)
void CodeGenFunction::ExitSEHTryStmt ( const SEHTryStmt S)
void CodeGenFunction::FinishFunction ( SourceLocation  EndLoc = SourceLocation())

FinishFunction - Complete IR generation of the current function. It is legal to call this function even if there is no current insertion point.

Definition at line 217 of file CodeGenFunction.cpp.

References AllocaInsertPt, Builder, CGM, clang::CodeGen::EHScopeStack::containsOnlyLifetimeMarkers(), CurCodeDecl, CurFnInfo, EHResumeBlock, EHStack, EmitBlock(), EmitEndEHSpec(), EmitFunctionEpilog(), EmitFunctionInstrumentation(), EmitIfUsed(), EmitReturnBlock(), clang::CodeGen::EHScopeStack::empty(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getDebugInfo(), clang::CodeGen::CodeGenModule::getModule(), PopCleanupBlocks(), PrologueCleanupDepth, ReturnBlock, ShouldInstrumentFunction(), and clang::CodeGen::EHScopeStack::stable_begin().

Referenced by createAtExitStub(), EmitCallAndReturnForThunk(), emitCopyprivateCopyFunction(), emitDestructorsFunction(), EmitMustTailThunk(), emitProxyTaskFunction(), emitReductionFunction(), emitTaskPrivateMappingFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), GenerateObjCGetter(), GenerateObjCMethod(), GenerateObjCSetter(), GenerateSEHFilterFunction(), and GenerateSEHFinallyFunction().

llvm::Function * CodeGenFunction::GenerateBlockFunction ( GlobalDecl  GD,
const CGBlockInfo Info,
const DeclMapTy &  ldm,
bool  IsLambdaConversionToBlock 
)
llvm::Value * CodeGenFunction::GenerateCapturedStmtArgument ( const CapturedStmt S)
llvm::Function * CodeGenFunction::GenerateCapturedStmtFunction ( const CapturedStmt S)

Creates the outlined function for a CapturedStmt.

Definition at line 2200 of file CGStmt.cpp.

References clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), Builder, CapturedStmtInfo, CGM, clang::Create(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitLoadOfLValue(), EmitLValueForField(), clang::RecordDecl::fields(), FinishFunction(), clang::CapturedDecl::getBody(), clang::Decl::getBodyRBrace(), clang::CapturedStmt::getCapturedDecl(), clang::CapturedStmt::getCapturedRecordDecl(), clang::CodeGen::CodeGenModule::getContext(), clang::CapturedDecl::getContextParam(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::getContextValue(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::getHelperName(), clang::Decl::getLocation(), clang::CapturedStmt::getLocStart(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::getThisFieldDecl(), clang::CodeGen::CodeGenModule::getTypes(), clang::Decl::hasBody(), clang::InternalLinkage, clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::isCXXThisExprCaptured(), clang::CapturedDecl::isNothrow(), MakeNaturalAlignAddrLValue(), clang::CapturedDecl::param_begin(), clang::CapturedDecl::param_end(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::setContextValue(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and StartFunction().

Referenced by EmitCapturedStmt().

llvm::Function* clang::CodeGen::CodeGenFunction::GenerateCapturedStmtFunctionEpilog ( const CapturedStmt S)
void clang::CodeGen::CodeGenFunction::GenerateCapturedStmtFunctionProlog ( const CapturedStmt S)
void CodeGenFunction::GenerateCode ( GlobalDecl  GD,
llvm::Function *  Fn,
const CGFunctionInfo FnInfo 
)

Definition at line 841 of file CodeGenFunction.cpp.

References clang::CodeGen::CGCXXABI::addImplicitStructorParams(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), Builder, clang::CodeGen::CGCXXABI::buildThisParam(), CGM, clang::CodeGen::CodeGenPGO::checkGlobalDecl(), clang::frontend::CPlusPlus, CurFn, CurGD, EmitCheck(), EmitCheckSourceLocation(), EmitConstructorBody(), EmitDestructorBody(), clang::CodeGen::CGCUDARuntime::emitDeviceStub(), EmitFunctionBody(), emitImplicitAssignmentOperatorBody(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitTrapCall(), FinishFunction(), clang::SourceRange::getBegin(), clang::FunctionDecl::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getCUDARuntime(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::SourceRange::getEnd(), getLangOpts(), clang::Decl::getLocation(), clang::FunctionDecl::getReturnType(), clang::FunctionDecl::getTemplateInstantiationPattern(), clang::CXXMethodDecl::getThisType(), clang::SanitizerSet::has(), clang::Decl::hasAttr(), clang::FunctionDecl::hasImplicitReturnZero(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::FunctionDecl::isDefaulted(), clang::CXXMethodDecl::isInstance(), clang::Type::isVoidType(), clang::None, clang::FunctionDecl::param_begin(), clang::FunctionDecl::param_end(), SanOpts, SawAsmBlock, StartFunction(), TryMarkNoThrow(), and clang::ASTContext::VoidPtrTy.

Referenced by clang::CodeGen::CodeGenModule::codegenCXXStructor().

llvm::Constant * CodeGenFunction::GenerateCopyHelperFunction ( const CGBlockInfo blockInfo)

Generate the copy-helper function for a block closure object: static void block_copy_helper(block_t *dst, block_t *src); The runtime will have previously initialized 'dst' by doing a bit-copy of 'src'.

Note that this copies an entire block closure object to the heap; it should not be confused with a 'byref copy helper', which moves the contents of an individual __block variable to the heap.

Definition at line 1301 of file CGBlocks.cpp.

References clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, Builder, AttributeLangSupport::C, clang::BlockDecl::captures(), clang::Create(), clang::FunctionDecl::Create(), clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::BlockFieldFlags::getBitMask(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::Qualifiers::getObjCLifetime(), clang::QualType::getQualifiers(), clang::ASTContext::getTranslationUnitDecl(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::InternalLinkage, clang::Type::isBlockPointerType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCRetainableType(), clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::SC_Static, clang::CodeGen::CGBlockInfo::StructureType, clang::ast_matchers::type, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.

Referenced by buildCopyHelper().

void CodeGenFunction::GenerateCXXGlobalDtorsFunc ( llvm::Function *  Fn,
const std::vector< std::pair< llvm::WeakVH, llvm::Constant * > > &  DtorsAndObjects 
)
void CodeGenFunction::GenerateCXXGlobalInitFunc ( llvm::Function *  Fn,
ArrayRef< llvm::Function * >  CXXThreadLocals,
llvm::GlobalVariable *  Guard = nullptr 
)
void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc ( llvm::Function *  Fn,
const VarDecl D,
llvm::GlobalVariable *  Addr,
bool  PerformInit 
)
llvm::Function * CodeGenFunction::generateDestroyHelper ( llvm::Constant *  addr,
QualType  type,
Destroyer destroyer,
bool  useEHCleanupForArray,
const VarDecl VD 
)
llvm::Constant * CodeGenFunction::GenerateDestroyHelperFunction ( const CGBlockInfo blockInfo)

Generate the destroy-helper function for a block closure object: static void block_destroy_helper(block_t *theBlock);

Note that this destroys a heap-allocated block closure object; it should not be confused with a 'byref destroy helper', which destroys the heap-allocated contents of an individual __block variable.

Definition at line 1478 of file CGBlocks.cpp.

References clang::CodeGen::ARCImpreciseLifetime, clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, Builder, clang::BlockDecl::captures(), clang::Create(), clang::FunctionDecl::Create(), clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::Qualifiers::getObjCLifetime(), clang::QualType::getQualifiers(), clang::ASTContext::getTranslationUnitDecl(), clang::ValueDecl::getType(), clang::Qualifiers::hasStrongOrWeakObjCLifetime(), clang::InternalLinkage, clang::Type::isBlockPointerType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCRetainableType(), clang::Qualifiers::OCL_Weak, clang::SC_Static, clang::CodeGen::CGBlockInfo::StructureType, clang::ast_matchers::type, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.

Referenced by buildDisposeHelper().

llvm::Constant * CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction ( const ObjCPropertyImplDecl PID)

Definition at line 2963 of file CGObjC.cpp.

References clang::QualType::addConst(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), AttributeLangSupport::C, clang::frontend::CPlusPlus, clang::CXXConstructExpr::Create(), clang::Create(), clang::FunctionDecl::Create(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), EmitAnyExpr(), FinishFunction(), clang::CodeGen::AggValueSlot::forAddr(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getAtomicGetterHelperFnMap(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::ObjCPropertyImplDecl::getGetterCXXConstructor(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::Type::getPointeeType(), clang::ASTContext::getPointerType(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::CodeGen::RValue::getScalarVal(), clang::ASTContext::getTranslationUnitDecl(), clang::Expr::getType(), clang::ObjCPropertyDecl::getType(), clang::ASTContext::getTypeAlignInChars(), clang::CodeGen::CodeGenModule::getTypes(), clang::ObjCRuntime::hasAtomicCopyHelper(), hasTrivialGetExpr(), clang::ASTContext::Idents, clang::InternalLinkage, clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::Type::isRecordType(), clang::ObjCPropertyDecl::OBJC_PR_atomic, clang::OK_Ordinary, clang::SC_Static, clang::CodeGen::CodeGenModule::setAtomicGetterHelperFnMap(), StartFunction(), clang::UO_Deref, clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.

Referenced by GenerateObjCGetter().

llvm::Constant * CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction ( const ObjCPropertyImplDecl PID)

GenerateObjCAtomicSetterCopyHelperFunction - Given a c++ object type with non-trivial copy assignment function, produce following helper function. static void copyHelper(Ty *dest, const Ty *source) { *dest = *source; }

Definition at line 2886 of file CGObjC.cpp.

References clang::QualType::addConst(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), AttributeLangSupport::C, clang::frontend::CPlusPlus, clang::Create(), clang::FunctionDecl::Create(), EmitStmt(), FinishFunction(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getAtomicSetterHelperFnMap(), clang::CallExpr::getCallee(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::Type::getPointeeType(), clang::ASTContext::getPointerType(), clang::ObjCPropertyDecl::getPropertyAttributes(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::ObjCPropertyImplDecl::getPropertyIvarDecl(), clang::ObjCPropertyImplDecl::getSetterCXXAssignment(), clang::ASTContext::getTranslationUnitDecl(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ObjCRuntime::hasAtomicCopyHelper(), hasTrivialSetExpr(), clang::ASTContext::Idents, clang::InternalLinkage, clang::Type::isRecordType(), clang::ObjCPropertyDecl::OBJC_PR_atomic, clang::OK_Ordinary, clang::SC_Static, clang::CodeGen::CodeGenModule::setAtomicSetterHelperFnMap(), StartFunction(), clang::UO_Deref, clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.

Referenced by GenerateObjCSetter().

void CodeGenFunction::GenerateObjCCtorDtorMethod ( ObjCImplementationDecl IMP,
ObjCMethodDecl MD,
bool  ctor 
)
void CodeGenFunction::GenerateObjCGetter ( ObjCImplementationDecl IMP,
const ObjCPropertyImplDecl PID 
)

GenerateObjCGetter - Synthesize an Objective-C property getter function.

Generate an Objective-C property getter function.

The given Decl must be an ObjCImplementationDecl. @synthesize is illegal within a category.

Definition at line 763 of file CGObjC.cpp.

References FinishFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), generateObjCGetterBody(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCPropertyDecl::getGetterMethodDecl(), clang::ObjCPropertyImplDecl::getPropertyDecl(), and StartObjCMethod().

void CodeGenFunction::generateObjCGetterBody ( const ObjCImplementationDecl classImpl,
const ObjCPropertyImplDecl propImpl,
const ObjCMethodDecl GetterMothodDecl,
llvm::Constant *  AtomicHelperFn 
)

Definition at line 833 of file CGObjC.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, AutoreleaseResult, clang::ASTContext::BoolTy, Builder, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), EmitAggregateCopy(), emitARCRetainLoadOfScalar(), EmitCall(), emitCPPObjectAtomicGetterCall(), EmitIvarOffset(), EmitLoadOfComplex(), EmitLoadOfLValue(), EmitLValueForIvar(), EmitReturnStmt(), EmitStoreOfComplex(), emitStructGetterCall(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCMethodDecl::getCmdDecl(), getContext(), getEvaluationKind(), clang::ObjCPropertyImplDecl::getGetterCXXConstructor(), clang::ObjCPropertyDecl::getGetterMethodDecl(), getLLVMContext(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::CodeGen::CGObjCRuntime::GetPropertyGetFunction(), clang::ObjCPropertyImplDecl::getPropertyIvarDecl(), clang::CodeGen::LValue::getQuals(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ValueDecl::getType(), clang::ObjCPropertyDecl::getType(), getTypes(), hasTrivialGetExpr(), clang::Type::isReferenceType(), LoadObjCSelf(), MakeNaturalAlignAddrLValue(), clang::Qualifiers::OCL_Weak, ReturnValue, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, TypeOfSelfObject(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.

Referenced by GenerateObjCGetter().

void CodeGenFunction::GenerateObjCMethod ( const ObjCMethodDecl OMD)

Generate an Objective-C method. An Objective-C method is a C function with its pointer, name, and types registered in the class struture.

Definition at line 524 of file CGObjC.cpp.

References clang::CodeGen::CodeGenPGO::assignRegionCounters(), CurFn, EmitCompoundStmtWithoutScope(), FinishFunction(), clang::ObjCMethodDecl::getBody(), clang::Decl::getBodyRBrace(), clang::ObjCMethodDecl::getClassInterface(), incrementProfileCounter(), and StartObjCMethod().

Referenced by clang::CodeGen::CodeGenModule::EmitTopLevelDecl().

void CodeGenFunction::GenerateObjCSetter ( ObjCImplementationDecl IMP,
const ObjCPropertyImplDecl PID 
)

Generate an Objective-C property setter function.

GenerateObjCSetter - Synthesize an Objective-C property setter function for the given property.

The given Decl must be an ObjCImplementationDecl. @synthesize is illegal within a category.

Definition at line 1292 of file CGObjC.cpp.

References FinishFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCSetterBody(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::ObjCPropertyDecl::getSetterMethodDecl(), and StartObjCMethod().

void CodeGenFunction::generateObjCSetterBody ( const ObjCImplementationDecl classImpl,
const ObjCPropertyImplDecl propImpl,
llvm::Constant *  AtomicHelperFn 
)

Definition at line 1111 of file CGObjC.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::BO_Assign, clang::ASTContext::BoolTy, Builder, clang::CK_AnyPointerToBlockPointerCast, clang::CK_BitCast, clang::CK_BlockPointerToObjCPointerCast, clang::CK_CPointerToObjCPointerCast, clang::CK_LValueToRValue, clang::CK_NoOp, EmitCall(), emitCPPObjectAtomicSetterCall(), EmitIvarOffset(), EmitLValueForIvar(), EmitStmt(), emitStructSetterCall(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCMethodDecl::getCmdDecl(), getContext(), getLLVMContext(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CGObjCRuntime::GetOptimizedPropertySetFunction(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::ObjCPropertyImplDecl::getPropertyIvarDecl(), clang::CodeGen::CGObjCRuntime::GetPropertySetFunction(), clang::ObjCMethodDecl::getSelfDecl(), clang::ObjCPropertyImplDecl::getSetterCXXAssignment(), clang::ObjCPropertyDecl::getSetterMethodDecl(), clang::Expr::getType(), clang::ValueDecl::getType(), getTypes(), clang::QualType::getUnqualifiedType(), clang::ASTContext::hasSameUnqualifiedType(), hasTrivialSetExpr(), LoadObjCSelf(), clang::OK_Ordinary, clang::ImplicitCastExpr::OnStack, clang::ObjCMethodDecl::param_begin(), TypeOfSelfObject(), UseOptimizedSetter(), clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.

Referenced by GenerateObjCSetter().

llvm::Function * CodeGenFunction::GenerateSEHFilterFunction ( CodeGenFunction ParentCGF,
const SEHExceptStmt Except 
)

Create a stub filter function that will ultimately hold the code of the filter expression. The EH preparation passes in LLVM will outline the code from the main function body into this stub.

Definition at line 1579 of file CGException.cpp.

References Builder, ConvertType(), CurFn, EmitScalarExpr(), FinishFunction(), getContext(), clang::SEHExceptStmt::getFilterExpr(), clang::Expr::getType(), clang::Type::isSignedIntegerType(), ReturnValue, and startOutlinedSEHHelper().

Referenced by EnterSEHTryStmt().

llvm::Function * CodeGenFunction::GenerateSEHFinallyFunction ( CodeGenFunction ParentCGF,
const SEHFinallyStmt Finally 
)
void CodeGenFunction::generateThunk ( llvm::Function *  Fn,
const CGFunctionInfo FnInfo,
GlobalDecl  GD,
const ThunkInfo Thunk 
)
llvm::Function * CodeGenFunction::GenerateVarArgsThunk ( llvm::Function *  Fn,
const CGFunctionInfo FnInfo,
GlobalDecl  GD,
const ThunkInfo Thunk 
)
unsigned CodeGenFunction::getAccessedFieldNo ( unsigned  Idx,
const llvm::Constant *  Elts 
)
static

getAccessedFieldNo - Given an encoded value and a result number, return the input field number being accessed.

Definition at line 464 of file CGExpr.cpp.

llvm::Value * CodeGenFunction::GetAddressOfBaseClass ( llvm::Value Value,
const CXXRecordDecl Derived,
CastExpr::path_const_iterator  PathBegin,
CastExpr::path_const_iterator  PathEnd,
bool  NullCheckValue,
SourceLocation  Loc 
)
llvm::Value * CodeGenFunction::GetAddressOfDerivedClass ( llvm::Value Value,
const CXXRecordDecl Derived,
CastExpr::path_const_iterator  PathBegin,
CastExpr::path_const_iterator  PathEnd,
bool  NullCheckValue 
)
llvm::Value * CodeGenFunction::GetAddressOfDirectBaseInCompleteClass ( llvm::Value This,
const CXXRecordDecl Derived,
const CXXRecordDecl Base,
bool  BaseIsVirtual 
)

GetAddressOfBaseOfCompleteClass - Convert the given pointer to a complete class to the given direct base.

Gets the address of a direct base class within a complete object. This should only be used for (1) non-virtual bases or (2) virtual bases when the type is known to be complete (e.g. in complete destructors).

The object pointed to by 'This' is assumed to be non-null.

Definition at line 82 of file CGClass.cpp.

References Builder, ConvertType(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), getContext(), getElementType(), clang::ASTRecordLayout::getVBaseClassOffset(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.

Referenced by EmitBaseInitializer().

llvm::Value * CodeGenFunction::GetAddrOfBlockDecl ( const VarDecl var,
bool  ByRef 
)
llvm::BlockAddress * CodeGenFunction::GetAddrOfLabel ( const LabelDecl L)
llvm::Value* clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar ( const VarDecl VD)
inline
CleanupKind clang::CodeGen::CodeGenFunction::getARCCleanupKind ( )
inline

Retrieves the default cleanup kind for an ARC cleanup. Except under -fobjc-arc-eh, ARC cleanups are normal-only.

Definition at line 2640 of file CodeGenFunction.h.

References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::NormalAndEHCleanup, and clang::CodeGen::NormalCleanup.

Referenced by emitAutoVarTypeCleanup(), EmitAutoVarWithLifetime(), EmitObjCConsumeObject(), EmitParmDecl(), pushTemporaryCleanup(), and StartObjCMethod().

std::pair< llvm::Type *, unsigned > CodeGenFunction::getByRefValueLLVMField ( const ValueDecl VD) const

getByrefValueFieldNumber - Given a declaration, returns the LLVM field number that holds the value.

Definition at line 2005 of file CGBlocks.cpp.

Referenced by EmitScalarInit(), and clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress().

CleanupKind clang::CodeGen::CodeGenFunction::getCleanupKind ( QualType::DestructionKind  kind)
inline
ASTContext& clang::CodeGen::CodeGenFunction::getContext ( ) const
inline

Definition at line 1072 of file CodeGenFunction.h.

References CGM, and clang::CodeGen::CodeGenModule::getContext().

Referenced by AddDirectArgument(), CanDevirtualizeMemberFunctionCall(), CheckAggExprForMemSetUse(), commonEmitCXXMemberOrOperatorCall(), ConstantFoldsToSimpleInteger(), ConvertType(), CreateAggTemp(), CreateIRTemp(), CreateMemTemp(), createReferenceTemporary(), EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitAggMemberInitializer(), EmitAggregateCopy(), EmitAggregateCopyCtor(), emitAlignedClause(), EmitAnyExprToMem(), EmitARMBuiltinExpr(), emitArrayLength(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), EmitAtomicStore(), EmitAutoVarAlloca(), EmitAutoVarInit(), EmitBaseInitializer(), EmitBinaryAtomicPost(), EmitBlockCopyAndAutorelease(), EmitBuiltinNewDeleteCall(), EmitCallAndReturnForThunk(), EmitCallArgs(), EmitCapturedFieldLValue(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCommonNeonBuiltinExpr(), EmitCompoundStmt(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), EmitCXXConstructorCall(), EmitCXXDeleteExpr(), EmitCXXGlobalVarDeclInit(), EmitCXXMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXTypeidExpr(), EmitDeclInit(), EmitDeclInvariant(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDeleteCall(), emitDestroy(), EmitDestructorBody(), EmitDtorSanitizerCallback(), EmitEndEHSpec(), EmitFunctionDeclLValue(), EmitGlobalVarDeclLValue(), emitIfStmt(), EmitInitializerForField(), EmitLambdaBlockInvokeBody(), EmitLambdaDelegatingInvokeBody(), EmitMaterializeTemporaryExpr(), EmitMemberInitializer(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitObjCBoxedExpr(), EmitObjCForCollectionStmt(), EmitObjCMRRAutoreleasePoolPop(), EmitObjCMRRAutoreleasePoolPush(), EmitOMPCopyinClause(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), EmitReturnStmt(), EmitSEHExceptionCodeSave(), EmitStartEHSpec(), EmitStaticVarDecl(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtor(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitTypeCheck(), EmitVAArgFromMemory(), EmitVAListRef(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVariablyModifiedType(), EmitX86BuiltinExpr(), EnterSEHTryStmt(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), EvaluateExprAsBool(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCGetterBody(), generateObjCSetterBody(), GenerateSEHFilterFunction(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getItaniumDynamicCastFn(), GetNumNonZeroBytesInInit(), getRangeForType(), getVLASize(), GetVTTParameter(), InitCapturedStruct(), InitCatchParam(), InitializeVTablePointers(), isCheapEnoughToEvaluateUnconditionally(), LookupNeonLLVMIntrinsic(), MakeAddrLValue(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), MakeNaturalAlignAddrLValue(), performTypeAdjustment(), StartFunction(), startOutlinedSEHHelper(), StartThunk(), StoreAnyExprIntoOneUnit(), typeIsSuitableForInlineAtomic(), and TypeOfSelfObject().

uint64_t clang::CodeGen::CodeGenFunction::getCurrentProfileCount ( )
inline

Get the profiler's current count. This is generally the count for the most recently incremented counter.

Definition at line 939 of file CodeGenFunction.h.

Referenced by EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitDoStmt(), and EmitObjCForCollectionStmt().

CGDebugInfo* clang::CodeGen::CodeGenFunction::getDebugInfo ( )
inline
CodeGenFunction::Destroyer * CodeGenFunction::getDestroyer ( QualType::DestructionKind  destructionKind)
llvm::BasicBlock * CodeGenFunction::getEHDispatchBlock ( EHScopeStack::stable_iterator  scope)
llvm::BasicBlock * CodeGenFunction::getEHResumeBlock ( bool  isCleanup)
llvm::Value * CodeGenFunction::getEHSelectorSlot ( )
TypeEvaluationKind CodeGenFunction::getEvaluationKind ( QualType  T)
static
llvm::Value * CodeGenFunction::getExceptionFromSlot ( )
llvm::Value * CodeGenFunction::getExceptionSlot ( )

Returns a pointer to the function's exception object and selector slot, which is assigned in every landing pad.

Definition at line 396 of file CGException.cpp.

References CreateTempAlloca(), ExceptionSlot, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.

Referenced by EmitLandingPad(), and getExceptionFromSlot().

llvm::BasicBlock * CodeGenFunction::GetIndirectGotoBlock ( )
llvm::BasicBlock* clang::CodeGen::CodeGenFunction::getInvokeDest ( )
inline
llvm::BasicBlock * CodeGenFunction::getInvokeDestImpl ( )
CodeGenFunction::JumpDest CodeGenFunction::getJumpDestForLabel ( const LabelDecl S)

getBasicBlockForLabel - Return the LLVM basicblock that the specified label maps to.

Definition at line 402 of file CGStmt.cpp.

References createBasicBlock(), clang::NamedDecl::getName(), clang::CodeGen::EHScopeStack::stable_iterator::invalid(), clang::CodeGen::CodeGenFunction::JumpDest::isValid(), and NextCleanupDestIndex.

Referenced by EmitGotoStmt(), EmitIndirectGotoStmt(), and GetAddrOfLabel().

JumpDest clang::CodeGen::CodeGenFunction::getJumpDestInCurrentScope ( llvm::BasicBlock *  Target)
inline

The given basic block lies in the current EH scope, but may be a target of a potentially scope-crossing jump; get a stable handle to which we can perform this jump later.

Definition at line 638 of file CodeGenFunction.h.

References EHStack, clang::CodeGen::EHScopeStack::getInnermostNormalCleanup(), and NextCleanupDestIndex.

Referenced by EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitLabel(), EmitObjCForCollectionStmt(), EmitOMPInnerLoop(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), getJumpDestInCurrentScope(), and StartFunction().

JumpDest clang::CodeGen::CodeGenFunction::getJumpDestInCurrentScope ( StringRef  Name = StringRef())
inline

The given basic block lies in the current EH scope, but may be a target of a potentially scope-crossing jump; get a stable handle to which we can perform this jump later.

Definition at line 647 of file CodeGenFunction.h.

References createBasicBlock(), and getJumpDestInCurrentScope().

const LangOptions& clang::CodeGen::CodeGenFunction::getLangOpts ( ) const
inline
llvm::LLVMContext& clang::CodeGen::CodeGenFunction::getLLVMContext ( )
inline
llvm::Value * CodeGenFunction::getNormalCleanupDestSlot ( )

Definition at line 1157 of file CGCleanup.cpp.

References Builder.

Referenced by ResolveAllBranchFixups(), and TransitionToCleanupSwitch().

CodeGenFunction::JumpDest CodeGenFunction::getOMPCancelDestination ( OpenMPDirectiveKind  Kind)

Definition at line 2110 of file CGStmtOpenMP.cpp.

References ReturnBlock.

const LValue& clang::CodeGen::CodeGenFunction::getOpaqueLValueMapping ( const OpaqueValueExpr e)
inline

getOpaqueLValueMapping - Given an opaque value expression (which must be mapped to an l-value), return its mapping.

Definition at line 1634 of file CodeGenFunction.h.

References clang::CodeGen::CodeGenFunction::OpaqueValueMapping::shouldBindAsLValue().

const RValue& clang::CodeGen::CodeGenFunction::getOpaqueRValueMapping ( const OpaqueValueExpr e)
inline

getOpaqueRValueMapping - Given an opaque value expression (which must be mapped to an r-value), return its mapping.

Definition at line 1645 of file CodeGenFunction.h.

References clang::CodeGen::CodeGenFunction::OpaqueValueMapping::shouldBindAsLValue().

uint64_t clang::CodeGen::CodeGenFunction::getProfileCount ( const Stmt S)
inline
llvm::Value * CodeGenFunction::getSelectorFromSlot ( )

Definition at line 412 of file CGException.cpp.

References Builder, and getEHSelectorSlot().

Referenced by emitCatchDispatchBlock(), emitFilterDispatchBlock(), and getEHResumeBlock().

const TargetInfo& clang::CodeGen::CodeGenFunction::getTarget ( ) const
inline
llvm::BasicBlock * CodeGenFunction::getTerminateHandler ( )

getTerminateHandler - Return a handler (not a landing pad, just a catch handler) that just calls terminate. This is used when a terminate scope encloses a try.

Definition at line 1221 of file CGException.cpp.

References Builder, clang::frontend::CPlusPlus, createBasicBlock(), clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), clang::CodeGen::CodeGenModule::getCXXABI(), getExceptionFromSlot(), and getLangOpts().

Referenced by getEHDispatchBlock().

llvm::BasicBlock * CodeGenFunction::getTerminateLandingPad ( )
CodeGenTypes& clang::CodeGen::CodeGenFunction::getTypes ( ) const
inline
RValue CodeGenFunction::GetUndefRValue ( QualType  Ty)

GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.

Definition at line 765 of file CGExpr.cpp.

References clang::Type::castAs(), clang::ComplexType::getElementType(), clang::Type::isVoidType(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.

llvm::BasicBlock* clang::CodeGen::CodeGenFunction::getUnreachableBlock ( )
inline
std::pair< llvm::Value *, QualType > CodeGenFunction::getVLASize ( const VariableArrayType vla)

getVLASize - Returns an LLVM value that corresponds to the size, in non-variably-sized elements, of a variable length array type, plus that largest non-variably-sized element type. Assumes that the type has already been emitted with EmitVariablyModifiedType.

Definition at line 1490 of file CodeGenFunction.cpp.

References Builder, getContext(), clang::ArrayType::getElementType(), clang::VariableArrayType::getSizeExpr(), and clang::CodeGen::CodeGenTypeCache::SizeTy.

Referenced by emitArrayLength(), EmitAutoVarAlloca(), EmitNullInitialization(), emitPointerArithmetic(), getArrayIndexingBound(), and getVLASize().

std::pair< llvm::Value *, QualType > CodeGenFunction::getVLASize ( QualType  vla)
llvm::Value * CodeGenFunction::GetVTablePtr ( llvm::Value This,
llvm::Type *  Ty 
)

GetVTablePtr - Return the Value of the vtable pointer member pointed to by This.

Definition at line 2122 of file CGClass.cpp.

References Builder, CGM, clang::CodeGen::CodeGenModule::DecorateInstruction(), and clang::CodeGen::CodeGenModule::getTBAAInfoForVTablePtr().

Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), and EmitVTablePtrCheckForCast().

llvm::Value * CodeGenFunction::GetVTTParameter ( GlobalDecl  GD,
bool  ForVirtualBase,
bool  Delegating 
)

GetVTTParameter - Return the VTT parameter that should be passed to a base constructor/destructor with virtual bases. FIXME: VTTs are Itanium ABI-specific, so the definition should move to ItaniumCXXABI.cpp together with all the references to VTT.

Definition at line 297 of file CGClass.cpp.

References Builder, CGM, CurCodeDecl, CurGD, clang::CodeGen::CodeGenVTables::GetAddrOfVTT(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::CodeGen::CodeGenVTables::getSubVTTIndex(), clang::ASTRecordLayout::getVBaseClassOffset(), clang::CodeGen::CodeGenModule::getVTables(), LoadCXXVTT(), and clang::CodeGen::CGCXXABI::NeedsVTTParameter().

Referenced by EmitDelegateCXXConstructorCall().

static bool clang::CodeGen::CodeGenFunction::hasAggregateEvaluationKind ( QualType  T)
inlinestatic
static bool clang::CodeGen::CodeGenFunction::hasScalarEvaluationKind ( QualType  T)
inlinestatic
bool clang::CodeGen::CodeGenFunction::hasVolatileMember ( QualType  T)
inline

hasVolatileMember - returns true if aggregate type has a volatile member.

Definition at line 1583 of file CodeGenFunction.h.

References clang::Type::getAs(), and clang::RecordDecl::hasVolatileMember().

Referenced by EmitAggregateAssign(), and LValueIsSuitableForInlineAtomic().

bool clang::CodeGen::CodeGenFunction::HaveInsertPoint ( ) const
inline

HaveInsertPoint - True if an insertion point is defined. If not, this indicates that the current code being emitted is unreachable.

Definition at line 1477 of file CodeGenFunction.h.

References Builder.

Referenced by EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBlockWithFallThrough(), EmitBreakStmt(), EmitCleanup(), EmitContinueStmt(), EmitDeclStmt(), EmitGotoStmt(), EmitSEHLeaveStmt(), EmitStmt(), EnsureInsertPoint(), enterBlockScope(), ExitCXXTryStmt(), ExitSEHTryStmt(), and protectFromPeepholes().

void clang::CodeGen::CodeGenFunction::incrementProfileCounter ( const Stmt S)
inline
bool CodeGenFunction::IndirectObjCSetterArg ( const CGFunctionInfo FI)
LValue CodeGenFunction::InitCapturedStruct ( const CapturedStmt S)
void CodeGenFunction::initFullExprCleanup ( )
void CodeGenFunction::InitializeVTablePointer ( BaseSubobject  Base,
const CXXRecordDecl NearestVBase,
CharUnits  OffsetFromNearestVBase,
const CXXRecordDecl VTableClass 
)
void CodeGenFunction::InitializeVTablePointers ( BaseSubobject  Base,
const CXXRecordDecl NearestVBase,
CharUnits  OffsetFromNearestVBase,
bool  BaseIsNonVirtualPrimaryBase,
const CXXRecordDecl VTableClass,
VisitedVirtualBasesSetTy VBases 
)
void CodeGenFunction::InitializeVTablePointers ( const CXXRecordDecl ClassDecl)
void CodeGenFunction::InitTempAlloca ( llvm::AllocaInst *  Alloca,
llvm::Value Value 
)

InitTempAlloca - Provide an initial value for the given alloca.

Definition at line 64 of file CGExpr.cpp.

References AllocaInsertPt.

void CodeGenFunction::InsertHelper ( llvm::Instruction *  I,
const llvm::Twine &  Name,
llvm::BasicBlock *  BB,
llvm::BasicBlock::iterator  InsertPt 
) const

CGBuilder insert helper. This function is called after an instruction is created using Builder.

Definition at line 1748 of file CodeGenFunction.cpp.

References CGM, clang::CodeGen::SanitizerMetadata::disableSanitizerForInstruction(), clang::CodeGen::CodeGenModule::getSanitizerMetadata(), clang::CodeGen::LoopInfoStack::InsertHelper(), IsSanitizerScope, and LoopStack.

bool clang::CodeGen::CodeGenFunction::isInConditionalBranch ( ) const
inline

isInConditionalBranch - Return true if we're currently emitting one branch or the other of a conditional expression.

Definition at line 698 of file CodeGenFunction.h.

Referenced by EnterNewDeleteCleanup(), pushCleanupAfterFullExpr(), pushFullExprCleanup(), pushLifetimeExtendedDestroy(), setBeforeOutermostConditional(), and SetupCleanupBlockActivation().

static bool clang::CodeGen::CodeGenFunction::isObjCMethodWithTypeParams ( const ObjCMethodDecl method)
inlinestatic

Definition at line 2949 of file CodeGenFunction.h.

References clang::Decl::getDeclContext().

Referenced by EmitCallArgs().

template<typename T >
static bool clang::CodeGen::CodeGenFunction::isObjCMethodWithTypeParams ( const T *  )
inlinestatic

Definition at line 2963 of file CodeGenFunction.h.

bool CodeGenFunction::isObviouslyBranchWithoutCleanups ( JumpDest  Dest) const

isObviouslyBranchWithoutCleanups - Return true if a branch to the specified destination obviously has no cleanups to run. 'false' is always a conservatively correct answer for this method.

Definition at line 915 of file CGCleanup.cpp.

References clang::CodeGen::EHScopeStack::stable_iterator::encloses(), and clang::CodeGen::CodeGenFunction::JumpDest::getScopeDepth().

Referenced by EmitCaseStmt().

bool clang::CodeGen::CodeGenFunction::isSEHTryScope ( ) const
inline

Returns true inside SEH __try blocks.

Definition at line 374 of file CodeGenFunction.h.

References SEHTryEpilogueStack.

Referenced by EmitSEHLeaveStmt().

bool CodeGenFunction::isTrivialInitializer ( const Expr Init)

Determine whether the given initializer is trivial in the sense that it requires no code to be generated.

Definition at line 1087 of file CGDecl.cpp.

Referenced by AllTrivialInitializers(), EmitAutoVarInit(), and EmitOMPFirstprivateClause().

bool CodeGenFunction::IvarTypeWithAggrGCObjects ( QualType  Ty)
llvm::Value* clang::CodeGen::CodeGenFunction::LoadBlockStruct ( )
inline

Definition at line 1241 of file CodeGenFunction.h.

References BlockPointer.

llvm::Value* clang::CodeGen::CodeGenFunction::LoadCXXStructorImplicitParam ( )
inline

LoadCXXStructorImplicitParam - Load the implicit parameter for a constructor/destructor.

Definition at line 1709 of file CodeGenFunction.h.

llvm::Value* clang::CodeGen::CodeGenFunction::LoadCXXThis ( )
inline

LoadCXXThis - Load the value of 'this'. This function is only valid while generating code for an C++ member function.

Definition at line 1693 of file CodeGenFunction.h.

Referenced by EmitAsanPrologueOrEpilogue(), EmitBaseInitializer(), EmitCallAndReturnForThunk(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDestructorBody(), EmitDtorSanitizerCallback(), EmitMemberInitializer(), and InitializeVTablePointer().

llvm::Value* clang::CodeGen::CodeGenFunction::LoadCXXVTT ( )
inline

LoadCXXVTT - Load the VTT parameter to base constructors/destructors have virtual bases.

Definition at line 1702 of file CodeGenFunction.h.

Referenced by GetVTTParameter().

llvm::Value * CodeGenFunction::LoadObjCSelf ( )
Function * CodeGenFunction::LookupNeonLLVMIntrinsic ( unsigned  IntrinsicID,
unsigned  Modifier,
llvm::Type *  ArgTy,
const CallExpr E 
)
bool CodeGenFunction::LValueIsSuitableForInlineAtomic ( LValue  LV)

An LValue is a candidate for having its loads and stores be made atomic if we are operating under /volatile:ms and the LValue itself is volatile and performing such an operation can be performed without a libcall.

Definition at line 1193 of file CGAtomic.cpp.

References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::LValue::getType(), hasVolatileMember(), and clang::CodeGen::LValue::isVolatile().

LValue clang::CodeGen::CodeGenFunction::MakeAddrLValue ( llvm::Value V,
QualType  T,
CharUnits  Alignment = CharUnits() 
)
inline
LValue CodeGenFunction::MakeNaturalAlignAddrLValue ( llvm::Value V,
QualType  T 
)
bool clang::CodeGen::CodeGenFunction::needsEHCleanup ( QualType::DestructionKind  kind)
inline
void CodeGenFunction::popCatchScope ( )

popCatchScope - Pops the catch scope at the top of the EHScope stack, emitting any required code (other than the catch handlers themselves).

Definition at line 898 of file CGException.cpp.

References clang::CodeGen::EHScopeStack::begin(), EHStack, emitCatchDispatchBlock(), clang::CodeGen::EHScope::hasEHBranches(), and clang::CodeGen::EHScopeStack::popCatch().

Referenced by clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), and clang::CodeGen::CodeGenFunction::FinallyInfo::exit().

void CodeGenFunction::PopCleanupBlock ( bool  FallthroughIsBranchThrough = false)

PopCleanupBlock - Will pop the cleanup entry on the stack and process all branch fixups.

Pops a cleanup block. If the block includes a normal cleanup, the current insertion point is threaded through the cleanup, as are any branch fixups on the cleanup.

Definition at line 583 of file CGCleanup.cpp.

References Builder, clang::Create(), CreateNormalEntry(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, destroyOptimisticNormalEntry(), EmitCleanup(), ForwardPrebranchedFallthrough(), clang::CodeGen::EHCleanupScope::getActiveFlag(), clang::CodeGen::EHCleanupScope::getBranchAfterBlock(), clang::CodeGen::EHCleanupScope::getBranchAfterIndex(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::EHCleanupScope::getCleanupBuffer(), clang::CodeGen::EHCleanupScope::getCleanupSize(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::EHCleanupScope::getEnclosingNormalCleanup(), clang::CodeGen::EHCleanupScope::getFixupDepth(), clang::CodeGen::EHCleanupScope::getNormalBlock(), clang::CodeGen::EHCleanupScope::getNumBranchAfters(), clang::CodeGen::EHCleanupScope::hasBranches(), clang::CodeGen::EHCleanupScope::hasBranchThroughs(), clang::CodeGen::EHScope::hasEHBranches(), clang::CodeGen::BranchFixup::InitialBranch, clang::CodeGen::EHCleanupScope::isActive(), clang::CodeGen::EHCleanupScope::isEHCleanup(), clang::CodeGen::EHCleanupScope::isNormalCleanup(), clang::CodeGen::BranchFixup::OptimisticBranchBlock, ResolveAllBranchFixups(), S, clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsEHCleanupKind(), clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsForEHCleanup(), clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsNormalCleanupKind(), clang::CodeGen::EHCleanupScope::shouldTestFlagInEHCleanup(), clang::CodeGen::EHCleanupScope::shouldTestFlagInNormalCleanup(), and SimplifyCleanupEntry().

Referenced by EmitArrayDelete(), emitArrayDestroy(), EmitDestructorBody(), EmitObjCForCollectionStmt(), EmitObjectDelete(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitSEHTryStmt(), and pushCleanupAfterFullExpr().

void CodeGenFunction::PopCleanupBlocks ( EHScopeStack::stable_iterator  OldCleanupStackSize)
void CodeGenFunction::PopCleanupBlocks ( EHScopeStack::stable_iterator  Old,
size_t  OldLifetimeExtendedSize 
)

Takes the old cleanup stack size and emits the cleanup blocks that have been added, then adds all lifetime-extended cleanups from the given position to the stack.

Pops cleanup blocks until the given savepoint is reached, then add the cleanups from the given savepoint in the lifetime-extended cleanups stack.

Definition at line 407 of file CGCleanup.cpp.

References clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupHeader::getKind(), and clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupHeader::getSize().

CodeGenFunction::PeepholeProtection CodeGenFunction::protectFromPeepholes ( RValue  rvalue)

protectFromPeepholes - Protect a value that we're intending to store to the side, but which will probably be used later, from aggressive peepholing optimizations that might delete it.

Pass the result to unprotectFromPeepholes to declare that protection is no longer required.

There's no particular reason why this shouldn't apply to l-values, it's just that no existing peepholes work on pointers.

Definition at line 1667 of file CodeGenFunction.cpp.

References Builder, clang::CodeGen::RValue::getScalarVal(), HaveInsertPoint(), and clang::CodeGen::RValue::isScalar().

Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind().

void CodeGenFunction::pushCallObjectDeleteCleanup ( const FunctionDecl OperatorDelete,
llvm::Value CompletePtr,
QualType  ElementType 
)

Definition at line 1443 of file CGExprCXX.cpp.

References EHStack, and clang::CodeGen::NormalAndEHCleanup.

template<class T , class... As>
void clang::CodeGen::CodeGenFunction::pushCleanupAfterFullExpr ( CleanupKind  Kind,
As...  A 
)
inline
void CodeGenFunction::pushDestroy ( QualType::DestructionKind  dtorKind,
llvm::Value addr,
QualType  type 
)

pushDestroy - Push the standard destructor for the given type as at least a normal cleanup.

Definition at line 1381 of file CGDecl.cpp.

References clang::CodeGen::EHCleanup, getCleanupKind(), and getDestroyer().

Referenced by EmitAutoVarWithLifetime(), emitDestructorsFunction(), EmitParmDecl(), enterBlockScope(), pushEHDestroy(), and pushTemporaryCleanup().

void CodeGenFunction::pushDestroy ( CleanupKind  kind,
llvm::Value addr,
QualType  type,
Destroyer destroyer,
bool  useEHCleanupForArray 
)

Definition at line 1390 of file CGDecl.cpp.

References clang::ast_matchers::type.

void CodeGenFunction::PushDestructorCleanup ( QualType  T,
llvm::Value Addr 
)

PushDestructorCleanup - Push a cleanup to call the complete-object destructor of an object of the given type at the given address. Does nothing if T is not a C++ class type with a non-trivial destructor.

Definition at line 1980 of file CGClass.cpp.

References clang::Type::getAsCXXRecordDecl(), clang::CXXRecordDecl::getDestructor(), clang::CXXRecordDecl::hasTrivialDestructor(), and clang::Decl::isUsed().

Referenced by pushCleanupAfterFullExpr().

void CodeGenFunction::PushDestructorCleanup ( const CXXDestructorDecl Dtor,
llvm::Value Addr 
)

PushDestructorCleanup - Push a cleanup to call the complete-object variant of the given destructor on the object at the given address.

Definition at line 1975 of file CGClass.cpp.

References EHStack, and clang::CodeGen::NormalAndEHCleanup.

void CodeGenFunction::pushEHDestroy ( QualType::DestructionKind  dtorKind,
llvm::Value addr,
QualType  type 
)

pushEHDestroy - Push the standard destructor for the given type as an EH-only cleanup.

Definition at line 1371 of file CGDecl.cpp.

References clang::CodeGen::EHCleanup, getDestroyer(), needsEHCleanup(), and pushDestroy().

Referenced by EmitInitializerForField(), and EmitMemberInitializer().

template<class T , class... As>
void clang::CodeGen::CodeGenFunction::pushFullExprCleanup ( CleanupKind  kind,
As...  A 
)
inline

pushFullExprCleanup - Push a cleanup to be run at the end of the current full-expression. Safe against the possibility that we're currently inside a conditionally-evaluated expression.

Definition at line 380 of file CodeGenFunction.h.

References EHStack, initFullExprCleanup(), isInConditionalBranch(), clang::CodeGen::EHScopeStack::pushCleanupTuple(), and saveValueInCond().

void CodeGenFunction::pushIrregularPartialArrayCleanup ( llvm::Value arrayBegin,
llvm::Value arrayEndPointer,
QualType  elementType,
Destroyer destroyer 
)

pushIrregularPartialArrayCleanup - Push an EH cleanup to destroy already-constructed elements of the given array. The cleanup may be popped with DeactivateCleanupBlock or PopCleanupBlock.

Parameters
elementType- the immediate element type of the array; possibly still an array type

Definition at line 1598 of file CGDecl.cpp.

References clang::CodeGen::EHCleanup.

Referenced by EmitNewArrayInitializer().

void CodeGenFunction::pushLifetimeExtendedDestroy ( CleanupKind  kind,
llvm::Value addr,
QualType  type,
Destroyer destroyer,
bool  useEHCleanupForArray 
)
void CodeGenFunction::pushRegularPartialArrayCleanup ( llvm::Value arrayBegin,
llvm::Value arrayEnd,
QualType  elementType,
Destroyer destroyer 
)

pushRegularPartialArrayCleanup - Push an EH cleanup to destroy already-constructed elements of the given array. The cleanup may be popped with DeactivateCleanupBlock or PopCleanupBlock.

Parameters
elementType- the immediate element type of the array; possibly still an array type

Definition at line 1613 of file CGDecl.cpp.

References clang::CodeGen::EHCleanup.

Referenced by emitArrayDestroy(), EmitCXXAggrConstructorCall(), and EmitNewArrayInitializer().

void CodeGenFunction::pushStackRestore ( CleanupKind  kind,
llvm::Value SPMem 
)

Definition at line 1397 of file CGDecl.cpp.

References EHStack.

Referenced by clang::CodeGen::CallArgList::allocateArgumentMemory(), and EmitAutoVarAlloca().

llvm::Value * CodeGenFunction::recoverAddrOfEscapedLocal ( CodeGenFunction ParentCGF,
llvm::Value ParentVar,
llvm::Value ParentFP 
)

Recovers the address of a local in a parent function. ParentVar is the address of the variable used in the immediate parent function. It can either be an alloca or a call to llvm.localrecover if there are nested outlined functions. ParentFP is the frame pointer of the outermost parent frame.

Definition at line 1392 of file CGException.cpp.

References AllocaInsertPt, Builder, CurFn, clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.

Referenced by EmitCapturedLocals(), and EmitSEHExceptionCodeSave().

void CodeGenFunction::registerGlobalDtorWithAtExit ( const VarDecl D,
llvm::Constant *  fn,
llvm::Constant *  addr 
)

Register a global destructor using the C atexit runtime function.

Call atexit() with a function that passes the given argument to the given function.

Definition at line 219 of file CGDeclCXX.cpp.

References CGM, createAtExitStub(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::IntTy.

void CodeGenFunction::ResolveBranchFixups ( llvm::BasicBlock *  Target)
bool CodeGenFunction::sanitizePerformTypeCheck ( ) const

Whether any type-checking sanitizers are enabled. If false, calls to EmitTypeCheck can be skipped.

Definition at line 482 of file CGExpr.cpp.

References clang::SanitizerSet::has(), and SanOpts.

Referenced by EmitReferenceBindingToExpr(), EmitTypeCheck(), and GetAddressOfBaseClass().

template<class T >
DominatingValue<T>::saved_type clang::CodeGen::CodeGenFunction::saveValueInCond ( value)
inline

Definition at line 341 of file CodeGenFunction.h.

References clang::CodeGen::InvariantValue< T >::save().

Referenced by pushFullExprCleanup().

void clang::CodeGen::CodeGenFunction::setBeforeOutermostConditional ( llvm::Value value,
llvm::Value addr 
)
inline
void clang::CodeGen::CodeGenFunction::setCurrentProfileCount ( uint64_t  Count)
inline

Set the profiler's current count.

Definition at line 933 of file CodeGenFunction.h.

Referenced by EmitBlockWithFallThrough(), and EmitBranchOnBoolExpr().

void CodeGenFunction::SetFPAccuracy ( llvm::Value Val,
float  Accuracy 
)

SetFPAccuracy - Set the minimum required accuracy of the given floating point operation, expressed as the maximum relative error in ulp.

Definition at line 3486 of file CGExpr.cpp.

References Node.

bool CodeGenFunction::ShouldInstrumentFunction ( )

ShouldInstrumentFunction - Return true if the current function should be instrumented with __cyg_profile_func_* calls

Definition at line 335 of file CodeGenFunction.cpp.

References CGM, CurFuncDecl, clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::Decl::hasAttr().

Referenced by FinishFunction(), and StartFunction().

bool clang::CodeGen::CodeGenFunction::shouldUseFusedARCCalls ( )
inline
void CodeGenFunction::SimplifyForwardingBlocks ( llvm::BasicBlock *  BB)

SimplifyForwardingBlocks - If the given basic block is only a branch to another basic block, simplify it. This assumes that no other code could potentially reference the basic block.

Definition at line 326 of file CGStmt.cpp.

References EHStack, and clang::CodeGen::EHScopeStack::empty().

Referenced by EmitDoStmt(), and EmitWhileStmt().

void clang::CodeGen::CodeGenFunction::StartBlock ( const char *  N)

StartBlock - Start new block named N. If insert block is a dummy block then reuse it.

void CodeGenFunction::StartFunction ( GlobalDecl  GD,
QualType  RetTy,
llvm::Function *  Fn,
const CGFunctionInfo FnInfo,
const FunctionArgList Args,
SourceLocation  Loc = SourceLocation(),
SourceLocation  StartLoc = SourceLocation() 
)

Emit code for the start of a function.

Parameters
LocThe location to be associated with the function.
StartLocThe location of the function body.

Definition at line 588 of file CodeGenFunction.cpp.

References AllocaInsertPt, AutoreleaseResult, Builder, CGM, clang::SanitizerSet::clear(), clang::frontend::CPlusPlus, createBasicBlock(), CreateIRTemp(), CurCodeDecl, CurFn, CurFnInfo, CurFuncDecl, EHStack, EmitFunctionInstrumentation(), EmitFunctionProlog(), clang::CodeGen::CGCXXABI::EmitInstanceFunctionProlog(), EmitLoadOfLValue(), EmitLValueForLambdaField(), EmitMCountInstrumentation(), EmitStartEHSpec(), EmitVariablyModifiedType(), endsWithReturn(), clang::RecordDecl::fields(), FnRetTy, clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(), clang::CXXRecordDecl::getCaptureFields(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), getDebugInfo(), clang::GlobalDecl::getDecl(), clang::ASTContext::getFunctionType(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), getJumpDestInCurrentScope(), clang::CodeGen::ABIArgInfo::getKind(), getLangOpts(), clang::Decl::getNonClosureContext(), clang::FunctionDecl::getOverloadedOperator(), clang::CXXMethodDecl::getParent(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::ValueDecl::getType(), clang::TargetCodeGenInfo::getUBSanFunctionSignature(), clang::SanitizerSet::has(), clang::Decl::hasAttr(), clang::SanitizerSet::hasOneOf(), hasScalarEvaluationKind(), clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenModule::isInSanitizerBlacklist(), clang::CXXRecordDecl::isLambda(), clang::Type::isObjCRetainableType(), clang::CodeGen::CGFunctionInfo::isReturnsRetained(), clang::CodeGen::ABIArgInfo::isSRetAfterThis(), clang::Type::isVariablyModifiedType(), clang::Type::isVoidType(), LambdaCaptureFields, LambdaThisCaptureField, clang::SanitizerSet::Mask, PrologueCleanupDepth, clang::Redeclarable< decl_type >::redecls(), ReturnBlock, ReturnValue, SanOpts, ShouldInstrumentFunction(), clang::Decl::specific_attrs(), and clang::CodeGen::EHScopeStack::stable_begin().

Referenced by createAtExitStub(), emitCopyprivateCopyFunction(), emitDestructorsFunction(), emitProxyTaskFunction(), emitReductionFunction(), emitTaskPrivateMappingFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), StartObjCMethod(), startOutlinedSEHHelper(), and StartThunk().

void CodeGenFunction::StartObjCMethod ( const ObjCMethodDecl OMD,
const ObjCContainerDecl CD 
)
void CodeGenFunction::startOutlinedSEHHelper ( CodeGenFunction ParentCGF,
bool  IsFilter,
const Stmt OutlinedStmt 
)
void CodeGenFunction::StartThunk ( llvm::Function *  Fn,
GlobalDecl  GD,
const CGFunctionInfo FnInfo 
)
CodeGenFunction::ConstantEmission CodeGenFunction::tryEmitAsConstant ( DeclRefExpr refExpr)

Try to emit a reference to the given value without producing it as an l-value. This is actually more than an optimization: we can't produce an l-value for variables that we never actually captured in a block or lambda, which means const int variables or constexpr literals or similar.

Definition at line 994 of file CGExpr.cpp.

References AttributeLangSupport::C, CEK_AsReferenceOnly, CEK_AsValueOnly, CEK_None, checkVarTypeForConstantEmission(), clang::Expr::EvaluateAsLValue(), clang::Expr::EvaluateAsRValue(), clang::DeclRefExpr::getDecl(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::EvalStatus::HasSideEffects, and clang::Expr::EvalResult::Val.

bool CodeGenFunction::typeIsSuitableForInlineAtomic ( QualType  Ty,
bool  IsVolatile 
) const

An type is a candidate for having its loads and stores be made atomic if we are operating under /volatile:ms and we know the access is volatile and performing such an operation can be performed without a libcall.

Definition at line 1204 of file CGAtomic.cpp.

References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::ASTContext::getTargetInfo(), and clang::TargetInfo::hasBuiltinAtomic().

QualType CodeGenFunction::TypeOfSelfObject ( )
void CodeGenFunction::unprotectFromPeepholes ( PeepholeProtection  protection)
Value * CodeGenFunction::vectorWrapScalar16 ( llvm::Value Op)
Value * CodeGenFunction::vectorWrapScalar8 ( llvm::Value Op)

Friends And Related Function Documentation

friend class CGCXXABI
friend

Definition at line 103 of file CodeGenFunction.h.

Member Data Documentation

llvm::AssertingVH<llvm::Instruction> clang::CodeGen::CodeGenFunction::AllocaInsertPt

AllocaInsertPoint - This is an instruction in the entry block before which we prefer to insert allocas.

Definition at line 168 of file CodeGenFunction.h.

Referenced by CreateTempAlloca(), EmitCapturedLocals(), FinishFunction(), InitTempAlloca(), recoverAddrOfEscapedLocal(), and StartFunction().

bool clang::CodeGen::CodeGenFunction::AutoreleaseResult

In ARC, whether we should autorelease the return value.

Definition at line 273 of file CodeGenFunction.h.

Referenced by EmitCallAndReturnForThunk(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), and StartFunction().

const CodeGen::CGBlockInfo* clang::CodeGen::CodeGenFunction::BlockInfo

Definition at line 283 of file CodeGenFunction.h.

Referenced by EmitLambdaBlockInvokeBody(), and EmitParmDecl().

llvm::Value* clang::CodeGen::CodeGenFunction::BlockPointer

Definition at line 284 of file CodeGenFunction.h.

Referenced by LoadBlockStruct().

unsigned char clang::CodeGen::CodeGenFunction::BoundsChecking

BoundsChecking - Emit run-time bounds checks. Higher values mean potentially higher performance penalties.

Definition at line 252 of file CodeGenFunction.h.

CGBuilderTy clang::CodeGen::CodeGenFunction::Builder

Definition at line 135 of file CodeGenFunction.h.

Referenced by AddDirectArgument(), AddInitializerToStaticVarDecl(), AdjustObjCObjectType(), clang::CodeGen::CallArgList::allocateArgumentMemory(), clang::CodeGen::ApplyDebugLocation::ApplyDebugLocation(), ApplyNonVirtualAndVirtualOffset(), BuildAggStore(), BuildAppleKextVirtualCall(), BuildVector(), CheckAggExprForMemSetUse(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), createPlaceholderSlot(), CreateTempAlloca(), EmitAArch64BuiltinExpr(), EmitAArch64CompareBuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitAggMemberInitializer(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAMDGPUBuiltinExpr(), EmitAnnotationCall(), EmitAnyExprToExn(), emitARCCopyOperation(), EmitARCDestroyStrong(), EmitARCDestroyWeak(), EmitARCInitWeak(), emitARCLoadOperation(), EmitARCRelease(), emitARCRetainAfterCall(), EmitARCRetainAutorelease(), EmitARCRetainAutoreleasedReturnValue(), EmitARCRetainBlock(), emitARCStoreOperation(), EmitARCStoreStrongCall(), emitARCValueOperation(), emitArgumentDemotion(), EmitARMBuiltinExpr(), EmitArrayDelete(), emitArrayDestroy(), emitArrayLength(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), EmitAtomicStore(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAutoVarAlloca(), EmitAutoVarInit(), EmitBinaryAtomicPost(), EmitBitCastOfLValueToProperType(), EmitBlock(), EmitBlockAfterUses(), EmitBranch(), EmitBranchOnBoolExpr(), EmitCapturedLocals(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCastToVoidPtr(), emitCatchDispatchBlock(), emitCheckHandlerCall(), EmitCleanup(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), EmitCondBrHints(), emitCopyprivateCopyFunction(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCtorPrologue(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXTypeidExpr(), EmitDeclInvariant(), EmitDeleteCall(), emitDestroy(), emitDestructorsFunction(), EmitDoStmt(), EmitDtorSanitizerCallback(), EmitDynamicCast(), EmitExtendGCLifetime(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), EmitForStmt(), emitFPIntBuiltin(), EmitFromInt(), EmitFunctionDeclLValue(), EmitFunctionInstrumentation(), EmitGlobalVarDeclLValue(), emitIfStmt(), EmitIndirectGotoStmt(), EmitInitializerForField(), EmitLandingPad(), EmitLifetimeEnd(), EmitLifetimeStart(), EmitMemberInitializer(), clang::CodeGen::CGCXXABI::EmitMemberPointerComparison(), clang::CodeGen::CGCXXABI::EmitMemberPointerIsNotNull(), EmitMustTailThunk(), EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonSplat(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitNVPTXBuiltinExpr(), EmitObjCAutoreleasePoolPop(), EmitObjCAutoreleasePoolStmt(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), EmitObjectDelete(), EmitOMPAggregateAssign(), emitOMPAtomicRMW(), EmitOMPCopyinClause(), EmitOMPLastprivateClauseFinal(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), EmitPPCBuiltinExpr(), emitProxyTaskFunction(), emitReductionFunction(), EmitReturnBlock(), EmitReturnStmt(), EmitScalarInit(), EmitSEHAbnormalTermination(), EmitSEHExceptionCode(), EmitSEHExceptionCodeSave(), EmitSEHLeaveStmt(), EmitSignBit(), EmitSpecialRegisterBuiltin(), EmitStmt(), EmitStopPoint(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), emitTaskPrivateMappingFunction(), emitTernaryFPBuiltin(), clang::CodeGen::CGCXXABI::EmitThisParam(), EmitToInt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), emitUnaryFPBuiltin(), EmitVAArgFromMemory(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVariablyModifiedType(), EmitVTablePtrCheck(), EmitVTablePtrCheckForCast(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EmitX86BuiltinExpr(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), findDominatingStoreToReturnValue(), FinishFunction(), clang::CodeGen::CallArgList::freeArgumentMemory(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), generateObjCSetterBody(), GenerateSEHFilterFunction(), GenerateVarArgsThunk(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getArrayIndexingBound(), getEHResumeBlock(), getExceptionFromSlot(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), getSelectorFromSlot(), getTerminateHandler(), getTerminateLandingPad(), getVLASize(), GetVTablePtr(), GetVTTParameter(), HaveInsertPoint(), incrementProfileCounter(), InitCatchParam(), initFullExprCleanup(), InitializeVTablePointer(), clang::CodeGen::CodeGenFunction::LexicalScope::LexicalScope(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), packTBLDVectorList(), PerformReturnAdjustment(), performTypeAdjustment(), PPC64_initDwarfEHRegSizeTable(), protectFromPeepholes(), clang::CodeGen::CGCXXABI::ReadArrayCookie(), recoverAddrOfEscapedLocal(), ResolveAllBranchFixups(), clang::CodeGen::DominatingLLVMValue::restore(), clang::CodeGen::DominatingLLVMValue::save(), SetupCleanupBlockActivation(), SimplifyCleanupEntry(), StartFunction(), tryEmitARCRetainScalarExpr(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), vectorWrapScalar16(), vectorWrapScalar8(), clang::CodeGen::ApplyDebugLocation::~ApplyDebugLocation(), and clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope().

CGCapturedStmtInfo* clang::CodeGen::CodeGenFunction::CapturedStmtInfo
CodeGenModule& clang::CodeGen::CodeGenFunction::CGM

Definition at line 130 of file CodeGenFunction.h.

Referenced by AddInitializerToStaticVarDecl(), clang::CodeGen::CallArgList::allocateArgumentMemory(), BuildAggStore(), BuildAppleKextVirtualCall(), BuildAppleKextVirtualDestructorCall(), buildFMulAdd(), CalculateCookiePadding(), CallBeginCatch(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), ConvertType(), ConvertTypeForMem(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), createReferenceTemporary(), EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAMDGPUBuiltinExpr(), EmitAnnotationCall(), emitARCCopyOperation(), emitARCLoadOperation(), emitARCStoreOperation(), emitARCValueOperation(), EmitARMBuiltinExpr(), EmitArrayDelete(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), emitAtomicLibcall(), EmitAtomicStore(), EmitAtomicUpdateValue(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBaseInitializer(), EmitBlockWithFallThrough(), EmitCallAndReturnForThunk(), EmitCapturedStmt(), EmitCaseStmt(), emitCatchDispatchBlock(), emitCheckHandlerCall(), EmitCommonNeonBuiltinExpr(), emitCommonOMPParallelDirective(), EmitCondBrHints(), EmitConstructorBody(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCtorPrologue(), EmitCUDAKernelCallExpr(), EmitCXXConstructorCall(), EmitCXXDestructorCall(), EmitCXXGlobalVarDeclInit(), EmitCXXGuardedInit(), EmitCXXMemberCallExpr(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXStructorCall(), EmitCXXTypeidExpr(), EmitDeclDestroy(), EmitDeclInit(), EmitDeclInvariant(), EmitDeclRefExprDbgValue(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDestructorBody(), EmitDtorSanitizerCallback(), EmitDynamicCast(), EmitDynamicCastToNull(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), EmitForwardingCallToLambda(), emitFPIntBuiltin(), EmitFunctionDeclLValue(), EmitFunctionInstrumentation(), emitGlobalDtorWithCXAAtExit(), emitGlobalDtorWithTLRegDtor(), EmitGlobalVarDeclLValue(), emitIfStmt(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitLifetimeEnd(), EmitLifetimeStart(), EmitMaterializeTemporaryExpr(), EmitMCountInstrumentation(), EmitMemberInitializer(), EmitMustTailThunk(), EmitNewArrayInitializer(), EmitNewDeleteCall(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitNVPTXBuiltinExpr(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCMessageExpr(), EmitObjCProtocolExpr(), EmitObjCSelectorExpr(), EmitObjCStringLiteral(), EmitObjectDelete(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicDirective(), EmitOMPAtomicReadExpr(), emitOMPAtomicRMW(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), EmitOMPBarrierDirective(), EmitOMPCancelDirective(), EmitOMPCancellationPointDirective(), EmitOMPCopyinClause(), EmitOMPFlushDirective(), EmitOMPOrderedDirective(), EmitOMPReductionClauseFinal(), EmitOMPTaskgroupDirective(), EmitOMPTaskwaitDirective(), EmitOMPTaskyieldDirective(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPointerArithmetic(), EmitPPCBuiltinExpr(), emitRTtypeidCall(), EmitSignBit(), EmitSpecialRegisterBuiltin(), EmitStaticVarDecl(), emitStructGetterCall(), emitStructSetterCall(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), emitTernaryFPBuiltin(), EmitThreadPrivateVarDeclLValue(), EmitTypeCheck(), EmitTypeidFromVTable(), emitUnaryFPBuiltin(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVarDecl(), EmitVTablePtrCheck(), EmitVTablePtrCheckForCast(), emitWritebackArg(), EmitX86BuiltinExpr(), enterBlockScope(), EnterStructPointerForCoercedAccess(), ErrorUnsupported(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), EvaluateExprAsBool(), FinishFunction(), clang::CodeGen::CallArgList::freeArgumentMemory(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), generateDestroyHelper(), generateThunk(), GenerateVarArgsThunk(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), getARCCleanupKind(), getAsmSrcLocInfo(), getBadCastFn(), getBadTypeidFn(), getContext(), getItaniumDynamicCastFn(), getLangOpts(), getLLVMContext(), getTypes(), GetVTablePtr(), GetVTTParameter(), incrementProfileCounter(), InitCatchParam(), InitializeVTablePointer(), InitializeVTablePointers(), InsertHelper(), LookupNeonLLVMIntrinsic(), LValueIsSuitableForInlineAtomic(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), needsEHCleanup(), packTBLDVectorList(), PerformReturnAdjustment(), pushTemporaryCleanup(), registerGlobalDtorWithAtExit(), ShouldInstrumentFunction(), shouldUseFusedARCCalls(), StartFunction(), StartObjCMethod(), StartThunk(), tryEmitFMulAdd(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), typeIsSuitableForInlineAtomic(), and ~CodeGenFunction().

const Decl* clang::CodeGen::CodeGenFunction::CurCodeDecl
llvm::Function* clang::CodeGen::CodeGenFunction::CurFn
const CGFunctionInfo* clang::CodeGen::CodeGenFunction::CurFnInfo
const Decl* clang::CodeGen::CodeGenFunction::CurFuncDecl

CurFuncDecl - Holds the Decl for the current outermost non-closure context.

Definition at line 145 of file CodeGenFunction.h.

Referenced by computeBlockInfo(), EmitObjCMessageExpr(), LoadObjCSelf(), ShouldInstrumentFunction(), StartFunction(), and TypeOfSelfObject().

bool clang::CodeGen::CodeGenFunction::CurFuncIsThunk

In C++, whether we are code generating a thunk. This controls whether we should emit cleanups.

Definition at line 270 of file CodeGenFunction.h.

Referenced by EmitParmDecl(), and StartThunk().

GlobalDecl clang::CodeGen::CodeGenFunction::CurGD
void CodeGenFunction::destroyARCStrongImprecise
static
void CodeGenFunction::destroyARCStrongPrecise
static

Definition at line 2688 of file CodeGenFunction.h.

Referenced by EmitAutoVarWithLifetime(), getDestroyer(), and pushTemporaryCleanup().

void CodeGenFunction::destroyARCWeak
static

Definition at line 2689 of file CodeGenFunction.h.

Referenced by EmitAutoVarWithLifetime(), getDestroyer(), and pushTemporaryCleanup().

void CodeGenFunction::destroyCXXObject
static
llvm::BasicBlock* clang::CodeGen::CodeGenFunction::EHResumeBlock

EHResumeBlock - Unified block containing a call to llvm.eh.resume.

Definition at line 317 of file CodeGenFunction.h.

Referenced by FinishFunction(), and getEHResumeBlock().

llvm::AllocaInst* clang::CodeGen::CodeGenFunction::EHSelectorSlot

The selector slot. Under the MandatoryCleanup model, all landing pads write the current selector value into this alloca.

Definition at line 325 of file CodeGenFunction.h.

Referenced by getEHSelectorSlot().

EHScopeStack clang::CodeGen::CodeGenFunction::EHStack

Definition at line 293 of file CodeGenFunction.h.

Referenced by clang::CodeGen::CallArgList::allocateArgumentMemory(), CallBeginCatch(), EmitAnyExprToExn(), EmitArrayDelete(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAutoVarCleanups(), emitAutoVarTypeCleanup(), EmitBaseInitializer(), EmitCleanup(), emitCXXDestructMethod(), EmitCXXNewExpr(), EmitDelegatingCXXConstructorCall(), EmitEndEHSpec(), EmitLabel(), EmitLandingPad(), EmitNewArrayInitializer(), EmitObjCAutoreleasePoolCleanup(), EmitObjCAutoreleasePoolStmt(), EmitObjectDelete(), EmitParmDecl(), EmitStartEHSpec(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), EnterCXXTryStmt(), EnterDtorCleanups(), EnterNewDeleteCleanup(), EnterSEHTryStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), FinishFunction(), getEHDispatchBlock(), getInvokeDest(), getInvokeDestImpl(), getJumpDestInCurrentScope(), InitCatchParam(), initFullExprCleanup(), popCatchScope(), pushCallObjectDeleteCleanup(), PushDestructorCleanup(), pushFullExprCleanup(), pushLifetimeExtendedDestroy(), pushStackRestore(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), clang::CodeGen::CodeGenFunction::LexicalScope::rescopeLabels(), ResolveAllBranchFixups(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::RunCleanupsScope(), SetupCleanupBlockActivation(), SimplifyForwardingBlocks(), StartFunction(), and StartObjCMethod().

llvm::Value* clang::CodeGen::CodeGenFunction::ExceptionSlot

The exception slot. All landing pads write the current exception pointer into this alloca.

Definition at line 321 of file CodeGenFunction.h.

Referenced by getExceptionSlot().

CGBlockInfo* clang::CodeGen::CodeGenFunction::FirstBlockInfo

FirstBlockInfo - The head of a singly-linked-list of block layouts.

Definition at line 314 of file CodeGenFunction.h.

Referenced by enterBlockScope(), and ~CodeGenFunction().

QualType clang::CodeGen::CodeGenFunction::FnRetTy

Definition at line 149 of file CodeGenFunction.h.

Referenced by EmitAsmStmt(), EmitReturnStmt(), and StartFunction().

bool clang::CodeGen::CodeGenFunction::IsOutlinedSEHHelper

True if the current function is an outlined SEH helper. This can be a finally block or filter expression.

Definition at line 281 of file CodeGenFunction.h.

Referenced by EmitReturnStmt(), and startOutlinedSEHHelper().

bool clang::CodeGen::CodeGenFunction::IsSanitizerScope

True if CodeGen currently emits code implementing sanitizer checks.

Definition at line 258 of file CodeGenFunction.h.

Referenced by InsertHelper(), and clang::CodeGen::CodeGenFunction::SanitizerScope::SanitizerScope().

llvm::DenseMap<const VarDecl *, FieldDecl *> clang::CodeGen::CodeGenFunction::LambdaCaptureFields

Definition at line 286 of file CodeGenFunction.h.

Referenced by StartFunction().

FieldDecl* clang::CodeGen::CodeGenFunction::LambdaThisCaptureField

Definition at line 287 of file CodeGenFunction.h.

Referenced by StartFunction().

llvm::SmallVector<char, 256> clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupStack
LoopInfoStack clang::CodeGen::CodeGenFunction::LoopStack
unsigned clang::CodeGen::CodeGenFunction::NextCleanupDestIndex

Definition at line 311 of file CodeGenFunction.h.

Referenced by getJumpDestForLabel(), and getJumpDestInCurrentScope().

llvm::AllocaInst* clang::CodeGen::CodeGenFunction::NormalCleanupDest

i32s containing the indexes of the cleanup destinations.

Definition at line 309 of file CodeGenFunction.h.

Referenced by destroyOptimisticNormalEntry().

llvm::DenseMap<const VarDecl *, llvm::Value *> clang::CodeGen::CodeGenFunction::NRVOFlags

A mapping from NRVO variables to the flags used to indicate when the NRVO has been applied to this variable.

Definition at line 291 of file CodeGenFunction.h.

Referenced by EmitAutoVarAlloca(), and EmitReturnStmt().

SmallVector<llvm::Value*, 8> clang::CodeGen::CodeGenFunction::ObjCEHValueStack

ObjCEHValueStack - Stack of Objective-C exception values, used for rethrows.

Definition at line 348 of file CodeGenFunction.h.

Referenced by clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt().

EHScopeStack::stable_iterator clang::CodeGen::CodeGenFunction::PrologueCleanupDepth

PrologueCleanupDepth - The cleanup depth enclosing all the cleanups associated with the parameters.

Definition at line 157 of file CodeGenFunction.h.

Referenced by FinishFunction(), and StartFunction().

JumpDest clang::CodeGen::CodeGenFunction::ReturnBlock

ReturnBlock - Unified return block.

Definition at line 160 of file CodeGenFunction.h.

Referenced by EmitForwardingCallToLambda(), EmitReturnBlock(), EmitReturnStmt(), FinishFunction(), getOMPCancelDestination(), and StartFunction().

llvm::Value* clang::CodeGen::CodeGenFunction::ReturnValue
SanitizerSet clang::CodeGen::CodeGenFunction::SanOpts
bool clang::CodeGen::CodeGenFunction::SawAsmBlock

Whether we processed a Microsoft-style asm block during CodeGen. These can potentially set the return value.

Definition at line 277 of file CodeGenFunction.h.

Referenced by EmitAsmStmt(), and GenerateCode().

SmallVector<llvm::Value *, 1> clang::CodeGen::CodeGenFunction::SEHCodeSlotStack

A stack of exception code slots. Entering an __except block pushes a slot on the stack and leaving pops one. The __exception_code() intrinsic loads a value from the top of the stack.

Definition at line 330 of file CodeGenFunction.h.

Referenced by EmitCapturedLocals(), EmitSEHExceptionCode(), EmitSEHExceptionCodeSave(), EnterSEHTryStmt(), and ExitSEHTryStmt().

llvm::Value* clang::CodeGen::CodeGenFunction::SEHInfo = nullptr

Value returned by __exception_info intrinsic.

Definition at line 333 of file CodeGenFunction.h.

Referenced by EmitSEHExceptionCodeSave(), and EmitSEHExceptionInfo().

llvm::SmallVector<const JumpDest *, 2> clang::CodeGen::CodeGenFunction::SEHTryEpilogueStack

Definition at line 295 of file CodeGenFunction.h.

Referenced by EmitSEHLeaveStmt(), EmitSEHTryStmt(), and isSEHTryScope().

const TargetInfo& clang::CodeGen::CodeGenFunction::Target

Definition at line 131 of file CodeGenFunction.h.

Referenced by EmitIndirectGotoStmt(), and getTarget().


The documentation for this class was generated from the following files: