clang API Documentation

Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Friends
clang::CodeGen::CodeGenFunction Class Reference

#include <CodeGenFunction.h>

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

List of all members.

Classes

class  AutoVarEmission
struct  BreakContinue
class  CGCapturedStmtInfo
 API for captured statement code generation. 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  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.
llvm::BasicBlock * EmitLandingPad ()
 Emits a landing pad for the current EH stack.
llvm::BasicBlock * getInvokeDestImpl ()
template<class T >
DominatingValue< T >::saved_type saveValueInCond (T value)
template<class T , class A0 >
void pushFullExprCleanup (CleanupKind kind, A0 a0)
template<class T , class A0 , class A1 >
void pushFullExprCleanup (CleanupKind kind, A0 a0, A1 a1)
template<class T , class A0 , class A1 , class A2 >
void pushFullExprCleanup (CleanupKind kind, A0 a0, A1 a1, A2 a2)
template<class T , class A0 , class A1 , class A2 , class A3 >
void pushFullExprCleanup (CleanupKind kind, A0 a0, A1 a1, A2 a2, A3 a3)
template<class T , class A0 , class A1 , class A2 , class A3 >
void pushCleanupAfterFullExpr (CleanupKind Kind, A0 a0, A1 a1, A2 a2, A3 a3)
 Queue a cleanup to be pushed after finishing the current full-expression.
void initFullExprCleanup ()
void PushDestructorCleanup (QualType T, llvm::Value *Addr)
void PushDestructorCleanup (const CXXDestructorDecl *Dtor, llvm::Value *Addr)
void PopCleanupBlock (bool FallThroughIsBranchThrough=false)
 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.
void DeactivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP)
 Deactive a cleanup that was created in an active state.
void ActivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP)
 Activate a cleanup that was created in an inactivated state.
void PopCleanupBlocks (EHScopeStack::stable_iterator OldCleanupStackSize)
 Takes the old cleanup stack size and emits the cleanup blocks that have been added.
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.
void ResolveBranchFixups (llvm::BasicBlock *Target)
JumpDest getJumpDestInCurrentScope (llvm::BasicBlock *Target)
JumpDest getJumpDestInCurrentScope (StringRef Name=StringRef())
void EmitBranchThroughCleanup (JumpDest 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.
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)
unsigned getByRefValueLLVMField (const ValueDecl *VD) const
llvm::ValueBuildBlockByrefAddress (llvm::Value *BaseAddr, const VarDecl *V)
RegionCounter getPGORegionCounter (const Stmt *S)
 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 ()
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, SourceLocation StartLoc)
void GenerateObjCGetter (ObjCImplementationDecl *IMP, const ObjCPropertyImplDecl *PID)
 GenerateObjCGetter - Synthesize an Objective-C property getter function.
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.
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.
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.
void EmitConstructorBody (FunctionArgList &Args)
 EmitConstructorBody - Emits the body of the current constructor.
void EmitDestructorBody (FunctionArgList &Args)
 EmitDestructorBody - Emits the body of the current destructor.
void emitImplicitAssignmentOperatorBody (FunctionArgList &Args)
void EmitFunctionBody (FunctionArgList &Args, const Stmt *Body)
void EmitBlockWithFallThrough (llvm::BasicBlock *BB, RegionCounter &Cnt)
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)
void EmitReturnBlock ()
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.
void GenerateThunk (llvm::Function *Fn, const CGFunctionInfo &FnInfo, GlobalDecl GD, const ThunkInfo &Thunk)
 GenerateThunk - Generate a thunk for the given method.
void 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)
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.
bool ShouldInstrumentFunction ()
void EmitFunctionInstrumentation (const char *Fn)
void EmitMCountInstrumentation ()
 EmitMCountInstrumentation - Emit call to .mcount.
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.
void EmitEndEHSpec (const Decl *D)
 EmitEndEHSpec - Emit the end of the exception spec.
llvm::BasicBlock * getTerminateLandingPad ()
 getTerminateLandingPad - Return a landing pad that just calls terminate.
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.
llvm::BasicBlock * createBasicBlock (const Twine &name="", llvm::Function *parent=nullptr, llvm::BasicBlock *before=nullptr)
 createBasicBlock - Create an LLVM basic block.
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.
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.
llvm::ValueEvaluateExprAsBool (const Expr *E)
void EmitIgnoredExpr (const Expr *E)
 EmitIgnoredExpr - Emit an expression in a context which ignores the result.
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 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 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.
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::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.
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.
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.
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]".
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.
bool isTrivialInitializer (const Expr *Init)
 Determine whether the given initializer is trivial in the sense that it requires no code to be generated.
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.
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.
PeepholeProtection protectFromPeepholes (RValue rvalue)
void unprotectFromPeepholes (PeepholeProtection protection)
void EmitStopPoint (const Stmt *S)
 EmitStopPoint - Emit a debug stoppoint if we are emitting debug info.
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 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.
llvm::ValueGenerateCapturedStmtArgument (const CapturedStmt &S)
void EmitOMPAggregateAssign (LValue OriginalAddr, llvm::Value *PrivateAddr, const Expr *AssignExpr, QualType Type, const VarDecl *VDInit)
void EmitOMPFirstprivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
void EmitOMPPrivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope)
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 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 EmitOMPLoopBody (const OMPLoopDirective &Directive, bool SeparateIter=false)
 Helpers for 'omp simd' directive.
void EmitOMPInnerLoop (const OMPLoopDirective &S, OMPPrivateScope &LoopScope, bool SeparateIter=false)
void EmitOMPSimdFinal (const OMPLoopDirective &S)
RValue GetUndefRValue (QualType Ty)
 GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.
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.
RValue convertTempToRValue (llvm::Value *addr, QualType type, SourceLocation Loc)
void EmitAtomicInit (Expr *E, LValue lvalue)
RValue EmitAtomicLoad (LValue lvalue, SourceLocation loc, AggValueSlot slot=AggValueSlot::ignored())
void EmitAtomicStore (RValue rvalue, LValue lvalue, bool isInit)
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.
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.
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.
LValue EmitComplexCompoundAssignmentLValue (const CompoundAssignOperator *E)
LValue EmitScalarCompooundAssignWithComplex (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.
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)
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.
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.
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 EmitCXXMemberPointerCallExpr (const CXXMemberCallExpr *E, ReturnValueSlot ReturnValue)
llvm::ValueEmitCXXOperatorMemberCallee (const CXXOperatorCallExpr *E, const CXXMethodDecl *MD, llvm::Value *This)
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)
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::ValueemitVectorWrappedScalar8Intrinsic (unsigned Int, SmallVectorImpl< llvm::Value * > &Ops, const char *Name)
llvm::ValueemitVectorWrappedScalar16Intrinsic (unsigned Int, SmallVectorImpl< llvm::Value * > &Ops, const char *Name)
llvm::ValueEmitAArch64BuiltinExpr (unsigned BuiltinID, const CallExpr *E)
llvm::ValueEmitNeon64Call (llvm::Function *F, llvm::SmallVectorImpl< llvm::Value * > &O, const char *name)
llvm::ValueBuildVector (ArrayRef< llvm::Value * > Ops)
llvm::ValueEmitX86BuiltinExpr (unsigned BuiltinID, const CallExpr *E)
llvm::ValueEmitPPCBuiltinExpr (unsigned BuiltinID, const CallExpr *E)
llvm::ValueEmitR600BuiltinExpr (unsigned BuiltinID, const CallExpr *E)
llvm::ValueEmitObjCProtocolExpr (const ObjCProtocolExpr *E)
llvm::ValueEmitObjCStringLiteral (const ObjCStringLiteral *E)
 Emits an instance of NSConstantString representing the object.
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.
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)
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.
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.
ComplexPairTy EmitLoadOfComplex (LValue src, SourceLocation loc)
 EmitLoadOfComplex - Load a complex number from the specified l-value.
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.
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.
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).
void EmitVarAnnotations (const VarDecl *D, llvm::Value *V)
 Emit local annotations for the local variable V, declared by D.
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.
llvm::ValueEmitCheckValue (llvm::Value *V)
 Convert a value into a format suitable for passing to a runtime sanitizer handler.
llvm::Constant * EmitCheckSourceLocation (SourceLocation Loc)
 Emit a description of a source location in a format suitable for passing to a runtime sanitizer handler.
void EmitCheck (ArrayRef< std::pair< llvm::Value *, SanitizerKind >> 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.
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.
void EmitCallArg (CallArgList &args, const Expr *E, QualType ArgType)
 EmitCallArg - Emit a single call argument.
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, bool ForceColumnInfo=false)
 EmitCallArgs - Emit call arguments for a function.
void EmitCallArgs (CallArgList &Args, ArrayRef< QualType > ArgTypes, CallExpr::const_arg_iterator ArgBeg, CallExpr::const_arg_iterator ArgEnd, const FunctionDecl *CalleeDecl=nullptr, unsigned ParamsToSkip=0, bool ForceColumnInfo=false)

Static Public Member Functions

static void destroyBlockInfos (CGBlockInfo *info)
 Destroy a chain of block layouts.
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)

Public Attributes

CodeGenModuleCGM
const TargetInfoTarget
LoopInfoStack LoopStack
CGBuilderTy Builder
const DeclCurFuncDecl
const DeclCurCodeDecl
 CurCodeDecl - This is the inner-most code context, which includes blocks.
const CGFunctionInfoCurFnInfo
QualType FnRetTy
llvm::Function * CurFn
GlobalDecl CurGD
 CurGD - The GlobalDecl for the current function being compiled.
EHScopeStack::stable_iterator PrologueCleanupDepth
JumpDest ReturnBlock
 ReturnBlock - Unified return block.
llvm::ValueReturnValue
llvm::AssertingVH
< llvm::Instruction > 
AllocaInsertPt
CGCapturedStmtInfoCapturedStmtInfo
unsigned char BoundsChecking
SanitizerSet SanOpts
 Sanitizers enabled for this function.
bool IsSanitizerScope
 True if CodeGen currently emits code implementing sanitizer checks.
bool CurFuncIsThunk
bool AutoreleaseResult
 In ARC, whether we should autorelease the return value.
bool SawAsmBlock
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.
EHScopeStack EHStack
llvm::SmallVector< char, 256 > LifetimeExtendedCleanupStack
llvm::AllocaInst * NormalCleanupDest
 i32s containing the indexes of the cleanup destinations.
unsigned NextCleanupDestIndex
CGBlockInfoFirstBlockInfo
 FirstBlockInfo - The head of a singly-linked-list of block layouts.
llvm::BasicBlock * EHResumeBlock
 EHResumeBlock - Unified block containing a call to llvm.eh.resume.
llvm::ValueExceptionSlot
llvm::AllocaInst * EHSelectorSlot
SmallVector< llvm::Value *, 8 > ObjCEHValueStack

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 111 of file CodeGenFunction.h.


Member Typedef Documentation

Definition at line 145 of file CodeGenFunction.h.

Definition at line 1119 of file CodeGenFunction.h.

Definition at line 1837 of file CodeGenFunction.h.

Definition at line 1312 of file CodeGenFunction.h.


Member Enumeration Documentation

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 1761 of file CodeGenFunction.h.


Constructor & Destructor Documentation

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

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 1099 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 273 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().

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 279 of file CGCXX.cpp.

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

Referenced by BuildAppleKextVirtualDestructorCall(), and EmitCXXMemberCallExpr().

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

Definition at line 300 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().

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

Definition at line 1998 of file CGBlocks.cpp.

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

Referenced by drillIntoBlockVariable(), and EmitDeclRefLValue().

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 2022 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 
)

Definition at line 5731 of file CGBuiltin.cpp.

References Builder.

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

Definition at line 2102 of file CGClass.cpp.

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

Referenced by EmitCXXMemberCallExpr(), and EmitCXXOperatorMemberCallee().

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 984 of file CodeGenFunction.cpp.

Referenced by EmitBranchOnBoolExpr(), EmitConditionalOperatorLValue(), 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 998 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 959 of file CodeGenFunction.cpp.

References clang::Stmt::children().

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 927 of file CodeGenFunction.cpp.

References clang::Stmt::children().

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

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

Definition at line 1378 of file CodeGenFunction.h.

References ConvertType(), and getContext().

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 1402 of file CodeGenFunction.h.

References getLLVMContext().

Referenced by CreateNormalEntry(), EmitAggMemberInitializer(), emitArrayDestroy(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitCall(), EmitCaseStmt(), EmitCaseStmtRange(), emitCatchDispatchBlock(), EmitCheck(), EmitCleanup(), EmitConditionalOperatorLValue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), emitFilterDispatchBlock(), EmitForStmt(), EmitIfStmt(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPSimdDirective(), EmitSwitchStmt(), EmitTrapCheck(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), EnterCXXTryStmt(), ExitCXXTryStmt(), 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 70 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" 
)
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 1111 of file CGCleanup.cpp.

References Builder, ForDeactivation, and SetupCleanupBlockActivation().

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

Destroy a chain of block layouts.

Definition at line 674 of file CGBlocks.cpp.

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

Referenced by ~CodeGenFunction().

Definition at line 1078 of file CodeGenFunction.h.

Referenced by EmitScalarExpr().

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 3065 of file CGBuiltin.cpp.

References Builder.

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 1376 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(), EmitCXXBindTemporaryLValue(), EmitCXXConstructExpr(), EmitDeclInit(), EmitDelegatingCXXConstructorCall(), EmitExprAsInit(), EmitMaterializeTemporaryExpr(), emitPseudoObjectExpr(), EmitReturnStmt(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), InitCatchParam(), and StoreAnyExprIntoOneUnit().

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 1562 of file CodeGenFunction.h.

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

Referenced by EmitCXXMemberCallExpr(), EmitCXXOperatorMemberCallExpr(), and EmitOMPAggregateAssign().

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::EmitAlignmentAssumption ( llvm::Value PtrValue,
unsigned  Alignment,
llvm::Value OffsetValue = nullptr 
) [inline]

Definition at line 1813 of file CodeGenFunction.h.

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

Referenced by EmitOMPAlignedClause().

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 118 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(), EmitBinaryOperatorLValue(), EmitIgnoredExpr(), EmitObjCBoxedExpr(), EmitOMPSimdDirective(), emitPseudoObjectExpr(), EmitReturnStmt(), and GenerateObjCAtomicGetterCopyHelperFunction().

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

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

Definition at line 137 of file CGExpr.cpp.

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

Referenced by EmitStmtExprLValue().

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

Definition at line 2114 of file CGObjC.cpp.

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

Referenced by EmitARCRetainAutorelease(), and EmitARCRetainAutoreleaseScalarExpr().

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

Definition at line 2123 of file CGObjC.cpp.

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

Referenced by emitAutoreleaseOfResult().

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 2241 of file CGObjC.cpp.

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

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 2036 of file CGObjC.cpp.

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

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 2197 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 1756 of file CGObjC.cpp.

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

Referenced by EmitObjCCollectionLiteral(), and emitWriteback().

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

Definition at line 2170 of file CGObjC.cpp.

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

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 2232 of file CGObjC.cpp.

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

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 1906 of file CGObjC.cpp.

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

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

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 2145 of file CGObjC.cpp.

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

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

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

Definition at line 2162 of file CGObjC.cpp.

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

Referenced by EmitARCRetainAutorelease().

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

Definition at line 2133 of file CGObjC.cpp.

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

Referenced by tryEmitFusedAutoreleaseOfResult().

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 1927 of file CGObjC.cpp.

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

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

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 2714 of file CGObjC.cpp.

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

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

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

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

Definition at line 2185 of file CGObjC.cpp.

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

Referenced by EmitScalarInit(), and EmitStoreThroughLValue().

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 1451 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 1351 of file CodeGenFunction.cpp.

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

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

Definition at line 1792 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, EmitLValue(), EmitStoreThroughLValue(), FnRetTy, clang::AsmStmt::generateAsmString(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), 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().

Definition at line 489 of file CGAtomic.cpp.

References clang::CodeGen::CallArgList::add(), AddDirectArgument(), clang::CodeGen::RequiredArgs::All, 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::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::ASTContext::BoolTy, Builder, CGM, convertTempToRValue(), createBasicBlock(), CreateMemTemp(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), CurFn, EmitAtomicInit(), EmitAtomicOp(), EmitCall(), EmitCastToVoidPtr(), EmitScalarExpr(), EmitStoreOfScalar(), EmitUnsupportedRValue(), EmitValToTemp(), Func, clang::CodeGen::RValue::get(), clang::Type::getAs(), getContext(), clang::Expr::getExprLoc(), clang::CodeGen::CodeGenTypes::GetFunctionType(), 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::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSizeInChars(), 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 
)
void CodeGenFunction::EmitAtomicStore ( RValue  rvalue,
LValue  dest,
bool  isInit 
)

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

Definition at line 865 of file CGDecl.cpp.

References BuildByRefType(), Builder, CGM, ConvertTypeForMem(), CreateTempAlloca(), 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::CodeGen::CodeGenModule::getLLVMLifetimeStartFn(), clang::Decl::getLocation(), clang::NamedDecl::getName(), clang::CharUnits::getQuantity(), getTarget(), clang::ValueDecl::getType(), getVLASize(), clang::Decl::hasAttr(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int64Ty, 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, shouldUseLifetimeMarkers(), Stack, and clang::CodeGen::CodeGenFunction::AutoVarEmission::useLifetimeMarkers().

Referenced by BeginCatch(), EmitAutoVarDecl(), EmitObjCForCollectionStmt(), EmitOMPFirstprivateClause(), and EmitPrivateLoopCounters().

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 856 of file CGDecl.cpp.

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

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

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 340 of file CGStmt.cpp.

References Builder, CurFn, and EmitBranch().

Referenced by EmitAggMemberInitializer(), emitArrayDestroy(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitCall(), emitCatchDispatchBlock(), EmitCheck(), EmitCleanup(), EmitConditionalOperatorLValue(), EmitCtorPrologue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), emitFilterDispatchBlock(), EmitForStmt(), EmitIfStmt(), EmitLabel(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPLoopBody(), EmitOMPSimdDirective(), EmitReturnBlock(), EmitSwitchStmt(), EmitTrapCheck(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), 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 377 of file CGStmt.cpp.

References Builder, and CurFn.

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

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().

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::ast_matchers::type, clang::CodeGen::CGBlockInfo::UsesStret, clang::VK_LValue, clang::VK_RValue, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.

void CodeGenFunction::EmitBlockWithFallThrough ( llvm::BasicBlock *  BB,
RegionCounter Cnt 
)

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 762 of file CodeGenFunction.cpp.

References clang::CodeGen::RegionCounter::beginRegion(), Builder, CGM, createBasicBlock(), EmitBlock(), EmitBranch(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and HaveInsertPoint().

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 678 of file CGExpr.cpp.

References Builder, EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), getArrayIndexingBound(), clang::Expr::getExprLoc(), clang::SanitizerSet::has(), clang::Type::isSignedIntegerOrEnumerationType(), SanOpts, and clang::CodeGen::CodeGenTypeCache::SizeTy.

Referenced by EmitArraySubscriptExpr(), and 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 360 of file CGStmt.cpp.

References Builder.

Referenced by EmitAggMemberInitializer(), EmitBlock(), EmitBlockWithFallThrough(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXForRangeStmt(), EmitDynamicCast(), EmitForStmt(), EmitIfStmt(), EmitIndirectGotoStmt(), EmitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPSimdDirective(), 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 1018 of file CodeGenFunction.cpp.

References clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), clang::CodeGen::RegionCounter::beginRegion(), clang::BO_LAnd, clang::BO_LOr, Builder, ConstantFoldsToSimpleInteger(), createBasicBlock(), clang::CodeGen::CodeGenPGO::createBranchWeights(), EmitBlock(), EmitCXXThrowExpr(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), EvaluateExprAsBool(), clang::CodeGen::RegionCounter::getCount(), clang::CodeGen::CodeGenPGO::getCurrentRegionCount(), clang::CodeGen::RegionCounter::getParentCount(), getPGORegionCounter(), clang::Expr::IgnoreParens(), and clang::UO_LNot.

Referenced by EmitConditionalOperatorLValue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitIfStmt(), EmitOMPIfClause(), and EmitOMPSimdDirective().

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.

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

  • Dest.

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

Definition at line 916 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(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), and clang::CodeGen::CodeGenFunction::FinallyInfo::exit().

Definition at line 1100 of file CGStmt.cpp.

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

Referenced by EmitSimpleStmt().

RValue CodeGenFunction::EmitBuiltinExpr ( const FunctionDecl FD,
unsigned  BuiltinID,
const CallExpr E 
)
RValue CodeGenFunction::EmitBuiltinNewDeleteCall ( const FunctionProtoType Type,
const Expr Arg,
bool  IsDelete 
)
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 2937 of file CGCall.cpp.

References 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::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::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 EmitAtomicExpr(), emitAtomicLibcall(), EmitCall(), EmitCallAndReturnForThunk(), EmitCallExpr(), 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 
)
void CodeGenFunction::EmitCallAndReturnForThunk ( llvm::Value Callee,
const ThunkInfo Thunk 
)

Definition at line 228 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,
bool  ForceColumnInfo = false 
) [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,
bool  ForceColumnInfo = false 
)
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 2900 of file CGCall.cpp.

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

Referenced by EmitCapturedStmt(), and clang::CodeGen::EmitOMPSerialCall().

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

Definition at line 2892 of file CGCall.cpp.

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 2132 of file CGStmt.cpp.

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

Referenced by EmitStmt().

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 1127 of file CGStmt.cpp.

References Builder, createBasicBlock(), clang::CodeGen::CodeGenPGO::createBranchWeights(), CurFn, EmitBlockWithFallThrough(), EmitStmt(), clang::Expr::EvaluateKnownConstInt(), getContext(), clang::CodeGen::RegionCounter::getCount(), clang::CaseStmt::getLHS(), getPGORegionCounter(), clang::CaseStmt::getRHS(), and clang::CaseStmt::getSubStmt().

Referenced by EmitCaseStmt().

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 2854 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, ConvertType(), EmitAggExprToLValue(), EmitDynamicCast(), EmitLValue(), EmitTypeCheck(), EmitUnsupportedLValue(), clang::CodeGen::LValue::getAddress(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), clang::Type::getAs(), clang::CastExpr::getCastKind(), getContext(), clang::RecordType::getDecl(), clang::Expr::getExprLoc(), clang::ASTContext::getLValueReferenceType(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), MakeAddrLValue(), clang::CastExpr::path_begin(), clang::CastExpr::path_end(), sanitizePerformTypeCheck(), and TCK_DowncastReference.

Referenced by EmitLValue().

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

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 782 of file CGExpr.cpp.

References EmitArraySubscriptExpr(), EmitLValue(), EmitTypeCheck(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::SanitizerSet::has(), clang::CodeGen::LValue::isBitField(), clang::CodeGen::LValue::isSimple(), and SanOpts.

Referenced by EmitBinaryOperatorLValue(), and EmitMemberExpr().

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 2179 of file CGExpr.cpp.

References Builder, CGM, Column, clang::CodeGen::SanitizerMetadata::disableSanitizerForGlobal(), clang::CodeGen::CodeGenModule::GetAddrOfConstantCString(), clang::PresumedLoc::getColumn(), getContext(), clang::PresumedLoc::getFilename(), clang::PresumedLoc::getLine(), clang::SourceManager::getPresumedLoc(), clang::CodeGen::CodeGenModule::getSanitizerMetadata(), clang::ASTContext::getSourceManager(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::PresumedLoc::isValid(), and Line.

Referenced by EmitBoundsCheck(), EmitCall(), EmitLoadOfScalar(), emitNonNullArgCheck(), EmitTypeCheck(), EmitVariablyModifiedType(), and GenerateCode().

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

Definition at line 2144 of file CGExpr.cpp.

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

Referenced by EmitCheck(), and EmitLoadOfScalar().

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 
)

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

Definition at line 1052 of file CGExprComplex.cpp.

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

Referenced by EmitBinaryOperatorLValue().

Definition at line 1073 of file CGExprComplex.cpp.

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

Referenced by EmitLValue().

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 1022 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 1031 of file CGExprComplex.cpp.

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

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

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 3401 of file CGExprScalar.cpp.

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

Referenced by EvaluateExprAsBool().

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 267 of file CGStmt.cpp.

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

Referenced by EmitSimpleStmt().

void CodeGenFunction::EmitCondBrHints ( llvm::LLVMContext &  Context,
llvm::BranchInst *  CondBr,
ArrayRef< const Attr * >  Attrs 
)

Definition at line 1112 of file CGStmt.cpp.

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

Referenced by EmitSimpleStmt().

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 1614 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 1633 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.

void CodeGenFunction::EmitCXXConstructorCall ( const CXXConstructorDecl D,
CXXCtorType  Type,
bool  ForVirtualBase,
bool  Delegating,
llvm::Value This,
const CXXConstructExpr 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 214 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().

Definition at line 106 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(), CGM, clang::CodeGen::Complete, clang::Ctor_Complete, clang::Dtor_Complete, EmitAggregateAssign(), EmitAggregateCopy(), EmitCall(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberPointerCallExpr(), EmitLValue(), EmitScalarExpr(), clang::CodeGen::CGCXXABI::EmitVirtualDestructorCall(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getAddrOfCXXStructor(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::MemberExpr::getBase(), clang::Expr::getBestDynamicClassType(), clang::CallExpr::getCallee(), clang::QualType::getCanonicalType(), getContext(), clang::CXXMethodDecl::getCorrespondingMethodInClass(), clang::CodeGen::CodeGenModule::getCXXABI(), getCXXRecord(), clang::CodeGen::CodeGenTypes::GetFunctionType(), getLangOpts(), clang::MemberExpr::getMemberDecl(), clang::CallExpr::getNumArgs(), clang::CXXMethodDecl::getParent(), clang::MemberExpr::getQualifier(), clang::FunctionDecl::getReturnType(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGCXXABI::getVirtualFunctionPointer(), clang::MemberExpr::hasQualifier(), clang::Expr::ignoreParenBaseCasts(), clang::Expr::IgnoreParens(), clang::MemberExpr::isArrow(), and clang::CodeGen::ReturnValueSlot::isNull().

Referenced by EmitCallExpr().

RValue CodeGenFunction::EmitCXXMemberOrOperatorCall ( const CXXMethodDecl MD,
llvm::Value Callee,
ReturnValueSlot  ReturnValue,
llvm::Value This,
llvm::Value ImplicitParam,
QualType  ImplicitParamTy,
const CallExpr E 
)
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 1141 of file CGCleanup.cpp.

References clang::CodeGen::NormalAndEHCleanup.

Referenced by EmitCXXBindTemporaryLValue().

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

Definition at line 3176 of file CGExpr.cpp.

References EmitCXXTypeidExpr(), clang::Expr::getType(), and MakeAddrLValue().

Referenced by EmitLValue().

Definition at line 3185 of file CGExpr.cpp.

References EmitCXXUuidofExpr(), clang::Expr::getType(), and MakeAddrLValue().

Referenced by EmitLValue().

void CodeGenFunction::EmitDecl ( const Decl D)

EmitDecl - Emit a declaration.

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

Definition at line 34 of file CGDecl.cpp.

References EmitVarDecl(), EmitVariablyModifiedType(), getDebugInfo(), clang::Decl::getKind(), clang::TypedefNameDecl::getUnderlyingType(), clang::VarDecl::isLocalVarDecl(), and Record.

Referenced by EmitDeclStmt(), EmitOMPFirstprivateClause(), and EmitOMPPrivateClause().

void CodeGenFunction::EmitDeclRefExprDbgValue ( const DeclRefExpr E,
llvm::Constant *  Init 
)

Definition at line 1090 of file CGStmt.cpp.

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

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 2335 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::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 1416 of file CGDecl.cpp.

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

Referenced by clang::CodeGen::EmitOMPThreadPrivateVarDefinition(), and generateDestroyHelper().

void CodeGenFunction::EmitDoStmt ( const DoStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
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 1195 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(), and EmitInitializerForField().

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

Definition at line 2850 of file CGObjC.cpp.

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

Emit field annotations for the given field & value. Returns the annotation result.

Definition at line 1675 of file CodeGenFunction.cpp.

References Builder, CGM, EmitAnnotationCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::Decl::getLocation(), clang::Decl::hasAttr(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::Decl::specific_attrs().

Referenced by EmitLValueForField().

void CodeGenFunction::EmitForStmt ( const ForStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
void CodeGenFunction::EmitForwardingCallToLambda ( const CXXMethodDecl LambdaCallOperator,
CallArgList CallArgs 
)

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

Definition at line 1206 of file CGExpr.cpp.

References Builder, getContext(), and hasBooleanRepresentation().

Referenced by EmitAtomicLoad(), EmitFromInt(), EmitLoadOfScalar(), and EmitStoreThroughBitfieldLValue().

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

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 319 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 1625 of file CGCall.cpp.

References 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::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::ASTContext::getTypeAlignInChars(), 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().

EmitGCMemmoveCollectable - Emit special API for structs with object pointers.

void CodeGenFunction::EmitIfStmt ( const IfStmt S)

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 106 of file CGExpr.cpp.

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

Referenced by EmitBinaryOperatorLValue(), EmitMaterializeTemporaryExpr(), EmitOMPInnerLoop(), EmitOMPLoopBody(), EmitOMPSimdDirective(), EmitOMPSimdFinal(), emitPseudoObjectExpr(), EmitStmt(), EmitVariablyModifiedType(), and tryEmitARCRetainPseudoObject().

void CodeGenFunction::EmitInitializerForField ( FieldDecl Field,
LValue  LHS,
Expr Init,
ArrayRef< VarDecl * >  ArrayIndexes 
)
llvm::Value * CodeGenFunction::EmitIvarOffset ( const ObjCInterfaceDecl Interface,
const ObjCIvarDecl Ivar 
)
llvm::BasicBlock * CodeGenFunction::EmitLandingPad ( )

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

EmitLoadOfComplex - Load a complex number from the specified address.

Definition at line 1047 of file CGExprComplex.cpp.

Referenced by convertTempToRValue(), EmitComplexPrePostIncDec(), EmitRValueForField(), generateObjCGetterBody(), and InitCatchParam().

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. The l-value must be a simple l-value.

Definition at line 1028 of file CGExpr.cpp.

References EmitLoadOfScalar(), 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().

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 809 of file CGExpr.cpp.

References EmitArraySubscriptExpr(), EmitBinaryOperatorLValue(), EmitCallExprLValue(), EmitCastLValue(), EmitComplexCompoundAssignmentLValue(), EmitCompoundAssignmentLValue(), EmitCompoundLiteralLValue(), EmitConditionalOperatorLValue(), EmitCXXBindTemporaryLValue(), EmitCXXConstructLValue(), EmitCXXTypeidLValue(), EmitCXXUuidofLValue(), EmitDeclRefLValue(), EmitExtVectorElementExpr(), EmitInitListLValue(), EmitLambdaLValue(), EmitMaterializeTemporaryExpr(), EmitMemberExpr(), EmitObjCEncodeExprLValue(), EmitObjCIsaExpr(), EmitObjCIvarRefLValue(), EmitObjCMessageExprLValue(), EmitObjCSelectorLValue(), EmitOpaqueValueLValue(), EmitPredefinedLValue(), EmitPseudoObjectLValue(), EmitStmtExprLValue(), EmitStringLiteralLValue(), EmitUnaryOpLValue(), EmitUnsupportedLValue(), EmitVAArgExprLValue(), enterFullExpression(), clang::Stmt::getStmtClass(), clang::Expr::getType(), and clang::Type::isAnyComplexType().

Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), EmitArraySubscriptExpr(), EmitAsmStmt(), EmitBinaryOperatorLValue(), EmitCallExpr(), EmitCastLValue(), EmitCheckedLValue(), EmitConditionalOperatorLValue(), emitCPPObjectAtomicSetterCall(), EmitCXXConstructorCall(), EmitCXXMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXOperatorMemberCallExpr(), EmitExtVectorElementExpr(), EmitIgnoredExpr(), EmitInitListLValue(), EmitLValueOrThrowExpression(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCIvarRefLValue(), EmitPointerToDataMemberBinaryExpr(), emitPseudoObjectExpr(), EmitReferenceBindingToExpr(), emitStructSetterCall(), EmitTypeidFromVTable(), EmitUnaryOpLValue(), EmitVAListRef(), emitWritebackArg(), and tryEmitARCRetainLoadOfScalar().

Definition at line 2588 of file CGExpr.cpp.

References clang::Qualifiers::addCVRQualifiers(), Builder, CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), clang::CodeGen::CodeGenModule::DecorateInstruction(), EmitBitCastOfLValueToProperType(), EmitFieldAnnotations(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::Type::getAs(), clang::ASTContext::getASTRecordLayout(), clang::CodeGen::CGRecordLayout::getBitFieldInfo(), clang::CodeGen::CodeGenTypes::getCGRecordLayout(), clang::ASTContext::getCharWidth(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::ASTContext::getDeclAlign(), clang::FieldDecl::getFieldIndex(), clang::ASTRecordLayout::getFieldOffset(), getLLVMContext(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::NamedDecl::getName(), clang::Qualifiers::getObjCGCAttr(), clang::FieldDecl::getParent(), clang::Type::getPointeeType(), clang::CodeGen::LValue::getQuals(), clang::CharUnits::getQuantity(), clang::ASTContext::getTargetAddressSpace(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::CodeGenModule::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeAlignInChars(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::LValue::getVRQualifiers(), clang::Decl::hasAttr(), clang::FieldDecl::isBitField(), clang::Type::isIncompleteType(), clang::Type::isReferenceType(), clang::TagDecl::isUnion(), clang::CharUnits::isZero(), MakeAddrLValue(), clang::CodeGen::LValue::MakeBitfield(), clang::Qualifiers::removeObjCGCAttr(), clang::CodeGen::LValue::setTBAABaseType(), clang::CodeGen::LValue::setTBAAInfo(), clang::CodeGen::LValue::setTBAAOffset(), clang::CodeGen::CodeGenModule::shouldUseTBAA(), clang::CodeGen::CGBitFieldInfo::StorageSize, clang::ast_matchers::type, clang::Qualifiers::Volatile, clang::Qualifiers::Weak, and clang::QualType::withCVRQualifiers().

Referenced by EmitCapturedFieldLValue(), EmitLValueForFieldInitialization(), EmitLValueForLambdaField(), EmitMaterializeTemporaryExpr(), EmitMemberExpr(), EmitOMPFirstprivateClause(), EmitRValueForField(), and GenerateCapturedStmtFunction().

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

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

Definition at line 2579 of file CGExpr.cpp.

References CurCodeDecl, EmitLValueForField(), getContext(), clang::FieldDecl::getParent(), clang::ASTContext::getTagDeclType(), and MakeNaturalAlignAddrLValue().

Referenced by StartFunction().

Definition at line 317 of file CGExpr.cpp.

References clang::SubobjectAdjustment::DTB::BasePath, CGM, 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::diag::Ignored, 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.

Referenced by EmitLValue().

EmitMCountInstrumentation - Emit call to .mcount.

Definition at line 340 of file CodeGenFunction.cpp.

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

Referenced by StartFunction().

void CodeGenFunction::EmitMustTailThunk ( const CXXMethodDecl MD,
llvm::Value AdjustedThisPtr,
llvm::Value Callee 
)
llvm::Value* clang::CodeGen::CodeGenFunction::EmitNeon64Call ( llvm::Function *  F,
llvm::SmallVectorImpl< llvm::Value * > &  O,
const char *  name 
)
Value * CodeGenFunction::EmitNeonCall ( llvm::Function *  F,
SmallVectorImpl< llvm::Value * > &  O,
const char *  name,
unsigned  shift = 0,
bool  rightshift = false 
)

Definition at line 1797 of file CGBuiltin.cpp.

References Builder.

Referenced by EmitAArch64TblBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), and packTBLDVectorList().

Value * CodeGenFunction::EmitNeonRShiftImm ( llvm::Value Vec,
llvm::Value Amt,
llvm::Type *  Ty,
bool  usgn,
const char *  name 
)

Definition at line 1821 of file CGBuiltin.cpp.

References Builder, and clang::prec::Shift.

Value * CodeGenFunction::EmitNeonShiftVector ( llvm::Value V,
llvm::Type *  Ty,
bool  negateForRightShift 
)

Definition at line 1811 of file CGBuiltin.cpp.

References AttributeLangSupport::C.

Value * CodeGenFunction::EmitNeonSplat ( llvm::Value V,
llvm::Constant *  Idx 
)

Definition at line 1791 of file CGBuiltin.cpp.

References Builder.

void CodeGenFunction::EmitNewArrayInitializer ( const CXXNewExpr E,
QualType  elementType,
llvm::Value NewPtr,
llvm::Value NumElements,
llvm::Value AllocSizeWithoutCookie 
)
void CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke ( llvm::Value callee,
ArrayRef< llvm::Value * >  args 
)

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

Definition at line 2854 of file CGCall.cpp.

References Builder.

Referenced by EmitCXXThrowExpr().

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 = "" 
)

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

Definition at line 2262 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::EmitObjCCollectionLiteral ( const Expr E,
const ObjCMethodDecl MethodWithObjects 
)

Definition at line 90 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().

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

Definition at line 1741 of file CGObjC.cpp.

References getARCCleanupKind().

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

Definition at line 1749 of file CGObjC.cpp.

References EmitARCRetainAutorelease().

Referenced by EmitStoreThroughLValue().

Definition at line 1421 of file CGObjC.cpp.

References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::RegionCounter::beginRegion(), Builder, ConvertType(), clang::LangAS::Count, createBasicBlock(), clang::CodeGen::CodeGenPGO::createBranchWeights(), 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::SourceRange::getBegin(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::ObjCForCollectionStmt::getBody(), clang::ObjCForCollectionStmt::getCollection(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::RegionCounter::getCount(), clang::CodeGen::CodeGenPGO::getCurrentRegionCount(), getDebugInfo(), clang::ObjCForCollectionStmt::getElement(), clang::SourceRange::getEnd(), getJumpDestInCurrentScope(), getLangOpts(), clang::CodeGen::CodeGenModule::getObjCFastEnumerationStateType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), getPGORegionCounter(), clang::CodeGen::RValue::getScalarVal(), clang::SelectorTable::getSelector(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::Idents, 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().

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 2284 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().

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

Definition at line 1722 of file CGObjC.cpp.

References EmitARCRetain().

void CodeGenFunction::EmitOMPAggregateAssign ( LValue  OriginalAddr,
llvm::Value PrivateAddr,
const Expr AssignExpr,
QualType  Type,
const VarDecl VDInit 
)

Definition at line 554 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 538 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 546 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 473 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 477 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

void CodeGenFunction::EmitOMPInnerLoop ( const OMPLoopDirective S,
OMPPrivateScope LoopScope,
bool  SeparateIter = false 
)
void CodeGenFunction::EmitOMPLoopBody ( const OMPLoopDirective Directive,
bool  SeparateIter = false 
)

Definition at line 493 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 550 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 516 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 520 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 525 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 485 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 481 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 489 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 558 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 530 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 542 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 534 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

Definition at line 562 of file CGStmtOpenMP.cpp.

Referenced by EmitStmt().

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 1643 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().

Value * CodeGenFunction::EmitPPCBuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)

Definition at line 6018 of file CGBuiltin.cpp.

References Builder, clang::CallExpr::getArg(), and clang::CallExpr::getNumArgs().

Definition at line 3493 of file CGExpr.cpp.

References emitPseudoObjectExpr(), and clang::CodeGen::AggValueSlot::ignored().

Referenced by EmitLValue().

Definition at line 3488 of file CGExpr.cpp.

References emitPseudoObjectExpr().

Value * CodeGenFunction::EmitR600BuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)

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

Definition at line 155 of file CodeGenFunction.cpp.

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

Referenced by FinishFunction().

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 2883 of file CGCall.cpp.

Referenced by EmitObjCAutoreleasePoolPop(), emitRTtypeidCall(), and ExitCXXTryStmt().

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 2876 of file CGCall.cpp.

Definition at line 1080 of file CGExprComplex.cpp.

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

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

Definition at line 3391 of file CGExprScalar.cpp.

References hasScalarEvaluationKind().

Referenced by 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 3376 of file CGExprScalar.cpp.

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

Referenced by EmitAnyExpr(), EmitAnyExprToMem(), EmitARCExtendBlockObject(), emitARCRetainCall(), EmitArraySubscriptExpr(), EmitAtomicExpr(), EmitAtomicInit(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitBinaryAtomic(), EmitBinaryAtomicPost(), EmitCallExpr(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXDeleteExpr(), EmitCXXMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitDeclInit(), EmitExtVectorElementExpr(), emitFPIntBuiltin(), EmitIndirectGotoStmt(), EmitInitializerForField(), EmitMaterializeTemporaryExpr(), EmitMemberExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCIvarRefLValue(), EmitObjCMessageExpr(), EmitObjCThrowOperand(), EmitOMPAlignedClause(), EmitOMPParallelCall(), EmitPointerToDataMemberBinaryExpr(), EmitReturnStmt(), EmitScalarInit(), EmitStoreThroughLValue(), EmitSwitchStmt(), emitTernaryFPBuiltin(), emitUnaryFPBuiltin(), EmitUnaryOpLValue(), EmitVAListRef(), EmitVariablyModifiedType(), emitWritebackArg(), EvaluateExprAsBool(), tryEmitARCRetainLoadOfScalar(), and tryEmitARCRetainScalarExpr().

void CodeGenFunction::EmitScalarInit ( const Expr init,
const ValueDecl D,
LValue  lvalue,
bool  capturedByInit 
)
void CodeGenFunction::EmitScalarInit ( llvm::Value init,
LValue  lvalue 
)

Definition at line 3412 of file CGExprScalar.cpp.

Referenced by EmitUnaryOpLValue().

Definition at line 1658 of file CGException.cpp.

References clang::CodeGen::CodeGenModule::ErrorUnsupported().

Referenced by EmitStmt().

Definition at line 1654 of file CGException.cpp.

References clang::CodeGen::CodeGenModule::ErrorUnsupported().

Referenced by EmitStmt().

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 245 of file CGStmt.cpp.

References EmitAttributedStmt(), EmitBreakStmt(), EmitCaseStmt(), EmitCompoundStmt(), EmitContinueStmt(), EmitDeclStmt(), EmitDefaultStmt(), EmitGotoStmt(), EmitLabelStmt(), and clang::Stmt::getStmtClass().

Referenced by EmitStmt().

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(), EmitOMPCriticalDirective(), EmitOMPFlushDirective(), EmitOMPForDirective(), EmitOMPForSimdDirective(), EmitOMPMasterDirective(), EmitOMPOrderedDirective(), EmitOMPParallelDirective(), EmitOMPParallelForDirective(), EmitOMPParallelForSimdDirective(), EmitOMPParallelSectionsDirective(), EmitOMPSectionDirective(), EmitOMPSectionsDirective(), EmitOMPSimdDirective(), EmitOMPSingleDirective(), EmitOMPTargetDirective(), EmitOMPTaskDirective(), EmitOMPTaskwaitDirective(), EmitOMPTaskyieldDirective(), EmitOMPTeamsDirective(), EmitReturnStmt(), EmitSEHLeaveStmt(), EmitSEHTryStmt(), EmitSimpleStmt(), EmitStopPoint(), EmitSwitchStmt(), EmitWhileStmt(), EnsureInsertPoint(), clang::CapturedStmt::getCapturedRegionKind(), clang::Stmt::getStmtClass(), HaveInsertPoint(), clang::Stmt::NoStmtClass, 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(), EmitOMPCriticalDirective(), EmitOMPLoopBody(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), ExitCXXTryStmt(), GenerateObjCAtomicSetterCopyHelperFunction(), and generateObjCSetterBody().

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, getDebugInfo(), and clang::Stmt::getLocStart().

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

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

Definition at line 1041 of file CGExprComplex.cpp.

Referenced by EmitComplexPrePostIncDec(), EmitExprAsInit(), EmitInitStoreOfNonAggregate(), 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 
)
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 1277 of file CGExpr.cpp.

References EmitStoreOfScalar(), 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 
)

EmitStoreThroughBitfieldLValue - Store Src into Dst with same constraints as EmitStoreThroughLValue.

Parameters:
Result[out] - If non-null, this will be set to a Value* for the bit-field contents after the store, appropriate for use as the result of an assignment to the bit-field.

Definition at line 1530 of file CGExpr.cpp.

References Builder, ConvertTypeForMem(), EmitFromMemory(), clang::CodeGen::LValue::getBitFieldAddr(), clang::CodeGen::LValue::getBitFieldInfo(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::LValue::getType(), hasBooleanRepresentation(), clang::CodeGen::CGBitFieldInfo::IsSigned, clang::CodeGen::LValue::isVolatileQualified(), clang::CodeGen::CGBitFieldInfo::Offset, clang::CodeGen::CGBitFieldInfo::Size, clang::CodeGen::CGBitFieldInfo::StorageAlignment, and clang::CodeGen::CGBitFieldInfo::StorageSize.

Referenced by EmitStoreThroughLValue().

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 1439 of file CGExpr.cpp.

References Builder, CGM, ConvertType(), EmitARCStoreStrong(), EmitARCStoreWeak(), EmitObjCExtendObjectLifetime(), clang::CodeGen::CGObjCRuntime::EmitObjCGlobalAssign(), clang::CodeGen::CGObjCRuntime::EmitObjCIvarAssign(), clang::CodeGen::CGObjCRuntime::EmitObjCStrongCastAssign(), clang::CodeGen::CGObjCRuntime::EmitObjCWeakAssign(), EmitScalarExpr(), EmitStoreOfScalar(), EmitStoreThroughBitfieldLValue(), EmitStoreThroughExtVectorComponentLValue(), EmitStoreThroughGlobalRegLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CodeGen::LValue::getBaseIvarExp(), getContext(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::CodeGenModule::getObjCRuntime(), 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(), EmitAutoVarInit(), EmitBinaryOperatorLValue(), EmitExprAsInit(), EmitInitializerForField(), EmitLambdaExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitScalarInit(), emitWriteback(), and InitCapturedStruct().

void CodeGenFunction::EmitSynthesizedCXXCopyCtor ( llvm::Value Dest,
llvm::Value Src,
const Expr Exp 
)

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

Definition at line 1736 of file CGBuiltin.cpp.

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

Definition at line 1192 of file CGExpr.cpp.

References Builder, ConvertTypeForMem(), getContext(), and hasBooleanRepresentation().

Referenced by EmitStoreOfScalar(), and EmitToInt().

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

Definition at line 2316 of file CGExpr.cpp.

References Builder, CGM, createBasicBlock(), EmitBlock(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::CodeGenModule::getIntrinsic().

Referenced by EmitCheck().

void CodeGenFunction::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.

Definition at line 467 of file CGExpr.cpp.

References Builder, CGM, createBasicBlock(), clang::CodeGen::CodeGenModule::CreateRuntimeVariable(), EmitBlock(), EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), emitHash16Bytes(), clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CGCXXABI::getMangleContext(), clang::CharUnits::getQuantity(), clang::ASTContext::getSanitizerBlacklist(), clang::ASTContext::getTypeAlignInChars(), clang::ASTContext::getTypeSizeInChars(), clang::QualType::getUnqualifiedType(), clang::SanitizerSet::has(), clang::CXXRecordDecl::hasDefinition(), clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::SanitizerBlacklist::isBlacklistedType(), clang::CXXRecordDecl::isDynamicClass(), clang::Type::isIncompleteType(), clang::MangleContext::mangleCXXRTTI(), sanitizePerformTypeCheck(), SanOpts, clang::CodeGen::CodeGenTypeCache::SizeTy, TCK_DowncastPointer, TCK_DowncastReference, TCK_MemberAccess, TCK_MemberCall, TCK_Upcast, and TCK_UpcastToVirtualBase.

Referenced by commonEmitCXXMemberOrOperatorCall(), EmitCastLValue(), EmitCheckedLValue(), EmitCXXConstructorCall(), EmitCXXMemberPointerCallExpr(), EmitMemberExpr(), EmitReferenceBindingToExpr(), and GetAddressOfBaseClass().

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 775 of file CGExpr.cpp.

References ConvertType(), ErrorUnsupported(), clang::Expr::getType(), and MakeAddrLValue().

Referenced by EmitCastLValue(), EmitConditionalOperatorLValue(), and EmitLValue().

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 769 of file CGExpr.cpp.

References ErrorUnsupported(), clang::Expr::getType(), and GetUndefRValue().

Referenced by EmitAtomicExpr().

Definition at line 3162 of file CGExpr.cpp.

References EmitAggExprToLValue().

Referenced by EmitLValue().

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 126 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(), and EmitOMPSimdDirective().

Value * CodeGenFunction::emitVectorWrappedScalar16Intrinsic ( unsigned  Int,
SmallVectorImpl< llvm::Value * > &  Ops,
const char *  Name 
)

Definition at line 3886 of file CGBuiltin.cpp.

References Builder.

Value * CodeGenFunction::emitVectorWrappedScalar8Intrinsic ( unsigned  Int,
SmallVectorImpl< llvm::Value * > &  Ops,
const char *  Name 
)

Definition at line 3870 of file CGBuiltin.cpp.

References Builder.

void CodeGenFunction::EmitWhileStmt ( const WhileStmt S,
ArrayRef< const Attr * >  Attrs = None 
)
Value * CodeGenFunction::EmitX86BuiltinExpr ( unsigned  BuiltinID,
const CallExpr E 
)

Definition at line 1079 of file CodeGenFunction.h.

Referenced by EmitScalarExpr().

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 1455 of file CodeGenFunction.h.

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

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

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 2242 of file CGBlocks.cpp.

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

Referenced by EmitAutoVarCleanups().

void CodeGenFunction::EnterCXXTryStmt ( const CXXTryStmt S,
bool  IsFnTryBlock = false 
)

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 1522 of file CGClass.cpp.

References clang::CXXRecordDecl::bases(), clang::Dtor_Base, clang::Dtor_Complete, clang::Dtor_Deleting, clang::CodeGen::EHCleanup, EHStack, 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().

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::ErrorUnsupported ( const Stmt S,
const char *  Type 
)

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

Definition at line 1187 of file CodeGenFunction.cpp.

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

Referenced by EmitCXXThrowExpr(), EmitCXXTryStmt(), EmitUnsupportedLValue(), and EmitUnsupportedRValue().

void CodeGenFunction::ExitCXXTryStmt ( const CXXTryStmt S,
bool  IsFnTryBlock = false 
)
llvm::Function * CodeGenFunction::GenerateBlockFunction ( GlobalDecl  GD,
const CGBlockInfo Info,
const DeclMapTy &  ldm,
bool  IsLambdaConversionToBlock 
)

Definition at line 2148 of file CGStmt.cpp.

References clang::CodeGen::LValue::getAddress(), and InitCapturedStruct().

Referenced by EmitOMPParallelDirective().

Creates the outlined function for a CapturedStmt.

Definition at line 2155 of file CGStmt.cpp.

References clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), Builder, CapturedStmtInfo, CGM, clang::CodeGen::CodeGenPGO::destroyRegionCounters(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), clang::CodeGen::CodeGenPGO::emitInstrumentationData(), EmitLoadOfLValue(), EmitLValueForField(), 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::Stmt::getLocStart(), 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(), MakeNaturalAlignAddrLValue(), clang::CapturedDecl::param_begin(), clang::CapturedDecl::param_end(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::setContextValue(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and StartFunction().

Referenced by EmitCapturedStmt().

void CodeGenFunction::GenerateCode ( GlobalDecl  GD,
llvm::Function *  Fn,
const CGFunctionInfo FnInfo 
)

Definition at line 809 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, clang::CodeGen::CodeGenPGO::destroyRegionCounters(), EmitCheck(), EmitCheckSourceLocation(), EmitConstructorBody(), EmitDestructorBody(), clang::CodeGen::CGCUDARuntime::EmitDeviceStubBody(), EmitFunctionBody(), emitImplicitAssignmentOperatorBody(), clang::CodeGen::CodeGenPGO::emitInstrumentationData(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitSizedDeallocationFunction(), FinishFunction(), clang::SourceRange::getBegin(), clang::FunctionDecl::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::FunctionDecl::getCorrespondingUnsizedGlobalDeallocationFunction(), clang::CodeGen::CodeGenModule::getCUDARuntime(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::SourceRange::getEnd(), clang::CodeGen::CodeGenModule::getIntrinsic(), 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::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 1293 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::FunctionDecl::Create(), 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 
)

GenerateCXXGlobalDtorsFunc - Generates code for destroying global variables.

Definition at line 524 of file CGDeclCXX.cpp.

References Builder, clang::CodeGen::ArtificialLocation::Emit(), FinishFunction(), getContext(), getTypes(), StartFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.

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 1469 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::FunctionDecl::Create(), 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().

Definition at line 2946 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::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().

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 2869 of file CGObjC.cpp.

References clang::QualType::addConst(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionDeclaration(), AttributeLangSupport::C, clang::frontend::CPlusPlus, 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().

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 745 of file CGObjC.cpp.

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

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

Definition at line 815 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().

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 1274 of file CGObjC.cpp.

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

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

Definition at line 1093 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().

void CodeGenFunction::GenerateThunk ( llvm::Function *  Fn,
const CGFunctionInfo FnInfo,
GlobalDecl  GD,
const ThunkInfo Thunk 
)
void 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 442 of file CGExpr.cpp.

Referenced by EmitExtVectorElementLValue(), EmitLoadOfExtVectorElementLValue(), and EmitStoreThroughExtVectorComponentLValue().

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 83 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::BlockAddress * CodeGenFunction::GetAddrOfLabel ( const LabelDecl L)

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

Definition at line 2411 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().

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

Definition at line 1992 of file CGBlocks.cpp.

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

Definition at line 1072 of file CodeGenFunction.h.

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

Referenced by AddDirectArgument(), AdjustRelatedResultType(), CheckAggExprForMemSetUse(), commonEmitCXXMemberOrOperatorCall(), ConstantFoldsToSimpleInteger(), ConvertType(), CreateAggTemp(), CreateIRTemp(), CreateMemTemp(), EmitAArch64TblBuiltinExpr(), EmitAggMemberInitializer(), EmitAggregateCopy(), EmitAnyExprToMem(), emitArrayLength(), EmitArraySubscriptExpr(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), EmitAtomicLoad(), EmitAtomicStore(), EmitAutoVarAlloca(), EmitAutoVarInit(), EmitBaseInitializer(), EmitBinaryAtomic(), EmitBinaryAtomicPost(), EmitBlockCopyAndAutorelease(), EmitBuiltinNewDeleteCall(), EmitCall(), EmitCallAndReturnForThunk(), EmitCallArgs(), EmitCapturedFieldLValue(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCastLValue(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitComplexPrePostIncDec(), EmitCompoundStmt(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), EmitCXXConstructorCall(), EmitCXXDeleteExpr(), EmitCXXGlobalVarDeclInit(), EmitCXXMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitCXXTypeidExpr(), EmitDeclInit(), EmitDeclInvariant(), EmitDeclRefLValue(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDeleteCall(), emitDestroy(), EmitDestructorBody(), EmitEndEHSpec(), EmitFromMemory(), EmitFunctionDeclLValue(), EmitGlobalVarDeclLValue(), EmitInitializerForField(), EmitLambdaBlockInvokeBody(), EmitLambdaDelegatingInvokeBody(), EmitLoadOfScalar(), EmitLValueForField(), EmitLValueForFieldInitialization(), EmitLValueForLambdaField(), EmitMaterializeTemporaryExpr(), EmitMemberExpr(), EmitMemberInitializer(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitObjCForCollectionStmt(), EmitObjCIvarRefLValue(), EmitObjCMRRAutoreleasePoolPop(), EmitObjCMRRAutoreleasePoolPush(), EmitOMPFirstprivateClause(), clang::CodeGen::EmitOMPSerialCall(), clang::CodeGen::EmitOpenMPUpdateLocation(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), EmitReturnStmt(), EmitStartEHSpec(), EmitStaticVarDecl(), EmitStoreOfScalar(), EmitStoreThroughLValue(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtor(), EmitSynthesizedCXXCopyCtorCall(), clang::CodeGen::EmitThreadIDAddress(), EmitToMemory(), EmitTypeCheck(), EmitUnaryOpLValue(), EmitVAArgFromMemory(), EmitVAListRef(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVariablyModifiedType(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), EvaluateExprAsBool(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCGetterBody(), generateObjCSetterBody(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getItaniumDynamicCastFn(), GetNumNonZeroBytesInInit(), getRangeForType(), getVLASize(), GetVTTParameter(), InitCapturedStruct(), InitCatchParam(), InitializeVTablePointers(), isCheapEnoughToEvaluateUnconditionally(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), performBaseAdjustment(), performTypeAdjustment(), StartFunction(), StartThunk(), StoreAnyExprIntoOneUnit(), tryEmitAsConstant(), and TypeOfSelfObject().

llvm::BasicBlock * CodeGenFunction::getEHResumeBlock ( bool  isCleanup)

Returns the contents of the function's exception object and selector slots.

Definition at line 418 of file CGException.cpp.

References Builder, and getExceptionSlot().

Referenced by BeginCatch(), emitFilterDispatchBlock(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), getEHResumeBlock(), getTerminateHandler(), and InitCatchParam().

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

Definition at line 406 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 ( )

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

Definition at line 394 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().

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 670 of file CodeGenFunction.h.

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

Referenced by EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitLabel(), EmitObjCForCollectionStmt(), EmitOMPInnerLoop(), EmitOMPLoopBody(), 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 679 of file CodeGenFunction.h.

References createBasicBlock(), and getJumpDestInCurrentScope().

llvm::LLVMContext& clang::CodeGen::CodeGenFunction::getLLVMContext ( ) [inline]

Definition at line 1133 of file CGCleanup.cpp.

References Builder.

Referenced by ResolveAllBranchFixups(), and TransitionToCleanupSwitch().

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

Definition at line 1593 of file CodeGenFunction.h.

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

Referenced by EmitOpaqueValueLValue().

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

Definition at line 1604 of file CodeGenFunction.h.

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

Definition at line 422 of file CGException.cpp.

References Builder, and getEHSelectorSlot().

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

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 1589 of file CGException.cpp.

References Builder, createBasicBlock(), EmitNounwindRuntimeCall(), getClangCallTerminateFn(), getExceptionFromSlot(), getTerminateFn(), and useClangCallTerminate().

Referenced by getEHDispatchBlock().

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 1449 of file CodeGenFunction.cpp.

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

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

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 2067 of file CGClass.cpp.

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

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 299 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().

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

Definition at line 1551 of file CodeGenFunction.h.

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

Referenced by EmitAggregateAssign().

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

Definition at line 1447 of file CodeGenFunction.h.

References Builder.

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

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::InitTempAlloca ( llvm::AllocaInst *  Alloca,
llvm::Value Value 
)

InitTempAlloca - Provide an initial value for the given alloca.

Definition at line 63 of file CGExpr.cpp.

References AllocaInsertPt.

Referenced by clang::CodeGen::EmitOMPSerialCall().

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

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

Definition at line 730 of file CodeGenFunction.h.

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

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 891 of file CGCleanup.cpp.

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

Referenced by EmitCaseStmt().

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

Definition at line 1072 of file CGDecl.cpp.

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

Definition at line 1238 of file CodeGenFunction.h.

References BlockPointer.

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

Definition at line 1668 of file CodeGenFunction.h.

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

Definition at line 1652 of file CodeGenFunction.h.

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

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

Definition at line 1661 of file CodeGenFunction.h.

Referenced by GetVTTParameter().

Function * CodeGenFunction::LookupNeonLLVMIntrinsic ( unsigned  IntrinsicID,
unsigned  Modifier,
llvm::Type *  ArgTy,
const CallExpr E 
)

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 1202 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)

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.

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

Definition at line 562 of file CGCleanup.cpp.

References Builder, CreateNormalEntry(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, destroyOptimisticNormalEntry(), EmitCleanup(), clang::CodeGen::CGDebugInfo::EmitLocation(), 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(), and pushCleanupAfterFullExpr().

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 393 of file CGCleanup.cpp.

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

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 1626 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 1414 of file CGExprCXX.cpp.

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

template<class T , class A0 , class A1 , class A2 , class A3 >
void clang::CodeGen::CodeGenFunction::pushCleanupAfterFullExpr ( CleanupKind  Kind,
A0  a0,
A1  a1,
A2  a2,
A3  a3 
) [inline]

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

Definition at line 1365 of file CGDecl.cpp.

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

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

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

Definition at line 1374 of file CGDecl.cpp.

References clang::ast_matchers::type.

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 1937 of file CGClass.cpp.

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

Referenced by pushCleanupAfterFullExpr().

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

Definition at line 1932 of file CGClass.cpp.

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

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

Definition at line 1355 of file CGDecl.cpp.

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

Referenced by EmitInitializerForField().

template<class T , class A0 >
void clang::CodeGen::CodeGenFunction::pushFullExprCleanup ( CleanupKind  kind,
A0  a0 
) [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 361 of file CodeGenFunction.h.

References EHStack, initFullExprCleanup(), isInConditionalBranch(), and saveValueInCond().

Referenced by EmitAnyExprToExn().

template<class T , class A0 , class A1 >
void clang::CodeGen::CodeGenFunction::pushFullExprCleanup ( CleanupKind  kind,
A0  a0,
A1  a1 
) [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 378 of file CodeGenFunction.h.

References EHStack, initFullExprCleanup(), isInConditionalBranch(), and saveValueInCond().

template<class T , class A0 , class A1 , class A2 >
void clang::CodeGen::CodeGenFunction::pushFullExprCleanup ( CleanupKind  kind,
A0  a0,
A1  a1,
A2  a2 
) [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 396 of file CodeGenFunction.h.

References EHStack, initFullExprCleanup(), isInConditionalBranch(), and saveValueInCond().

template<class T , class A0 , class A1 , class A2 , class A3 >
void clang::CodeGen::CodeGenFunction::pushFullExprCleanup ( CleanupKind  kind,
A0  a0,
A1  a1,
A2  a2,
A3  a3 
) [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 416 of file CodeGenFunction.h.

References EHStack, initFullExprCleanup(), isInConditionalBranch(), 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 1582 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 1597 of file CGDecl.cpp.

References clang::CodeGen::EHCleanup.

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

Definition at line 1381 of file CGDecl.cpp.

References EHStack.

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

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 196 of file CGDeclCXX.cpp.

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

void CodeGenFunction::ResolveBranchFixups ( llvm::BasicBlock *  Target)

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

Definition at line 460 of file CGExpr.cpp.

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

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

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

Definition at line 325 of file CodeGenFunction.h.

Referenced by pushFullExprCleanup().

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 3404 of file CGExpr.cpp.

References getLLVMContext(), and Node.

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

Definition at line 308 of file CodeGenFunction.cpp.

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

Referenced by FinishFunction(), and StartFunction().

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 318 of file CGStmt.cpp.

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

Referenced by EmitDoStmt(), and EmitWhileStmt().

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 562 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(), 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(), 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, PrologueCleanupDepth, clang::Redeclarable< decl_type >::redecls(), ReturnBlock, ReturnValue, SanOpts, ShouldInstrumentFunction(), and clang::CodeGen::EHScopeStack::stable_begin().

Referenced by createAtExitStub(), clang::CodeGen::EmitOMPThreadPrivateVarDefinition(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), StartObjCMethod(), and StartThunk().

void CodeGenFunction::StartObjCMethod ( const ObjCMethodDecl OMD,
const ObjCContainerDecl CD,
SourceLocation  StartLoc 
)
void CodeGenFunction::StartThunk ( llvm::Function *  Fn,
GlobalDecl  GD,
const CGFunctionInfo FnInfo 
)

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 967 of file CGExpr.cpp.

References AttributeLangSupport::C, CEK_AsReferenceOnly, CEK_AsValueOnly, CEK_None, CGM, checkVarTypeForConstantEmission(), clang::CodeGen::CodeGenModule::EmitConstantValue(), EmitDeclRefExprDbgValue(), clang::Expr::EvaluateAsLValue(), clang::Expr::EvaluateAsRValue(), clang::CodeGen::CodeGenFunction::ConstantEmission::forReference(), clang::CodeGen::CodeGenFunction::ConstantEmission::forValue(), getContext(), clang::DeclRefExpr::getDecl(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::EvalStatus::HasSideEffects, and clang::Expr::EvalResult::Val.

Definition at line 3851 of file CGBuiltin.cpp.

References Builder.

Definition at line 3860 of file CGBuiltin.cpp.

References Builder.


Friends And Related Function Documentation

friend class CGCXXABI [friend]

Definition at line 115 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 180 of file CodeGenFunction.h.

Referenced by CreateTempAlloca(), clang::CodeGen::EmitOpenMPUpdateLocation(), FinishFunction(), clang::CodeGen::GetOpenMPThreadID(), InitTempAlloca(), and StartFunction().

In ARC, whether we should autorelease the return value.

Definition at line 270 of file CodeGenFunction.h.

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

Definition at line 276 of file CodeGenFunction.h.

Referenced by EmitLambdaBlockInvokeBody(), and EmitParmDecl().

Definition at line 277 of file CodeGenFunction.h.

Referenced by LoadBlockStruct().

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

Definition at line 249 of file CodeGenFunction.h.

Definition at line 147 of file CodeGenFunction.h.

Referenced by AddDirectArgument(), AddInitializerToStaticVarDecl(), AdjustRelatedResultType(), clang::CodeGen::CallArgList::allocateArgumentMemory(), ApplyNonVirtualAndVirtualOffset(), BuildAggStore(), BuildAppleKextVirtualCall(), CheckAggExprForMemSetUse(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), createPlaceholderSlot(), CreateTempAlloca(), EmitAArch64TblBuiltinExpr(), EmitAggMemberInitializer(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAnnotationCall(), EmitAnyExprToExn(), emitARCCopyOperation(), EmitARCDestroyStrong(), EmitARCDestroyWeak(), EmitARCInitWeak(), emitARCLoadOperation(), EmitARCRelease(), emitARCRetainAfterCall(), EmitARCRetainAutorelease(), EmitARCRetainAutoreleasedReturnValue(), EmitARCRetainBlock(), emitARCStoreOperation(), EmitARCStoreStrongCall(), emitARCValueOperation(), emitArgumentDemotion(), EmitArrayDelete(), emitArrayDestroy(), emitArrayLength(), EmitArraySubscriptExpr(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicLoad(), EmitAtomicOp(), EmitAtomicStore(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAutoVarAlloca(), EmitAutoVarInit(), EmitBinaryAtomic(), EmitBinaryAtomicPost(), EmitBitCastOfLValueToProperType(), EmitBlock(), EmitBlockAfterUses(), EmitBlockWithFallThrough(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitBoundsCheck(), EmitBranch(), EmitBranchOnBoolExpr(), EmitCall(), EmitCallExpr(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCastLValue(), EmitCastToVoidPtr(), emitCatchDispatchBlock(), EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitCheckValue(), EmitCleanup(), EmitCommonNeonSISDBuiltinExpr(), EmitComplexPrePostIncDec(), EmitCondBrHints(), EmitConditionalOperatorLValue(), EmitConstructorBody(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCtorPrologue(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXTypeidExpr(), EmitCXXUuidofExpr(), EmitDeclInvariant(), EmitDeclRefLValue(), EmitDeleteCall(), emitDestroy(), EmitDestructorBody(), EmitDoStmt(), EmitDynamicCast(), EmitExtendGCLifetime(), EmitExtVectorElementExpr(), EmitExtVectorElementLValue(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), EmitForStmt(), emitFPIntBuiltin(), EmitFromInt(), EmitFromMemory(), EmitFunctionBody(), EmitFunctionDeclLValue(), EmitFunctionInstrumentation(), EmitGlobalVarDeclLValue(), EmitIfStmt(), EmitIndirectGotoStmt(), EmitInitializerForField(), EmitLabel(), EmitLandingPad(), EmitLoadOfBitfieldLValue(), EmitLoadOfExtVectorElementLValue(), EmitLoadOfGlobalRegLValue(), EmitLoadOfLValue(), EmitLoadOfScalar(), EmitLValueForField(), EmitLValueForFieldInitialization(), EmitMemberInitializer(), clang::CodeGen::CGCXXABI::EmitMemberPointerComparison(), clang::CodeGen::CGCXXABI::EmitMemberPointerIsNotNull(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonNullArgCheck(), emitNonZeroVLAInit(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitObjCAutoreleasePoolPop(), EmitObjCAutoreleasePoolStmt(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), EmitObjectDelete(), EmitOMPAggregateAssign(), EmitOMPIfClause(), EmitOMPInnerLoop(), clang::CodeGen::EmitOMPNumThreadsClause(), clang::CodeGen::EmitOMPParallelCall(), clang::CodeGen::EmitOMPSerialCall(), EmitOMPSimdDirective(), clang::CodeGen::EmitOMPThreadPrivateVarDefinition(), clang::CodeGen::EmitOMPThreadPrivateVarInit(), clang::CodeGen::EmitOpenMPUpdateLocation(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), EmitReturnBlock(), EmitReturnStmt(), EmitScalarInit(), EmitSizedDeallocationFunction(), EmitStmt(), EmitStopPoint(), EmitStoreOfScalar(), EmitStoreThroughBitfieldLValue(), EmitStoreThroughExtVectorComponentLValue(), EmitStoreThroughGlobalRegLValue(), EmitStoreThroughLValue(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtorCall(), emitTernaryFPBuiltin(), clang::CodeGen::CGCXXABI::EmitThisParam(), EmitToInt(), EmitToMemory(), EmitTrapCheck(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), emitUnaryFPBuiltin(), EmitUnaryOpLValue(), EmitVAArgFromMemory(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVariablyModifiedType(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), findDominatingStoreToReturnValue(), FinishFunction(), clang::CodeGen::CallArgList::freeArgumentMemory(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), GenerateObjCMethod(), generateObjCSetterBody(), GenerateVarArgsThunk(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getArrayIndexingBound(), getEHResumeBlock(), getExceptionFromSlot(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), clang::CodeGen::getOMPAddrOfThreadPrivate(), clang::CodeGen::GetOpenMPThreadID(), getSelectorFromSlot(), getTerminateHandler(), getTerminateLandingPad(), getVLASize(), GetVTablePtr(), GetVTTParameter(), HaveInsertPoint(), InitCatchParam(), initFullExprCleanup(), InitializeVTablePointer(), clang::CodeGen::CodeGenFunction::LexicalScope::LexicalScope(), packTBLDVectorList(), performBaseAdjustment(), PerformReturnAdjustment(), performTypeAdjustment(), PPC64_initDwarfEHRegSizeTable(), protectFromPeepholes(), clang::CodeGen::CGCXXABI::ReadArrayCookie(), ResolveAllBranchFixups(), clang::CodeGen::DominatingLLVMValue::restore(), clang::CodeGen::DominatingLLVMValue::save(), SetupCleanupBlockActivation(), SimplifyCleanupEntry(), StartFunction(), tryEmitARCRetainScalarExpr(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), and clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope().

Definition at line 142 of file CodeGenFunction.h.

Referenced by AddInitializerToStaticVarDecl(), clang::CodeGen::CallArgList::allocateArgumentMemory(), BuildAppleKextVirtualCall(), BuildAppleKextVirtualDestructorCall(), buildFMulAdd(), CalculateCookiePadding(), CallBeginCatch(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), ConvertType(), ConvertTypeForMem(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), createReferenceTemporary(), EmitAArch64TblBuiltinExpr(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAnnotationCall(), emitARCCopyOperation(), emitARCLoadOperation(), emitARCStoreOperation(), emitARCValueOperation(), EmitArrayDelete(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), emitAtomicLibcall(), EmitAtomicLoad(), EmitAtomicStore(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBaseInitializer(), EmitBlockWithFallThrough(), EmitCall(), EmitCallAndReturnForThunk(), EmitCapturedStmt(), EmitCaseStmt(), emitCatchDispatchBlock(), EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitCompoundLiteralLValue(), EmitCondBrHints(), EmitConstructorBody(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCtorPrologue(), EmitCUDAKernelCallExpr(), EmitCXXConstructorCall(), EmitCXXDestructorCall(), EmitCXXGlobalVarDeclInit(), EmitCXXGuardedInit(), EmitCXXMemberCallExpr(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXOperatorMemberCallee(), EmitCXXStructorCall(), EmitCXXTypeidExpr(), EmitCXXUuidofExpr(), EmitDeclDestroy(), EmitDeclInit(), EmitDeclInvariant(), EmitDeclRefExprDbgValue(), EmitDeclRefLValue(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDynamicCast(), EmitDynamicCastToNull(), EmitExtVectorElementLValue(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), EmitForwardingCallToLambda(), emitFPIntBuiltin(), EmitFunctionDeclLValue(), EmitFunctionInstrumentation(), emitGlobalDtorWithCXAAtExit(), emitGlobalDtorWithTLRegDtor(), EmitGlobalVarDeclLValue(), EmitIvarOffset(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitLoadOfGlobalRegLValue(), EmitLoadOfLValue(), EmitLoadOfScalar(), EmitLValueForField(), EmitLValueForFieldInitialization(), EmitLValueForIvar(), EmitMaterializeTemporaryExpr(), EmitMCountInstrumentation(), EmitMemberInitializer(), EmitMustTailThunk(), EmitNewArrayInitializer(), EmitNewDeleteCall(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCEncodeExprLValue(), EmitObjCMessageExpr(), EmitObjCProtocolExpr(), EmitObjCSelectorExpr(), EmitObjCSelectorLValue(), EmitObjCStringLiteral(), EmitObjectDelete(), EmitOMPCriticalDirective(), clang::CodeGen::EmitOMPNumThreadsClause(), EmitOMPParallelCall(), EmitOMPParallelDirective(), EmitOMPSimdDirective(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPointerArithmetic(), EmitPointerToDataMemberBinaryExpr(), EmitPredefinedLValue(), emitRTtypeidCall(), EmitSizedDeallocationFunction(), EmitStaticVarDecl(), EmitStoreOfScalar(), EmitStoreThroughGlobalRegLValue(), EmitStoreThroughLValue(), EmitStringLiteralLValue(), emitStructGetterCall(), emitStructSetterCall(), EmitSynthesizedCXXCopyCtorCall(), emitTernaryFPBuiltin(), EmitThreadPrivateVarDeclLValue(), EmitTrapCheck(), EmitTypeCheck(), EmitTypeidFromVTable(), emitUnaryFPBuiltin(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVarDecl(), emitWritebackArg(), 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(), getPolymorphicOffset(), getTypes(), GetVTablePtr(), GetVTTParameter(), InitCatchParam(), InitializeVTablePointer(), InitializeVTablePointers(), InsertHelper(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), needsEHCleanup(), packTBLDVectorList(), PerformReturnAdjustment(), pushTemporaryCleanup(), registerGlobalDtorWithAtExit(), ShouldInstrumentFunction(), shouldUseFusedARCCalls(), shouldUseLifetimeMarkers(), StartFunction(), StartObjCMethod(), StartThunk(), tryEmitAsConstant(), tryEmitFMulAdd(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), and ~CodeGenFunction().

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

Definition at line 157 of file CodeGenFunction.h.

Referenced by computeBlockInfo(), EmitObjCMessageExpr(), clang::CodeGen::EmitOpenMPUpdateLocation(), LoadObjCSelf(), ShouldInstrumentFunction(), StartFunction(), and TypeOfSelfObject().

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

Definition at line 267 of file CodeGenFunction.h.

Referenced by EmitParmDecl(), and StartThunk().

Definition at line 2459 of file CodeGenFunction.h.

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

Definition at line 2460 of file CodeGenFunction.h.

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

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

Definition at line 309 of file CodeGenFunction.h.

Referenced by FinishFunction(), and getEHResumeBlock().

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

Definition at line 317 of file CodeGenFunction.h.

Referenced by getEHSelectorSlot().

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

Definition at line 313 of file CodeGenFunction.h.

Referenced by getExceptionSlot().

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

Definition at line 306 of file CodeGenFunction.h.

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

Definition at line 161 of file CodeGenFunction.h.

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

True if CodeGen currently emits code implementing sanitizer checks.

Definition at line 255 of file CodeGenFunction.h.

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

Definition at line 279 of file CodeGenFunction.h.

Referenced by EmitDeclRefLValue(), and StartFunction().

Definition at line 280 of file CodeGenFunction.h.

Referenced by StartFunction().

Definition at line 287 of file CodeGenFunction.h.

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

Definition at line 303 of file CodeGenFunction.h.

Referenced by getJumpDestForLabel(), and getJumpDestInCurrentScope().

i32s containing the indexes of the cleanup destinations.

Definition at line 301 of file CodeGenFunction.h.

Referenced by destroyOptimisticNormalEntry().

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

Definition at line 284 of file CodeGenFunction.h.

Referenced by EmitAutoVarAlloca(), and EmitReturnStmt().

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

Definition at line 332 of file CodeGenFunction.h.

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

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

Definition at line 169 of file CodeGenFunction.h.

Referenced by FinishFunction(), and StartFunction().

ReturnBlock - Unified return block.

Definition at line 172 of file CodeGenFunction.h.

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

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

Definition at line 274 of file CodeGenFunction.h.

Referenced by EmitAsmStmt(), and GenerateCode().

Definition at line 143 of file CodeGenFunction.h.

Referenced by EmitIndirectGotoStmt(), and getTarget().


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