clang
3.9.0
|
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code. More...
#include <CodeGenFunction.h>
Classes | |
class | AutoVarEmission |
class | CallLifetimeEnd |
class | CGCapturedStmtInfo |
API for captured statement code generation. More... | |
class | CGCapturedStmtRAII |
RAII for correct setting/restoring of CapturedStmtInfo. More... | |
class | ConditionalEvaluation |
An object to manage conditionally-evaluated expressions. More... | |
class | ConstantEmission |
class | CXXDefaultInitExprScope |
The scope of a CXXDefaultInitExpr. More... | |
class | FieldConstructionScope |
A scope within which we are constructing the fields of an object which might use a CXXDefaultInitExpr. More... | |
class | FinallyInfo |
A class controlling the emission of a finally block. More... | |
class | InlinedInheritingConstructorScope |
struct | JumpDest |
A jump destination is an abstract label, branching to which may require a jump out through normal cleanups. More... | |
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 |
A non-RAII class containing all the information about a bound opaque value. More... | |
class | ParamValue |
class | PeepholeProtection |
An object which temporarily prevents a value from being destroyed by aggressive peephole optimizations that assume that all uses of a value have been realized in the IR. More... | |
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 |
An RAII object to record that we're evaluating a statement expression. More... | |
struct | VPtr |
Struct with all informations about dynamic [sub]class needed to set vptr. More... | |
Public Types | |
enum | CFITypeCheckKind { CFITCK_VCall, CFITCK_NVCall, CFITCK_DerivedCast, CFITCK_UnrelatedCast, CFITCK_ICall } |
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 llvm::DenseMap< const Decl *, Address > | DeclMapTy |
typedef void | Destroyer (CodeGenFunction &CGF, Address addr, QualType ty) |
typedef llvm::SmallVector < VPtr, 4 > | VPtrsVector |
typedef llvm::SmallPtrSet < const CXXRecordDecl *, 4 > | VisitedVirtualBasesSetTy |
typedef void | SpecialInitFn (CodeGenFunction &Init, const VarDecl &D, llvm::Value *Address) |
typedef const llvm::function_ref< void(CodeGenFunction &, llvm::Value *, const OMPTaskDataTy &)> | TaskGenTy |
Public Member Functions | |
void | InsertHelper (llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB, llvm::BasicBlock::iterator InsertPt) const |
CGBuilder insert helper. More... | |
llvm::BasicBlock * | EmitLandingPad () |
Emits a landing pad for the current EH stack. More... | |
llvm::BasicBlock * | getInvokeDestImpl () |
template<class T > | |
DominatingValue< T >::saved_type | saveValueInCond (T value) |
bool | isSEHTryScope () const |
Returns true inside SEH __try blocks. More... | |
bool | isCleanupPadScope () const |
Returns true while emitting a cleanuppad. More... | |
template<class T , class... As> | |
void | pushFullExprCleanup (CleanupKind kind, As...A) |
pushFullExprCleanup - Push a cleanup to be run at the end of the current full-expression. More... | |
template<class T , class... As> | |
void | pushCleanupAfterFullExpr (CleanupKind Kind, As...A) |
Queue a cleanup to be pushed after finishing the current full-expression. More... | |
void | initFullExprCleanup () |
Set up the last cleaup that was pushed as a conditional full-expression cleanup. More... | |
void | PushDestructorCleanup (QualType T, Address Addr) |
PushDestructorCleanup - Push a cleanup to call the complete-object destructor of an object of the given type at the given address. More... | |
void | PushDestructorCleanup (const CXXDestructorDecl *Dtor, Address Addr) |
PushDestructorCleanup - Push a cleanup to call the complete-object variant of the given destructor on the object at the given address. More... | |
void | PopCleanupBlock (bool FallThroughIsBranchThrough=false) |
PopCleanupBlock - Will pop the cleanup entry on the stack and process all branch fixups. More... | |
void | DeactivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP) |
DeactivateCleanupBlock - Deactivates the given cleanup block. More... | |
void | ActivateCleanupBlock (EHScopeStack::stable_iterator Cleanup, llvm::Instruction *DominatingIP) |
ActivateCleanupBlock - Activates an initially-inactive cleanup. More... | |
void | PopCleanupBlocks (EHScopeStack::stable_iterator OldCleanupStackSize) |
Takes the old cleanup stack size and emits the cleanup blocks that have been added. More... | |
void | PopCleanupBlocks (EHScopeStack::stable_iterator OldCleanupStackSize, size_t OldLifetimeExtendedStackSize) |
Takes the old cleanup stack size and emits the cleanup blocks that have been added, then adds all lifetime-extended cleanups from the given position to the stack. More... | |
void | ResolveBranchFixups (llvm::BasicBlock *Target) |
JumpDest | getJumpDestInCurrentScope (llvm::BasicBlock *Target) |
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. More... | |
JumpDest | getJumpDestInCurrentScope (StringRef Name=StringRef()) |
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. More... | |
void | EmitBranchThroughCleanup (JumpDest Dest) |
EmitBranchThroughCleanup - Emit a branch from the current insert block through the normal cleanup handling code (if any) and then on to. More... | |
bool | isObviouslyBranchWithoutCleanups (JumpDest Dest) const |
isObviouslyBranchWithoutCleanups - Return true if a branch to the specified destination obviously has no cleanups to run. More... | |
void | popCatchScope () |
popCatchScope - Pops the catch scope at the top of the EHScope stack, emitting any required code (other than the catch handlers themselves). More... | |
llvm::BasicBlock * | getEHResumeBlock (bool isCleanup) |
llvm::BasicBlock * | getEHDispatchBlock (EHScopeStack::stable_iterator scope) |
llvm::BasicBlock * | getMSVCDispatchBlock (EHScopeStack::stable_iterator scope) |
bool | isInConditionalBranch () const |
isInConditionalBranch - Return true if we're currently emitting one branch or the other of a conditional expression. More... | |
void | setBeforeOutermostConditional (llvm::Value *value, Address addr) |
void | incrementProfileCounter (const Stmt *S) |
Increment the profiler's counter for the given statement. More... | |
uint64_t | getProfileCount (const Stmt *S) |
Get the profiler's count for the given statement. More... | |
void | setCurrentProfileCount (uint64_t Count) |
Set the profiler's current count. More... | |
uint64_t | getCurrentProfileCount () |
Get the profiler's current count. More... | |
CodeGenFunction (CodeGenModule &cgm, bool suppressNewContext=false) | |
~CodeGenFunction () | |
CodeGenTypes & | getTypes () const |
ASTContext & | getContext () const |
CGDebugInfo * | getDebugInfo () |
void | disableDebugInfo () |
void | enableDebugInfo () |
bool | shouldUseFusedARCCalls () |
const LangOptions & | getLangOpts () const |
Address | getExceptionSlot () |
Returns a pointer to the function's exception object and selector slot, which is assigned in every landing pad. More... | |
Address | getEHSelectorSlot () |
llvm::Value * | getExceptionFromSlot () |
Returns the contents of the function's exception object and selector slots. More... | |
llvm::Value * | getSelectorFromSlot () |
Address | getNormalCleanupDestSlot () |
llvm::BasicBlock * | getUnreachableBlock () |
llvm::BasicBlock * | getInvokeDest () |
bool | currentFunctionUsesSEHTry () const |
const TargetInfo & | getTarget () const |
llvm::LLVMContext & | getLLVMContext () |
void | pushIrregularPartialArrayCleanup (llvm::Value *arrayBegin, Address arrayEndPointer, QualType elementType, CharUnits elementAlignment, Destroyer *destroyer) |
pushIrregularPartialArrayCleanup - Push an EH cleanup to destroy already-constructed elements of the given array. More... | |
void | pushRegularPartialArrayCleanup (llvm::Value *arrayBegin, llvm::Value *arrayEnd, QualType elementType, CharUnits elementAlignment, Destroyer *destroyer) |
pushRegularPartialArrayCleanup - Push an EH cleanup to destroy already-constructed elements of the given array. More... | |
void | pushDestroy (QualType::DestructionKind dtorKind, Address addr, QualType type) |
pushDestroy - Push the standard destructor for the given type as at least a normal cleanup. More... | |
void | pushEHDestroy (QualType::DestructionKind dtorKind, Address addr, QualType type) |
pushEHDestroy - Push the standard destructor for the given type as an EH-only cleanup. More... | |
void | pushDestroy (CleanupKind kind, Address addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray) |
void | pushLifetimeExtendedDestroy (CleanupKind kind, Address addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray) |
void | pushCallObjectDeleteCleanup (const FunctionDecl *OperatorDelete, llvm::Value *CompletePtr, QualType ElementType) |
void | pushStackRestore (CleanupKind kind, Address SPMem) |
void | emitDestroy (Address addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray) |
emitDestroy - Immediately perform the destruction of the given object. More... | |
llvm::Function * | generateDestroyHelper (Address addr, QualType type, Destroyer *destroyer, bool useEHCleanupForArray, const VarDecl *VD) |
generateDestroyHelper - Generates a helper function which, when invoked, destroys the given object. More... | |
void | emitArrayDestroy (llvm::Value *begin, llvm::Value *end, QualType elementType, CharUnits elementAlign, Destroyer *destroyer, bool checkZeroLength, bool useEHCleanup) |
emitArrayDestroy - Destroys all the elements of the given array, beginning from last to first. More... | |
Destroyer * | getDestroyer (QualType::DestructionKind destructionKind) |
bool | needsEHCleanup (QualType::DestructionKind kind) |
Determines whether an EH cleanup is required to destroy a type with the given destruction kind. More... | |
CleanupKind | getCleanupKind (QualType::DestructionKind kind) |
void | GenerateObjCMethod (const ObjCMethodDecl *OMD) |
Generate an Objective-C method. More... | |
void | StartObjCMethod (const ObjCMethodDecl *MD, const ObjCContainerDecl *CD) |
StartObjCMethod - Begin emission of an ObjCMethod. More... | |
void | GenerateObjCGetter (ObjCImplementationDecl *IMP, const ObjCPropertyImplDecl *PID) |
GenerateObjCGetter - Synthesize an Objective-C property getter function. More... | |
void | generateObjCGetterBody (const ObjCImplementationDecl *classImpl, const ObjCPropertyImplDecl *propImpl, const ObjCMethodDecl *GetterMothodDecl, llvm::Constant *AtomicHelperFn) |
void | GenerateObjCCtorDtorMethod (ObjCImplementationDecl *IMP, ObjCMethodDecl *MD, bool ctor) |
void | GenerateObjCSetter (ObjCImplementationDecl *IMP, const ObjCPropertyImplDecl *PID) |
GenerateObjCSetter - Synthesize an Objective-C property setter function for the given property. More... | |
void | generateObjCSetterBody (const ObjCImplementationDecl *classImpl, const ObjCPropertyImplDecl *propImpl, llvm::Constant *AtomicHelperFn) |
llvm::Value * | EmitBlockLiteral (const BlockExpr *) |
Emit a block literal expression in the current function. More... | |
llvm::Value * | EmitBlockLiteral (const CGBlockInfo &Info) |
llvm::Function * | GenerateBlockFunction (GlobalDecl GD, const CGBlockInfo &Info, const DeclMapTy &ldm, bool IsLambdaConversionToBlock) |
llvm::Constant * | 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'. More... | |
llvm::Constant * | GenerateDestroyHelperFunction (const CGBlockInfo &blockInfo) |
Generate the destroy-helper function for a block closure object: static void block_destroy_helper(block_t *theBlock);. More... | |
llvm::Constant * | GenerateObjCAtomicSetterCopyHelperFunction (const ObjCPropertyImplDecl *PID) |
GenerateObjCAtomicSetterCopyHelperFunction - Given a c++ object type with non-trivial copy assignment function, produce following helper function. More... | |
llvm::Constant * | GenerateObjCAtomicGetterCopyHelperFunction (const ObjCPropertyImplDecl *PID) |
llvm::Value * | EmitBlockCopyAndAutorelease (llvm::Value *Block, QualType Ty) |
void | BuildBlockRelease (llvm::Value *DeclPtr, BlockFieldFlags flags) |
void | emitByrefStructureInit (const AutoVarEmission &emission) |
Initialize the structural components of a __block variable, i.e. More... | |
void | enterByrefCleanup (const AutoVarEmission &emission) |
Enter a cleanup to destroy a __block variable. More... | |
void | setBlockContextParameter (const ImplicitParamDecl *D, unsigned argNum, llvm::Value *ptr) |
Address | LoadBlockStruct () |
Address | GetAddrOfBlockDecl (const VarDecl *var, bool ByRef) |
Address | emitBlockByrefAddress (Address baseAddr, const VarDecl *V, bool followForward=true) |
BuildBlockByrefAddress - Computes the location of the data in a variable which is declared as __block. More... | |
Address | emitBlockByrefAddress (Address baseAddr, const BlockByrefInfo &info, bool followForward, const llvm::Twine &name) |
const BlockByrefInfo & | getBlockByrefInfo (const VarDecl *var) |
BuildByrefInfo - This routine changes a __block variable declared as T x into: More... | |
QualType | BuildFunctionArgList (GlobalDecl GD, FunctionArgList &Args) |
void | GenerateCode (GlobalDecl GD, llvm::Function *Fn, const CGFunctionInfo &FnInfo) |
void | StartFunction (GlobalDecl GD, QualType RetTy, llvm::Function *Fn, const CGFunctionInfo &FnInfo, const FunctionArgList &Args, SourceLocation Loc=SourceLocation(), SourceLocation StartLoc=SourceLocation()) |
Emit code for the start of a function. More... | |
void | EmitConstructorBody (FunctionArgList &Args) |
EmitConstructorBody - Emits the body of the current constructor. More... | |
void | EmitDestructorBody (FunctionArgList &Args) |
EmitDestructorBody - Emits the body of the current destructor. More... | |
void | emitImplicitAssignmentOperatorBody (FunctionArgList &Args) |
void | EmitFunctionBody (FunctionArgList &Args, const Stmt *Body) |
void | EmitBlockWithFallThrough (llvm::BasicBlock *BB, const Stmt *S) |
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. More... | |
void | EmitForwardingCallToLambda (const CXXMethodDecl *LambdaCallOperator, CallArgList &CallArgs) |
void | EmitLambdaToBlockPointerBody (FunctionArgList &Args) |
void | EmitLambdaBlockInvokeBody () |
void | EmitLambdaDelegatingInvokeBody (const CXXMethodDecl *MD) |
void | EmitLambdaStaticInvokeFunction (const CXXMethodDecl *MD) |
void | EmitAsanPrologueOrEpilogue (bool Prologue) |
llvm::DebugLoc | EmitReturnBlock () |
Emit the unified return block, trying to avoid its emission when possible. More... | |
void | FinishFunction (SourceLocation EndLoc=SourceLocation()) |
FinishFunction - Complete IR generation of the current function. More... | |
void | StartThunk (llvm::Function *Fn, GlobalDecl GD, const CGFunctionInfo &FnInfo) |
void | EmitCallAndReturnForThunk (llvm::Value *Callee, const ThunkInfo *Thunk) |
void | FinishThunk () |
void | EmitMustTailThunk (const CXXMethodDecl *MD, llvm::Value *AdjustedThisPtr, llvm::Value *Callee) |
Emit a musttail call for a thunk with a potentially adjusted this pointer. More... | |
void | generateThunk (llvm::Function *Fn, const CGFunctionInfo &FnInfo, GlobalDecl GD, const ThunkInfo &Thunk) |
Generate a thunk for the given method. More... | |
llvm::Function * | GenerateVarArgsThunk (llvm::Function *Fn, const CGFunctionInfo &FnInfo, GlobalDecl GD, const ThunkInfo &Thunk) |
void | EmitCtorPrologue (const CXXConstructorDecl *CD, CXXCtorType Type, FunctionArgList &Args) |
EmitCtorPrologue - This routine generates necessary code to initialize base classes and non-static data members belonging to this constructor. More... | |
void | EmitInitializerForField (FieldDecl *Field, LValue LHS, Expr *Init, ArrayRef< VarDecl * > ArrayIndexes) |
void | InitializeVTablePointer (const VPtr &vptr) |
Initialize the vtable pointer of the given subobject. More... | |
VPtrsVector | getVTablePointers (const CXXRecordDecl *VTableClass) |
void | getVTablePointers (BaseSubobject Base, const CXXRecordDecl *NearestVBase, CharUnits OffsetFromNearestVBase, bool BaseIsNonVirtualPrimaryBase, const CXXRecordDecl *VTableClass, VisitedVirtualBasesSetTy &VBases, VPtrsVector &vptrs) |
void | InitializeVTablePointers (const CXXRecordDecl *ClassDecl) |
llvm::Value * | GetVTablePtr (Address This, llvm::Type *VTableTy, const CXXRecordDecl *VTableClass) |
GetVTablePtr - Return the Value of the vtable pointer member pointed to by This. More... | |
void | EmitVTablePtrCheckForCast (QualType T, llvm::Value *Derived, bool MayBeNull, CFITypeCheckKind TCK, SourceLocation Loc) |
Derived is the presumed address of an object of type T after a cast. More... | |
void | EmitVTablePtrCheckForCall (const CXXRecordDecl *RD, llvm::Value *VTable, CFITypeCheckKind TCK, SourceLocation Loc) |
EmitVTablePtrCheckForCall - Virtual method MD is being called via VTable. More... | |
void | EmitVTablePtrCheck (const CXXRecordDecl *RD, llvm::Value *VTable, CFITypeCheckKind TCK, SourceLocation Loc) |
EmitVTablePtrCheck - Emit a check that VTable is a valid virtual table for RD using llvm.type.test. More... | |
void | EmitTypeMetadataCodeForVCall (const CXXRecordDecl *RD, llvm::Value *VTable, SourceLocation Loc) |
If whole-program virtual table optimization is enabled, emit an assumption that VTable is a member of RD's type identifier. More... | |
bool | ShouldEmitVTableTypeCheckedLoad (const CXXRecordDecl *RD) |
Returns whether we should perform a type checked load when loading a virtual function for virtual calls to members of RD. More... | |
llvm::Value * | EmitVTableTypeCheckedLoad (const CXXRecordDecl *RD, llvm::Value *VTable, uint64_t VTableByteOffset) |
Emit a type checked load from the given vtable. More... | |
bool | CanDevirtualizeMemberFunctionCall (const Expr *Base, const CXXMethodDecl *MD) |
CanDevirtualizeMemberFunctionCalls - Checks whether virtual calls on given expr can be devirtualized. More... | |
void | EnterDtorCleanups (const CXXDestructorDecl *Dtor, CXXDtorType Type) |
EnterDtorCleanups - Enter the cleanups necessary to complete the given phase of destruction for a destructor. More... | |
bool | ShouldInstrumentFunction () |
ShouldInstrumentFunction - Return true if the current function should be instrumented with __cyg_profile_func_* calls. More... | |
bool | ShouldXRayInstrumentFunction () const |
ShouldXRayInstrument - Return true if the current function should be instrumented with XRay nop sleds. More... | |
void | EmitFunctionInstrumentation (const char *Fn) |
EmitFunctionInstrumentation - Emit LLVM code to call the specified instrumentation function with the current function and the call site, if function instrumentation is enabled. More... | |
void | EmitMCountInstrumentation () |
EmitMCountInstrumentation - Emit call to .mcount. More... | |
void | 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. More... | |
void | EmitFunctionEpilog (const CGFunctionInfo &FI, bool EmitRetDbgLoc, SourceLocation EndLoc) |
EmitFunctionEpilog - Emit the target specific LLVM code to return the given temporary. More... | |
void | EmitStartEHSpec (const Decl *D) |
EmitStartEHSpec - Emit the start of the exception spec. More... | |
void | EmitEndEHSpec (const Decl *D) |
EmitEndEHSpec - Emit the end of the exception spec. More... | |
llvm::BasicBlock * | getTerminateLandingPad () |
getTerminateLandingPad - Return a landing pad that just calls terminate. More... | |
llvm::BasicBlock * | getTerminateHandler () |
getTerminateHandler - Return a handler (not a landing pad, just a catch handler) that just calls terminate. More... | |
llvm::Type * | ConvertTypeForMem (QualType T) |
llvm::Type * | ConvertType (QualType T) |
llvm::Type * | ConvertType (const TypeDecl *T) |
llvm::Value * | LoadObjCSelf () |
LoadObjCSelf - Load the value of self. More... | |
QualType | TypeOfSelfObject () |
TypeOfSelfObject - Return type of object that this self represents. More... | |
llvm::BasicBlock * | createBasicBlock (const Twine &name="", llvm::Function *parent=nullptr, llvm::BasicBlock *before=nullptr) |
createBasicBlock - Create an LLVM basic block. More... | |
JumpDest | getJumpDestForLabel (const LabelDecl *S) |
getBasicBlockForLabel - Return the LLVM basicblock that the specified label maps to. More... | |
void | SimplifyForwardingBlocks (llvm::BasicBlock *BB) |
SimplifyForwardingBlocks - If the given basic block is only a branch to another basic block, simplify it. More... | |
void | EmitBlock (llvm::BasicBlock *BB, bool IsFinished=false) |
EmitBlock - Emit the given block. More... | |
void | EmitBlockAfterUses (llvm::BasicBlock *BB) |
EmitBlockAfterUses - Emit the given block somewhere hopefully near its uses, and leave the insertion point in it. More... | |
void | 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. More... | |
bool | HaveInsertPoint () const |
HaveInsertPoint - True if an insertion point is defined. More... | |
void | EnsureInsertPoint () |
EnsureInsertPoint - Ensure that an insertion point is defined so that emitted IR has a place to go. More... | |
void | ErrorUnsupported (const Stmt *S, const char *Type) |
ErrorUnsupported - Print out an error that codegen doesn't support the specified stmt yet. More... | |
LValue | MakeAddrLValue (Address Addr, QualType T, AlignmentSource AlignSource=AlignmentSource::Type) |
LValue | MakeAddrLValue (llvm::Value *V, QualType T, CharUnits Alignment, AlignmentSource AlignSource=AlignmentSource::Type) |
LValue | MakeNaturalAlignPointeeAddrLValue (llvm::Value *V, QualType T) |
Given a value of type T* that may not be to a complete object, construct an l-value with the natural pointee alignment of T. More... | |
LValue | MakeNaturalAlignAddrLValue (llvm::Value *V, QualType T) |
CharUnits | getNaturalTypeAlignment (QualType T, AlignmentSource *Source=nullptr, bool forPointeeType=false) |
CharUnits | getNaturalPointeeTypeAlignment (QualType T, AlignmentSource *Source=nullptr) |
Address | EmitLoadOfReference (Address Ref, const ReferenceType *RefTy, AlignmentSource *Source=nullptr) |
LValue | EmitLoadOfReferenceLValue (Address Ref, const ReferenceType *RefTy) |
Address | EmitLoadOfPointer (Address Ptr, const PointerType *PtrTy, AlignmentSource *Source=nullptr) |
LValue | EmitLoadOfPointerLValue (Address Ptr, const PointerType *PtrTy) |
llvm::AllocaInst * | CreateTempAlloca (llvm::Type *Ty, const Twine &Name="tmp") |
CreateTempAlloca - This creates a alloca and inserts it into the entry block. More... | |
Address | CreateTempAlloca (llvm::Type *Ty, CharUnits align, const Twine &Name="tmp") |
CreateTempAlloca - This creates a alloca and inserts it into the entry block. More... | |
Address | CreateDefaultAlignTempAlloca (llvm::Type *Ty, const Twine &Name="tmp") |
CreateDefaultAlignedTempAlloca - This creates an alloca with the default ABI alignment of the given LLVM type. More... | |
void | InitTempAlloca (Address Alloca, llvm::Value *Value) |
InitTempAlloca - Provide an initial value for the given alloca which will be observable at all locations in the function. More... | |
Address | CreateIRTemp (QualType T, const Twine &Name="tmp") |
CreateIRTemp - Create a temporary IR object of the given type, with appropriate alignment. More... | |
Address | CreateMemTemp (QualType T, const Twine &Name="tmp") |
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignment. More... | |
Address | CreateMemTemp (QualType T, CharUnits Align, const Twine &Name="tmp") |
AggValueSlot | CreateAggTemp (QualType T, const Twine &Name="tmp") |
CreateAggTemp - Create a temporary memory object for the given aggregate type. More... | |
llvm::Value * | EmitCastToVoidPtr (llvm::Value *value) |
Emit a cast to void* in the appropriate address space. More... | |
llvm::Value * | EvaluateExprAsBool (const Expr *E) |
EvaluateExprAsBool - Perform the usual unary conversions on the specified expression and compare the result against zero, returning an Int1Ty value. More... | |
void | EmitIgnoredExpr (const Expr *E) |
EmitIgnoredExpr - Emit an expression in a context which ignores the result. More... | |
RValue | EmitAnyExpr (const Expr *E, AggValueSlot aggSlot=AggValueSlot::ignored(), bool ignoreResult=false) |
EmitAnyExpr - Emit code to compute the specified expression which can have any type. More... | |
Address | EmitVAListRef (const Expr *E) |
Address | EmitMSVAListRef (const Expr *E) |
Emit a "reference" to a __builtin_ms_va_list; this is always the value of the expression, because a __builtin_ms_va_list is a pointer to a char. More... | |
RValue | EmitAnyExprToTemp (const Expr *E) |
EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will always be accessible even if no aggregate location is provided. More... | |
void | EmitAnyExprToMem (const Expr *E, Address Location, Qualifiers Quals, bool IsInitializer) |
EmitAnyExprToMem - Emits the code necessary to evaluate an arbitrary expression into the given memory location. More... | |
void | EmitAnyExprToExn (const Expr *E, Address Addr) |
void | 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. More... | |
bool | hasVolatileMember (QualType T) |
hasVolatileMember - returns true if aggregate type has a volatile member. More... | |
void | EmitAggregateAssign (Address DestPtr, Address SrcPtr, QualType EltTy) |
EmitAggregateCopy - Emit an aggregate assignment. More... | |
void | EmitAggregateCopyCtor (Address DestPtr, Address SrcPtr, QualType DestTy, QualType SrcTy) |
void | EmitAggregateCopy (Address DestPtr, Address SrcPtr, QualType EltTy, bool isVolatile=false, bool isAssignment=false) |
EmitAggregateCopy - Emit an aggregate copy. More... | |
Address | GetAddrOfLocalVar (const VarDecl *VD) |
GetAddrOfLocalVar - Return the address of a local variable. More... | |
const LValue & | getOpaqueLValueMapping (const OpaqueValueExpr *e) |
getOpaqueLValueMapping - Given an opaque value expression (which must be mapped to an l-value), return its mapping. More... | |
const RValue & | getOpaqueRValueMapping (const OpaqueValueExpr *e) |
getOpaqueRValueMapping - Given an opaque value expression (which must be mapped to an r-value), return its mapping. More... | |
llvm::BlockAddress * | GetAddrOfLabel (const LabelDecl *L) |
llvm::BasicBlock * | GetIndirectGotoBlock () |
void | EmitNullInitialization (Address DestPtr, QualType Ty) |
EmitNullInitialization - Generate code to set a value of the given type to null, If the type contains data member pointers, they will be initialized to -1 in accordance with the Itanium C++ ABI. More... | |
llvm::Value * | EmitVAStartEnd (llvm::Value *ArgValue, bool IsStart) |
Emits a call to an LLVM variable-argument intrinsic, either llvm.va_start or llvm.va_end . More... | |
Address | EmitVAArg (VAArgExpr *VE, Address &VAListAddr) |
Generate code to get an argument from the passed in pointer and update it accordingly. More... | |
llvm::Value * | emitArrayLength (const ArrayType *arrayType, QualType &baseType, Address &addr) |
emitArrayLength - Compute the length of an array, even if it's a VLA, and drill down to the base element type. More... | |
void | EmitVariablyModifiedType (QualType Ty) |
EmitVLASize - Capture all the sizes for the VLA expressions in the given variably-modified type and store them in the VLASizeMap. More... | |
std::pair< llvm::Value *, QualType > | getVLASize (const VariableArrayType *vla) |
getVLASize - Returns an LLVM value that corresponds to the size, in non-variably-sized elements, of a variable length array type, plus that largest non-variably-sized element type. More... | |
std::pair< llvm::Value *, QualType > | getVLASize (QualType vla) |
llvm::Value * | LoadCXXThis () |
LoadCXXThis - Load the value of 'this'. More... | |
Address | LoadCXXThisAddress () |
llvm::Value * | LoadCXXVTT () |
LoadCXXVTT - Load the VTT parameter to base constructors/destructors have virtual bases. More... | |
Address | GetAddressOfDirectBaseInCompleteClass (Address Value, const CXXRecordDecl *Derived, const CXXRecordDecl *Base, bool BaseIsVirtual) |
GetAddressOfBaseOfCompleteClass - Convert the given pointer to a complete class to the given direct base. More... | |
Address | GetAddressOfBaseClass (Address Value, const CXXRecordDecl *Derived, CastExpr::path_const_iterator PathBegin, CastExpr::path_const_iterator PathEnd, bool NullCheckValue, SourceLocation Loc) |
GetAddressOfBaseClass - This function will add the necessary delta to the load of 'this' and returns address of the base class. More... | |
Address | GetAddressOfDerivedClass (Address Value, const CXXRecordDecl *Derived, CastExpr::path_const_iterator PathBegin, CastExpr::path_const_iterator PathEnd, bool NullCheckValue) |
llvm::Value * | GetVTTParameter (GlobalDecl GD, bool ForVirtualBase, bool Delegating) |
GetVTTParameter - Return the VTT parameter that should be passed to a base constructor/destructor with virtual bases. More... | |
void | EmitDelegateCXXConstructorCall (const CXXConstructorDecl *Ctor, CXXCtorType CtorType, const FunctionArgList &Args, SourceLocation Loc) |
void | EmitDelegatingCXXConstructorCall (const CXXConstructorDecl *Ctor, const FunctionArgList &Args) |
void | EmitInlinedInheritingCXXConstructorCall (const CXXConstructorDecl *Ctor, CXXCtorType CtorType, bool ForVirtualBase, bool Delegating, CallArgList &Args) |
Emit a call to an inheriting constructor (that is, one that invokes a constructor inherited from a base class) by inlining its definition. More... | |
void | EmitInheritedCXXConstructorCall (const CXXConstructorDecl *D, bool ForVirtualBase, Address This, bool InheritedFromVBase, const CXXInheritedCtorInitExpr *E) |
Emit a call to a constructor inherited from a base class, passing the current constructor's arguments along unmodified (without even making a copy). More... | |
void | EmitCXXConstructorCall (const CXXConstructorDecl *D, CXXCtorType Type, bool ForVirtualBase, bool Delegating, Address This, const CXXConstructExpr *E) |
void | EmitCXXConstructorCall (const CXXConstructorDecl *D, CXXCtorType Type, bool ForVirtualBase, bool Delegating, Address This, CallArgList &Args) |
void | EmitVTableAssumptionLoads (const CXXRecordDecl *ClassDecl, Address This) |
Emit assumption load for all bases. More... | |
void | EmitVTableAssumptionLoad (const VPtr &vptr, Address This) |
Emit assumption that vptr load == global vtable. More... | |
void | EmitSynthesizedCXXCopyCtorCall (const CXXConstructorDecl *D, Address This, Address Src, const CXXConstructExpr *E) |
void | EmitCXXAggrConstructorCall (const CXXConstructorDecl *D, const ArrayType *ArrayTy, Address ArrayPtr, const CXXConstructExpr *E, bool ZeroInitialization=false) |
EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array. More... | |
void | EmitCXXAggrConstructorCall (const CXXConstructorDecl *D, llvm::Value *NumElements, Address ArrayPtr, const CXXConstructExpr *E, bool ZeroInitialization=false) |
EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array. More... | |
void | EmitCXXDestructorCall (const CXXDestructorDecl *D, CXXDtorType Type, bool ForVirtualBase, bool Delegating, Address This) |
void | EmitNewArrayInitializer (const CXXNewExpr *E, QualType elementType, llvm::Type *ElementTy, Address NewPtr, llvm::Value *NumElements, llvm::Value *AllocSizeWithoutCookie) |
void | EmitCXXTemporary (const CXXTemporary *Temporary, QualType TempType, Address Ptr) |
Emits all the code to cause the given temporary to be cleaned up. More... | |
llvm::Value * | EmitLifetimeStart (uint64_t Size, llvm::Value *Addr) |
Emit a lifetime.begin marker if some criteria are satisfied. More... | |
void | EmitLifetimeEnd (llvm::Value *Size, llvm::Value *Addr) |
llvm::Value * | EmitCXXNewExpr (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::Value * | EmitCXXTypeidExpr (const CXXTypeidExpr *E) |
llvm::Value * | EmitDynamicCast (Address V, const CXXDynamicCastExpr *DCE) |
Address | EmitCXXUuidofExpr (const CXXUuidofExpr *E) |
bool | sanitizePerformTypeCheck () const |
Whether any type-checking sanitizers are enabled. More... | |
void | EmitTypeCheck (TypeCheckKind TCK, SourceLocation Loc, llvm::Value *V, QualType Type, CharUnits Alignment=CharUnits::Zero(), bool SkipNullCheck=false) |
Emit a check that V is the address of storage of the appropriate size and alignment for an object of type Type . More... | |
void | EmitBoundsCheck (const Expr *E, const Expr *Base, llvm::Value *Index, QualType IndexType, bool Accessed) |
Emit a check that Base points into an array object, which we can access at index Index . More... | |
llvm::Value * | EmitScalarPrePostIncDec (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) |
EmitDecl - Emit a declaration. More... | |
void | EmitVarDecl (const VarDecl &D) |
EmitVarDecl - Emit a local variable declaration. More... | |
void | EmitScalarInit (const Expr *init, const ValueDecl *D, LValue lvalue, bool capturedByInit) |
void | EmitScalarInit (llvm::Value *init, LValue lvalue) |
EmitScalarInit - Initialize the given lvalue with the given object. More... | |
bool | isTrivialInitializer (const Expr *Init) |
Determine whether the given initializer is trivial in the sense that it requires no code to be generated. More... | |
void | EmitAutoVarDecl (const VarDecl &D) |
EmitAutoVarDecl - Emit an auto variable declaration. More... | |
AutoVarEmission | EmitAutoVarAlloca (const VarDecl &var) |
EmitAutoVarAlloca - Emit the alloca and debug information for a local variable. More... | |
void | EmitAutoVarInit (const AutoVarEmission &emission) |
void | EmitAutoVarCleanups (const AutoVarEmission &emission) |
void | emitAutoVarTypeCleanup (const AutoVarEmission &emission, QualType::DestructionKind dtorKind) |
Enter a destroy cleanup for the given local variable. More... | |
void | EmitStaticVarDecl (const VarDecl &D, llvm::GlobalValue::LinkageTypes Linkage) |
void | EmitParmDecl (const VarDecl &D, ParamValue Arg, unsigned ArgNo) |
EmitParmDecl - Emit a ParmVarDecl or an ImplicitParamDecl. More... | |
PeepholeProtection | protectFromPeepholes (RValue rvalue) |
protectFromPeepholes - Protect a value that we're intending to store to the side, but which will probably be used later, from aggressive peepholing optimizations that might delete it. More... | |
void | unprotectFromPeepholes (PeepholeProtection protection) |
void | EmitStopPoint (const Stmt *S) |
EmitStopPoint - Emit a debug stoppoint if we are emitting debug info. More... | |
void | EmitStmt (const Stmt *S) |
EmitStmt - Emit the code for the statement. More... | |
bool | EmitSimpleStmt (const Stmt *S) |
EmitSimpleStmt - Try to emit a "simple" statement which does not necessarily require an insertion point or debug information; typically because the statement amounts to a jump or a container of other statements. More... | |
Address | EmitCompoundStmt (const CompoundStmt &S, bool GetLast=false, AggValueSlot AVS=AggValueSlot::ignored()) |
EmitCompoundStmt - Emit a compound statement {..} node. More... | |
Address | EmitCompoundStmtWithoutScope (const CompoundStmt &S, bool GetLast=false, AggValueSlot AVS=AggValueSlot::ignored()) |
void | EmitLabel (const LabelDecl *D) |
EmitLabel - Emit the block for the given label. More... | |
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 | 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) |
EmitReturnStmt - Note that due to GCC extensions, this can have an operand if the function returns void, or may be missing one if the function returns non-void. More... | |
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) |
EmitCaseStmtRange - If case statement range is not too big then add multiple cases to switch instruction, one for each value within the range. More... | |
void | EmitAsmStmt (const AsmStmt &S) |
void | EmitObjCForCollectionStmt (const ObjCForCollectionStmt &S) |
void | EmitObjCAtTryStmt (const ObjCAtTryStmt &S) |
void | EmitObjCAtThrowStmt (const ObjCAtThrowStmt &S) |
void | EmitObjCAtSynchronizedStmt (const ObjCAtSynchronizedStmt &S) |
void | EmitObjCAutoreleasePoolStmt (const ObjCAutoreleasePoolStmt &S) |
void | EnterCXXTryStmt (const CXXTryStmt &S, bool IsFnTryBlock=false) |
void | ExitCXXTryStmt (const CXXTryStmt &S, bool IsFnTryBlock=false) |
void | EmitCXXTryStmt (const CXXTryStmt &S) |
void | EmitSEHTryStmt (const SEHTryStmt &S) |
void | EmitSEHLeaveStmt (const SEHLeaveStmt &S) |
void | EnterSEHTryStmt (const SEHTryStmt &S) |
void | ExitSEHTryStmt (const SEHTryStmt &S) |
void | startOutlinedSEHHelper (CodeGenFunction &ParentCGF, bool IsFilter, const Stmt *OutlinedStmt) |
Arrange a function prototype that can be called by Windows exception handling personalities. More... | |
llvm::Function * | GenerateSEHFilterFunction (CodeGenFunction &ParentCGF, const SEHExceptStmt &Except) |
Create a stub filter function that will ultimately hold the code of the filter expression. More... | |
llvm::Function * | GenerateSEHFinallyFunction (CodeGenFunction &ParentCGF, const SEHFinallyStmt &Finally) |
void | EmitSEHExceptionCodeSave (CodeGenFunction &ParentCGF, llvm::Value *ParentFP, llvm::Value *EntryEBP) |
llvm::Value * | EmitSEHExceptionCode () |
llvm::Value * | EmitSEHExceptionInfo () |
llvm::Value * | EmitSEHAbnormalTermination () |
void | EmitCapturedLocals (CodeGenFunction &ParentCGF, const Stmt *OutlinedStmt, bool IsFilter) |
Scan the outlined statement for captures from the parent function. More... | |
Address | recoverAddrOfEscapedLocal (CodeGenFunction &ParentCGF, Address ParentVar, llvm::Value *ParentFP) |
Recovers the address of a local in a parent function. More... | |
void | EmitCXXForRangeStmt (const CXXForRangeStmt &S, ArrayRef< const Attr * > Attrs=None) |
llvm::Value * | getTypeSize (QualType Ty) |
Returns calculated size of the specified type. More... | |
LValue | InitCapturedStruct (const CapturedStmt &S) |
llvm::Function * | 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. More... | |
llvm::Function * | GenerateCapturedStmtFunction (const CapturedStmt &S) |
Creates the outlined function for a CapturedStmt. More... | |
Address | GenerateCapturedStmtArgument (const CapturedStmt &S) |
llvm::Function * | GenerateOpenMPCapturedStmtFunction (const CapturedStmt &S) |
void | GenerateOpenMPCapturedVars (const CapturedStmt &S, SmallVectorImpl< llvm::Value * > &CapturedVars) |
void | emitOMPSimpleStore (LValue LVal, RValue RVal, QualType RValTy, SourceLocation Loc) |
void | EmitOMPAggregateAssign (Address DestAddr, Address SrcAddr, QualType OriginalType, const llvm::function_ref< void(Address, Address)> &CopyGen) |
Perform element by element copying of arrays with type OriginalType from SrcAddr to DestAddr using copying procedure generated by CopyGen. More... | |
void | EmitOMPCopy (QualType OriginalType, Address DestAddr, Address SrcAddr, const VarDecl *DestVD, const VarDecl *SrcVD, const Expr *Copy) |
Emit proper copying of data from one variable to another. More... | |
std::pair< bool, RValue > | EmitOMPAtomicSimpleUpdateExpr (LValue X, RValue E, BinaryOperatorKind BO, bool IsXLHSInRHSPart, llvm::AtomicOrdering AO, SourceLocation Loc, const llvm::function_ref< RValue(RValue)> &CommonGen) |
Emit atomic update code for constructs: X = X BO E or X = E BO E. More... | |
bool | EmitOMPFirstprivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope) |
void | EmitOMPPrivateClause (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope) |
bool | EmitOMPCopyinClause (const OMPExecutableDirective &D) |
Emit code for copyin clause in D directive. More... | |
bool | EmitOMPLastprivateClauseInit (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope) |
Emit initial code for lastprivate variables. More... | |
void | EmitOMPLastprivateClauseFinal (const OMPExecutableDirective &D, bool NoFinals, llvm::Value *IsLastIterCond=nullptr) |
Emit final copying of lastprivate values to original variables at the end of the worksharing or simd directive. More... | |
void | EmitOMPLinearClause (const OMPLoopDirective &D, CodeGenFunction::OMPPrivateScope &PrivateScope) |
Emit initial code for linear clauses. More... | |
void | EmitOMPLinearClauseFinal (const OMPLoopDirective &D, const llvm::function_ref< llvm::Value *(CodeGenFunction &)> &CondGen) |
Emit final code for linear clauses. More... | |
void | EmitOMPReductionClauseInit (const OMPExecutableDirective &D, OMPPrivateScope &PrivateScope) |
Emit initial code for reduction variables. More... | |
void | EmitOMPReductionClauseFinal (const OMPExecutableDirective &D) |
Emit final update of reduction values to original variables at the end of the directive. More... | |
void | EmitOMPLinearClauseInit (const OMPLoopDirective &D) |
Emit initial code for linear variables. More... | |
void | EmitOMPTaskBasedDirective (const OMPExecutableDirective &S, const RegionCodeGenTy &BodyGen, const TaskGenTy &TaskGen, OMPTaskDataTy &Data) |
void | EmitOMPParallelDirective (const OMPParallelDirective &S) |
void | EmitOMPSimdDirective (const OMPSimdDirective &S) |
void | EmitOMPForDirective (const OMPForDirective &S) |
void | EmitOMPForSimdDirective (const OMPForSimdDirective &S) |
void | EmitOMPSectionsDirective (const OMPSectionsDirective &S) |
void | EmitOMPSectionDirective (const OMPSectionDirective &S) |
void | EmitOMPSingleDirective (const OMPSingleDirective &S) |
void | EmitOMPMasterDirective (const OMPMasterDirective &S) |
void | EmitOMPCriticalDirective (const OMPCriticalDirective &S) |
void | EmitOMPParallelForDirective (const OMPParallelForDirective &S) |
void | EmitOMPParallelForSimdDirective (const OMPParallelForSimdDirective &S) |
void | EmitOMPParallelSectionsDirective (const OMPParallelSectionsDirective &S) |
void | EmitOMPTaskDirective (const OMPTaskDirective &S) |
void | EmitOMPTaskyieldDirective (const OMPTaskyieldDirective &S) |
void | EmitOMPBarrierDirective (const OMPBarrierDirective &S) |
void | EmitOMPTaskwaitDirective (const OMPTaskwaitDirective &S) |
void | EmitOMPTaskgroupDirective (const OMPTaskgroupDirective &S) |
void | EmitOMPFlushDirective (const OMPFlushDirective &S) |
void | EmitOMPOrderedDirective (const OMPOrderedDirective &S) |
void | EmitOMPAtomicDirective (const OMPAtomicDirective &S) |
void | EmitOMPTargetDirective (const OMPTargetDirective &S) |
void | EmitOMPTargetDataDirective (const OMPTargetDataDirective &S) |
void | EmitOMPTargetEnterDataDirective (const OMPTargetEnterDataDirective &S) |
void | EmitOMPTargetExitDataDirective (const OMPTargetExitDataDirective &S) |
void | EmitOMPTargetUpdateDirective (const OMPTargetUpdateDirective &S) |
void | EmitOMPTargetParallelDirective (const OMPTargetParallelDirective &S) |
void | EmitOMPTargetParallelForDirective (const OMPTargetParallelForDirective &S) |
void | EmitOMPTeamsDirective (const OMPTeamsDirective &S) |
void | EmitOMPCancellationPointDirective (const OMPCancellationPointDirective &S) |
void | EmitOMPCancelDirective (const OMPCancelDirective &S) |
void | EmitOMPTaskLoopBasedDirective (const OMPLoopDirective &S) |
void | EmitOMPTaskLoopDirective (const OMPTaskLoopDirective &S) |
void | EmitOMPTaskLoopSimdDirective (const OMPTaskLoopSimdDirective &S) |
void | EmitOMPDistributeDirective (const OMPDistributeDirective &S) |
void | EmitOMPDistributeLoop (const OMPDistributeDirective &S) |
void | EmitOMPDistributeParallelForDirective (const OMPDistributeParallelForDirective &S) |
void | EmitOMPDistributeParallelForSimdDirective (const OMPDistributeParallelForSimdDirective &S) |
void | EmitOMPDistributeSimdDirective (const OMPDistributeSimdDirective &S) |
void | EmitOMPTargetParallelForSimdDirective (const OMPTargetParallelForSimdDirective &S) |
void | EmitOMPInnerLoop (const Stmt &S, bool RequiresCleanup, const Expr *LoopCond, const Expr *IncExpr, const llvm::function_ref< void(CodeGenFunction &)> &BodyGen, const llvm::function_ref< void(CodeGenFunction &)> &PostIncGen) |
Emit inner loop of the worksharing/simd construct. More... | |
JumpDest | getOMPCancelDestination (OpenMPDirectiveKind Kind) |
void | EmitOMPPrivateLoopCounters (const OMPLoopDirective &S, OMPPrivateScope &LoopScope) |
Emit initial code for loop counters of loop-based directives. More... | |
RValue | GetUndefRValue (QualType Ty) |
GetUndefRValue - Get an appropriate 'undef' rvalue for the given type. More... | |
RValue | 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). More... | |
LValue | 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). More... | |
LValue | EmitLValue (const Expr *E) |
EmitLValue - Emit code to compute a designator that specifies the location of the expression. More... | |
LValue | EmitCheckedLValue (const Expr *E, TypeCheckKind TCK) |
Same as EmitLValue but additionally we generate checking code to guard against undefined behavior. More... | |
RValue | convertTempToRValue (Address addr, QualType type, SourceLocation Loc) |
Given the address of a temporary variable, produce an r-value of its type. More... | |
void | EmitAtomicInit (Expr *E, LValue lvalue) |
bool | LValueIsSuitableForInlineAtomic (LValue Src) |
An LValue is a candidate for having its loads and stores be made atomic if we are operating under /volatile:ms and the LValue itself is volatile and performing such an operation can be performed without a libcall. More... | |
RValue | EmitAtomicLoad (LValue LV, SourceLocation SL, AggValueSlot Slot=AggValueSlot::ignored()) |
RValue | EmitAtomicLoad (LValue lvalue, SourceLocation loc, llvm::AtomicOrdering AO, bool IsVolatile=false, AggValueSlot slot=AggValueSlot::ignored()) |
Emit a load from an l-value of atomic type. More... | |
void | EmitAtomicStore (RValue rvalue, LValue lvalue, bool isInit) |
void | EmitAtomicStore (RValue rvalue, LValue lvalue, llvm::AtomicOrdering AO, bool IsVolatile, bool isInit) |
Emit a store to an l-value of atomic type. More... | |
std::pair< RValue, llvm::Value * > | EmitAtomicCompareExchange (LValue Obj, RValue Expected, RValue Desired, SourceLocation Loc, llvm::AtomicOrdering Success=llvm::AtomicOrdering::SequentiallyConsistent, llvm::AtomicOrdering Failure=llvm::AtomicOrdering::SequentiallyConsistent, bool IsWeak=false, AggValueSlot Slot=AggValueSlot::ignored()) |
Emit a compare-and-exchange op for atomic type. More... | |
void | EmitAtomicUpdate (LValue LVal, llvm::AtomicOrdering AO, const llvm::function_ref< RValue(RValue)> &UpdateOp, bool IsVolatile) |
llvm::Value * | EmitToMemory (llvm::Value *Value, QualType Ty) |
EmitToMemory - Change a scalar value from its value representation to its in-memory representation. More... | |
llvm::Value * | EmitFromMemory (llvm::Value *Value, QualType Ty) |
EmitFromMemory - Change a scalar value from its memory representation to its value representation. More... | |
llvm::Value * | EmitLoadOfScalar (Address Addr, bool Volatile, QualType Ty, SourceLocation Loc, AlignmentSource AlignSource=AlignmentSource::Type, llvm::MDNode *TBAAInfo=nullptr, QualType TBAABaseTy=QualType(), uint64_t TBAAOffset=0, bool isNontemporal=false) |
EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation. More... | |
llvm::Value * | EmitLoadOfScalar (LValue lvalue, SourceLocation Loc) |
EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation. More... | |
void | EmitStoreOfScalar (llvm::Value *Value, Address Addr, bool Volatile, QualType Ty, AlignmentSource AlignSource=AlignmentSource::Type, llvm::MDNode *TBAAInfo=nullptr, bool isInit=false, QualType TBAABaseTy=QualType(), uint64_t TBAAOffset=0, bool isNontemporal=false) |
EmitStoreOfScalar - Store a scalar value to an address, taking care to appropriately convert from the memory representation to the LLVM value representation. More... | |
void | 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. More... | |
RValue | EmitLoadOfLValue (LValue V, SourceLocation Loc) |
EmitLoadOfLValue - Given an expression that represents a value lvalue, this method emits the address of the lvalue, then loads the result as an rvalue, returning the rvalue. More... | |
RValue | EmitLoadOfExtVectorElementLValue (LValue V) |
RValue | EmitLoadOfBitfieldLValue (LValue LV) |
RValue | EmitLoadOfGlobalRegLValue (LValue LV) |
Load of global gamed gegisters are always calls to intrinsics. More... | |
void | EmitStoreThroughLValue (RValue Src, LValue Dst, bool isInit=false) |
EmitStoreThroughLValue - Store the specified rvalue into the specified lvalue, where both are guaranteed to the have the same type, and that type is 'Ty'. More... | |
void | EmitStoreThroughExtVectorComponentLValue (RValue Src, LValue Dst) |
void | EmitStoreThroughGlobalRegLValue (RValue Src, LValue Dst) |
Store of global named registers are always calls to intrinsics. More... | |
void | EmitStoreThroughBitfieldLValue (RValue Src, LValue Dst, llvm::Value **Result=nullptr) |
EmitStoreThroughBitfieldLValue - Store Src into Dst with same constraints as EmitStoreThroughLValue. More... | |
LValue | EmitComplexAssignmentLValue (const BinaryOperator *E) |
Emit an l-value for an assignment (simple or compound) of complex type. More... | |
LValue | EmitComplexCompoundAssignmentLValue (const CompoundAssignOperator *E) |
LValue | EmitScalarCompoundAssignWithComplex (const CompoundAssignOperator *E, llvm::Value *&Result) |
LValue | EmitBinaryOperatorLValue (const BinaryOperator *E) |
LValue | EmitCompoundAssignmentLValue (const CompoundAssignOperator *E) |
LValue | EmitCallExprLValue (const CallExpr *E) |
LValue | EmitVAArgExprLValue (const VAArgExpr *E) |
LValue | EmitDeclRefLValue (const DeclRefExpr *E) |
LValue | 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 | EmitOMPArraySectionExpr (const OMPArraySectionExpr *E, bool IsLowerBound=true) |
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) |
EmitCastLValue - Casts are never lvalues unless that cast is to a reference type. More... | |
LValue | EmitMaterializeTemporaryExpr (const MaterializeTemporaryExpr *E) |
LValue | EmitOpaqueValueLValue (const OpaqueValueExpr *e) |
Address | EmitExtVectorElementLValue (LValue V) |
Generates lvalue for partial ext_vector access. More... | |
RValue | EmitRValueForField (LValue LV, const FieldDecl *FD, SourceLocation Loc) |
Address | EmitArrayToPointerDecay (const Expr *Array, AlignmentSource *AlignSource=nullptr) |
ConstantEmission | tryEmitAsConstant (DeclRefExpr *refExpr) |
Try to emit a reference to the given value without producing it as an l-value. More... | |
RValue | EmitPseudoObjectRValue (const PseudoObjectExpr *e, AggValueSlot slot=AggValueSlot::ignored()) |
LValue | EmitPseudoObjectLValue (const PseudoObjectExpr *e) |
llvm::Value * | EmitIvarOffset (const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar) |
LValue | EmitLValueForField (LValue Base, const FieldDecl *Field) |
LValue | EmitLValueForLambdaField (const FieldDecl *Field) |
Given that we are currently emitting a lambda, emit an l-value for one of its members. More... | |
LValue | EmitLValueForFieldInitialization (LValue Base, const FieldDecl *Field) |
EmitLValueForFieldInitialization - Like EmitLValueForField, except that if the Field is a reference, this will return the address of the reference and not the address of the value stored in the reference. More... | |
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, CGCalleeInfo CalleeInfo=CGCalleeInfo(), 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. More... | |
RValue | EmitCall (QualType FnType, llvm::Value *Callee, const CallExpr *E, ReturnValueSlot ReturnValue, CGCalleeInfo CalleeInfo=CGCalleeInfo(), llvm::Value *Chain=nullptr) |
RValue | EmitCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue=ReturnValueSlot()) |
void | checkTargetFeatures (const CallExpr *E, const FunctionDecl *TargetDecl) |
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="") |
Emits a call or invoke instruction to the given function, depending on the current state of the EH stack. More... | |
llvm::CallSite | EmitRuntimeCallOrInvoke (llvm::Value *callee, ArrayRef< llvm::Value * > args, const Twine &name="") |
Emits a call or invoke instruction to the given runtime function. More... | |
llvm::CallSite | EmitRuntimeCallOrInvoke (llvm::Value *callee, const Twine &name="") |
Emits a call or invoke instruction to the given nullary runtime function. More... | |
void | EmitNoreturnRuntimeCallOrInvoke (llvm::Value *callee, ArrayRef< llvm::Value * > args) |
Emits a call or invoke to the given noreturn runtime function. More... | |
llvm::Value * | BuildAppleKextVirtualCall (const CXXMethodDecl *MD, NestedNameSpecifier *Qual, llvm::Type *Ty) |
BuildAppleKextVirtualCall - This routine is to support gcc's kext ABI making indirect call to virtual functions. More... | |
llvm::Value * | BuildAppleKextVirtualDestructorCall (const CXXDestructorDecl *DD, CXXDtorType Type, const CXXRecordDecl *RD) |
BuildVirtualCall - This routine makes indirect vtable call for call to virtual destructors. More... | |
RValue | EmitCXXMemberOrOperatorCall (const CXXMethodDecl *MD, llvm::Value *Callee, ReturnValueSlot ReturnValue, llvm::Value *This, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E) |
RValue | EmitCXXDestructorCall (const CXXDestructorDecl *DD, llvm::Value *Callee, llvm::Value *This, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E, StructorType Type) |
RValue | EmitCXXMemberCallExpr (const CXXMemberCallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitCXXMemberOrOperatorMemberCallExpr (const CallExpr *CE, const CXXMethodDecl *MD, ReturnValueSlot ReturnValue, bool HasQualifier, NestedNameSpecifier *Qualifier, bool IsArrow, const Expr *Base) |
Address | EmitCXXMemberDataPointerAddress (const Expr *E, Address base, llvm::Value *memberPtr, const MemberPointerType *memberPtrType, AlignmentSource *AlignSource=nullptr) |
Emit the address of a field using a member data pointer. More... | |
RValue | EmitCXXMemberPointerCallExpr (const CXXMemberCallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitCXXOperatorMemberCallExpr (const CXXOperatorCallExpr *E, const CXXMethodDecl *MD, ReturnValueSlot ReturnValue) |
RValue | EmitCUDAKernelCallExpr (const CUDAKernelCallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitCUDADevicePrintfCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitBuiltinExpr (const FunctionDecl *FD, unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitBlockCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue) |
llvm::Value * | EmitTargetBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
EmitTargetBuiltinExpr - Emit the given builtin call. More... | |
llvm::Value * | EmitAArch64CompareBuiltinExpr (llvm::Value *Op, llvm::Type *Ty, const llvm::CmpInst::Predicate Fp, const llvm::CmpInst::Predicate Ip, const llvm::Twine &Name="") |
llvm::Value * | EmitARMBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitCommonNeonBuiltinExpr (unsigned BuiltinID, unsigned LLVMIntrinsic, unsigned AltLLVMIntrinsic, const char *NameHint, unsigned Modifier, const CallExpr *E, SmallVectorImpl< llvm::Value * > &Ops, Address PtrOp0, Address PtrOp1) |
llvm::Function * | LookupNeonLLVMIntrinsic (unsigned IntrinsicID, unsigned Modifier, llvm::Type *ArgTy, const CallExpr *E) |
llvm::Value * | EmitNeonCall (llvm::Function *F, SmallVectorImpl< llvm::Value * > &O, const char *name, unsigned shift=0, bool rightshift=false) |
llvm::Value * | EmitNeonSplat (llvm::Value *V, llvm::Constant *Idx) |
llvm::Value * | EmitNeonShiftVector (llvm::Value *V, llvm::Type *Ty, bool negateForRightShift) |
llvm::Value * | EmitNeonRShiftImm (llvm::Value *Vec, llvm::Value *Amt, llvm::Type *Ty, bool usgn, const char *name) |
llvm::Value * | vectorWrapScalar16 (llvm::Value *Op) |
llvm::Value * | EmitAArch64BuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | BuildVector (ArrayRef< llvm::Value * > Ops) |
llvm::Value * | EmitX86BuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitPPCBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitAMDGPUBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitSystemZBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitNVPTXBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitWebAssemblyBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitObjCProtocolExpr (const ObjCProtocolExpr *E) |
llvm::Value * | EmitObjCStringLiteral (const ObjCStringLiteral *E) |
Emits an instance of NSConstantString representing the object. More... | |
llvm::Value * | EmitObjCBoxedExpr (const ObjCBoxedExpr *E) |
EmitObjCBoxedExpr - This routine generates code to call the appropriate expression boxing method. More... | |
llvm::Value * | EmitObjCArrayLiteral (const ObjCArrayLiteral *E) |
llvm::Value * | EmitObjCDictionaryLiteral (const ObjCDictionaryLiteral *E) |
llvm::Value * | EmitObjCCollectionLiteral (const Expr *E, const ObjCMethodDecl *MethodWithObjects) |
llvm::Value * | EmitObjCSelectorExpr (const ObjCSelectorExpr *E) |
Emit a selector. More... | |
RValue | EmitObjCMessageExpr (const ObjCMessageExpr *E, ReturnValueSlot Return=ReturnValueSlot()) |
CleanupKind | getARCCleanupKind () |
Retrieves the default cleanup kind for an ARC cleanup. More... | |
void | EmitARCInitWeak (Address addr, llvm::Value *value) |
i8* @objc_initWeak(i8** addr, i8* value) Returns value. More... | |
void | EmitARCDestroyWeak (Address addr) |
void @objc_destroyWeak(i8** addr) Essentially objc_storeWeak(addr, nil). More... | |
llvm::Value * | EmitARCLoadWeak (Address addr) |
i8* @objc_loadWeak(i8** addr) Essentially objc_autorelease(objc_loadWeakRetained(addr)). More... | |
llvm::Value * | EmitARCLoadWeakRetained (Address addr) |
i8* @objc_loadWeakRetained(i8** addr) More... | |
llvm::Value * | EmitARCStoreWeak (Address addr, llvm::Value *value, bool ignored) |
i8* @objc_storeWeak(i8** addr, i8* value) Returns value. More... | |
void | EmitARCCopyWeak (Address dst, Address src) |
void @objc_copyWeak(i8** dest, i8** src) Disregards the current value in dest. More... | |
void | EmitARCMoveWeak (Address dst, Address src) |
void @objc_moveWeak(i8** dest, i8** src) Disregards the current value in dest. More... | |
llvm::Value * | EmitARCRetainAutorelease (QualType type, llvm::Value *value) |
Do a fused retain/autorelease of the given object. More... | |
llvm::Value * | EmitARCRetainAutoreleaseNonBlock (llvm::Value *value) |
Do a fused retain/autorelease of the given object. More... | |
llvm::Value * | EmitARCStoreStrong (LValue lvalue, llvm::Value *value, bool resultIgnored) |
Store into a strong object. More... | |
llvm::Value * | EmitARCStoreStrongCall (Address addr, llvm::Value *value, bool resultIgnored) |
Store into a strong object. More... | |
llvm::Value * | EmitARCRetain (QualType type, llvm::Value *value) |
Produce the code to do a retain. More... | |
llvm::Value * | EmitARCRetainNonBlock (llvm::Value *value) |
Retain the given object, with normal retain semantics. More... | |
llvm::Value * | EmitARCRetainBlock (llvm::Value *value, bool mandatory) |
Retain the given block, with _Block_copy semantics. More... | |
void | EmitARCDestroyStrong (Address addr, ARCPreciseLifetime_t precise) |
Destroy a __strong variable. More... | |
void | EmitARCRelease (llvm::Value *value, ARCPreciseLifetime_t precise) |
Release the given object. More... | |
llvm::Value * | EmitARCAutorelease (llvm::Value *value) |
Autorelease the given object. More... | |
llvm::Value * | EmitARCAutoreleaseReturnValue (llvm::Value *value) |
Autorelease the given object. More... | |
llvm::Value * | EmitARCRetainAutoreleaseReturnValue (llvm::Value *value) |
Do a fused retain/autorelease of the given object. More... | |
llvm::Value * | EmitARCRetainAutoreleasedReturnValue (llvm::Value *value) |
Retain the given object which is the result of a function call. More... | |
llvm::Value * | EmitARCUnsafeClaimAutoreleasedReturnValue (llvm::Value *value) |
Claim a possibly-autoreleased return value at +0. More... | |
std::pair< LValue, llvm::Value * > | EmitARCStoreAutoreleasing (const BinaryOperator *e) |
std::pair< LValue, llvm::Value * > | EmitARCStoreStrong (const BinaryOperator *e, bool ignored) |
std::pair< LValue, llvm::Value * > | EmitARCStoreUnsafeUnretained (const BinaryOperator *e, bool ignored) |
llvm::Value * | EmitObjCThrowOperand (const Expr *expr) |
llvm::Value * | EmitObjCConsumeObject (QualType T, llvm::Value *Ptr) |
Produce the code for a CK_ARCConsumeObject. More... | |
llvm::Value * | EmitObjCExtendObjectLifetime (QualType T, llvm::Value *Ptr) |
llvm::Value * | EmitARCExtendBlockObject (const Expr *expr) |
llvm::Value * | EmitARCReclaimReturnedObject (const Expr *e, bool allowUnsafeClaim) |
llvm::Value * | EmitARCRetainScalarExpr (const Expr *expr) |
EmitARCRetainScalarExpr - Semantically equivalent to EmitARCRetainObject(e->getType(), EmitScalarExpr(e)), but making a best-effort attempt to peephole expressions that naturally produce retained objects. More... | |
llvm::Value * | EmitARCRetainAutoreleaseScalarExpr (const Expr *expr) |
llvm::Value * | EmitARCUnsafeUnretainedScalarExpr (const Expr *expr) |
EmitARCUnsafeUnretainedScalarExpr - Semantically equivalent to immediately releasing the resut of EmitARCRetainScalarExpr, but avoiding any spurious retains, including by performing reclaims with objc_unsafeClaimAutoreleasedReturnValue. More... | |
void | 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. More... | |
void | EmitObjCAutoreleasePoolPop (llvm::Value *Ptr) |
Produce the code to do a primitive release. More... | |
llvm::Value * | EmitObjCAutoreleasePoolPush () |
Produce the code to do a objc_autoreleasepool_push. More... | |
llvm::Value * | EmitObjCMRRAutoreleasePoolPush () |
Produce the code to do an MRR version objc_autoreleasepool_push. More... | |
void | EmitObjCAutoreleasePoolCleanup (llvm::Value *Ptr) |
void | EmitObjCMRRAutoreleasePoolPop (llvm::Value *Ptr) |
Produce the code to do a primitive release. More... | |
RValue | EmitReferenceBindingToExpr (const Expr *E) |
Emits a reference binding to the passed in expression. More... | |
llvm::Value * | EmitScalarExpr (const Expr *E, bool IgnoreResultAssign=false) |
EmitScalarExpr - Emit the computation of the specified expression of LLVM scalar type, returning the result. More... | |
llvm::Value * | EmitScalarConversion (llvm::Value *Src, QualType SrcTy, QualType DstTy, SourceLocation Loc) |
Emit a conversion from the specified type to the specified destination type, both of which are LLVM scalar types. More... | |
llvm::Value * | EmitComplexToScalarConversion (ComplexPairTy Src, QualType SrcTy, QualType DstTy, SourceLocation Loc) |
Emit a conversion from the specified complex type to the specified destination type, where the destination type is an LLVM scalar type. More... | |
void | EmitAggExpr (const Expr *E, AggValueSlot AS) |
EmitAggExpr - Emit the computation of the specified expression of aggregate type. More... | |
LValue | EmitAggExprToLValue (const Expr *E) |
EmitAggExprToLValue - Emit the computation of the specified expression of aggregate type into a temporary LValue. More... | |
void | EmitExtendGCLifetime (llvm::Value *object) |
EmitExtendGCLifetime - Given a pointer to an Objective-C object, make sure it survives garbage collection until this point. More... | |
ComplexPairTy | EmitComplexExpr (const Expr *E, bool IgnoreReal=false, bool IgnoreImag=false) |
EmitComplexExpr - Emit the computation of the specified expression of complex type, returning the result. More... | |
void | 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. More... | |
void | EmitStoreOfComplex (ComplexPairTy V, LValue dest, bool isInit) |
EmitStoreOfComplex - Store a complex number into the specified l-value. More... | |
ComplexPairTy | EmitLoadOfComplex (LValue src, SourceLocation loc) |
EmitLoadOfComplex - Load a complex number from the specified l-value. More... | |
Address | emitAddrOfRealComponent (Address complex, QualType complexType) |
Address | emitAddrOfImagComponent (Address complex, QualType complexType) |
llvm::GlobalVariable * | AddInitializerToStaticVarDecl (const VarDecl &D, llvm::GlobalVariable *GV) |
AddInitializerToStaticVarDecl - Add the initializer for 'D' to the global variable that has already been created for it. More... | |
void | EmitCXXGlobalVarDeclInit (const VarDecl &D, llvm::Constant *DeclPtr, bool PerformInit) |
EmitCXXGlobalVarDeclInit - Create the initializer for a C++ variable with global storage. More... | |
llvm::Constant * | createAtExitStub (const VarDecl &VD, llvm::Constant *Dtor, llvm::Constant *Addr) |
Create a stub function, suitable for being passed to atexit, which passes the given address to the given destructor function. More... | |
void | registerGlobalDtorWithAtExit (const VarDecl &D, llvm::Constant *fn, llvm::Constant *addr) |
Call atexit() with a function that passes the given argument to the given function. More... | |
void | EmitCXXGuardedInit (const VarDecl &D, llvm::GlobalVariable *DeclPtr, bool PerformInit) |
Emit code in this function to perform a guarded variable initialization. More... | |
void | GenerateCXXGlobalInitFunc (llvm::Function *Fn, ArrayRef< llvm::Function * > CXXThreadLocals, Address Guard=Address::invalid()) |
GenerateCXXGlobalInitFunc - Generates code for initializing global variables. More... | |
void | GenerateCXXGlobalDtorsFunc (llvm::Function *Fn, const std::vector< std::pair< llvm::WeakVH, llvm::Constant * > > &DtorsAndObjects) |
GenerateCXXGlobalDtorsFunc - Generates code for destroying global variables. More... | |
void | GenerateCXXGlobalVarDeclInitFunc (llvm::Function *Fn, const VarDecl *D, llvm::GlobalVariable *Addr, bool PerformInit) |
Emit the code necessary to initialize the given global variable. More... | |
void | EmitCXXConstructExpr (const CXXConstructExpr *E, AggValueSlot Dest) |
void | EmitSynthesizedCXXCopyCtor (Address Dest, Address Src, const Expr *Exp) |
void | enterFullExpression (const ExprWithCleanups *E) |
void | enterNonTrivialFullExpression (const ExprWithCleanups *E) |
Enter a full-expression with a non-trivial number of objects to clean up. More... | |
void | EmitCXXThrowExpr (const CXXThrowExpr *E, bool KeepInsertionPoint=true) |
void | EmitLambdaExpr (const LambdaExpr *E, AggValueSlot Dest) |
RValue | EmitAtomicExpr (AtomicExpr *E) |
llvm::Value * | EmitAnnotationCall (llvm::Value *AnnotationFn, llvm::Value *AnnotatedVal, StringRef AnnotationStr, SourceLocation Location) |
Emit an annotation call (intrinsic or builtin). More... | |
void | EmitVarAnnotations (const VarDecl *D, llvm::Value *V) |
Emit local annotations for the local variable V, declared by D. More... | |
Address | EmitFieldAnnotations (const FieldDecl *D, Address V) |
Emit field annotations for the given field & value. More... | |
bool | ConstantFoldsToSimpleInteger (const Expr *Cond, bool &Result, bool AllowLabels=false) |
ConstantFoldsToSimpleInteger - If the specified expression does not fold to a constant, or if it does but contains a label, return false. More... | |
bool | ConstantFoldsToSimpleInteger (const Expr *Cond, llvm::APSInt &Result, bool AllowLabels=false) |
ConstantFoldsToSimpleInteger - If the specified expression does not fold to a constant, or if it does but contains a label, return false. More... | |
void | EmitBranchOnBoolExpr (const Expr *Cond, llvm::BasicBlock *TrueBlock, llvm::BasicBlock *FalseBlock, uint64_t TrueCount) |
EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. More... | |
llvm::Constant * | EmitCheckTypeDescriptor (QualType T) |
Emit a description of a type in a format suitable for passing to a runtime sanitizer handler. More... | |
llvm::Value * | EmitCheckValue (llvm::Value *V) |
Convert a value into a format suitable for passing to a runtime sanitizer handler. More... | |
llvm::Constant * | EmitCheckSourceLocation (SourceLocation Loc) |
Emit a description of a source location in a format suitable for passing to a runtime sanitizer handler. More... | |
void | EmitCheck (ArrayRef< std::pair< llvm::Value *, SanitizerMask >> Checked, StringRef CheckName, ArrayRef< llvm::Constant * > StaticArgs, ArrayRef< llvm::Value * > DynamicArgs) |
Create a basic block that will call a handler function in a sanitizer runtime with the provided arguments, and create a conditional branch to it. More... | |
void | EmitCfiSlowPathCheck (SanitizerMask Kind, llvm::Value *Cond, llvm::ConstantInt *TypeId, llvm::Value *Ptr, ArrayRef< llvm::Constant * > StaticArgs) |
Emit a slow path cross-DSO CFI check which calls __cfi_slowpath if Cond if false. More... | |
void | EmitTrapCheck (llvm::Value *Checked) |
Create a basic block that will call the trap intrinsic, and emit a conditional branch to it, for the -ftrapv checks. More... | |
llvm::CallInst * | EmitTrapCall (llvm::Intrinsic::ID IntrID) |
Emit a call to trap or debugtrap and attach function attribute "trap-func-name" if specified. More... | |
void | EmitCfiCheckFail () |
Emit a cross-DSO CFI failure handling function. More... | |
void | EmitNonNullArgCheck (RValue RV, QualType ArgType, SourceLocation ArgLoc, const FunctionDecl *FD, unsigned ParmNum) |
Create a check for a function parameter that may potentially be declared as non-null. More... | |
void | EmitCallArg (CallArgList &args, const Expr *E, QualType ArgType) |
EmitCallArg - Emit a single call argument. More... | |
void | EmitDelegateCallArg (CallArgList &args, const VarDecl *param, SourceLocation loc) |
EmitDelegateCallArg - We are performing a delegate call; that is, the current function is delegating to another one. More... | |
void | 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. More... | |
template<typename T > | |
void | EmitCallArgs (CallArgList &Args, const T *CallArgTypeInfo, llvm::iterator_range< CallExpr::const_arg_iterator > ArgRange, const FunctionDecl *CalleeDecl=nullptr, unsigned ParamsToSkip=0) |
EmitCallArgs - Emit call arguments for a function. More... | |
void | EmitCallArgs (CallArgList &Args, ArrayRef< QualType > ArgTypes, llvm::iterator_range< CallExpr::const_arg_iterator > ArgRange, const FunctionDecl *CalleeDecl=nullptr, unsigned ParamsToSkip=0) |
Address | EmitPointerWithAlignment (const Expr *Addr, AlignmentSource *Source=nullptr) |
EmitPointerWithAlignment - Given an expression with a pointer type, emit the value and compute our best estimate of the alignment of the pointee. More... | |
void | EmitSanitizerStatReport (llvm::SanitizerStatKind SSK) |
![]() | |
CharUnits | getIntSize () const |
CharUnits | getIntAlign () const |
CharUnits | getSizeSize () const |
CharUnits | getSizeAlign () const |
CharUnits | getPointerSize () const |
CharUnits | getPointerAlign () const |
llvm::CallingConv::ID | getRuntimeCC () const |
llvm::CallingConv::ID | getBuiltinCC () const |
Static Public Member Functions | |
static void | destroyBlockInfos (CGBlockInfo *info) |
Destroy a chain of block layouts. More... | |
static TypeEvaluationKind | getEvaluationKind (QualType T) |
hasAggregateLLVMType - Return true if the specified AST type will map into an aggregate LLVM type or is void. More... | |
static bool | hasScalarEvaluationKind (QualType T) |
static bool | hasAggregateEvaluationKind (QualType T) |
static unsigned | getAccessedFieldNo (unsigned Idx, const llvm::Constant *Elts) |
getAccessedFieldNo - Given an encoded value and a result number, return the input field number being accessed. More... | |
static bool | ShouldNullCheckClassCastValue (const CastExpr *Cast) |
static std::pair < llvm::Function *, llvm::Constant * > | EmitOMPTargetDirectiveOutlinedFunction (CodeGenModule &CGM, const OMPTargetDirective &S, StringRef ParentName, bool IsOffloadEntry) |
Emit outlined function for the target directive. More... | |
static bool | ContainsLabel (const Stmt *S, bool IgnoreCaseStmts=false) |
ContainsLabel - Return true if the statement contains a label in it. More... | |
static bool | containsBreak (const Stmt *S) |
containsBreak - Return true if the statement contains a break out of it. More... | |
static bool | isObjCMethodWithTypeParams (const ObjCMethodDecl *method) |
template<typename T > | |
static bool | isObjCMethodWithTypeParams (const T *) |
Public Attributes | |
CodeGenModule & | CGM |
const TargetInfo & | Target |
LoopInfoStack | LoopStack |
CGBuilderTy | Builder |
const Decl * | CurFuncDecl |
CurFuncDecl - Holds the Decl for the current outermost non-closure context. More... | |
const Decl * | CurCodeDecl |
CurCodeDecl - This is the inner-most code context, which includes blocks. More... | |
const CGFunctionInfo * | CurFnInfo |
QualType | FnRetTy |
llvm::Function * | CurFn |
GlobalDecl | CurGD |
CurGD - The GlobalDecl for the current function being compiled. More... | |
EHScopeStack::stable_iterator | PrologueCleanupDepth |
PrologueCleanupDepth - The cleanup depth enclosing all the cleanups associated with the parameters. More... | |
JumpDest | ReturnBlock |
ReturnBlock - Unified return block. More... | |
Address | ReturnValue |
ReturnValue - The temporary alloca to hold the return value. More... | |
llvm::AssertingVH < llvm::Instruction > | AllocaInsertPt |
AllocaInsertPoint - This is an instruction in the entry block before which we prefer to insert allocas. More... | |
CGCapturedStmtInfo * | CapturedStmtInfo |
SanitizerSet | SanOpts |
Sanitizers enabled for this function. More... | |
bool | IsSanitizerScope |
True if CodeGen currently emits code implementing sanitizer checks. More... | |
bool | CurFuncIsThunk |
In C++, whether we are code generating a thunk. More... | |
bool | AutoreleaseResult |
In ARC, whether we should autorelease the return value. More... | |
bool | SawAsmBlock |
Whether we processed a Microsoft-style asm block during CodeGen. More... | |
const FunctionDecl * | CurSEHParent = nullptr |
bool | IsOutlinedSEHHelper |
True if the current function is an outlined SEH helper. More... | |
const CodeGen::CGBlockInfo * | BlockInfo |
llvm::Value * | BlockPointer |
llvm::DenseMap< const VarDecl *, FieldDecl * > | LambdaCaptureFields |
FieldDecl * | LambdaThisCaptureField |
llvm::DenseMap< const VarDecl *, llvm::Value * > | NRVOFlags |
A mapping from NRVO variables to the flags used to indicate when the NRVO has been applied to this variable. More... | |
EHScopeStack | EHStack |
llvm::SmallVector< char, 256 > | LifetimeExtendedCleanupStack |
llvm::SmallVector< const JumpDest *, 2 > | SEHTryEpilogueStack |
llvm::Instruction * | CurrentFuncletPad = nullptr |
llvm::AllocaInst * | NormalCleanupDest |
i32s containing the indexes of the cleanup destinations. More... | |
unsigned | NextCleanupDestIndex |
CGBlockInfo * | FirstBlockInfo |
FirstBlockInfo - The head of a singly-linked-list of block layouts. More... | |
llvm::BasicBlock * | EHResumeBlock |
EHResumeBlock - Unified block containing a call to llvm.eh.resume. More... | |
llvm::Value * | ExceptionSlot |
The exception slot. More... | |
llvm::AllocaInst * | EHSelectorSlot |
The selector slot. More... | |
SmallVector< Address, 1 > | SEHCodeSlotStack |
A stack of exception code slots. More... | |
llvm::Value * | SEHInfo = nullptr |
Value returned by __exception_info intrinsic. More... | |
SmallVector< llvm::Value *, 8 > | ObjCEHValueStack |
ObjCEHValueStack - Stack of Objective-C exception values, used for rethrows. More... | |
![]() | |
llvm::Type * | VoidTy |
void More... | |
llvm::IntegerType * | Int8Ty |
i8, i16, i32, and i64 More... | |
llvm::IntegerType * | Int16Ty |
llvm::IntegerType * | Int32Ty |
llvm::IntegerType * | Int64Ty |
llvm::Type * | FloatTy |
float, double More... | |
llvm::Type * | DoubleTy |
llvm::IntegerType * | IntTy |
int More... | |
union { | |
llvm::IntegerType * IntPtrTy | |
llvm::IntegerType * SizeTy | |
llvm::IntegerType * PtrDiffTy | |
}; | |
intptr_t, size_t, and ptrdiff_t, which we assume are the same size. More... | |
union { | |
llvm::PointerType * VoidPtrTy | |
llvm::PointerType * Int8PtrTy | |
}; | |
void* in address space 0 More... | |
union { | |
llvm::PointerType * VoidPtrPtrTy | |
llvm::PointerType * Int8PtrPtrTy | |
}; | |
void** in address space 0 More... | |
union { | |
unsigned char IntSizeInBytes | |
unsigned char IntAlignInBytes | |
}; | |
The size and alignment of the builtin C type 'int'. More... | |
unsigned char | PointerWidthInBits |
The width of a pointer into the generic address space. More... | |
union { | |
unsigned char PointerAlignInBytes | |
unsigned char PointerSizeInBytes | |
unsigned char SizeSizeInBytes | |
unsigned char SizeAlignInBytes | |
}; | |
The size and alignment of a pointer into the generic address space. More... | |
llvm::CallingConv::ID | RuntimeCC |
llvm::CallingConv::ID | BuiltinCC |
Static Public Attributes | |
static Destroyer | destroyCXXObject |
static Destroyer | destroyARCStrongImprecise |
static Destroyer | destroyARCStrongPrecise |
static Destroyer | destroyARCWeak |
Friends | |
class | CGCXXABI |
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code.
Definition at line 105 of file CodeGenFunction.h.
typedef std::pair<llvm::Value *, llvm::Value *> clang::CodeGen::CodeGenFunction::ComplexPairTy |
Definition at line 139 of file CodeGenFunction.h.
typedef llvm::DenseMap<const Decl *, Address> clang::CodeGen::CodeGenFunction::DeclMapTy |
Definition at line 583 of file CodeGenFunction.h.
typedef void clang::CodeGen::CodeGenFunction::Destroyer(CodeGenFunction &CGF, Address addr, QualType ty) |
Definition at line 1245 of file CodeGenFunction.h.
typedef void clang::CodeGen::CodeGenFunction::SpecialInitFn(CodeGenFunction &Init, const VarDecl &D, llvm::Value *Address) |
Definition at line 2112 of file CodeGenFunction.h.
typedef const llvm::function_ref<void(CodeGenFunction & , llvm::Value * , const OMPTaskDataTy & )> clang::CodeGen::CodeGenFunction::TaskGenTy |
Definition at line 2462 of file CodeGenFunction.h.
typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> clang::CodeGen::CodeGenFunction::VisitedVirtualBasesSetTy |
Definition at line 1453 of file CodeGenFunction.h.
Definition at line 1451 of file CodeGenFunction.h.
Enumerator | |
---|---|
CFITCK_VCall | |
CFITCK_NVCall | |
CFITCK_DerivedCast | |
CFITCK_UnrelatedCast | |
CFITCK_ICall |
Definition at line 1469 of file CodeGenFunction.h.
Situations in which we might emit a check for the suitability of a pointer or glvalue.
Definition at line 2036 of file CodeGenFunction.h.
CodeGenFunction::CodeGenFunction | ( | CodeGenModule & | cgm, |
bool | suppressNewContext = false |
||
) |
Definition at line 40 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CGCXXABI::getMangleContext(), and clang::MangleContext::startNewFunction().
CodeGenFunction::~CodeGenFunction | ( | ) |
Definition at line 85 of file CodeGenFunction.cpp.
References CGM, destroyBlockInfos(), FirstBlockInfo, getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and LifetimeExtendedCleanupStack.
void CodeGenFunction::ActivateCleanupBlock | ( | EHScopeStack::stable_iterator | Cleanup, |
llvm::Instruction * | DominatingIP | ||
) |
ActivateCleanupBlock - Activates an initially-inactive cleanup.
Activate a cleanup that was created in an inactivated state.
Cannot be used to resurrect a deactivated cleanup.
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 1181 of file CGCleanup.cpp.
References clang::CodeGen::EHCleanupScope(), ForActivation, and SetupCleanupBlockActivation().
Referenced by EmitBlockLiteral(), and 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 292 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().
llvm::Value * CodeGenFunction::BuildAppleKextVirtualCall | ( | const CXXMethodDecl * | MD, |
NestedNameSpecifier * | Qual, | ||
llvm::Type * | Ty | ||
) |
BuildAppleKextVirtualCall - This routine is to support gcc's kext ABI making indirect call to virtual functions.
It makes the call through indexing into the vtable.
Definition at line 289 of file CGCXX.cpp.
References BuildAppleKextVirtualCall(), BuildAppleKextVirtualDestructorCall(), clang::Dtor_Complete, clang::Type::getAs(), clang::NestedNameSpecifier::getAsType(), clang::RecordType::getDecl(), clang::NestedNameSpecifier::getKind(), and clang::NestedNameSpecifier::TypeSpec.
Referenced by EmitCXXMemberOrOperatorMemberCallExpr().
llvm::Value * CodeGenFunction::BuildAppleKextVirtualDestructorCall | ( | const CXXDestructorDecl * | DD, |
CXXDtorType | Type, | ||
const CXXRecordDecl * | RD | ||
) |
BuildVirtualCall - This routine makes indirect vtable call for call to virtual destructors.
It returns 0 if it could not do it.
Definition at line 310 of file CGCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), BuildAppleKextVirtualCall(), CGM, clang::CodeGen::Complete, clang::Dtor_Base, clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), and clang::CodeGen::Type.
Referenced by BuildAppleKextVirtualCall().
void CodeGenFunction::BuildBlockRelease | ( | llvm::Value * | DeclPtr, |
BlockFieldFlags | flags | ||
) |
Definition at line 2260 of file CGBlocks.cpp.
References clang::CodeGen::BLOCK_FIELD_IS_BYREF, BuildBlockRelease(), Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNounwindRuntimeCall(), clang::CodeGen::BlockFieldFlags::getBitMask(), clang::CodeGen::CodeGenModule::getBlockObjectDispose(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by BuildBlockRelease(), and GenerateDestroyHelperFunction().
QualType CodeGenFunction::BuildFunctionArgList | ( | GlobalDecl | GD, |
FunctionArgList & | Args | ||
) |
Definition at line 953 of file CodeGenFunction.cpp.
References clang::CodeGen::CGCXXABI::addImplicitStructorParams(), clang::CodeGen::CGCXXABI::buildThisParam(), CGM, clang::ImplicitParamDecl::Create(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::GlobalDecl::getCtorType(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::FunctionDecl::getReturnType(), clang::ASTContext::getSizeType(), clang::CXXMethodDecl::getThisType(), getTypes(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::CodeGen::CodeGenTypes::inheritingCtorHasParams(), clang::CXXMethodDecl::isInstance(), clang::FunctionDecl::parameters(), and clang::ASTContext::VoidPtrTy.
Referenced by EmitInlinedInheritingCXXConstructorCall(), and GenerateCode().
llvm::Value * CodeGenFunction::BuildVector | ( | ArrayRef< llvm::Value * > | Ops | ) |
Definition at line 6542 of file CGBuiltin.cpp.
References Builder.
Referenced by EmitX86BuiltinExpr().
bool CodeGenFunction::CanDevirtualizeMemberFunctionCall | ( | const Expr * | Base, |
const CXXMethodDecl * | MD | ||
) |
CanDevirtualizeMemberFunctionCalls - Checks whether virtual calls on given expr can be devirtualized.
Definition at line 2834 of file CGClass.cpp.
References clang::Expr::getBestDynamicClassType(), getContext(), getLangOpts(), clang::MemberExpr::getMemberDecl(), clang::CXXMethodDecl::getParent(), and skipNoOpCastsAndParens().
Referenced by EmitCXXMemberOrOperatorMemberCallExpr().
void CodeGenFunction::checkTargetFeatures | ( | const CallExpr * | E, |
const FunctionDecl * | TargetDecl | ||
) |
Definition at line 1956 of file CodeGenFunction.cpp.
References clang::ASTContext::BuiltinInfo, CGM, CurFuncDecl, clang::FunctionDecl::getBuiltinID(), clang::CodeGen::CodeGenModule::getContext(), clang::NamedDecl::getDeclName(), clang::CodeGen::CodeGenModule::getDiags(), clang::CodeGen::CodeGenModule::getFunctionFeatureMap(), clang::CallExpr::getLocStart(), clang::Builtin::Context::getRequiredFeatures(), hasRequiredFeatures(), and clang::DiagnosticsEngine::Report().
bool CodeGenFunction::ConstantFoldsToSimpleInteger | ( | const Expr * | Cond, |
bool & | ResultBool, | ||
bool | AllowLabels = false |
||
) |
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 1150 of file CodeGenFunction.cpp.
Referenced by EmitBranchOnBoolExpr(), EmitIfStmt(), EmitOMPDistributeLoop(), emitOMPIfClause(), EmitOMPSimdDirective(), EmitOMPTargetDirective(), EmitOMPTaskBasedDirective(), and EmitSwitchStmt().
bool CodeGenFunction::ConstantFoldsToSimpleInteger | ( | const Expr * | Cond, |
llvm::APSInt & | ResultInt, | ||
bool | AllowLabels = false |
||
) |
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 1164 of file CodeGenFunction.cpp.
References ContainsLabel(), clang::Expr::EvaluateAsInt(), and getContext().
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 1125 of file CodeGenFunction.cpp.
Referenced by CollectStatementsForCase().
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 1093 of file CodeGenFunction.cpp.
Referenced by CollectStatementsForCase(), ConstantFoldsToSimpleInteger(), EmitAutoVarInit(), EmitIfStmt(), EmitStmt(), and FindCaseStatementsForValue().
RValue CodeGenFunction::convertTempToRValue | ( | Address | addr, |
QualType | type, | ||
SourceLocation | loc | ||
) |
Given the address of a temporary variable, produce an r-value of its type.
Definition at line 4156 of file CGExpr.cpp.
References clang::CodeGen::LValue::asAggregateRValue(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitAtomicExpr(), EmitCall(), and EmitDelegateCallArg().
llvm::Type * CodeGenFunction::ConvertType | ( | QualType | T | ) |
Definition at line 166 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenTypes::ConvertType(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by AdjustObjCObjectType(), ConvertType(), CreateIRTemp(), EmitAArch64BuiltinExpr(), emitArgumentDemotion(), EmitARMBuiltinExpr(), emitArrayLength(), EmitAsmStmt(), EmitBlockLiteral(), EmitCall(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), EmitCXXTypeidExpr(), EmitDeleteCall(), EmitDynamicCastToNull(), EmitFunctionDeclLValue(), EmitFunctionEpilog(), EmitFunctionProlog(), EmitInitializerForField(), EmitLambdaDelegatingInvokeBody(), clang::CodeGen::CGCXXABI::EmitMemberDataPointerAddress(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCStringLiteral(), emitOMPArraySectionBase(), EmitPPCBuiltinExpr(), EmitSystemZBuiltinExpr(), clang::CodeGen::emitTaskInit(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWebAssemblyBuiltinExpr(), emitWritebackArg(), EmitX86BuiltinExpr(), generateObjCGetterBody(), GenerateSEHFilterFunction(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getItaniumDynamicCastFn(), LookupNeonLLVMIntrinsic(), MakeAtomicCmpXchgValue(), and performTypeAdjustment().
|
inline |
Definition at line 1564 of file CodeGenFunction.h.
References ConvertType(), and getContext().
llvm::Type * CodeGenFunction::ConvertTypeForMem | ( | QualType | T | ) |
Definition at line 162 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by CreateMemTemp(), createPlaceholderSlot(), emitAddrOfVarFromArray(), EmitAnyExprToExn(), EmitAsmStmt(), EmitAtomicExpr(), EmitAutoVarAlloca(), EmitCall(), EmitCapturedLocals(), EmitCXXDeleteExpr(), EmitCXXNewExpr(), EmitMaterializeTemporaryExpr(), EmitNewArrayInitializer(), emitOMPArraySectionBase(), EmitOMPReductionClauseInit(), EmitParmDecl(), emitPrivatesInit(), emitProxyTaskFunction(), clang::CodeGen::emitTaskCall(), clang::CodeGen::emitThreadPrivateVarDefinition(), emitVoidPtrVAArg(), EmitX86_64VAArgFromMemory(), getBlockByrefInfo(), getRangeForType(), InitCatchParam(), and loadToBegin().
|
inline |
CreateAggTemp - Create a temporary memory object for the given aggregate type.
Definition at line 1729 of file CodeGenFunction.h.
References CreateMemTemp(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::AggValueSlot::forAddr(), clang::QualType::getQualifiers(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, and clang::Name.
Referenced by EmitAnyExpr(), EmitAnyExprToTemp(), and EmitCallArg().
llvm::Constant * CodeGenFunction::createAtExitStub | ( | const VarDecl & | VD, |
llvm::Constant * | dtor, | ||
llvm::Constant * | addr | ||
) |
Create a stub function, suitable for being passed to atexit, which passes the given address to the given destructor function.
Definition at line 194 of file CGDeclCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeNullaryFunction(), Builder, CGM, clang::CodeGen::CodeGenModule::CreateGlobalInitOrDestructFunction(), FinishFunction(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CGCXXABI::getMangleContext(), clang::CodeGen::CodeGenModule::getTypes(), clang::MangleContext::mangleDynamicAtExitDestructor(), StartFunction(), clang::CodeGen::CodeGenTypeCache::VoidTy, and clang::ASTContext::VoidTy.
Referenced by emitGlobalDtorWithTLRegDtor(), and registerGlobalDtorWithAtExit().
|
inline |
createBasicBlock - Create an LLVM basic block.
Definition at line 1588 of file CodeGenFunction.h.
References clang::Create(), and getLLVMContext().
Referenced by CreateNormalEntry(), EmitAggMemberInitializer(), emitArrayDestroy(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), clang::CodeGen::emitBarrierCall(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitCall(), EmitCallOrInvoke(), clang::CodeGen::emitCancellationPointCall(), EmitCaseStmt(), EmitCaseStmtRange(), emitCatchDispatchBlock(), EmitCleanup(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryFooter(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), emitFilterDispatchBlock(), EmitForStmt(), EmitIfStmt(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), EmitOMPCopyinClause(), EmitOMPDistributeLoop(), emitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLinearClauseFinal(), EmitOMPSimdDirective(), emitPostUpdateForReductionClause(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitVTablePtrCheckForCast(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), EnterCXXTryStmt(), EnterSEHTryStmt(), ExitCXXTryStmt(), ExitSEHTryStmt(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), getEHDispatchBlock(), getEHResumeBlock(), GetIndirectGotoBlock(), getJumpDestForLabel(), getJumpDestInCurrentScope(), getMSVCDispatchBlock(), getTerminateHandler(), getTerminateLandingPad(), getUnreachableBlock(), PerformReturnAdjustment(), and StartFunction().
Address CodeGenFunction::CreateDefaultAlignTempAlloca | ( | llvm::Type * | Ty, |
const Twine & | Name = "tmp" |
||
) |
CreateDefaultAlignedTempAlloca - This creates an alloca with the default ABI alignment of the given LLVM type.
CreateDefaultAlignTempAlloca - This creates an alloca with the default alignment of the corresponding LLVM type, which is not guaranteed to be related in any way to the expected alignment of an AST type that might have been lowered to Ty.
IMPORTANT NOTE: This is not generally the right alignment for any given AST type that happens to have been lowered to the given IR type. This should only ever be used for function-local, IR-driven manipulations like saving and restoring a value. Do not hand this address off to arbitrary IRGen routines, and especially do not pass it as an argument to a function that might expect a properly ABI-aligned value.
Definition at line 78 of file CGExpr.cpp.
References CGM, CreateTempAlloca(), clang::CharUnits::fromQuantity(), and clang::CodeGen::CodeGenModule::getDataLayout().
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.
That is, this is exactly equivalent to CreateMemTemp, but calling ConvertType instead of ConvertTypeForMem.
Definition at line 93 of file CGExpr.cpp.
References ConvertType(), CreateTempAlloca(), getContext(), and clang::ASTContext::getTypeAlignInChars().
Referenced by EmitInlinedInheritingCXXConstructorCall(), and StartFunction().
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignment.
Definition at line 98 of file CGExpr.cpp.
References getContext().
Referenced by clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), castToBase(), castValueFromUintptr(), CreateAggTemp(), createReferenceTemporary(), createSectionLVal(), EmitAArch64BuiltinExpr(), EmitAggExprToLValue(), EmitARMBuiltinExpr(), EmitAtomicExpr(), EmitCall(), EmitCallArg(), EmitCompoundStmtWithoutScope(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitDoacrossOrdered(), EmitFunctionProlog(), EmitInitializerForField(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), emitOffloadingArrays(), EmitParmDecl(), EmitSEHExceptionCodeSave(), clang::CodeGen::emitTaskCall(), clang::CodeGen::emitThreadIDAddress(), EmitValToTemp(), EmitX86BuiltinExpr(), EnterSEHTryStmt(), GenerateBlockFunction(), GenerateOpenMPCapturedVars(), InitCapturedStruct(), and setBlockContextParameter().
Definition at line 103 of file CGExpr.cpp.
References ConvertTypeForMem(), and CreateTempAlloca().
llvm::AllocaInst * CodeGenFunction::CreateTempAlloca | ( | llvm::Type * | Ty, |
const Twine & | Name = "tmp" |
||
) |
CreateTempAlloca - This creates a alloca and inserts it into the entry block.
The caller is responsible for setting an appropriate alignment on the alloca.
Definition at line 69 of file CGExpr.cpp.
References AllocaInsertPt.
Referenced by CreateDefaultAlignTempAlloca(), CreateIRTemp(), CreateMemTemp(), CreateTempAlloca(), CreateTempAllocaForCoercion(), EmitAutoVarAlloca(), EmitCall(), EmitCUDADevicePrintfCallExpr(), EmitFunctionProlog(), EmitNewArrayInitializer(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsCall(), clang::CodeGen::emitUpdateLocation(), emitWritebackArg(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), GenerateBlockFunction(), getEHSelectorSlot(), getExceptionSlot(), InitCatchParam(), initFullExprCleanup(), clang::CodeGen::DominatingLLVMValue::save(), and SetupCleanupBlockActivation().
Address CodeGenFunction::CreateTempAlloca | ( | llvm::Type * | Ty, |
CharUnits | Align, | ||
const Twine & | Name = "tmp" |
||
) |
CreateTempAlloca - This creates a alloca and inserts it into the entry block.
Definition at line 60 of file CGExpr.cpp.
References CreateTempAlloca(), and clang::CharUnits::getQuantity().
|
inline |
Definition at line 1236 of file CodeGenFunction.h.
References CurSEHParent.
Referenced by EmitCall(), and getInvokeDestImpl().
void CodeGenFunction::DeactivateCleanupBlock | ( | EHScopeStack::stable_iterator | Cleanup, |
llvm::Instruction * | DominatingIP | ||
) |
DeactivateCleanupBlock - Deactivates the given cleanup block.
Deactive a cleanup that was created in an active state.
The block cannot be reactivated. Pops it if it's the top of the stack.
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 1193 of file CGCleanup.cpp.
References Builder, clang::CodeGen::EHCleanupScope(), ForDeactivation, and SetupCleanupBlockActivation().
Referenced by deactivateArgCleanupsBeforeCall(), EmitAnyExprToExn(), EmitCXXNewExpr(), EmitNewArrayInitializer(), and pushCleanupAfterFullExpr().
|
static |
Destroy a chain of block layouts.
Definition at line 669 of file CGBlocks.cpp.
References clang::CodeGen::CGBlockInfo::NextBlockInfo.
Referenced by ~CodeGenFunction().
|
inline |
Definition at line 1202 of file CodeGenFunction.h.
Referenced by emitDestructorsFunction(), emitProxyTaskFunction(), emitTaskDupFunction(), and emitTaskPrivateMappingFunction().
Definition at line 4785 of file CGBuiltin.cpp.
References Builder, ceil, CGM, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedStore(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::DoubleTy, EmitAArch64CompareBuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitAnyExprToMem(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonSplat(), EmitNounwindRuntimeCall(), EmitScalarExpr(), EmitSpecialRegisterBuiltin(), findNeonIntrinsicInMap(), clang::NeonTypeFlags::Float32, clang::NeonTypeFlags::Float64, clang::CodeGen::CodeGenTypeCache::FloatTy, floor, fma, clang::ASTContext::GE_None, clang::CallExpr::getArg(), clang::ASTContext::GetBuiltinType(), clang::CallExpr::getCallReturnType(), getContext(), clang::CallExpr::getDirectCallee(), clang::NeonTypeFlags::getEltType(), GetFloatNeonType(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), GetNeonType(), clang::CallExpr::getNumArgs(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSize(), getTypeSize(), getValue(), ID, clang::CodeGen::CodeGenTypeCache::Int16Ty, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::Address::invalid(), clang::Expr::isIntegerConstantExpr(), clang::NeonTypeFlags::isPoly(), clang::NeonTypeFlags::isQuad(), clang::NeonTypeFlags::isUnsigned(), min(), nearbyint, P, prefetch(), rint, rotate(), round, clang::CodeGen::CodeGenTypeCache::SizeTy, sqrt, trunc, clang::CodeGen::Type, vectorWrapScalar16(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by EmitTargetArchBuiltinExpr().
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 3761 of file CGBuiltin.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and clang::CodeGen::Type.
Referenced by EmitAArch64BuiltinExpr().
Definition at line 309 of file CGExprComplex.cpp.
References Builder, clang::Type::castAs(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), getContext(), clang::CodeGen::Address::getName(), and clang::ASTContext::getTypeSizeInChars().
Definition at line 303 of file CGExprComplex.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::Address::getName(), and clang::CharUnits::Zero().
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.
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 1437 of file CGExprAgg.cpp.
References CheckAggExprForMemSetUse(), clang::CodeGen::AggValueSlot::getAddress(), clang::Expr::getType(), hasAggregateEvaluationKind(), clang::CodeGen::AggValueSlot::isIgnored(), and clang::CodeGen::Address::isValid().
Referenced by EmitAggExprToLValue(), EmitAggMemberInitializer(), EmitAnyExpr(), EmitAnyExprToMem(), EmitAtomicInit(), EmitBaseInitializer(), EmitBlockLiteral(), EmitCallArg(), EmitCompoundStmtWithoutScope(), EmitCXXConstructExpr(), EmitDeclInit(), EmitDelegatingCXXConstructorCall(), EmitExprAsInit(), EmitMaterializeTemporaryExpr(), emitPseudoObjectExpr(), EmitReturnStmt(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), InitCatchParam(), and StoreAnyExprIntoOneUnit().
EmitAggExprToLValue - Emit the computation of the specified expression of aggregate type into a temporary LValue.
Definition at line 1449 of file CGExprAgg.cpp.
References CreateMemTemp(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), clang::CodeGen::AggValueSlot::forLValue(), clang::Expr::getType(), hasAggregateEvaluationKind(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, and MakeAddrLValue().
|
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 1795 of file CodeGenFunction.h.
References EmitAggregateCopy(), and hasVolatileMember().
Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), EmitOMPCopy(), EmitOMPFirstprivateClause(), and emitPrivatesInit().
void CodeGenFunction::EmitAggregateCopy | ( | Address | DestPtr, |
Address | SrcPtr, | ||
QualType | EltTy, | ||
bool | isVolatile = false , |
||
bool | isAssignment = false |
||
) |
EmitAggregateCopy - Emit an aggregate copy.
isVolatile | - True iff either the source or the destination is volatile. |
isAssignment | - If false, allow padding to be copied. This often yields more efficient. |
Definition at line 1459 of file CGExprAgg.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), emitArrayLength(), clang::CodeGen::CGObjCRuntime::EmitGCMemmoveCollectable(), clang::Type::getAs(), clang::ASTContext::getBaseElementType(), getContext(), clang::RecordType::getDecl(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CodeGenModule::getTBAAStructInfo(), clang::ASTContext::getTypeInfoDataSizeInChars(), clang::ASTContext::getTypeInfoInChars(), clang::RecordDecl::hasObjectMember(), clang::CXXRecordDecl::hasTrivialCopyAssignment(), clang::CXXRecordDecl::hasTrivialCopyConstructor(), clang::CXXRecordDecl::hasTrivialMoveAssignment(), clang::CXXRecordDecl::hasTrivialMoveConstructor(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::Type::isAnyComplexType(), clang::Type::isArrayType(), clang::CXXRecordDecl::isEmpty(), clang::TagDecl::isUnion(), clang::LangOptions::NonGC, and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by EmitAggregateAssign(), EmitAggregateCopyCtor(), EmitCall(), EmitCallArg(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitMemberInitializer(), clang::CodeGen::emitTaskInit(), generateObjCGetterBody(), and InitCatchParam().
|
inline |
Definition at line 1801 of file CodeGenFunction.h.
References EmitAggregateCopy().
Referenced by EmitCXXConstructorCall().
|
inline |
Definition at line 2088 of file CodeGenFunction.h.
References Builder, CGM, and clang::CodeGen::CodeGenModule::getDataLayout().
Referenced by emitAlignedClause(), and EmitCall().
Definition at line 7587 of file CGBuiltin.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateStore(), emitFPIntBuiltin(), EmitPointerWithAlignment(), emitRangedBuiltin(), EmitScalarExpr(), EmitSpecialRegisterBuiltin(), emitTernaryBuiltin(), emitUnaryBuiltin(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::Type, and X.
Referenced by EmitTargetArchBuiltinExpr().
llvm::Value * CodeGenFunction::EmitAnnotationCall | ( | llvm::Value * | AnnotationFn, |
llvm::Value * | AnnotatedVal, | ||
StringRef | AnnotationStr, | ||
SourceLocation | Location | ||
) |
Emit an annotation call (intrinsic or builtin).
Definition at line 1852 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::EmitAnnotationLineNo(), clang::CodeGen::CodeGenModule::EmitAnnotationString(), clang::CodeGen::CodeGenModule::EmitAnnotationUnit(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitFieldAnnotations(), and EmitVarAnnotations().
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.
ignoreResult | True if the resulting value isn't used. |
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 140 of file CGExpr.cpp.
References clang::CodeGen::AggValueSlot::asRValue(), CreateAggTemp(), EmitAggExpr(), EmitComplexExpr(), EmitScalarExpr(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getComplex(), getEvaluationKind(), clang::Expr::getType(), clang::CodeGen::AggValueSlot::isIgnored(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitAnyExprToTemp(), EmitIgnoredExpr(), EmitObjCBoxedExpr(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), emitPseudoObjectExpr(), EmitReturnStmt(), emitSimdlenSafelenClause(), and GenerateObjCAtomicGetterCopyHelperFunction().
Definition at line 357 of file CGException.cpp.
References Builder, clang::format::cleanup(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateBitCast(), DeactivateCleanupBlock(), clang::CodeGen::EHCleanup, EHStack, EmitAnyExprToMem(), clang::CodeGen::Address::getPointer(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::CodeGen::EHScopeStack::stable_begin(), and clang::CodeGen::Type.
void CodeGenFunction::EmitAnyExprToMem | ( | const Expr * | E, |
Address | Location, | ||
Qualifiers | Quals, | ||
bool | IsInit | ||
) |
EmitAnyExprToMem - Emits the code necessary to evaluate an arbitrary expression into the given memory location.
EmitAnyExprToMem - Evaluate an expression into a given memory location.
Definition at line 169 of file CGExpr.cpp.
References clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), EmitComplexExprIntoLValue(), EmitScalarExpr(), EmitStoreThroughLValue(), clang::CodeGen::AggValueSlot::forAddr(), clang::CodeGen::RValue::get(), getEvaluationKind(), clang::Expr::getType(), MakeAddrLValue(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitAArch64BuiltinExpr(), EmitAnyExprToExn(), EmitCompoundStmtWithoutScope(), emitInitWithReductionInitializer(), EmitMaterializeTemporaryExpr(), EmitObjCBoxedExpr(), EmitOMPAggregateInit(), EmitOMPFirstprivateClause(), clang::CodeGen::emitTaskLoopCall(), clang::CodeGen::emitThreadPrivateVarDefinition(), and EmitValToTemp().
EmitAnyExprToTemp - Similary to EmitAnyExpr(), however, the result will always be accessible even if no aggregate location is provided.
Definition at line 159 of file CGExpr.cpp.
References CreateAggTemp(), EmitAnyExpr(), clang::Expr::getType(), hasAggregateEvaluationKind(), and clang::CodeGen::AggValueSlot::ignored().
Referenced by EmitCallArg().
llvm::Value * CodeGenFunction::EmitARCAutorelease | ( | llvm::Value * | value | ) |
Autorelease the given object.
call i8* @objc_autorelease(i8* value)
Definition at line 2154 of file CGObjC.cpp.
References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_autorelease.
Referenced by EmitARCRetainAutorelease(), and EmitARCRetainAutoreleaseScalarExpr().
llvm::Value * CodeGenFunction::EmitARCAutoreleaseReturnValue | ( | llvm::Value * | value | ) |
Autorelease the given object.
call i8* @objc_autoreleaseReturnValue(i8* value)
Definition at line 2163 of file CGObjC.cpp.
References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::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 2281 of file CGObjC.cpp.
References emitARCCopyOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_copyWeak.
Referenced by GenerateCopyHelperFunction(), and tryEmitARCCopyWeakInit().
void CodeGenFunction::EmitARCDestroyStrong | ( | Address | addr, |
ARCPreciseLifetime_t | precise | ||
) |
Destroy a __strong variable.
At -O0, emit a call to store 'null' into the address; instrumenting tools prefer this because the address is exposed, but it's relatively cumbersome to optimize.
At -O1 and above, just load and call objc_release.
call void @objc_storeStrong(i8** addr, i8* null)
Definition at line 2079 of file CGObjC.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), EmitARCRelease(), EmitARCStoreStrongCall(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and getNullForVariable().
Referenced by EmitObjectDelete(), and GenerateDestroyHelperFunction().
void CodeGenFunction::EmitARCDestroyWeak | ( | Address | addr | ) |
void @objc_destroyWeak(i8** addr) Essentially objc_storeWeak(addr, nil).
Definition at line 2255 of file CGObjC.cpp.
References Builder, createARCRuntimeFunction(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, and clang::CodeGen::ObjCEntrypoints::objc_destroyWeak.
Referenced by EmitObjectDelete(), and GenerateDestroyHelperFunction().
llvm::Value * CodeGenFunction::EmitARCExtendBlockObject | ( | const Expr * | expr | ) |
Definition at line 2953 of file CGObjC.cpp.
References EmitARCRetainBlock(), EmitObjCConsumeObject(), EmitScalarExpr(), clang::Expr::getType(), shouldEmitSeparateBlockRetain(), and tryEmitARCRetainScalarExpr().
void CodeGenFunction::EmitARCInitWeak | ( | Address | addr, |
llvm::Value * | value | ||
) |
i8* @objc_initWeak(i8** addr, i8* value) Returns value.
addr is known to not have a current weak entry. Essentially equivalent to: *addr = nil; objc_storeWeak(addr, value);
Definition at line 2237 of file CGObjC.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStore(), emitARCStoreOperation(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_initWeak.
Referenced by clang::CodeGen::CGObjCRuntime::EmitInitOfCatchParam(), EmitParmDecl(), EmitScalarInit(), 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 1783 of file CGObjC.cpp.
References clang::CodeGen::ObjCEntrypoints::clang_arc_use, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::None, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitObjCCollectionLiteral(), and emitWriteback().
llvm::Value * CodeGenFunction::EmitARCLoadWeak | ( | Address | addr | ) |
i8* @objc_loadWeak(i8** addr) Essentially objc_autorelease(objc_loadWeakRetained(addr)).
Definition at line 2210 of file CGObjC.cpp.
References emitARCLoadOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_loadWeak.
Referenced by generateObjCGetterBody().
llvm::Value * CodeGenFunction::EmitARCLoadWeakRetained | ( | Address | addr | ) |
i8* @objc_loadWeakRetained(i8** addr)
Definition at line 2217 of file CGObjC.cpp.
References emitARCLoadOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_loadWeakRetained.
Referenced by EmitObjCMessageExpr(), and tryEmitARCRetainLoadOfScalar().
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 2272 of file CGObjC.cpp.
References emitARCCopyOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_moveWeak.
Referenced by tryEmitARCCopyWeakInit().
llvm::Value * CodeGenFunction::EmitARCReclaimReturnedObject | ( | const Expr * | e, |
bool | allowUnsafeClaim | ||
) |
Definition at line 2534 of file CGObjC.cpp.
References emitARCRetainCallResult(), emitARCUnsafeClaimCallResult(), EmitObjCConsumeObject(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::Expr::getType(), clang::ObjCRuntime::hasARCUnsafeClaimAutoreleasedReturnValue(), and clang::LangOptions::ObjCRuntime.
void CodeGenFunction::EmitARCRelease | ( | llvm::Value * | value, |
ARCPreciseLifetime_t | precise | ||
) |
Release the given object.
call void @objc_release(i8* value)
Definition at line 2047 of file CGObjC.cpp.
References clang::CodeGen::ARCImpreciseLifetime, Builder, createARCRuntimeFunction(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::None, and clang::CodeGen::ObjCEntrypoints::objc_release.
Referenced by EmitARCDestroyStrong(), EmitARCStoreStrong(), EmitScalarInit(), and emitWriteback().
llvm::Value * CodeGenFunction::EmitARCRetain | ( | QualType | type, |
llvm::Value * | value | ||
) |
Produce the code to do a retain.
Based on the type, calls one of: call i8* @objc_retain(i8* value) call i8* @objc_retainBlock(i8* value)
Definition at line 1931 of file CGObjC.cpp.
References EmitARCRetainBlock(), EmitARCRetainNonBlock(), and clang::Type::isBlockPointerType().
Referenced by emitARCRetainLoadOfScalar(), EmitARCRetainScalarExpr(), EmitARCStoreStrong(), and EmitScalarInit().
llvm::Value * CodeGenFunction::EmitARCRetainAutorelease | ( | QualType | type, |
llvm::Value * | value | ||
) |
Do a fused retain/autorelease of the given object.
call i8* @objc_retainAutorelease(i8* value) or retain = call i8* @objc_retainBlock(i8* value) call i8* @objc_autorelease(i8* retain)
Definition at line 2185 of file CGObjC.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitARCAutorelease(), EmitARCRetainAutoreleaseNonBlock(), EmitARCRetainBlock(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::Type::isBlockPointerType(), and clang::CodeGen::Type.
Referenced by EmitARCRetainAutoreleaseScalarExpr(), EmitObjCExtendObjectLifetime(), EmitObjCMessageExpr(), and EmitScalarInit().
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleasedReturnValue | ( | llvm::Value * | value | ) |
Retain the given object which is the result of a function call.
call i8* @objc_retainAutoreleasedReturnValue(i8* value)
Yes, this function name is one character away from a different call with completely different semantics.
Definition at line 2023 of file CGObjC.cpp.
References emitARCValueOperation(), emitAutoreleasedReturnValueMarker(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retainAutoreleasedReturnValue.
Referenced by emitARCRetainCallResult().
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseNonBlock | ( | llvm::Value * | value | ) |
Do a fused retain/autorelease of the given object.
call i8* @objc_retainAutorelease(i8* value)
Definition at line 2202 of file CGObjC.cpp.
References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retainAutorelease.
Referenced by EmitARCRetainAutorelease().
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseReturnValue | ( | llvm::Value * | value | ) |
Do a fused retain/autorelease of the given object.
call i8* @objc_retainAutoreleaseReturnValue(i8* value)
Definition at line 2173 of file CGObjC.cpp.
References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retainAutoreleaseReturnValue.
Referenced by tryEmitFusedAutoreleaseOfResult().
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseScalarExpr | ( | const Expr * | expr | ) |
Definition at line 2936 of file CGObjC.cpp.
References EmitARCAutorelease(), EmitARCRetainAutorelease(), enterFullExpression(), clang::Expr::getType(), and tryEmitARCRetainScalarExpr().
Referenced by EmitARCStoreAutoreleasing(), EmitObjCThrowOperand(), and EmitScalarInit().
llvm::Value * CodeGenFunction::EmitARCRetainBlock | ( | llvm::Value * | value, |
bool | mandatory | ||
) |
Retain the given block, with _Block_copy semantics.
call i8* @objc_retainBlock(i8* value)
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 1952 of file CGObjC.cpp.
References Builder, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::None, and clang::CodeGen::ObjCEntrypoints::objc_retainBlock.
Referenced by EmitARCExtendBlockObject(), EmitARCRetain(), EmitARCRetainAutorelease(), and EmitARCStoreStrong().
llvm::Value * CodeGenFunction::EmitARCRetainNonBlock | ( | llvm::Value * | value | ) |
Retain the given object, with normal retain semantics.
call i8* @objc_retain(i8* value)
Definition at line 1940 of file CGObjC.cpp.
References emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retain.
Referenced by EmitARCRetain(), emitARCRetainCallResult(), EmitBlockLiteral(), clang::CodeGen::CGObjCRuntime::EmitInitOfCatchParam(), EmitObjCMessageExpr(), EmitParmDecl(), emitWriteback(), GenerateCopyHelperFunction(), and InitCatchParam().
llvm::Value * CodeGenFunction::EmitARCRetainScalarExpr | ( | const Expr * | e | ) |
EmitARCRetainScalarExpr - Semantically equivalent to EmitARCRetainObject(e->getType(), EmitScalarExpr(e)), but making a best-effort attempt to peephole expressions that naturally produce retained objects.
Definition at line 2920 of file CGObjC.cpp.
References EmitARCRetain(), enterFullExpression(), clang::Expr::getType(), and tryEmitARCRetainScalarExpr().
Referenced by clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitObjCForCollectionStmt(), and EmitScalarInit().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreAutoreleasing | ( | const BinaryOperator * | e | ) |
Definition at line 3109 of file CGObjC.cpp.
References EmitARCRetainAutoreleaseScalarExpr(), EmitLValue(), EmitStoreOfScalar(), clang::BinaryOperator::getLHS(), and clang::BinaryOperator::getRHS().
llvm::Value * CodeGenFunction::EmitARCStoreStrong | ( | LValue | dst, |
llvm::Value * | newValue, | ||
bool | ignored | ||
) |
Store into a strong object.
Sometimes calls this: call void @objc_storeStrong(i8** addr, i8* value) Other times, breaks it down into components.
Definition at line 2119 of file CGObjC.cpp.
References EmitARCRelease(), EmitARCRetain(), EmitARCStoreStrongCall(), EmitLoadOfScalar(), EmitStoreOfScalar(), clang::CharUnits::fromQuantity(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignment(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isARCPreciseLifetime(), clang::Type::isBlockPointerType(), clang::CharUnits::isZero(), clang::CodeGen::CodeGenTypeCache::PointerAlignInBytes, shouldUseFusedARCCalls(), and clang::ast_matchers::type.
Referenced by EmitARCStoreStrong().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreStrong | ( | const BinaryOperator * | e, |
bool | ignored | ||
) |
Definition at line 3078 of file CGObjC.cpp.
References EmitARCRelease(), EmitARCRetainBlock(), EmitARCStoreStrong(), EmitLoadOfScalar(), EmitLValue(), EmitStoreOfScalar(), clang::BinaryOperator::getLHS(), clang::BinaryOperator::getRHS(), clang::Expr::getType(), clang::CodeGen::LValue::isARCPreciseLifetime(), clang::Type::isBlockPointerType(), and tryEmitARCRetainScalarExpr().
llvm::Value * CodeGenFunction::EmitARCStoreStrongCall | ( | Address | addr, |
llvm::Value * | value, | ||
bool | ignored | ||
) |
Store into a strong object.
Always calls this: call void @objc_storeStrong(i8** addr, i8* value)
Definition at line 2093 of file CGObjC.cpp.
References Builder, createARCRuntimeFunction(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNounwindRuntimeCall(), clang::CodeGen::Address::getElementType(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::ObjCEntrypoints::objc_storeStrong, and clang::CodeGen::Type.
Referenced by destroyARCStrongWithStore(), EmitARCDestroyStrong(), EmitARCStoreStrong(), EmitParmDecl(), and GenerateCopyHelperFunction().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreUnsafeUnretained | ( | const BinaryOperator * | e, |
bool | ignored | ||
) |
Definition at line 3059 of file CGObjC.cpp.
References EmitARCUnsafeUnretainedScalarExpr(), EmitLValue(), EmitScalarExpr(), EmitStoreOfScalar(), clang::BinaryOperator::getLHS(), and clang::BinaryOperator::getRHS().
llvm::Value * CodeGenFunction::EmitARCStoreWeak | ( | Address | addr, |
llvm::Value * | value, | ||
bool | ignored | ||
) |
i8* @objc_storeWeak(i8** addr, i8* value) Returns value.
Definition at line 2225 of file CGObjC.cpp.
References emitARCStoreOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_storeWeak.
Referenced by EmitScalarInit().
llvm::Value * CodeGenFunction::EmitARCUnsafeClaimAutoreleasedReturnValue | ( | llvm::Value * | value | ) |
Claim a possibly-autoreleased return value at +0.
This is only valid to do in contexts which do not rely on the retain to keep the object valid for for all of its uses; for example, when the value is ignored, or when it is being assigned to an __unsafe_unretained variable.
call i8* @objc_unsafeClaimAutoreleasedReturnValue(i8* value)
Definition at line 2038 of file CGObjC.cpp.
References emitARCValueOperation(), emitAutoreleasedReturnValueMarker(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_unsafeClaimAutoreleasedReturnValue.
Referenced by emitARCUnsafeClaimCallResult().
llvm::Value * CodeGenFunction::EmitARCUnsafeUnretainedScalarExpr | ( | const Expr * | e | ) |
EmitARCUnsafeUnretainedScalarExpr - Semantically equivalent to immediately releasing the resut of EmitARCRetainScalarExpr, but avoiding any spurious retains, including by performing reclaims with objc_unsafeClaimAutoreleasedReturnValue.
Definition at line 3047 of file CGObjC.cpp.
References emitARCUnsafeUnretainedScalarExpr(), and enterFullExpression().
Referenced by EmitARCStoreUnsafeUnretained(), and EmitScalarInit().
Definition at line 3955 of file CGBuiltin.cpp.
References Builder, CGM, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedStore(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenTypeCache::DoubleTy, EmitCommonNeonBuiltinExpr(), EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonShiftVector(), EmitNeonSplat(), EmitNounwindRuntimeCall(), EmitPointerWithAlignment(), EmitScalarExpr(), EmitSpecialRegisterBuiltin(), clang::Expr::EvaluateAsInt(), findNeonIntrinsicInMap(), clang::CodeGen::CodeGenTypeCache::FloatTy, clang::ASTContext::GE_None, clang::CallExpr::getArg(), clang::ASTContext::GetBuiltinType(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CallExpr::getDirectCallee(), clang::CodeGen::Address::getElementType(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), GetNeonType(), clang::CallExpr::getNumArgs(), clang::CodeGen::Address::getPointer(), getTarget(), clang::TargetInfo::getTriple(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSize(), getTypeSize(), HasExtraNeonArgument(), ID, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::Address::invalid(), clang::Expr::isIntegerConstantExpr(), prefetch(), clang::CodeGen::Type, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitTargetArchBuiltinExpr().
void CodeGenFunction::emitArrayDestroy | ( | llvm::Value * | begin, |
llvm::Value * | end, | ||
QualType | elementType, | ||
CharUnits | elementAlign, | ||
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.
begin | - a type* denoting the first element of the array |
end | - a type* denoting one past the end of the array |
elementType | - 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 1544 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, | ||
Address & | 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 1543 of file CodeGenFunction.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::Address::getAlignment(), clang::ASTContext::getAsArrayType(), getContext(), clang::CodeGen::Address::getElementType(), clang::ArrayType::getElementType(), clang::CodeGen::Address::getPointer(), getVLASize(), clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::CodeGen::Type.
Referenced by EmitAggregateCopy(), EmitCXXAggrConstructorCall(), emitDestroy(), EmitOMPAggregateAssign(), EmitOMPAggregateInit(), and EmitOMPAggregateReduction().
LValue CodeGenFunction::EmitArraySubscriptExpr | ( | const ArraySubscriptExpr * | E, |
bool | Accessed = false |
||
) |
Definition at line 2869 of file CGExpr.cpp.
References Builder, clang::Type::castAs(), emitArraySubscriptGEP(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::LValue::getAlignmentSource(), getArrayElementAlign(), clang::Type::getAs(), clang::ArraySubscriptExpr::getBase(), clang::CodeGen::Address::getElementType(), clang::ArraySubscriptExpr::getIdx(), clang::CodeGen::Address::getPointer(), clang::CharUnits::getQuantity(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::CodeGen::LValue::getType(), clang::Expr::isOBJCGCCandidate(), clang::Type::isSignedIntegerOrEnumerationType(), clang::CodeGen::LValue::isSimple(), isSimpleArrayDecayOperand(), clang::Type::isVectorType(), clang::LangOptions::NonGC, clang::CodeGen::LValue::setNonGC(), setObjCGCLValueClass(), and clang::CharUnits::Zero().
Address CodeGenFunction::EmitArrayToPointerDecay | ( | const Expr * | Array, |
AlignmentSource * | AlignSource = nullptr |
||
) |
Definition at line 2763 of file CGExpr.cpp.
References Builder, clang::Type::castAsArrayTypeUnsafe(), clang::ArrayType::getElementType(), clang::Expr::getType(), clang::Type::isArrayType(), clang::Type::isVariableArrayType(), and clang::CharUnits::Zero().
void CodeGenFunction::EmitAsanPrologueOrEpilogue | ( | bool | Prologue | ) |
Definition at line 854 of file CGClass.cpp.
References Builder, CGM, Context, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), CurGD, clang::RecordDecl::fields(), clang::ASTContext::getASTRecordLayout(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::GlobalDecl::getDecl(), clang::ASTRecordLayout::getFieldCount(), clang::ASTRecordLayout::getFieldOffset(), clang::ASTRecordLayout::getNonVirtualSize(), clang::CharUnits::getQuantity(), clang::ValueDecl::getType(), clang::ASTContext::getTypeInfoInChars(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::FieldDecl::isBitField(), LoadCXXThis(), clang::RecordDecl::mayInsertExtraPadding(), clang::ASTContext::toCharUnitsFromBits(), clang::CodeGen::Type, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitConstructorBody(), and EmitDestructorBody().
void CodeGenFunction::EmitAsmStmt | ( | const AsmStmt & | S | ) |
Definition at line 1791 of file CGStmt.cpp.
References clang::CodeGen::TargetCodeGenInfo::addReturnRegisterOutputs(), AddVariableConstraints(), clang::CodeGen::TargetCodeGenInfo::adjustInlineAsmType(), clang::TargetInfo::ConstraintInfo::allowsMemory(), clang::TargetInfo::ConstraintInfo::allowsRegister(), Builder, CGM, ConvertType(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CurFnInfo, clang::TargetInfo::ConstraintInfo::earlyClobber(), EmitLValue(), EmitStoreThroughLValue(), FnRetTy, clang::AsmStmt::generateAsmString(), clang::CodeGen::RValue::get(), clang::AsmStmt::getAsmLoc(), getAsmSrcLocInfo(), clang::AsmStmt::getClobber(), clang::TargetInfo::getClobbers(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CodeGenModule::getDiags(), clang::Expr::getExprLoc(), clang::AsmStmt::getInputConstraint(), clang::AsmStmt::getInputExpr(), getLangOpts(), 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(), 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::Name, clang::DiagnosticsEngine::Report(), ReturnValue, S, SawAsmBlock, SimplifyConstraint(), clang::CodeGen::Type, clang::TargetInfo::validateInputConstraint(), clang::TargetInfo::validateOutputConstraint(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitStmt().
std::pair< RValue, llvm::Value * > CodeGenFunction::EmitAtomicCompareExchange | ( | LValue | Obj, |
RValue | Expected, | ||
RValue | Desired, | ||
SourceLocation | Loc, | ||
llvm::AtomicOrdering | Success = llvm::AtomicOrdering::SequentiallyConsistent , |
||
llvm::AtomicOrdering | Failure = llvm::AtomicOrdering::SequentiallyConsistent , |
||
bool | IsWeak = false , |
||
AggValueSlot | Slot = AggValueSlot::ignored() |
||
) |
Emit a compare-and-exchange op for atomic type.
Definition at line 1791 of file CGAtomic.cpp.
References clang::CodeGen::LValue::getAddress(), clang::CodeGen::RValue::getAggregateAddress(), clang::CodeGen::Address::getElementType(), and clang::CodeGen::RValue::isAggregate().
RValue CodeGenFunction::EmitAtomicExpr | ( | AtomicExpr * | E | ) |
Definition at line 661 of file CGAtomic.cpp.
References clang::CodeGen::CallArgList::add(), AddDirectArgument(), clang::prec::And, clang::ASTContext::BoolTy, Builder, CGM, convertTempToRValue(), ConvertTypeForMem(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), CurFn, EmitAtomicInit(), emitAtomicLibcall(), EmitAtomicOp(), EmitCastToVoidPtr(), EmitPointerWithAlignment(), EmitScalarExpr(), EmitStoreOfScalar(), EmitValToTemp(), clang::CodeGen::RValue::get(), clang::Type::getAs(), getContext(), clang::Expr::getExprLoc(), clang::ASTContext::getIntPtrType(), clang::ASTContext::getIntTypeForBitwidth(), clang::TargetInfo::getMaxAtomicInlineWidth(), clang::AtomicExpr::getNumSubExprs(), clang::AtomicExpr::getOp(), clang::AtomicExpr::getOrder(), clang::AtomicExpr::getOrderFail(), clang::Type::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::AtomicExpr::getPtr(), clang::CharUnits::getQuantity(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenModule::getSize(), getTarget(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::ASTContext::getTypeInfoInChars(), clang::ASTContext::getTypeSizeInChars(), clang::QualType::getUnqualifiedType(), clang::AtomicExpr::getVal1(), clang::AtomicExpr::getVal2(), clang::AtomicExpr::getWeak(), clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::Address::invalid(), clang::AtomicExpr::isCmpXChg(), clang::Type::isPointerType(), clang::CodeGen::Address::isValid(), clang::Type::isVoidType(), MakeAddrLValue(), clang::CodeGen::CodeGenTypeCache::SizeTy, clang::ASTContext::toBits(), clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Definition at line 1816 of file CGAtomic.cpp.
References clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), EmitComplexExpr(), EmitScalarExpr(), clang::CodeGen::AggValueSlot::forLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getComplex(), clang::Expr::getType(), clang::Type::isAtomicType(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, clang::CodeGen::AggValueSlot::IsNotZeroed, clang::CodeGen::AggValueSlot::IsZeroed, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitAtomicExpr(), and EmitExprAsInit().
RValue CodeGenFunction::EmitAtomicLoad | ( | LValue | LV, |
SourceLocation | SL, | ||
AggValueSlot | Slot = AggValueSlot::ignored() |
||
) |
Definition at line 1284 of file CGAtomic.cpp.
References clang::CodeGen::LValue::getType(), clang::Type::isAtomicType(), and clang::CodeGen::LValue::isVolatileQualified().
Referenced by EmitOMPAtomicReadExpr().
RValue CodeGenFunction::EmitAtomicLoad | ( | LValue | src, |
SourceLocation | loc, | ||
llvm::AtomicOrdering | AO, | ||
bool | IsVolatile = false , |
||
AggValueSlot | resultSlot = AggValueSlot::ignored() |
||
) |
Emit a load from an l-value of atomic type.
Note that the r-value we produce is an r-value of the atomic value type.
Definition at line 1330 of file CGAtomic.cpp.
Definition at line 1706 of file CGAtomic.cpp.
References clang::CodeGen::LValue::getType(), clang::Type::isAtomicType(), and clang::CodeGen::LValue::isVolatileQualified().
Referenced by emitSimpleAtomicStore().
void CodeGenFunction::EmitAtomicStore | ( | RValue | rvalue, |
LValue | dest, | ||
llvm::AtomicOrdering | AO, | ||
bool | IsVolatile, | ||
bool | isInit | ||
) |
Emit a store to an l-value of atomic type.
Note that the r-value is expected to be an r-value of the atomic type; this means that for aggregate r-values, it should include storage for any padding that was necessary.
Definition at line 1724 of file CGAtomic.cpp.
References clang::CodeGen::CallArgList::add(), Builder, CGM, clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenModule::DecorateInstructionWithTBAA(), emitAtomicLibcall(), EmitCastToVoidPtr(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::RValue::getAggregateAddress(), getContext(), clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getSizeType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::RValue::isAggregate(), clang::CodeGen::LValue::isSimple(), clang::ASTContext::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
void CodeGenFunction::EmitAtomicUpdate | ( | LValue | LVal, |
llvm::AtomicOrdering | AO, | ||
const llvm::function_ref< RValue(RValue)> & | UpdateOp, | ||
bool | IsVolatile | ||
) |
Definition at line 1809 of file CGAtomic.cpp.
Referenced by EmitOMPAtomicSimpleUpdateExpr().
void CodeGenFunction::EmitAttributedStmt | ( | const AttributedStmt & | S | ) |
Definition at line 518 of file CGStmt.cpp.
References EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitStmt(), EmitWhileStmt(), clang::AttributedStmt::getAttrs(), and clang::AttributedStmt::getSubStmt().
Referenced by EmitSimpleStmt().
CodeGenFunction::AutoVarEmission CodeGenFunction::EmitAutoVarAlloca | ( | const VarDecl & | D | ) |
EmitAutoVarAlloca - Emit the alloca and debug information for a local variable.
Does not emit initialization or destruction.
Definition at line 953 of file CGDecl.cpp.
References Builder, CGM, ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAlloca(), EmitLifetimeStart(), EmitStaticVarDecl(), EmitVarAnnotations(), EmitVariablyModifiedType(), EnsureInsertPoint(), clang::Type::getAs(), clang::ASTContext::getBaseElementType(), getBlockByrefInfo(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::TargetInfo::getCXXABI(), clang::CodeGen::CodeGenModule::getDataLayout(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::VarDecl::getInit(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLangOpts(), clang::NamedDecl::getName(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), getTarget(), clang::ValueDecl::getType(), getVLASize(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::InternalLinkage, clang::CodeGen::Address::invalid(), clang::Type::isArrayType(), clang::Expr::isConstantInitializer(), clang::Type::isConstantSizeType(), clang::VarDecl::isConstexpr(), clang::VarDecl::isExceptionVariable(), clang::TargetCXXABI::isMicrosoft(), 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, clang::CharUnits::One(), pushStackRestore(), ReturnValue, Stack, clang::CodeGen::Type, and clang::CodeGen::CodeGenFunction::AutoVarEmission::useLifetimeMarkers().
Referenced by EmitAutoVarDecl(), EmitObjCForCollectionStmt(), EmitOMPFirstprivateClause(), EmitOMPLinearClauseInit(), EmitOMPPrivateLoopCounters(), and EmitOMPReductionClauseInit().
void CodeGenFunction::EmitAutoVarCleanups | ( | const AutoVarEmission & | emission | ) |
Definition at line 1382 of file CGDecl.cpp.
References clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), CGM, EHStack, emitAutoVarTypeCleanup(), enterByrefCleanup(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getAllocatedAddress(), getLangOpts(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getSizeForLifetimeMarkers(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), HaveInsertPoint(), clang::QualType::isDestructedType(), clang::LangOptions::NonGC, clang::CodeGen::NormalAndEHCleanup, clang::CodeGen::NormalCleanup, clang::CodeGen::NormalEHLifetimeMarker, and clang::CodeGen::CodeGenFunction::AutoVarEmission::useLifetimeMarkers().
Referenced by EmitAutoVarDecl(), EmitObjCForCollectionStmt(), EmitOMPFirstprivateClause(), EmitOMPLinearClauseInit(), EmitOMPPrivateLoopCounters(), and EmitOMPReductionClauseInit().
void CodeGenFunction::EmitAutoVarDecl | ( | const VarDecl & | D | ) |
EmitAutoVarDecl - Emit an auto variable declaration.
EmitAutoVarDecl - Emit code and set up an entry in LocalDeclMap for a variable declaration with auto, register, or no storage class specifier.
This function can be called with a null (unreachable) insert point.
These turn into simple stack objects, or GlobalValues depending on target.
Definition at line 904 of file CGDecl.cpp.
References EmitAutoVarAlloca(), EmitAutoVarCleanups(), and EmitAutoVarInit().
Referenced by EmitForStmt(), EmitIfStmt(), EmitInitializerForField(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitVarDecl(), and EmitWhileStmt().
void CodeGenFunction::EmitAutoVarInit | ( | const AutoVarEmission & | emission | ) |
Definition at line 1178 of file CGDecl.cpp.
References Builder, CGM, ContainsLabel(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::ApplyDebugLocation::CreateDefaultArtificial(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), clang::CodeGen::CGBuilderTy::CreateMemSet(), emitByrefStructureInit(), clang::CodeGen::CodeGenModule::EmitConstantInit(), EmitExprAsInit(), emitStoresForInitAfterMemset(), EmitStoreThroughLValue(), EnsureInsertPoint(), clang::CodeGen::RValue::get(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::VarDecl::getInit(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), clang::CodeGen::Address::getPointer(), clang::CharUnits::getQuantity(), getStaticDeclName(), clang::CodeGen::Address::getType(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, isCapturedBy(), clang::VarDecl::isConstexpr(), isTrivialInitializer(), MakeAddrLValue(), clang::Name, clang::CodeGen::LValue::setNonGC(), shouldUseMemSetPlusStoresToInitialize(), clang::CodeGen::Type, and clang::ast_matchers::type.
Referenced by EmitAutoVarDecl(), EmitObjCForCollectionStmt(), and EmitOMPReductionClauseInit().
void CodeGenFunction::emitAutoVarTypeCleanup | ( | const AutoVarEmission & | emission, |
QualType::DestructionKind | dtorKind | ||
) |
Enter a destroy cleanup for the given local variable.
Definition at line 1325 of file CGDecl.cpp.
References destroyARCStrongImprecise, clang::QualType::DK_cxx_destructor, clang::QualType::DK_none, clang::QualType::DK_objc_strong_lifetime, clang::QualType::DK_objc_weak_lifetime, clang::CodeGen::EHCleanup, EHStack, getARCCleanupKind(), clang::Type::getAsCXXRecordDecl(), getDestroyer(), clang::CXXRecordDecl::getDestructor(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), clang::ValueDecl::getType(), clang::VarDecl::isARCPseudoStrong(), clang::Type::isArrayType(), clang::CodeGen::NormalAndEHCleanup, and clang::ast_matchers::type.
Referenced by EmitAutoVarCleanups().
LValue CodeGenFunction::EmitBinaryOperatorLValue | ( | const BinaryOperator * | E | ) |
Definition at line 3811 of file CGExpr.cpp.
References clang::BinaryOperator::getLHS(), clang::QualType::getObjCLifetime(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), clang::Expr::getType(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
EmitBlock - Emit the given block.
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 397 of file CGStmt.cpp.
References Builder, CurFn, and EmitBranch().
Referenced by EmitAggMemberInitializer(), emitArrayDestroy(), clang::CodeGen::emitBarrierCall(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitCall(), EmitCallOrInvoke(), clang::CodeGen::emitCancellationPointCall(), emitCatchDispatchBlock(), EmitCleanup(), EmitCtorPrologue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryFooter(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), emitFilterDispatchBlock(), EmitForStmt(), EmitIfStmt(), EmitLabel(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjCForCollectionStmt(), EmitOMPAggregateAssign(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), EmitOMPCopyinClause(), EmitOMPDistributeLoop(), emitOMPIfClause(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLinearClauseFinal(), EmitOMPSimdDirective(), emitPostUpdateForReductionClause(), EmitReturnBlock(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitVTablePtrCheckForCast(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), FinishFunction(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), and PerformReturnAdjustment().
void CodeGenFunction::EmitBlockAfterUses | ( | llvm::BasicBlock * | BB | ) |
EmitBlockAfterUses - Emit the given block somewhere hopefully near its uses, and leave the insertion point in it.
Definition at line 434 of file CGStmt.cpp.
References Builder, and CurFn.
Referenced by emitCatchDispatchBlock(), emitCatchPadBlock(), emitFilterDispatchBlock(), ExitCXXTryStmt(), and ExitSEHTryStmt().
Address CodeGenFunction::emitBlockByrefAddress | ( | Address | baseAddr, |
const VarDecl * | V, | ||
bool | followForward = true |
||
) |
BuildBlockByrefAddress - Computes the location of the data in a variable which is declared as __block.
Definition at line 2028 of file CGBlocks.cpp.
References getBlockByrefInfo(), and clang::NamedDecl::getName().
Referenced by drillIntoBlockVariable(), EmitScalarInit(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GetAddrOfBlockDecl(), and clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress().
Address CodeGenFunction::emitBlockByrefAddress | ( | Address | baseAddr, |
const BlockByrefInfo & | info, | ||
bool | followForward, | ||
const llvm::Twine & | name | ||
) |
Definition at line 2035 of file CGBlocks.cpp.
References Builder, clang::CodeGen::BlockByrefInfo::ByrefAlignment, clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::BlockByrefInfo::FieldIndex, clang::CodeGen::BlockByrefInfo::FieldOffset, and clang::CodeGen::CodeGenTypeCache::getPointerSize().
RValue CodeGenFunction::EmitBlockCallExpr | ( | const CallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 963 of file CGBlocks.cpp.
References clang::CodeGen::CallArgList::add(), clang::CallExpr::arguments(), clang::CodeGen::CodeGenTypes::arrangeBlockFunctionCall(), Builder, clang::Type::castAs(), CGM, clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), EmitCall(), EmitCallArgs(), EmitScalarExpr(), clang::CodeGen::RValue::get(), clang::Type::getAs(), clang::CallExpr::getCallee(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getGenericBlockLiteralType(), clang::BlockPointerType::getPointeeType(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
llvm::Value * CodeGenFunction::EmitBlockCopyAndAutorelease | ( | llvm::Value * | Block, |
QualType | Ty | ||
) |
Definition at line 3345 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::IdentifierTable::get(), getContext(), clang::SelectorTable::getNullarySelector(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::RValue::getScalarVal(), clang::ASTContext::Idents, clang::Result, and clang::ASTContext::Selectors.
llvm::Value * CodeGenFunction::EmitBlockLiteral | ( | const BlockExpr * | blockExpr | ) |
Emit a block literal expression in the current function.
Definition at line 679 of file CGBlocks.cpp.
References CGM, computeBlockInfo(), CurFn, findAndRemoveBlockInfo(), FirstBlockInfo, clang::BlockExpr::getBlockDecl(), and clang::BlockDecl::hasCaptures().
llvm::Value * CodeGenFunction::EmitBlockLiteral | ( | const CGBlockInfo & | Info | ) |
Definition at line 698 of file CGBlocks.cpp.
References ActivateCleanupBlock(), 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, BlockInfo, buildBlockDescriptor(), Builder, buildGlobalBlock(), clang::CodeGen::CGBlockInfo::CanBeGlobal, clang::BlockDecl::captures(), clang::BlockDecl::capturesCXXThis(), CGM, clang::format::cleanup(), ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CurGD, clang::CodeGen::CGBlockInfo::CXXThisIndex, clang::CodeGen::CGBlockInfo::CXXThisOffset, clang::CodeGen::Decl, clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::CGBlockInfo::DominatingIP, EmitAggExpr(), EmitARCRetainNonBlock(), EmitDeclRefLValue(), EmitExprAsInit(), EmitSynthesizedCXXCopyCtor(), clang::CodeGen::AggValueSlot::forAddr(), GenerateBlockFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CGBlockInfo::Capture::getCleanup(), getContext(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), clang::CodeGen::CodeGenTypeCache::getIntSize(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getNSConcreteStackBlock(), clang::QualType::getObjCLifetime(), clang::CodeGen::CGBlockInfo::Capture::getOffset(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CGBlockInfo::HasCapturedVariableLayout, clang::CodeGen::CGBlockInfo::HasCXXObject, I, clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::Address::invalid(), clang::isa(), clang::Type::isBlockPointerType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::BlockDecl::isConversionFromLambda(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::Type::isReferenceType(), clang::CodeGen::Address::isValid(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), LoadBlockStruct(), LoadCXXThis(), clang::CodeGen::CGBlockInfo::LocalAddress, MakeAddrLValue(), 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, |
const Stmt * | S | ||
) |
When instrumenting to collect profile data, the counts for some blocks such as switch cases need to not include the fall-through counts, so emit a branch around the instrumentation code.
When not instrumenting, this just calls EmitBlock().
Definition at line 919 of file CodeGenFunction.cpp.
References CGM, createBasicBlock(), EmitBlock(), EmitBranch(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getCurrentProfileCount(), clang::CodeGenOptions::hasProfileClangInstr(), HaveInsertPoint(), incrementProfileCounter(), and setCurrentProfileCount().
Referenced by EmitCaseStmt(), EmitCaseStmtRange(), EmitDefaultStmt(), and EmitDoStmt().
void CodeGenFunction::EmitBoundsCheck | ( | const Expr * | E, |
const Expr * | Base, | ||
llvm::Value * | Index, | ||
QualType | IndexType, | ||
bool | Accessed | ||
) |
Emit a check that Base
points into an array object, which we can access at index Index
.
Accessed
should be false
if we this expression is used as an lvalue, for instance in "&Arr[Idx]".
Definition at line 743 of file CGExpr.cpp.
References Builder, getArrayIndexingBound(), clang::Expr::getExprLoc(), and clang::Type::isSignedIntegerOrEnumerationType().
Referenced by emitPointerArithmetic().
void CodeGenFunction::EmitBranch | ( | llvm::BasicBlock * | Block | ) |
EmitBranch - Emit a branch to the specified basic block from the current insert block, taking care to avoid creation of branches from dummy blocks.
It is legal to call this function even if there is no current insertion point.
This function clears the current insertion point. The caller should follow calls to this function with calls to Emit*Block prior to generation new code.
Definition at line 417 of file CGStmt.cpp.
References Builder.
Referenced by EmitAggMemberInitializer(), EmitBlock(), EmitBlockWithFallThrough(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXForRangeStmt(), EmitDynamicCast(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryFooter(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), EmitForStmt(), EmitIfStmt(), EmitIndirectGotoStmt(), EmitOMPDistributeLoop(), 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.
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 1186 of file CodeGenFunction.cpp.
References clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), Builder, CGM, ConstantFoldsToSimpleInteger(), createBasicBlock(), EmitBlock(), EmitCXXThrowExpr(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), EvaluateExprAsBool(), clang::FunctionDecl::getBuiltinID(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getCurrentProfileCount(), getLLVMContext(), getProfileCount(), clang::Expr::IgnoreParens(), incrementProfileCounter(), max(), and setCurrentProfileCount().
Referenced by clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitIfStmt(), emitOMPIfClause(), EmitOMPInnerLoop(), and emitPreCond().
void CodeGenFunction::EmitBranchThroughCleanup | ( | JumpDest | Dest | ) |
EmitBranchThroughCleanup - Emit a branch from the current insert block through the normal cleanup handling code (if any) and then on to.
Terminate the current block by emitting a branch which might leave the current cleanup-protected scope.
The target scope may not yet be known, in which case this will require a fixup.
As a side-effect, this method clears the insertion point.
Definition at line 997 of file CGCleanup.cpp.
References Builder, CreateNormalEntry(), createStoreInstBefore(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, E, clang::CodeGen::EHCleanupScope(), clang::CodeGen::EHScopeStack::stable_iterator::encloses(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CodeGen::CodeGenFunction::JumpDest::getDestIndex(), clang::CodeGen::CodeGenFunction::JumpDest::getScopeDepth(), I, clang::CodeGen::BranchFixup::InitialBranch, clang::CodeGen::EHScopeStack::stable_iterator::isValid(), clang::CodeGen::BranchFixup::OptimisticBranchBlock, and clang::CodeGen::EHScopeStack::stable_iterator::strictlyEncloses().
Referenced by clang::CodeGen::emitBarrierCall(), EmitBreakStmt(), clang::CodeGen::emitCancellationPointCall(), EmitContinueStmt(), EmitCXXForRangeStmt(), EmitForStmt(), EmitForwardingCallToLambda(), EmitGotoStmt(), EmitIndirectGotoStmt(), EmitOMPInnerLoop(), EmitReturnStmt(), EmitSEHLeaveStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), and clang::CodeGen::CodeGenFunction::FinallyInfo::exit().
void CodeGenFunction::EmitBreakStmt | ( | const BreakStmt & | S | ) |
Definition at line 1063 of file CGStmt.cpp.
References EmitBranchThroughCleanup(), EmitStopPoint(), and HaveInsertPoint().
Referenced by EmitSimpleStmt().
RValue CodeGenFunction::EmitBuiltinExpr | ( | const FunctionDecl * | FD, |
unsigned | BuiltinID, | ||
const CallExpr * | E, | ||
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 465 of file CGBuiltin.cpp.
References Builder, ceil, copysign, emitBinaryBuiltin(), emitUnaryBuiltin(), clang::Expr::EvaluateAsRValue(), clang::Expr::EvaluateKnownConstInt(), fabs, floor, clang::CodeGen::RValue::get(), clang::CallExpr::getArg(), clang::CodeGen::RValue::getComplex(), clang::APValue::getFloat(), clang::APValue::getInt(), clang::CallExpr::getNumArgs(), clang::Expr::getType(), clang::Expr::EvalStatus::hasSideEffects(), clang::Expr::HasSideEffects(), clang::APValue::isFloat(), clang::APValue::isInt(), nearbyint, prefetch(), clang::Result, rint, round, trunc, clang::CodeGen::Type, and clang::Expr::EvalResult::Val.
RValue CodeGenFunction::EmitBuiltinNewDeleteCall | ( | const FunctionProtoType * | Type, |
const Expr * | Arg, | ||
bool | IsDelete | ||
) |
Definition at line 1145 of file CGExprCXX.cpp.
References EmitCallArgs(), EmitNewDeleteCall(), getContext(), clang::Name, and clang::FunctionProtoType::param_type_begin().
void CodeGenFunction::emitByrefStructureInit | ( | const AutoVarEmission & | emission | ) |
Initialize the structural components of a __block variable, i.e.
everything but the actual object.
Definition at line 2153 of file CGBlocks.cpp.
References clang::CodeGen::BLOCK_BYREF_HAS_COPY_DISPOSE, clang::CodeGen::BLOCK_BYREF_LAYOUT_EXTENDED, clang::CodeGen::BLOCK_BYREF_LAYOUT_MASK, clang::CodeGen::BLOCK_BYREF_LAYOUT_NON_OBJECT, clang::CodeGen::BLOCK_BYREF_LAYOUT_STRONG, clang::CodeGen::BLOCK_BYREF_LAYOUT_UNRETAINED, clang::CodeGen::BLOCK_BYREF_LAYOUT_WEAK, clang::CodeGen::CGObjCRuntime::BuildByrefLayout(), Builder, CGM, clang::CodeGen::BlockByrefHelpers::CopyHelper, clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::BlockByrefHelpers::DisposeHelper, clang::ASTContext::getByrefLifetime(), getContext(), clang::CodeGen::CodeGenTypeCache::getIntSize(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::CodeGen::CodeGenModule::GetTargetTypeStoreSize(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, clang::isa(), clang::Type::isBlockPointerType(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCObjectPointerType(), clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, and printf().
Referenced by EmitAutoVarInit().
RValue CodeGenFunction::EmitCall | ( | const CGFunctionInfo & | FnInfo, |
llvm::Value * | Callee, | ||
ReturnValueSlot | ReturnValue, | ||
const CallArgList & | Args, | ||
CGCalleeInfo | CalleeInfo = CGCalleeInfo() , |
||
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.
Definition at line 3507 of file CGCall.cpp.
References clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::CGFunctionInfo::arg_size(), BuildAggStore(), Builder, CGM, clang::CodeGen::ABIArgInfo::CoerceAndExpand, clang::CodeGen::CodeGenModule::ConstructAttributeList(), convertTempToRValue(), ConvertType(), ConvertTypeForMem(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateCoercedLoad(), CreateCoercedStore(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CreateTempAlloca(), CurCodeDecl, CurrentFuncletPad, currentFunctionUsesSEHTry(), deactivateArgCleanupsBeforeCall(), clang::CodeGen::ABIArgInfo::Direct, E, emitAddressAtOffset(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitBlock(), EmitInitStoreOfNonAggregate(), EmitLifetimeEnd(), EmitLifetimeStart(), EmitScalarExpr(), emitWritebacks(), EnsureInsertPoint(), clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CodeGen::CallArgList::freeArgumentMemory(), clang::CharUnits::fromQuantity(), clang::CodeGen::RValue::get(), clang::CodeGen::EHPersonality::get(), clang::FunctionProtoType::ExtParameterInfo::getABI(), clang::CodeGen::RValue::getAggregate(), clang::CodeGen::RValue::getAggregateAddress(), clang::CodeGen::RValue::getAggregatePointer(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CGFunctionInfo::getArgStruct(), clang::CodeGen::CGFunctionInfo::getArgStructAlignment(), getBundlesForFunclet(), clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::CallArgList::getCleanupsToDeactivate(), clang::CodeGen::ABIArgInfo::getCoerceAndExpandType(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::RValue::getComplex(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::ABIArgInfo::getDirectOffset(), getEvaluationKind(), clang::CodeGen::CGFunctionInfo::getExtParameterInfo(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getIndirectAlign(), clang::CodeGen::ABIArgInfo::getIndirectByVal(), getInvokeDest(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CodeGenModule::getLangOpts(), getLLVMContext(), clang::CodeGen::Address::getName(), clang::CodeGen::ABIArgInfo::getPaddingType(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CallArgList::getStackBase(), getTarget(), clang::CodeGen::Address::getType(), getTypes(), GetUndefRValue(), clang::CodeGen::ABIArgInfo::getUnpaddedCoerceAndExpandType(), clang::CodeGen::ReturnValueSlot::getValue(), clang::CodeGen::CallArgList::hasWritebacks(), HaveInsertPoint(), I, clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::Address::invalid(), clang::CodeGen::RValue::isAggregate(), isCleanupPadScope(), clang::CodeGen::ABIArgInfo::isCoerceAndExpand(), clang::CodeGen::RValue::isComplex(), clang::CodeGen::ABIArgInfo::isDirect(), clang::CodeGen::ABIArgInfo::isInAlloca(), clang::CodeGen::ABIArgInfo::isIndirect(), clang::CodeGen::EHPersonality::isMSVCXXPersonality(), clang::CodeGen::ReturnValueSlot::isNull(), clang::CodeGen::ABIArgInfo::isPaddingForCoerceAndExpand(), clang::CodeGen::RValue::isScalar(), isSEHTryScope(), clang::CodeGen::ReturnValueSlot::isUnused(), clang::CodeGen::Address::isValid(), clang::CodeGen::CGFunctionInfo::isVariadic(), clang::CodeGen::ReturnValueSlot::isVolatile(), clang::CodeGen::RValue::isVolatileQualified(), MakeAddrLValue(), max(), clang::SwiftErrorResult, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, clang::CodeGen::Type, and clang::CodeGen::CodeGenPGO::valueProfile().
Referenced by emitAtomicLibcall(), EmitBlockCallExpr(), EmitCallAndReturnForThunk(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXConstructorCall(), EmitCXXDestructorCall(), EmitCXXMemberCallExpr(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberPointerCallExpr(), EmitForwardingCallToLambda(), emitLibraryCall(), EmitNewDeleteCall(), EmitObjCForCollectionStmt(), emitStructGetterCall(), emitStructSetterCall(), generateObjCGetterBody(), and generateObjCSetterBody().
RValue CodeGenFunction::EmitCall | ( | QualType | FnType, |
llvm::Value * | Callee, | ||
const CallExpr * | E, | ||
ReturnValueSlot | ReturnValue, | ||
CGCalleeInfo | CalleeInfo = CGCalleeInfo() , |
||
llvm::Value * | Chain = nullptr |
||
) |
Definition at line 3984 of file CGExpr.cpp.
References clang::CodeGen::CallArgList::add(), clang::CallExpr::arguments(), Builder, clang::Type::getAs(), clang::CodeGen::CGCalleeInfo::getCalleeDecl(), clang::QualType::getCanonicalType(), clang::CallExpr::getDirectCallee(), clang::CallExpr::getLocStart(), and clang::Type::isFunctionPointerType().
void CodeGenFunction::EmitCallAndReturnForThunk | ( | llvm::Value * | Callee, |
const ThunkInfo * | Thunk | ||
) |
Definition at line 254 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(), FinishThunk(), 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::CodeGen::CGFunctionInfoArgInfo::info, clang::ReturnAdjustment::isEmpty(), clang::CodeGen::CGFunctionInfo::isNoReturn(), clang::CodeGen::ReturnValueSlot::isNull(), clang::Type::isVoidType(), clang::QualType::isVolatileQualified(), LoadCXXThis(), LoadCXXThisAddress(), clang::FunctionDecl::parameters(), PerformReturnAdjustment(), clang::CodeGen::CGCXXABI::performThisAdjustment(), clang::ThunkInfo::Return, ReturnValue, similar(), clang::ThunkInfo::This, clang::CodeGen::CGFunctionInfoArgInfo::type, clang::CodeGen::CGFunctionInfo::usesInAlloca(), and clang::ASTContext::VoidPtrTy.
Referenced by generateThunk().
void CodeGenFunction::EmitCallArg | ( | CallArgList & | args, |
const Expr * | E, | ||
QualType | ArgType | ||
) |
EmitCallArg - Emit a single call argument.
Definition at line 3264 of file CGCall.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CallArgList::addArgCleanupDeactivation(), clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), clang::CodeGen::LValue::asAggregateRValue(), clang::CodeGen::AggValueSlot::asRValue(), Builder, CGM, CreateAggTemp(), CreateMemTemp(), createPlaceholderSlot(), E, clang::CodeGen::EHCleanup, EHStack, EmitAggExpr(), EmitAggregateCopy(), EmitAnyExprToTemp(), EmitLValue(), EmitReferenceBindingToExpr(), emitWritebackArg(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::AggValueSlot::getAddress(), clang::CodeGen::RValue::getAggregate(), clang::CodeGen::LValue::getAlignment(), clang::Type::getAsCXXRecordDecl(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::TargetInfo::getCXXABI(), clang::CodeGen::EHScopeStack::getInnermostEHScope(), getLangOpts(), clang::Expr::getObjectKind(), clang::CodeGen::CGCXXABI::getRecordArgABI(), clang::CodeGen::CodeGenModule::getTarget(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), hasAggregateEvaluationKind(), clang::CXXRecordDecl::hasNonTrivialDestructor(), clang::Expr::isGLValue(), clang::Type::isReferenceType(), clang::CodeGen::LValue::isSimple(), clang::CodeGen::CallArgList::isUsingInAlloca(), clang::CodeGen::LValue::isVolatile(), clang::OK_Ordinary, clang::CodeGen::CGCXXABI::RAA_Default, clang::CodeGen::AggValueSlot::setExternallyDestructed(), and clang::ast_matchers::type.
Referenced by EmitCallArgs().
|
inline |
EmitCallArgs - Emit call arguments for a function.
Definition at line 3313 of file CodeGenFunction.h.
References E, clang::ASTContext::getCanonicalType(), getContext(), I, and isObjCMethodWithTypeParams().
Referenced by commonEmitCXXMemberOrOperatorCall(), EmitBlockCallExpr(), EmitBuiltinNewDeleteCall(), EmitCUDADevicePrintfCallExpr(), EmitCXXConstructorCall(), EmitCXXMemberPointerCallExpr(), EmitCXXNewExpr(), EmitObjCMessageExpr(), and EmitSynthesizedCXXCopyCtorCall().
void CodeGenFunction::EmitCallArgs | ( | CallArgList & | Args, |
ArrayRef< QualType > | ArgTypes, | ||
llvm::iterator_range< CallExpr::const_arg_iterator > | ArgRange, | ||
const FunctionDecl * | CalleeDecl = nullptr , |
||
unsigned | ParamsToSkip = 0 |
||
) |
Definition at line 3173 of file CGCall.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CallArgList::allocateArgumentMemory(), clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), Builder, CGM, E, EmitCallArg(), EmitNonNullArgCheck(), clang::CodeGen::RValue::get(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::TargetInfo::getCXXABI(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ASTContext::getSizeType(), clang::CodeGen::CodeGenModule::getTarget(), getTarget(), clang::ASTContext::getTypeSize(), I, isInAllocaArgument(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
RValue CodeGenFunction::EmitCallExpr | ( | const CallExpr * | E, |
ReturnValueSlot | ReturnValue = ReturnValueSlot() |
||
) |
Definition at line 3733 of file CGExpr.cpp.
References clang::CodeGen::ARCPreciseLifetime, Builder, E, clang::CodeGen::LValue::getAddress(), clang::Type::getAs(), clang::CallExpr::getCallee(), clang::CallExpr::getCalleeDecl(), clang::QualType::getObjCLifetime(), clang::PointerType::getPointeeType(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::QualType::hasStrongOrWeakObjCLifetime(), clang::Expr::IgnoreParens(), clang::Type::isBlockPointerType(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Definition at line 3859 of file CGExpr.cpp.
References clang::CodeGen::RValue::getAggregateAddress(), clang::CallExpr::getCallReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::Type::isReferenceType(), and clang::CodeGen::RValue::isScalar().
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 3467 of file CGCall.cpp.
References Builder, CGM, createBasicBlock(), CurrentFuncletPad, EmitBlock(), getBundlesForFunclet(), getInvokeDest(), and clang::CodeGen::CodeGenModule::getLangOpts().
Referenced by clang::CodeGen::createOffloadingBinaryDescriptorRegistration(), EmitCapturedStmt(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), emitProxyTaskFunction(), EmitRuntimeCallOrInvoke(), and clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsCall().
void CodeGenFunction::EmitCapturedLocals | ( | CodeGenFunction & | ParentCGF, |
const Stmt * | OutlinedStmt, | ||
bool | IsFilter | ||
) |
Scan the outlined statement for captures from the parent function.
For each capture, mark the capture as escaped and emit a call to llvm.localrecover. Insert the localrecover result into the LocalDeclMap.
Definition at line 1536 of file CGException.cpp.
References AllocaInsertPt, Builder, ConvertTypeForMem(), CurFn, EmitSEHExceptionCodeSave(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), Finder, clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetInfo::getTriple(), clang::ValueDecl::getType(), I, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::VarDecl::isLocalVarDeclOrParm(), clang::Type::isVariablyModifiedType(), recoverAddrOfEscapedLocal(), and SEHCodeSlotStack.
Referenced by startOutlinedSEHHelper().
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 2173 of file CGStmt.cpp.
References CapturedStmtInfo, CGM, EmitCallOrInvoke(), GenerateCapturedStmtFunction(), clang::CodeGen::LValue::getPointer(), and InitCapturedStruct().
Referenced by EmitStmt().
void CodeGenFunction::EmitCaseStmt | ( | const CaseStmt & | S | ) |
Definition at line 1168 of file CGStmt.cpp.
References Builder, CGM, createBasicBlock(), EmitBlockWithFallThrough(), EmitCaseStmtRange(), EmitStmt(), clang::Expr::EvaluateKnownConstInt(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CaseStmt::getLHS(), getProfileCount(), clang::CaseStmt::getRHS(), clang::CaseStmt::getSubStmt(), clang::CodeGenOptions::hasProfileClangInstr(), isObviouslyBranchWithoutCleanups(), and S.
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitCaseStmtRange | ( | const CaseStmt & | S | ) |
EmitCaseStmtRange - If case statement range is not too big then add multiple cases to switch instruction, one for each value within the range.
If range is too big then emit "if" condition check.
Definition at line 1090 of file CGStmt.cpp.
References Builder, createBasicBlock(), CurFn, EmitBlockWithFallThrough(), EmitStmt(), clang::Expr::EvaluateKnownConstInt(), getContext(), clang::CaseStmt::getLHS(), getProfileCount(), clang::CaseStmt::getRHS(), clang::CaseStmt::getSubStmt(), and I.
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 3564 of file CGExpr.cpp.
References Builder, E, clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::Type::getAs(), clang::CastExpr::getCastKind(), clang::RecordType::getDecl(), clang::Expr::getExprLoc(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::CastExpr::path_begin(), and clang::CastExpr::path_end().
llvm::Value * CodeGenFunction::EmitCastToVoidPtr | ( | llvm::Value * | value | ) |
Emit a cast to void* in the appropriate address space.
Definition at line 46 of file CGExpr.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), getLLVMContext(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by AddDirectArgument(), EmitAtomicExpr(), EmitAtomicStore(), and EmitNullBaseClassInitialization().
void CodeGenFunction::EmitCfiCheckFail | ( | ) |
Emit a cross-DSO CFI failure handling function.
Definition at line 2653 of file CGExpr.cpp.
References Builder, clang::Create(), and clang::HiddenVisibility.
Referenced by clang::CodeGen::CodeGenModule::Release().
void CodeGenFunction::EmitCfiSlowPathCheck | ( | SanitizerMask | Kind, |
llvm::Value * | Cond, | ||
llvm::ConstantInt * | TypeId, | ||
llvm::Value * | Ptr, | ||
ArrayRef< llvm::Constant * > | StaticArgs | ||
) |
Emit a slow path cross-DSO CFI check which calls __cfi_slowpath if Cond if false.
Definition at line 2602 of file CGExpr.cpp.
Referenced by EmitVTablePtrCheck().
void CodeGenFunction::EmitCheck | ( | ArrayRef< std::pair< llvm::Value *, SanitizerMask >> | Checked, |
StringRef | CheckName, | ||
ArrayRef< llvm::Constant * > | StaticArgs, | ||
ArrayRef< llvm::Value * > | DynamicArgs | ||
) |
Create a basic block that will call a handler function in a sanitizer runtime with the provided arguments, and create a conditional branch to it.
Definition at line 2497 of file CGExpr.cpp.
References Builder, emitCheckHandlerCall(), getRecoverableKind(), and Node.
Referenced by EmitFunctionEpilog(), EmitNonNullArgCheck(), EmitVariablyModifiedType(), EmitVTablePtrCheck(), EmitVTableTypeCheckedLoad(), and GenerateCode().
LValue CodeGenFunction::EmitCheckedLValue | ( | const Expr * | E, |
TypeCheckKind | TCK | ||
) |
Same as EmitLValue but additionally we generate checking code to guard against undefined behavior.
This is only suitable when we know that the address will be used to access the object.
Definition at line 943 of file CGExpr.cpp.
References E, clang::CodeGen::LValue::getAlignment(), clang::Expr::getExprLoc(), clang::CodeGen::LValue::getPointer(), clang::Expr::getType(), clang::CodeGen::LValue::isBitField(), and clang::CodeGen::LValue::isSimple().
llvm::Constant * CodeGenFunction::EmitCheckSourceLocation | ( | SourceLocation | Loc | ) |
Emit a description of a source location in a format suitable for passing to a runtime sanitizer handler.
Emit a representation of a SourceLocation for passing to a handler in a sanitizer runtime library.
The format for this data is:
For an invalid SourceLocation, the Filename pointer is null.
Definition at line 2388 of file CGExpr.cpp.
References clang::begin(), Builder, clang::end(), Filename, clang::PresumedLoc::getColumn(), clang::PresumedLoc::getFilename(), clang::PresumedLoc::getLine(), I, INT_MIN, clang::PresumedLoc::isValid(), and Line.
Referenced by EmitFunctionEpilog(), EmitNonNullArgCheck(), EmitVariablyModifiedType(), EmitVTablePtrCheck(), and GenerateCode().
llvm::Constant * CodeGenFunction::EmitCheckTypeDescriptor | ( | QualType | T | ) |
Emit a description of a type in a format suitable for passing to a runtime sanitizer handler.
Emit a type description suitable for use by a runtime sanitizer library.
The format of a type descriptor is
followed by an array of i8 containing the type name. TypeKind is 0 for an integer, 1 for a floating point value, and -1 for anything else.
Definition at line 2310 of file CGExpr.cpp.
References clang::DiagnosticsEngine::ak_qualtype, Buffer, Builder, clang::QualType::getAsOpaquePtr(), clang::Type::isFloatingType(), clang::Type::isIntegerType(), clang::Type::isSignedIntegerType(), and clang::None.
Referenced by EmitVariablyModifiedType(), and EmitVTablePtrCheck().
llvm::Value * CodeGenFunction::EmitCheckValue | ( | llvm::Value * | V | ) |
Convert a value into a format suitable for passing to a runtime sanitizer handler.
Definition at line 2353 of file CGExpr.cpp.
References Builder, and clang::CodeGen::Address::getPointer().
Value * CodeGenFunction::EmitCommonNeonBuiltinExpr | ( | unsigned | BuiltinID, |
unsigned | LLVMIntrinsic, | ||
unsigned | AltLLVMIntrinsic, | ||
const char * | NameHint, | ||
unsigned | Modifier, | ||
const CallExpr * | E, | ||
SmallVectorImpl< llvm::Value * > & | Ops, | ||
Address | PtrOp0, | ||
Address | PtrOp1 | ||
) |
Definition at line 3335 of file CGBuiltin.cpp.
References Builder, CGM, ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedStore(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenTypeCache::DoubleTy, EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonShiftVector(), EmitNeonSplat(), fabs, clang::NeonTypeFlags::Float32, clang::CodeGen::CodeGenTypeCache::FloatTy, fma, clang::CallExpr::getArg(), getContext(), GetFloatNeonType(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), GetNeonType(), clang::CallExpr::getNumArgs(), getTarget(), clang::Expr::getType(), I, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::Expr::isIntegerConstantExpr(), LookupNeonLLVMIntrinsic(), clang::CodeGen::CodeGenTypeCache::SizeTy, clang::CodeGen::Type, and UnsignedAlts.
Referenced by EmitAArch64BuiltinExpr(), and EmitARMBuiltinExpr().
LValue CodeGenFunction::EmitComplexAssignmentLValue | ( | const BinaryOperator * | E | ) |
Emit an l-value for an assignment (simple or compound) of complex type.
Definition at line 1074 of file CGExprComplex.cpp.
References clang::BinaryOperator::getOpcode().
LValue CodeGenFunction::EmitComplexCompoundAssignmentLValue | ( | const CompoundAssignOperator * | E | ) |
Definition at line 1095 of file CGExprComplex.cpp.
References getComplexOp(), and clang::BinaryOperator::getOpcode().
ComplexPairTy CodeGenFunction::EmitComplexExpr | ( | const Expr * | E, |
bool | IgnoreReal = false , |
||
bool | IgnoreImag = false |
||
) |
EmitComplexExpr - Emit the computation of the specified expression of complex type, returning the result.
EmitComplexExpr - Emit the computation of the specified expression of complex type, ignoring the result.
Definition at line 1044 of file CGExprComplex.cpp.
References getComplexType(), and clang::Expr::getType().
Referenced by EmitAnyExpr(), EmitAtomicInit(), EmitExprAsInit(), and EvaluateExprAsBool().
EmitComplexExprIntoLValue - Emit the given expression of complex type and place its result into the specified l-value.
Definition at line 1053 of file CGExprComplex.cpp.
References getComplexType(), and clang::Expr::getType().
Referenced by EmitAggMemberInitializer(), EmitAnyExprToMem(), EmitDeclInit(), EmitInitializerForField(), EmitReturnStmt(), and StoreAnyExprIntoOneUnit().
CodeGenFunction::ComplexPairTy CodeGenFunction::EmitComplexPrePostIncDec | ( | const UnaryOperator * | E, |
LValue | LV, | ||
bool | isInc, | ||
bool | isPre | ||
) |
Definition at line 772 of file CGExpr.cpp.
References Builder, clang::Type::getAs(), clang::UnaryOperator::getExprLoc(), and clang::Expr::getType().
Value * CodeGenFunction::EmitComplexToScalarConversion | ( | ComplexPairTy | Src, |
QualType | SrcTy, | ||
QualType | DstTy, | ||
SourceLocation | Loc | ||
) |
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 3463 of file CGExprScalar.cpp.
References hasScalarEvaluationKind(), and clang::Type::isAnyComplexType().
Referenced by convertToScalarValue(), and EvaluateExprAsBool().
LValue CodeGenFunction::EmitCompoundAssignmentLValue | ( | const CompoundAssignOperator * | E | ) |
Definition at line 3498 of file CGExprScalar.cpp.
References COMPOUND_OP, and clang::BinaryOperator::getOpcode().
LValue CodeGenFunction::EmitCompoundLiteralLValue | ( | const CompoundLiteralExpr * | E | ) |
Definition at line 3440 of file CGExpr.cpp.
References clang::CompoundLiteralExpr::getInitializer(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::CompoundLiteralExpr::isFileScope(), clang::Type::isVariablyModifiedType(), and clang::Result.
Address CodeGenFunction::EmitCompoundStmt | ( | const CompoundStmt & | S, |
bool | GetLast = false , |
||
AggValueSlot | AggSlot = AggValueSlot::ignored() |
||
) |
EmitCompoundStmt - Emit a compound statement {..} node.
If GetLast is true, this captures the expression result of the last sub-statement and returns it (for use by the statement expression extension).
Definition at line 324 of file CGStmt.cpp.
References EmitCompoundStmtWithoutScope(), getContext(), and clang::CompoundStmt::getLBracLoc().
Referenced by EmitSimpleStmt().
Address CodeGenFunction::EmitCompoundStmtWithoutScope | ( | const CompoundStmt & | S, |
bool | GetLast = false , |
||
AggValueSlot | AVS = AggValueSlot::ignored() |
||
) |
Definition at line 336 of file CGStmt.cpp.
References clang::CompoundStmt::body_back(), clang::CompoundStmt::body_begin(), clang::CompoundStmt::body_end(), CreateMemTemp(), E, EmitAggExpr(), EmitAnyExprToMem(), EmitLabel(), EmitStmt(), EnsureInsertPoint(), hasAggregateEvaluationKind(), I, and clang::CodeGen::Address::invalid().
Referenced by EmitCompoundStmt(), EmitFunctionBody(), and GenerateObjCMethod().
LValue CodeGenFunction::EmitConditionalOperatorLValue | ( | const AbstractConditionalOperator * | E | ) |
Definition at line 3483 of file CGExpr.cpp.
References clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), Builder, EmitLValueOrThrowExpression(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), clang::AbstractConditionalOperator::getCond(), clang::AbstractConditionalOperator::getFalseExpr(), clang::AbstractConditionalOperator::getTrueExpr(), clang::Expr::getType(), clang::Expr::isGLValue(), max(), and min().
void CodeGenFunction::EmitConstructorBody | ( | FunctionArgList & | Args | ) |
EmitConstructorBody - Emits the body of the current constructor.
Definition at line 917 of file CGClass.cpp.
References CGM, clang::Ctor_Base, clang::Ctor_Complete, CurGD, EmitAsanPrologueOrEpilogue(), EmitCtorPrologue(), EmitDelegateCXXConstructorCall(), EmitStmt(), EnterCXXTryStmt(), ExitCXXTryStmt(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::FunctionDecl::getBody(), clang::GlobalDecl::getCtorType(), clang::TargetInfo::getCXXABI(), clang::GlobalDecl::getDecl(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetCXXABI::hasConstructorVariants(), incrementProfileCounter(), and IsConstructorDelegationValid().
Referenced by GenerateCode().
void CodeGenFunction::EmitContinueStmt | ( | const ContinueStmt & | S | ) |
Definition at line 1075 of file CGStmt.cpp.
References EmitBranchThroughCleanup(), EmitStopPoint(), and HaveInsertPoint().
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitCtorPrologue | ( | const CXXConstructorDecl * | CD, |
CXXCtorType | CtorType, | ||
FunctionArgList & | Args | ||
) |
EmitCtorPrologue - This routine generates necessary code to initialize base classes and non-static data members belonging to this constructor.
Definition at line 1352 of file CGClass.cpp.
References Builder, CGM, E, EmitBaseInitializer(), EmitBlock(), clang::CodeGen::CGCXXABI::EmitCtorCompleteObjectHandler(), EmitDelegatingCXXConstructorCall(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::TargetInfo::getCXXABI(), clang::CXXRecordDecl::getNumVBases(), clang::CXXMethodDecl::getParent(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetCXXABI::hasConstructorVariants(), clang::CXXConstructorDecl::init_begin(), clang::CXXConstructorDecl::init_end(), InitializeVTablePointers(), clang::CXXCtorInitializer::isAnyMemberInitializer(), clang::CXXCtorInitializer::isBaseInitializer(), clang::CXXConstructorDecl::isDelegatingConstructor(), isInitializerOfDynamicClass(), LoadCXXThis(), and LoadCXXThisAddress().
Referenced by EmitConstructorBody(), and EmitInlinedInheritingCXXConstructorCall().
RValue CodeGenFunction::EmitCUDADevicePrintfCallExpr | ( | const CallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 70 of file CGCUDABuiltin.cpp.
References clang::CallExpr::arguments(), Builder, CGM, clang::serialized_diags::create(), clang::CodeGen::CGBuilderTy::CreateAlignedStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CreateTempAlloca(), EmitCallArgs(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), clang::Type::getAs(), clang::CallExpr::getBuiltinCallee(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CallExpr::getDirectCallee(), getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::CallExpr::getNumArgs(), clang::ValueDecl::getType(), GetVprintfDeclaration(), I, clang::CodeGen::CodeGenTypeCache::IntTy, clang::NumArgs, P, and clang::CodeGen::Type.
RValue CodeGenFunction::EmitCUDAKernelCallExpr | ( | const CUDAKernelCallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 347 of file CGExprCXX.cpp.
References CGM, clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), and clang::CodeGen::CodeGenModule::getCUDARuntime().
void CodeGenFunction::EmitCXXAggrConstructorCall | ( | const CXXConstructorDecl * | ctor, |
const ArrayType * | arrayType, | ||
Address | arrayBegin, | ||
const CXXConstructExpr * | E, | ||
bool | zeroInitialize = false |
||
) |
EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array.
ctor | the constructor to call for each element |
arrayType | the type of the array to initialize |
arrayBegin | an arrayType* |
zeroInitialize | true if each element should be zero-initialized before it is constructed |
Definition at line 1917 of file CGClass.cpp.
References emitArrayLength().
Referenced by EmitCXXConstructExpr(), and EmitNewArrayInitializer().
void CodeGenFunction::EmitCXXAggrConstructorCall | ( | const CXXConstructorDecl * | ctor, |
llvm::Value * | numElements, | ||
Address | arrayBase, | ||
const CXXConstructExpr * | E, | ||
bool | zeroInitialize = false |
||
) |
EmitCXXAggrConstructorCall - Emit a loop to call a particular constructor for each of several members of an array.
ctor | the constructor to call for each element |
numElements | the number of elements in the array; may be zero |
arrayBase | a T*, where T is the type constructed by ctor |
zeroInitialize | true if each element should be zero-initialized before it is constructed |
Definition at line 1936 of file CGClass.cpp.
References clang::CharUnits::alignmentOfArrayElement(), Builder, createBasicBlock(), clang::Ctor_Complete, destroyCXXObject, EmitBlock(), EmitCXXConstructorCall(), EmitNullInitialization(), clang::CodeGen::Address::getAlignment(), getContext(), getLangOpts(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getTypeDeclType(), clang::CXXRecordDecl::hasTrivialDestructor(), pushRegularPartialArrayCleanup(), clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::ast_matchers::type.
LValue CodeGenFunction::EmitCXXBindTemporaryLValue | ( | const CXXBindTemporaryExpr * | E | ) |
void CodeGenFunction::EmitCXXConstructExpr | ( | const CXXConstructExpr * | E, |
AggValueSlot | Dest | ||
) |
Definition at line 440 of file CGExprCXX.cpp.
References clang::CXXConstructExpr::CK_Complete, clang::CXXConstructExpr::CK_Delegating, clang::CXXConstructExpr::CK_NonVirtualBase, clang::CXXConstructExpr::CK_VirtualBase, clang::Ctor_Base, clang::Ctor_Complete, CurGD, E, EmitAggExpr(), EmitCXXAggrConstructorCall(), EmitCXXConstructorCall(), EmitNullBaseClassInitialization(), EmitNullInitialization(), clang::CodeGen::AggValueSlot::getAddress(), clang::CXXConstructExpr::getArg(), clang::ASTContext::getAsArrayType(), clang::CXXConstructExpr::getConstructionKind(), clang::CXXConstructExpr::getConstructor(), getContext(), clang::GlobalDecl::getCtorType(), getLangOpts(), clang::Expr::getType(), clang::CXXConstructExpr::isElidable(), clang::CodeGen::AggValueSlot::isIgnored(), clang::Expr::isTemporaryObject(), clang::CodeGen::AggValueSlot::isZeroed(), and clang::CXXConstructExpr::requiresZeroInitialization().
LValue CodeGenFunction::EmitCXXConstructLValue | ( | const CXXConstructExpr * | E | ) |
Definition at line 3878 of file CGExpr.cpp.
References clang::Type::getAsCXXRecordDecl(), clang::Expr::getType(), and clang::CXXRecordDecl::hasTrivialDestructor().
void CodeGenFunction::EmitCXXConstructorCall | ( | const CXXConstructorDecl * | D, |
CXXCtorType | Type, | ||
bool | ForVirtualBase, | ||
bool | Delegating, | ||
Address | This, | ||
const CXXConstructExpr * | E | ||
) |
Definition at line 2046 of file CGClass.cpp.
References clang::CodeGen::CallArgList::add(), clang::CXXConstructExpr::arguments(), clang::Type::castAs(), EmitAggregateCopyCtor(), EmitCallArgs(), EmitLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CXXConstructExpr::getArg(), clang::CXXConstructExpr::getConstructor(), getContext(), clang::CXXConstructExpr::getNumArgs(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::CXXMethodDecl::getThisType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), and isMemcpyEquivalentSpecialMember().
Referenced by EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), EmitDelegateCXXConstructorCall(), EmitInheritedCXXConstructorCall(), and EmitSynthesizedCXXCopyCtorCall().
void CodeGenFunction::EmitCXXConstructorCall | ( | const CXXConstructorDecl * | D, |
CXXCtorType | Type, | ||
bool | ForVirtualBase, | ||
bool | Delegating, | ||
Address | This, | ||
CallArgList & | Args | ||
) |
Definition at line 2101 of file CGClass.cpp.
References clang::CodeGen::CGCXXABI::addImplicitConstructorArgs(), clang::CodeGen::CodeGenTypes::arrangeCXXConstructorCall(), canEmitDelegateCallArgs(), clang::CodeGen::CGCXXABI::canSpeculativelyEmitVTable(), CGM, clang::Ctor_Base, EmitAggregateCopyCtor(), EmitCall(), EmitInlinedInheritingCXXConstructorCall(), EmitTypeCheck(), EmitVTableAssumptionLoads(), clang::CodeGen::CodeGenModule::getAddrOfCXXStructor(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::getFromCtorType(), clang::CXXConstructorDecl::getInheritedConstructor(), getNaturalTypeAlignment(), clang::QualType::getNonReferenceType(), clang::FunctionDecl::getParamDecl(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getRecordType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::CodeGen::CodeGenModule::getTypes(), getTypes(), clang::CodeGen::CodeGenTypes::inheritingCtorHasParams(), clang::CXXConstructorDecl::isDefaultConstructor(), clang::CXXRecordDecl::isDynamicClass(), isMemcpyEquivalentSpecialMember(), clang::FunctionDecl::isTrivial(), and TCK_ConstructorCall.
void CodeGenFunction::EmitCXXDeleteExpr | ( | const CXXDeleteExpr * | E | ) |
Definition at line 1704 of file CGExprCXX.cpp.
References Builder, ConvertTypeForMem(), createBasicBlock(), EmitArrayDelete(), EmitBlock(), EmitObjectDelete(), EmitPointerWithAlignment(), clang::CodeGen::Address::getAlignment(), clang::CXXDeleteExpr::getArgument(), clang::Type::getAs(), getContext(), clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getPointer(), clang::Expr::getType(), clang::CXXDeleteExpr::isArrayForm(), and clang::Type::isConstantArrayType().
void CodeGenFunction::EmitCXXDestructorCall | ( | const CXXDestructorDecl * | D, |
CXXDtorType | Type, | ||
bool | ForVirtualBase, | ||
bool | Delegating, | ||
Address | This | ||
) |
Definition at line 2391 of file CGClass.cpp.
References CGM, clang::CodeGen::CGCXXABI::EmitDestructorCall(), and clang::CodeGen::CodeGenModule::getCXXABI().
Referenced by EmitDestructorBody(), and EmitObjectDelete().
RValue CodeGenFunction::EmitCXXDestructorCall | ( | const CXXDestructorDecl * | DD, |
llvm::Value * | Callee, | ||
llvm::Value * | This, | ||
llvm::Value * | ImplicitParam, | ||
QualType | ImplicitParamTy, | ||
const CallExpr * | E, | ||
StructorType | Type | ||
) |
Definition at line 85 of file CGExprCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), CGM, commonEmitCXXMemberOrOperatorCall(), EmitCall(), and clang::CodeGen::CodeGenModule::getTypes().
void CodeGenFunction::EmitCXXForRangeStmt | ( | const CXXForRangeStmt & | S, |
ArrayRef< const Attr * > | Attrs = None |
||
) |
Definition at line 891 of file CGStmt.cpp.
References Builder, CGM, createBasicBlock(), EmitBlock(), EmitBranch(), EmitBranchThroughCleanup(), EmitStmt(), EmitStopPoint(), EvaluateExprAsBool(), clang::CXXForRangeStmt::getBeginStmt(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CXXForRangeStmt::getBody(), clang::CXXForRangeStmt::getCond(), clang::CodeGen::CodeGenModule::getContext(), clang::CXXForRangeStmt::getEndStmt(), clang::CXXForRangeStmt::getInc(), getJumpDestInCurrentScope(), clang::CXXForRangeStmt::getLoopVarStmt(), getProfileCount(), clang::CXXForRangeStmt::getRangeStmt(), incrementProfileCounter(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), and clang::CodeGen::LoopInfoStack::push().
Referenced by EmitAttributedStmt(), and EmitStmt().
void CodeGenFunction::EmitCXXGlobalVarDeclInit | ( | const VarDecl & | D, |
llvm::Constant * | DeclPtr, | ||
bool | PerformInit | ||
) |
EmitCXXGlobalVarDeclInit - Create the initializer for a C++ variable with global storage.
Definition at line 140 of file CGDeclCXX.cpp.
References CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), EmitDeclDestroy(), EmitDeclInit(), EmitDeclInvariant(), EmitReferenceBindingToExpr(), EmitStoreOfScalar(), getContext(), clang::VarDecl::getInit(), getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::RValue::getScalarVal(), clang::ASTContext::getTargetAddressSpace(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::Type::isReferenceType(), clang::CodeGen::CodeGenModule::isTypeConstant(), and clang::CodeGen::Type.
Referenced by GenerateCXXGlobalVarDeclInitFunc().
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 245 of file CGDeclCXX.cpp.
References CGM, clang::CodeGen::CGCXXABI::EmitGuardedInit(), clang::CodeGen::CodeGenModule::Error(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::CodeGenModule::getCXXABI().
Referenced by AddInitializerToStaticVarDecl(), and GenerateCXXGlobalVarDeclInitFunc().
RValue CodeGenFunction::EmitCXXMemberCallExpr | ( | const CXXMemberCallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 106 of file CGExprCXX.cpp.
References CGM, EmitCall(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::MemberExpr::getBase(), clang::CallExpr::getCallee(), getContext(), clang::MemberExpr::getMemberDecl(), clang::MemberExpr::getQualifier(), clang::MemberExpr::hasQualifier(), clang::Expr::IgnoreParens(), and clang::MemberExpr::isArrow().
Address CodeGenFunction::EmitCXXMemberDataPointerAddress | ( | const Expr * | E, |
Address | base, | ||
llvm::Value * | memberPtr, | ||
const MemberPointerType * | memberPtrType, | ||
AlignmentSource * | alignSource = nullptr |
||
) |
Emit the address of a field using a member data pointer.
E | Only used for emergency diagnostics |
Definition at line 129 of file CGClass.cpp.
References CGM, clang::CodeGen::CGCXXABI::EmitMemberDataPointerAddress(), clang::CodeGen::Address::getAlignment(), clang::Type::getAsCXXRecordDecl(), clang::MemberPointerType::getClass(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getDynamicOffsetAlignment(), getNaturalTypeAlignment(), and clang::MemberPointerType::getPointeeType().
Referenced by EmitMaterializeTemporaryExpr().
RValue CodeGenFunction::EmitCXXMemberOrOperatorCall | ( | const CXXMethodDecl * | MD, |
llvm::Value * | Callee, | ||
ReturnValueSlot | ReturnValue, | ||
llvm::Value * | This, | ||
llvm::Value * | ImplicitParam, | ||
QualType | ImplicitParamTy, | ||
const CallExpr * | E | ||
) |
Definition at line 73 of file CGExprCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), clang::Type::castAs(), CGM, commonEmitCXXMemberOrOperatorCall(), EmitCall(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), and ReturnValue.
Referenced by EmitCXXMemberOrOperatorMemberCallExpr().
RValue CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr | ( | const CallExpr * | CE, |
const CXXMethodDecl * | MD, | ||
ReturnValueSlot | ReturnValue, | ||
bool | HasQualifier, | ||
NestedNameSpecifier * | Qualifier, | ||
bool | IsArrow, | ||
const Expr * | Base | ||
) |
Definition at line 132 of file CGExprCXX.cpp.
References clang::CodeGen::CGCXXABI::adjustThisArgumentForVirtualFunctionCall(), clang::CallExpr::arg_begin(), clang::CallExpr::arg_end(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), BuildAppleKextVirtualCall(), CanDevirtualizeMemberFunctionCall(), CFITCK_NVCall, CGM, clang::CodeGen::Complete, clang::Ctor_Complete, clang::Dtor_Complete, EmitAggregateAssign(), EmitAggregateCopy(), EmitCXXMemberOrOperatorCall(), EmitLValue(), EmitPointerWithAlignment(), clang::CodeGen::CGCXXABI::EmitVirtualDestructorCall(), EmitVTablePtrCheckForCall(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::getAddrOfCXXStructor(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::Expr::getBestDynamicClassType(), clang::QualType::getCanonicalType(), clang::CXXMethodDecl::getCorrespondingMethodInClass(), clang::CodeGen::CodeGenModule::getCXXABI(), getCXXRecord(), clang::CodeGen::CodeGenTypes::GetFunctionType(), getLangOpts(), clang::CallExpr::getLocStart(), clang::CallExpr::getNumArgs(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::FunctionDecl::getReturnType(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGCXXABI::getVirtualFunctionPointer(), GetVTablePtr(), clang::SanitizerSet::has(), clang::Expr::ignoreParenBaseCasts(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::Address::invalid(), clang::CXXMethodDecl::isCopyAssignmentOperator(), clang::FunctionDecl::isDefaulted(), clang::CXXRecordDecl::isDynamicClass(), clang::CXXMethodDecl::isMoveAssignmentOperator(), clang::CodeGen::ReturnValueSlot::isNull(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), clang::CXXMethodDecl::isVirtual(), clang::RecordDecl::mayInsertExtraPadding(), and SanOpts.
Referenced by EmitCXXMemberCallExpr(), and EmitCXXOperatorMemberCallExpr().
RValue CodeGenFunction::EmitCXXMemberPointerCallExpr | ( | const CXXMemberCallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 285 of file CGExprCXX.cpp.
References clang::CodeGen::CallArgList::add(), clang::CallExpr::arguments(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodCall(), clang::Type::castAs(), CGM, EmitCall(), EmitCallArgs(), clang::CodeGen::CGCXXABI::EmitLoadOfMemberFunctionPointer(), EmitLValue(), EmitPointerWithAlignment(), EmitScalarExpr(), EmitTypeCheck(), clang::CodeGen::RequiredArgs::forPrototypePlus(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::Type::getAs(), clang::CallExpr::getCallee(), clang::MemberPointerType::getClass(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CXXMemberCallExpr::getExprLoc(), clang::BinaryOperator::getLHS(), clang::BinaryOperator::getOpcode(), clang::MemberPointerType::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getPointerType(), clang::BinaryOperator::getRHS(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::Expr::IgnoreParens(), clang::CodeGen::Address::invalid(), ReturnValue, and TCK_MemberCall.
Referenced by EmitCXXMemberCallExpr().
llvm::Value * CodeGenFunction::EmitCXXNewExpr | ( | const CXXNewExpr * | E | ) |
Definition at line 1316 of file CGExprCXX.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::begin(), Builder, CalculateCookiePadding(), clang::Type::castAs(), CGM, ConvertTypeForMem(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), DeactivateCleanupBlock(), clang::CodeGen::Decl, EHStack, EmitBlock(), EmitCallArgs(), EmitCXXNewAllocSize(), EmitNewDeleteCall(), EmitNewInitializer(), EmitPointerWithAlignment(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::end(), EnterNewDeleteCleanup(), clang::CodeGen::RValue::get(), clang::CodeGen::Address::getAlignment(), clang::CXXNewExpr::getAllocatedType(), clang::ASTContext::getBaseElementType(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CXXNewExpr::getInitializer(), clang::CXXNewExpr::getNumPlacementArgs(), clang::CXXNewExpr::getOperatorDelete(), clang::CXXNewExpr::getOperatorNew(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getSizeAlign(), clang::ASTContext::getSizeType(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeAlignInChars(), clang::CXXNewExpr::hasInitializer(), clang::CodeGen::CGCXXABI::InitializeArrayCookie(), clang::CodeGen::Address::invalid(), clang::CXXNewExpr::isArray(), clang::QualType::isPODType(), clang::FunctionDecl::isReservedGlobalPlacementOperator(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), max(), clang::CXXNewExpr::placement_arguments(), clang::CXXNewExpr::shouldNullCheckAllocation(), clang::CodeGen::EHScopeStack::stable_begin(), and clang::CodeGen::Type.
RValue CodeGenFunction::EmitCXXOperatorMemberCallExpr | ( | const CXXOperatorCallExpr * | E, |
const CXXMethodDecl * | MD, | ||
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 337 of file CGExprCXX.cpp.
References EmitCXXMemberOrOperatorMemberCallExpr(), clang::CallExpr::getArg(), and clang::CXXMethodDecl::isInstance().
void CodeGenFunction::EmitCXXTemporary | ( | const CXXTemporary * | Temporary, |
QualType | TempType, | ||
Address | Ptr | ||
) |
Emits all the code to cause the given temporary to be cleaned up.
Definition at line 1223 of file CGCleanup.cpp.
References clang::CodeGen::NormalAndEHCleanup.
void CodeGenFunction::EmitCXXThrowExpr | ( | const CXXThrowExpr * | E, |
bool | KeepInsertionPoint = true |
||
) |
Definition at line 403 of file CGException.cpp.
References CGM, createBasicBlock(), EmitBlock(), clang::CodeGen::CGCXXABI::emitRethrow(), clang::CodeGen::CGCXXABI::emitThrow(), clang::CodeGen::CGObjCRuntime::EmitThrowStmt(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::Expr::getExprLoc(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CXXThrowExpr::getSubExpr(), clang::Type::isObjCObjectPointerType(), and S.
Referenced by EmitBranchOnBoolExpr(), and EmitLValueOrThrowExpression().
void CodeGenFunction::EmitCXXTryStmt | ( | const CXXTryStmt & | S | ) |
Definition at line 536 of file CGException.cpp.
References EmitStmt(), EnterCXXTryStmt(), ExitCXXTryStmt(), and clang::CXXTryStmt::getTryBlock().
Referenced by EmitStmt().
llvm::Value * CodeGenFunction::EmitCXXTypeidExpr | ( | const CXXTypeidExpr * | E | ) |
Definition at line 1816 of file CGExprCXX.cpp.
References Builder, CGM, ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitTypeidFromVTable(), clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(), getContext(), clang::CXXTypeidExpr::getExprOperand(), clang::Expr::getType(), clang::CXXTypeidExpr::getTypeOperand(), clang::CXXTypeidExpr::isPotentiallyEvaluated(), clang::CXXTypeidExpr::isTypeOperand(), and clang::CodeGen::Type.
LValue CodeGenFunction::EmitCXXTypeidLValue | ( | const CXXTypeidExpr * | E | ) |
Definition at line 3888 of file CGExpr.cpp.
References clang::Expr::getType().
Address CodeGenFunction::EmitCXXUuidofExpr | ( | const CXXUuidofExpr * | E | ) |
Definition at line 3892 of file CGExpr.cpp.
References Builder, and clang::Expr::getType().
LValue CodeGenFunction::EmitCXXUuidofLValue | ( | const CXXUuidofExpr * | E | ) |
Definition at line 3897 of file CGExpr.cpp.
References clang::Expr::getType().
void CodeGenFunction::EmitDecl | ( | const Decl & | D | ) |
EmitDecl - Emit a declaration.
This function can be called with a null (unreachable) insert point.
Definition at line 38 of file CGDecl.cpp.
References CGM, clang::CodeGen::CodeGenModule::EmitOMPDeclareReduction(), EmitVarDecl(), EmitVariablyModifiedType(), getDebugInfo(), clang::TypedefNameDecl::getUnderlyingType(), clang::VarDecl::isLocalVarDecl(), and clang::TypeAlias.
Referenced by EmitDeclStmt(), EmitOMPFirstprivateClause(), EmitOMPLastprivateClauseInit(), and EmitOMPPrivateClause().
void CodeGenFunction::EmitDeclRefExprDbgValue | ( | const DeclRefExpr * | E, |
llvm::Constant * | Init | ||
) |
Definition at line 1817 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), getDebugInfo(), clang::DeclRefExpr::getDecl(), and clang::codegenoptions::LimitedDebugInfo.
LValue CodeGenFunction::EmitDeclRefLValue | ( | const DeclRefExpr * | E | ) |
Definition at line 2072 of file CGExpr.cpp.
References clang::CodeGen::ARCImpreciseLifetime, EmitCapturedFieldLValue(), EmitFunctionDeclLValue(), EmitGlobalNamedRegister(), EmitGlobalVarDeclLValue(), EmitThreadPrivateVarDeclLValue(), clang::DeclRefExpr::getDecl(), clang::Expr::getExprLoc(), clang::DeclRefExpr::getLocation(), clang::CodeGen::LValue::getPointer(), clang::CodeGen::LValue::getQuals(), clang::Expr::getType(), clang::CodeGen::LValue::getType(), clang::Type::isReferenceType(), clang::SourceLocation::isValid(), clang::DeclRefExpr::refersToEnclosingVariableOrCapture(), clang::Qualifiers::removeObjCGCAttr(), clang::SC_Register, clang::CodeGen::LValue::setARCPreciseLifetime(), clang::CodeGen::LValue::setNonGC(), and setObjCGCLValueClass().
Referenced by EmitBlockLiteral(), and LoadObjCSelf().
void CodeGenFunction::EmitDeclStmt | ( | const DeclStmt & | S | ) |
Definition at line 1053 of file CGStmt.cpp.
References clang::DeclStmt::decls(), EmitDecl(), EmitStopPoint(), HaveInsertPoint(), and I.
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitDefaultStmt | ( | const DefaultStmt & | S | ) |
Definition at line 1251 of file CGStmt.cpp.
References EmitBlockWithFallThrough(), EmitStmt(), and clang::DefaultStmt::getSubStmt().
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitDelegateCallArg | ( | CallArgList & | args, |
const VarDecl * | param, | ||
SourceLocation | loc | ||
) |
EmitDelegateCallArg - We are performing a delegate call; that is, the current function is delegating to another one.
Produce a r-value suitable for passing the given parameter.
Definition at line 2881 of file CGCall.cpp.
References clang::CodeGen::CallArgList::add(), Builder, CGM, convertTempToRValue(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::RValue::get(), GetAddrOfLocalVar(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::ValueDecl::getType(), isInAllocaArgument(), clang::Type::isReferenceType(), and clang::ast_matchers::type.
Referenced by EmitCallAndReturnForThunk(), EmitDelegateCXXConstructorCall(), EmitInheritedCXXConstructorCall(), EmitLambdaBlockInvokeBody(), and EmitLambdaDelegatingInvokeBody().
void CodeGenFunction::EmitDelegateCXXConstructorCall | ( | const CXXConstructorDecl * | Ctor, |
CXXCtorType | CtorType, | ||
const FunctionArgList & | Args, | ||
SourceLocation | Loc | ||
) |
Definition at line 2314 of file CGClass.cpp.
References clang::CodeGen::CallArgList::add(), CGM, CurGD, E, EmitCXXConstructorCall(), EmitDelegateCallArg(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::Address::getPointer(), I, LoadCXXThisAddress(), and clang::CodeGen::CGCXXABI::NeedsVTTParameter().
Referenced by EmitConstructorBody().
void CodeGenFunction::EmitDelegatingCXXConstructorCall | ( | const CXXConstructorDecl * | Ctor, |
const FunctionArgList & | Args | ||
) |
Definition at line 2366 of file CGClass.cpp.
References CGM, clang::Ctor_Complete, CurGD, clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::Dtor_Base, clang::Dtor_Complete, clang::CodeGen::EHCleanup, EHStack, EmitAggExpr(), clang::CodeGen::AggValueSlot::forAddr(), clang::GlobalDecl::getCtorType(), clang::CXXCtorInitializer::getInit(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CXXMethodDecl::getParent(), clang::CXXConstructorDecl::init_begin(), clang::CXXConstructorDecl::isDelegatingConstructor(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, LoadCXXThisAddress(), and clang::CodeGen::Type.
Referenced by EmitCtorPrologue().
void CodeGenFunction::EmitDeleteCall | ( | const FunctionDecl * | DeleteFD, |
llvm::Value * | Ptr, | ||
QualType | DeleteTy | ||
) |
Definition at line 1487 of file CGExprCXX.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNewDeleteCall(), clang::CodeGen::RValue::get(), clang::Type::getAs(), getContext(), clang::FunctionDecl::getOverloadedOperator(), clang::CharUnits::getQuantity(), clang::ValueDecl::getType(), clang::ASTContext::getTypeSizeInChars(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
void CodeGenFunction::emitDestroy | ( | Address | addr, |
QualType | type, | ||
Destroyer * | destroyer, | ||
bool | useEHCleanupForArray | ||
) |
emitDestroy - Immediately perform the destruction of the given object.
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 1505 of file CGDecl.cpp.
References clang::CharUnits::alignmentOfArrayElement(), clang::begin(), Builder, emitArrayDestroy(), emitArrayLength(), clang::end(), clang::CodeGen::Address::getAlignment(), clang::ASTContext::getAsArrayType(), getContext(), clang::CodeGen::Address::getPointer(), and length().
Referenced by clang::CodeGen::emitThreadPrivateVarDefinition(), and generateDestroyHelper().
void CodeGenFunction::EmitDestructorBody | ( | FunctionArgList & | Args | ) |
EmitDestructorBody - Emits the body of the current destructor.
Definition at line 1502 of file CGClass.cpp.
References Builder, CanSkipVTablePointerInitialization(), CGM, CurFn, CurGD, clang::Dtor_Base, clang::Dtor_Comdat, clang::Dtor_Complete, clang::Dtor_Deleting, EmitAsanPrologueOrEpilogue(), EmitCXXDestructorCall(), EmitStmt(), EnterCXXTryStmt(), EnterDtorCleanups(), ExitCXXTryStmt(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::FunctionDecl::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::GlobalDecl::getDecl(), clang::GlobalDecl::getDtorType(), getLangOpts(), clang::CXXMethodDecl::getParent(), getTarget(), incrementProfileCounter(), InitializeVTablePointers(), LoadCXXThis(), LoadCXXThisAddress(), and PopCleanupBlock().
Referenced by GenerateCode().
Definition at line 733 of file CGStmt.cpp.
References Builder, CGM, createBasicBlock(), EmitBlock(), EmitBlockWithFallThrough(), EmitStmt(), EvaluateExprAsBool(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::DoStmt::getBody(), clang::DoStmt::getCond(), clang::CodeGen::CodeGenModule::getContext(), getCurrentProfileCount(), getJumpDestInCurrentScope(), getProfileCount(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), clang::CodeGen::LoopInfoStack::push(), and SimplifyForwardingBlocks().
Referenced by EmitAttributedStmt(), and EmitStmt().
llvm::Value * CodeGenFunction::EmitDynamicCast | ( | Address | V, |
const CXXDynamicCastExpr * | DCE | ||
) |
Definition at line 1855 of file CGExprCXX.cpp.
References Builder, clang::Type::castAs(), CGM, createBasicBlock(), EmitBlock(), EmitBranch(), clang::CodeGen::CGCXXABI::EmitDynamicCastCall(), EmitDynamicCastToNull(), clang::CodeGen::CGCXXABI::EmitDynamicCastToVoid(), clang::CodeGen::CodeGenModule::EmitExplicitCastExprType(), clang::Type::getAs(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::PointerType::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::ExplicitCastExpr::getTypeAsWritten(), clang::CXXDynamicCastExpr::isAlwaysNull(), clang::Type::isPointerType(), clang::Type::isRecordType(), clang::Type::isVoidType(), and clang::CodeGen::CGCXXABI::shouldDynamicCastCallBeNullChecked().
void CodeGenFunction::EmitEndEHSpec | ( | const Decl * | D | ) |
EmitEndEHSpec - Emit the end of the exception spec.
Definition at line 503 of file CGException.cpp.
References clang::CodeGen::EHScopeStack::begin(), CGM, EHStack, emitFilterDispatchBlock(), clang::EST_Dynamic, clang::EST_DynamicNone, clang::Type::getAs(), getContext(), clang::FunctionProtoType::getExceptionSpecType(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::FunctionProtoType::getNoexceptSpec(), getTarget(), clang::ValueDecl::getType(), clang::isNoexceptExceptionSpec(), clang::FunctionProtoType::NR_Nothrow, clang::CodeGen::EHScopeStack::popFilter(), and clang::CodeGen::EHScopeStack::popTerminate().
Referenced by FinishFunction().
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.
init | the initializing expression |
var | the variable to act as if we're initializing |
loc | the address to initialize; its type is a pointer to the LLVM mapping of the variable's type |
alignment | the alignment of the address |
capturedByInit | true if the variable is a __block variable whose address is potentially changed by the initializer |
Definition at line 1287 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(), EmitBlockLiteral(), EmitInitializerForField(), EmitOMPLinearClauseInit(), and emitPrivatesInit().
void CodeGenFunction::EmitExtendGCLifetime | ( | llvm::Value * | object | ) |
EmitExtendGCLifetime - Given a pointer to an Objective-C object, make sure it survives garbage collection until this point.
Definition at line 3146 of file CGObjC.cpp.
References clang::CodeGen::RequiredArgs::All, Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
LValue CodeGenFunction::EmitExtVectorElementExpr | ( | const ExtVectorElementExpr * | E | ) |
Definition at line 3186 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::Type::getAs(), clang::ExtVectorElementExpr::getBase(), clang::Qualifiers::getCVRQualifiers(), clang::ExtVectorElementExpr::getEncodedElementAccess(), clang::CodeGen::LValue::getExtVectorAddress(), clang::CodeGen::LValue::getExtVectorElts(), clang::CodeGen::LValue::getQuals(), clang::Expr::getType(), clang::ExtVectorElementExpr::isArrow(), clang::CodeGen::LValue::isExtVectorElt(), clang::Expr::isGLValue(), clang::CodeGen::LValue::isSimple(), clang::Type::isVectorType(), clang::ast_matchers::type, and clang::QualType::withCVRQualifiers().
Generates lvalue for partial ext_vector access.
Definition at line 1546 of file CGExpr.cpp.
References Builder, clang::Type::getAs(), clang::VectorType::getElementType(), clang::CodeGen::LValue::getExtVectorAddress(), clang::CodeGen::LValue::getExtVectorElts(), and clang::CodeGen::LValue::getType().
Emit field annotations for the given field & value.
Returns the annotation result.
Definition at line 1875 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitAnnotationCall(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::Address::getPointer(), I, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::Type.
Definition at line 793 of file CGStmt.cpp.
References Builder, CGM, createBasicBlock(), EmitAutoVarDecl(), EmitBlock(), EmitBranch(), EmitBranchThroughCleanup(), EmitStmt(), EmitStopPoint(), EvaluateExprAsBool(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::ForStmt::getBody(), clang::ForStmt::getCond(), clang::ForStmt::getConditionVariable(), clang::CodeGen::CodeGenModule::getContext(), clang::ForStmt::getInc(), clang::ForStmt::getInit(), getJumpDestInCurrentScope(), getProfileCount(), incrementProfileCounter(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), and clang::CodeGen::LoopInfoStack::push().
Referenced by EmitAttributedStmt(), and EmitStmt().
void CodeGenFunction::EmitForwardingCallToLambda | ( | const CXXMethodDecl * | LambdaCallOperator, |
CallArgList & | CallArgs | ||
) |
Definition at line 2898 of file CGClass.cpp.
References clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::Type::castAs(), CGM, EmitBranchThroughCleanup(), EmitCall(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::FunctionType::getReturnType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), hasScalarEvaluationKind(), clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::ReturnValueSlot::isNull(), ReturnBlock, and ReturnValue.
Referenced by EmitLambdaBlockInvokeBody(), and EmitLambdaDelegatingInvokeBody().
llvm::Value * CodeGenFunction::EmitFromMemory | ( | llvm::Value * | Value, |
QualType | Ty | ||
) |
EmitFromMemory - Change a scalar value from its memory representation to its value representation.
Definition at line 1363 of file CGExpr.cpp.
References Builder, and hasBooleanRepresentation().
Referenced by EmitFromInt().
void CodeGenFunction::EmitFunctionBody | ( | FunctionArgList & | Args, |
const Stmt * | Body | ||
) |
Definition at line 906 of file CodeGenFunction.cpp.
References EmitCompoundStmtWithoutScope(), EmitStmt(), incrementProfileCounter(), and S.
Referenced by EmitLambdaToBlockPointerBody(), and GenerateCode().
void CodeGenFunction::EmitFunctionEpilog | ( | const CGFunctionInfo & | FI, |
bool | EmitRetDbgLoc, | ||
SourceLocation | EndLoc | ||
) |
EmitFunctionEpilog - Emit the target specific LLVM code to return the given temporary.
Definition at line 2664 of file CGCall.cpp.
References AutoreleaseResult, clang::CodeGen::CGBlockInfo::BlockExpression, BlockInfo, Builder, CGM, clang::CodeGen::ABIArgInfo::CoerceAndExpand, ConvertType(), clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), CreateCoercedLoad(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CurCodeDecl, CurFn, clang::CodeGen::ABIArgInfo::Direct, emitAddressAtOffset(), emitAutoreleaseOfResult(), EmitCheck(), EmitCheckSourceLocation(), EmitLoadOfComplex(), EmitStoreOfComplex(), EmitStoreOfScalar(), clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, findDominatingStoreToReturnValue(), clang::CodeGen::ABIArgInfo::getCoerceAndExpandType(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::ABIArgInfo::getDirectOffset(), clang::CodeGen::Address::getElementType(), getEvaluationKind(), clang::BlockExpr::getFunctionType(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getInAllocaSRet(), clang::CodeGen::ABIArgInfo::getKind(), getLangOpts(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::FunctionType::getReturnType(), clang::CodeGen::ABIArgInfo::getUnpaddedCoerceAndExpandType(), clang::SanitizerSet::has(), hasAggregateEvaluationKind(), clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::Address::invalid(), clang::Type::isObjCRetainableType(), clang::CodeGen::ABIArgInfo::isPaddingForCoerceAndExpand(), clang::CodeGen::CGFunctionInfo::isReturnsRetained(), clang::CodeGen::ABIArgInfo::isSRetAfterThis(), clang::CodeGen::Address::isValid(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), clang::None, ReturnValue, SanOpts, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::CodeGen::Type.
Referenced by FinishFunction().
void CodeGenFunction::EmitFunctionInstrumentation | ( | const char * | Fn | ) |
EmitFunctionInstrumentation - Emit LLVM code to call the specified instrumentation function with the current function and the call site, if function instrumentation is enabled.
Definition at line 409 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), CurFn, EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::Type, 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 2072 of file CGCall.cpp.
References clang::CodeGen::CGFunctionInfo::arg_begin(), clang::CodeGen::CGFunctionInfo::arg_size(), Builder, CGM, clang::CodeGen::ABIArgInfo::CoerceAndExpand, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateCoercedStore(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CreateTempAlloca(), CurCodeDecl, CurGD, clang::CodeGen::ABIArgInfo::Direct, E, EHStack, emitAddressAtOffset(), emitArgumentDemotion(), EmitLoadOfScalar(), EmitParmDecl(), EmitScalarExpr(), clang::CodeGen::ABIArgInfo::Expand, clang::CodeGen::ABIArgInfo::Extend, clang::CodeGen::CodeGenFunction::ParamValue::forDirect(), clang::CodeGen::CodeGenFunction::ParamValue::forIndirect(), clang::CharUnits::fromQuantity(), clang::FunctionProtoType::ExtParameterInfo::getABI(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CGFunctionInfo::getArgStruct(), clang::CodeGen::CGFunctionInfo::getArgStructAlignment(), clang::ASTContext::getAsVariableArrayType(), clang::CodeGen::ABIArgInfo::getCanBeFlattened(), clang::CodeGen::ABIArgInfo::getCoerceAndExpandType(), clang::CodeGen::ABIArgInfo::getCoerceToType(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::ABIArgInfo::getDirectOffset(), clang::CodeGen::CGFunctionInfo::getExtParameterInfo(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getIndirectAlign(), clang::CodeGen::ABIArgInfo::getIndirectRealign(), clang::CodeGen::ABIArgInfo::getKind(), getLLVMContext(), clang::DeclaratorDecl::getLocStart(), clang::NamedDecl::getName(), getNonNullAttr(), clang::Type::getPointeeType(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), getTarget(), clang::ASTContext::getTargetAddressSpace(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSizeInChars(), hasScalarEvaluationKind(), I, clang::CodeGen::ABIArgInfo::Ignore, clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::Address::invalid(), clang::Type::isConstantSizeType(), clang::CodeGen::ABIArgInfo::isDirect(), clang::Type::isIncompleteType(), clang::CodeGen::ABIArgInfo::isPaddingForCoerceAndExpand(), clang::Type::isPointerType(), clang::QualType::isRestrictQualified(), MakeAddrLValue(), min(), clang::CodeGen::NormalCleanup, ReturnValue, clang::ArrayType::Static, clang::SwiftErrorResult, and clang::CodeGen::Type.
Referenced by StartFunction().
void CodeGenFunction::EmitGotoStmt | ( | const GotoStmt & | S | ) |
Definition at line 538 of file CGStmt.cpp.
References EmitBranchThroughCleanup(), EmitStopPoint(), getJumpDestForLabel(), clang::GotoStmt::getLabel(), and HaveInsertPoint().
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitIfStmt | ( | const IfStmt & | S | ) |
Definition at line 570 of file CGStmt.cpp.
References ConstantFoldsToSimpleInteger(), ContainsLabel(), createBasicBlock(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), EmitAutoVarDecl(), EmitBlock(), EmitBranch(), EmitBranchOnBoolExpr(), EmitStmt(), clang::IfStmt::getCond(), clang::IfStmt::getConditionVariable(), clang::IfStmt::getElse(), clang::IfStmt::getInit(), getProfileCount(), clang::IfStmt::getThen(), incrementProfileCounter(), and clang::IfStmt::isConstexpr().
Referenced by EmitStmt().
void CodeGenFunction::EmitIgnoredExpr | ( | const Expr * | E | ) |
EmitIgnoredExpr - Emit an expression in a context which ignores the result.
EmitIgnoredExpr - Emit code to compute the specified expression, ignoring the result.
Definition at line 128 of file CGExpr.cpp.
References EmitAnyExpr(), EmitLValue(), clang::CodeGen::AggValueSlot::ignored(), and clang::Expr::isRValue().
Referenced by emitCombinerOrInitializer(), emitInitWithReductionInitializer(), EmitMaterializeTemporaryExpr(), EmitOMPCopy(), EmitOMPDistributeLoop(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLinearClauseFinal(), EmitOMPLinearClauseInit(), EmitOMPSimdDirective(), emitPostUpdateForReductionClause(), emitPreCond(), emitPseudoObjectExpr(), emitReductionCombiner(), EmitStmt(), and EmitVariablyModifiedType().
void CodeGenFunction::emitImplicitAssignmentOperatorBody | ( | FunctionArgList & | Args | ) |
Definition at line 1597 of file CGClass.cpp.
References clang::CompoundStmt::body(), CurGD, clang::FunctionDecl::getBody(), clang::GlobalDecl::getDecl(), I, and incrementProfileCounter().
Referenced by GenerateCode().
void CodeGenFunction::EmitIndirectGotoStmt | ( | const IndirectGotoStmt & | S | ) |
Definition at line 549 of file CGStmt.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitBranch(), EmitBranchThroughCleanup(), EmitScalarExpr(), clang::IndirectGotoStmt::getConstantTarget(), GetIndirectGotoBlock(), getJumpDestForLabel(), clang::IndirectGotoStmt::getTarget(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and Target.
Referenced by EmitStmt().
void CodeGenFunction::EmitInheritedCXXConstructorCall | ( | const CXXConstructorDecl * | D, |
bool | ForVirtualBase, | ||
Address | This, | ||
bool | InheritedFromVBase, | ||
const CXXInheritedCtorInitExpr * | E | ||
) |
Emit a call to a constructor inherited from a base class, passing the current constructor's arguments along unmodified (without even making a copy).
Definition at line 2172 of file CGClass.cpp.
References CGM, clang::Ctor_Base, CurCodeDecl, EmitCXXConstructorCall(), EmitDelegateCallArg(), clang::CodeGen::RValue::get(), getContext(), clang::TargetInfo::getCXXABI(), clang::CXXInheritedCtorInitExpr::getLocation(), clang::FunctionDecl::getNumParams(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenModule::getTarget(), clang::CXXMethodDecl::getThisType(), and clang::TargetCXXABI::hasConstructorVariants().
void CodeGenFunction::EmitInitializerForField | ( | FieldDecl * | Field, |
LValue | LHS, | ||
Expr * | Init, | ||
ArrayRef< VarDecl * > | ArrayIndexes | ||
) |
Definition at line 753 of file CGClass.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), EmitAggMemberInitializer(), EmitAutoVarDecl(), EmitComplexExprIntoLValue(), EmitExprAsInit(), EmitScalarExpr(), EmitStoreThroughLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::ASTContext::getBaseElementType(), getContext(), clang::CodeGen::Address::getElementType(), getEvaluationKind(), clang::ValueDecl::getType(), I, clang::CodeGen::Address::invalid(), clang::QualType::isDestructedType(), clang::CodeGen::LValue::isSimple(), MakeAddrLValue(), needsEHCleanup(), pushEHDestroy(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::CodeGen::Type.
Referenced by EmitLambdaExpr(), EmitMemberInitializer(), and InitCapturedStruct().
LValue CodeGenFunction::EmitInitListLValue | ( | const InitListExpr * | E | ) |
Definition at line 3459 of file CGExpr.cpp.
References clang::InitListExpr::getInit(), clang::InitListExpr::getNumInits(), and clang::Expr::isGLValue().
void CodeGenFunction::EmitInlinedInheritingCXXConstructorCall | ( | const CXXConstructorDecl * | Ctor, |
CXXCtorType | CtorType, | ||
bool | ForVirtualBase, | ||
bool | Delegating, | ||
CallArgList & | Args | ||
) |
Emit a call to an inheriting constructor (that is, one that invokes a constructor inherited from a base class) by inlining its definition.
This is necessary if the ABI does not support forwarding the arguments to the base class constructor (because they're variadic or similar).
Definition at line 2219 of file CGClass.cpp.
References clang::CodeGen::CGCXXABI::addImplicitConstructorArgs(), BuildFunctionArgList(), CGM, CreateIRTemp(), CurGD, EmitCtorPrologue(), clang::CodeGen::CGCXXABI::EmitInstanceFunctionProlog(), EmitParmDecl(), FnRetTy, clang::CodeGen::CodeGenFunction::ParamValue::forDirect(), clang::CodeGen::CodeGenFunction::ParamValue::forIndirect(), clang::CodeGen::RValue::getAggregateAddress(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::RValue::getScalarVal(), I, clang::CodeGen::RValue::isComplex(), clang::CodeGen::RValue::isScalar(), clang::Type::isVoidType(), and ReturnValue.
Referenced by EmitCXXConstructorCall().
llvm::Value * CodeGenFunction::EmitIvarOffset | ( | const ObjCInterfaceDecl * | Interface, |
const ObjCIvarDecl * | Ivar | ||
) |
Definition at line 3940 of file CGExpr.cpp.
Referenced by generateObjCGetterBody(), and generateObjCSetterBody().
void CodeGenFunction::EmitLabel | ( | const LabelDecl * | D | ) |
EmitLabel - Emit the block for the given label.
It is legal to call this function even if there is no current insertion point.
Definition at line 463 of file CGStmt.cpp.
References clang::CodeGen::CodeGenFunction::LexicalScope::addLabel(), EHStack, EmitBlock(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), getJumpDestInCurrentScope(), clang::NamedDecl::getName(), clang::CodeGen::CodeGenFunction::JumpDest::getScopeDepth(), clang::LabelDecl::getStmt(), clang::CodeGen::EHScopeStack::hasNormalCleanups(), incrementProfileCounter(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), clang::CodeGen::CodeGenFunction::JumpDest::isValid(), ResolveBranchFixups(), clang::CodeGen::CodeGenFunction::JumpDest::setScopeDepth(), and clang::CodeGen::EHScopeStack::stable_begin().
Referenced by EmitCompoundStmtWithoutScope(), and EmitLabelStmt().
void CodeGenFunction::EmitLabelStmt | ( | const LabelStmt & | S | ) |
Definition at line 513 of file CGStmt.cpp.
References EmitLabel(), EmitStmt(), clang::LabelStmt::getDecl(), and clang::LabelStmt::getSubStmt().
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitLambdaBlockInvokeBody | ( | ) |
Definition at line 2933 of file CGClass.cpp.
References clang::CodeGen::CallArgList::add(), BlockInfo, clang::BlockDecl::capture_begin(), EmitDelegateCallArg(), EmitForwardingCallToLambda(), clang::CodeGen::RValue::get(), GetAddrOfBlockDecl(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CGBlockInfo::getBlockDecl(), getContext(), clang::CXXRecordDecl::getLambdaCallOperator(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getPointerType(), getRecordType(), clang::ValueDecl::getType(), clang::CXXRecordDecl::isGenericLambda(), and clang::BlockDecl::parameters().
Referenced by GenerateBlockFunction().
void CodeGenFunction::EmitLambdaDelegatingInvokeBody | ( | const CXXMethodDecl * | MD | ) |
Definition at line 2965 of file CGClass.cpp.
References clang::CodeGen::CallArgList::add(), ConvertType(), EmitDelegateCallArg(), EmitForwardingCallToLambda(), clang::FunctionTemplateDecl::findSpecialization(), clang::CodeGen::RValue::get(), getContext(), clang::FunctionDecl::getDescribedFunctionTemplate(), clang::CXXRecordDecl::getLambdaCallOperator(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getPointerType(), getRecordType(), clang::FunctionDecl::getTemplateSpecializationArgs(), getTypes(), clang::FunctionDecl::isFunctionTemplateSpecialization(), clang::CXXRecordDecl::isGenericLambda(), and clang::FunctionDecl::parameters().
Referenced by EmitLambdaStaticInvokeFunction().
void CodeGenFunction::EmitLambdaExpr | ( | const LambdaExpr * | E, |
AggValueSlot | Dest | ||
) |
Definition at line 1938 of file CGExprCXX.cpp.
References clang::LambdaExpr::capture_init_begin(), clang::LambdaExpr::capture_init_end(), EmitInitializerForField(), EmitLValueForFieldInitialization(), EmitStoreThroughLValue(), clang::RecordDecl::field_begin(), clang::CodeGen::RValue::get(), clang::CodeGen::AggValueSlot::getAddress(), clang::LambdaExpr::getCaptureInitIndexVars(), clang::LambdaExpr::getLambdaClass(), clang::Expr::getType(), and MakeAddrLValue().
LValue CodeGenFunction::EmitLambdaLValue | ( | const LambdaExpr * | E | ) |
Definition at line 3913 of file CGExpr.cpp.
References clang::CodeGen::AggValueSlot::getAddress(), and clang::Expr::getType().
void CodeGenFunction::EmitLambdaStaticInvokeFunction | ( | const CXXMethodDecl * | MD | ) |
Definition at line 2995 of file CGClass.cpp.
References CGM, EmitLambdaDelegatingInvokeBody(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), and clang::FunctionDecl::isVariadic().
Referenced by GenerateCode().
void CodeGenFunction::EmitLambdaToBlockPointerBody | ( | FunctionArgList & | Args | ) |
Definition at line 2954 of file CGClass.cpp.
References CGM, CurCodeDecl, CurGD, EmitFunctionBody(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), and clang::GlobalDecl::getDecl().
Referenced by GenerateCode().
llvm::BasicBlock * CodeGenFunction::EmitLandingPad | ( | ) |
Emits a landing pad for the current EH stack.
Definition at line 731 of file CGException.cpp.
References clang::CodeGen::EHScopeStack::begin(), Builder, clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, createBasicBlock(), clang::CodeGen::ApplyDebugLocation::CreateDefaultArtificial(), clang::CodeGen::CGBuilderTy::CreateStore(), E, EHStack, EmitBlock(), clang::CodeGen::EHScopeStack::end(), clang::CodeGen::EHScope::Filter, clang::CodeGen::EHScopeStack::find(), clang::CodeGen::CatchTypeInfo::Flags, getCatchAllValue(), getEHDispatchBlock(), getEHSelectorSlot(), getExceptionSlot(), clang::CodeGen::EHFilterScope::getFilter(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::EHScopeStack::getInnermostEHScope(), clang::CodeGen::EHFilterScope::getNumFilters(), clang::CodeGen::EHCatchScope::getNumHandlers(), getTerminateLandingPad(), I, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::EHScope::PadEnd, clang::CodeGen::EHScopeStack::requiresLandingPad(), clang::CodeGen::CatchTypeInfo::RTTI, clang::CodeGen::EHScope::Terminate, and clang::CodeGen::EHCatchScope::Handler::Type.
Referenced by getInvokeDestImpl().
void CodeGenFunction::EmitLifetimeEnd | ( | llvm::Value * | Size, |
llvm::Value * | Addr | ||
) |
Definition at line 943 of file CGDecl.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getLLVMLifetimeEndFn(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::CallLifetimeEnd::Emit(), and EmitCall().
llvm::Value * CodeGenFunction::EmitLifetimeStart | ( | uint64_t | Size, |
llvm::Value * | Addr | ||
) |
Emit a lifetime.begin marker if some criteria are satisfied.
Definition at line 930 of file CGDecl.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMLifetimeStartFn(), clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and shouldEmitLifetimeMarkers().
Referenced by EmitAutoVarAlloca(), EmitCall(), and EmitMaterializeTemporaryExpr().
Definition at line 1486 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getBitFieldAddress(), clang::CodeGen::LValue::getBitFieldInfo(), clang::CodeGen::LValue::getType(), clang::CodeGen::CGBitFieldInfo::IsSigned, clang::CodeGen::LValue::isVolatileQualified(), clang::CodeGen::CGBitFieldInfo::Offset, clang::CodeGen::CGBitFieldInfo::Size, and clang::CodeGen::CGBitFieldInfo::StorageSize.
ComplexPairTy CodeGenFunction::EmitLoadOfComplex | ( | LValue | src, |
SourceLocation | loc | ||
) |
EmitLoadOfComplex - Load a complex number from the specified l-value.
EmitLoadOfComplex - Load a complex number from the specified address.
Definition at line 1069 of file CGExprComplex.cpp.
Referenced by EmitFunctionEpilog(), emitInitWithReductionInitializer(), generateObjCGetterBody(), and InitCatchParam().
Load of global gamed gegisters are always calls to intrinsics.
Definition at line 1568 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getGlobalReg(), clang::CodeGen::LValue::getType(), clang::Type::isIntegerType(), and clang::Type::isPointerType().
RValue CodeGenFunction::EmitLoadOfLValue | ( | LValue | LV, |
SourceLocation | Loc | ||
) |
EmitLoadOfLValue - Given an expression that represents a value lvalue, this method emits the address of the lvalue, then loads the result as an rvalue, returning the rvalue.
Definition at line 1440 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getAddress(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::LValue::getQuals(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::getVectorAddress(), clang::CodeGen::LValue::getVectorIdx(), clang::CodeGen::LValue::isBitField(), clang::CodeGen::LValue::isExtVectorElt(), clang::Type::isFunctionType(), clang::CodeGen::LValue::isGlobalReg(), clang::CodeGen::LValue::isObjCWeak(), clang::CodeGen::LValue::isSimple(), clang::CodeGen::LValue::isVectorElt(), clang::CodeGen::LValue::isVolatileQualified(), and clang::Qualifiers::OCL_Weak.
Referenced by EmitAtomicUpdateValue(), emitInitWithReductionInitializer(), EmitOMPAtomicReadExpr(), EmitOMPAtomicSimpleUpdateExpr(), emitProxyTaskFunction(), emitWritebackArg(), GenerateCapturedStmtFunction(), generateObjCGetterBody(), GenerateOpenMPCapturedStmtFunction(), GenerateOpenMPCapturedVars(), clang::CodeGen::getThreadID(), StartFunction(), and tryEmitARCRetainLoadOfScalar().
Address CodeGenFunction::EmitLoadOfPointer | ( | Address | Ptr, |
const PointerType * | PtrTy, | ||
AlignmentSource * | Source = nullptr |
||
) |
Definition at line 1974 of file CGExpr.cpp.
References Builder, and clang::PointerType::getPointeeType().
LValue CodeGenFunction::EmitLoadOfPointerLValue | ( | Address | Ptr, |
const PointerType * | PtrTy | ||
) |
Definition at line 1982 of file CGExpr.cpp.
References clang::PointerType::getPointeeType().
Referenced by emitCombinerOrInitializer(), emitDestructorsFunction(), emitProxyTaskFunction(), emitTaskDupFunction(), emitTaskPrivateMappingFunction(), and loadToBegin().
Address CodeGenFunction::EmitLoadOfReference | ( | Address | Ref, |
const ReferenceType * | RefTy, | ||
AlignmentSource * | Source = nullptr |
||
) |
Definition at line 1958 of file CGExpr.cpp.
References Builder, and clang::ReferenceType::getPointeeType().
Referenced by GenerateOpenMPCapturedStmtFunction(), and GetAddrOfBlockDecl().
LValue CodeGenFunction::EmitLoadOfReferenceLValue | ( | Address | Ref, |
const ReferenceType * | RefTy | ||
) |
Definition at line 1967 of file CGExpr.cpp.
References clang::ReferenceType::getPointeeType().
Referenced by EmitGlobalVarDeclLValue(), and loadToBegin().
llvm::Value * CodeGenFunction::EmitLoadOfScalar | ( | Address | Addr, |
bool | Volatile, | ||
QualType | Ty, | ||
SourceLocation | Loc, | ||
AlignmentSource | AlignSource = AlignmentSource::Type , |
||
llvm::MDNode * | TBAAInfo = nullptr , |
||
QualType | TBAABaseTy = QualType() , |
||
uint64_t | TBAAOffset = 0 , |
||
bool | isNontemporal = false |
||
) |
EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation.
Definition at line 1262 of file CGExpr.cpp.
References Builder, End, clang::Type::getAs(), clang::CodeGen::Address::getElementType(), getRangeForType(), hasBooleanRepresentation(), clang::Type::isAtomicType(), clang::Type::isVectorType(), and Node.
Referenced by AddDirectArgument(), EmitARCStoreStrong(), EmitFunctionProlog(), EmitNontemporalLoad(), emitProxyTaskFunction(), EmitScalarInit(), emitTaskDupFunction(), clang::CodeGen::emitTaskInit(), clang::CodeGen::emitTaskLoopCall(), clang::CodeGen::emitThreadPrivateVarDefinition(), emitWriteback(), InitCatchParam(), and LoadObjCSelf().
llvm::Value * CodeGenFunction::EmitLoadOfScalar | ( | LValue | lvalue, |
SourceLocation | Loc | ||
) |
EmitLoadOfScalar - Load a scalar value from an address, taking care to appropriately convert from the memory representation to the LLVM value representation.
The l-value must be a simple l-value.
Definition at line 1196 of file CGExpr.cpp.
References clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isNontemporal(), 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 970 of file CGExpr.cpp.
References E, clang::Type::getAs(), clang::Expr::getType(), and clang::Type::isAnyComplexType().
Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), EmitARCStoreUnsafeUnretained(), EmitAsmStmt(), EmitCallArg(), emitCPPObjectAtomicSetterCall(), EmitCXXConstructorCall(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitIgnoredExpr(), EmitLValueOrThrowExpression(), EmitMSVAListRef(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicReadExpr(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), EmitOMPCopyinClause(), EmitOMPFirstprivateClause(), EmitOMPHelperVar(), EmitOMPLastprivateClauseInit(), EmitOMPLinearClauseFinal(), EmitOMPPrivateLoopCounters(), EmitOMPReductionClauseInit(), emitPseudoObjectExpr(), EmitReferenceBindingToExpr(), emitStructSetterCall(), clang::CodeGen::emitTaskCall(), EmitTypeidFromVTable(), EmitVAListRef(), emitWritebackArg(), GenerateOpenMPCapturedVars(), tryEmitARCCopyWeakInit(), and tryEmitARCRetainLoadOfScalar().
Definition at line 3310 of file CGExpr.cpp.
References clang::Qualifiers::addCVRQualifiers(), Builder, emitAddrOfFieldStorage(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::Type::getAs(), clang::CodeGen::CGRecordLayout::getBitFieldInfo(), clang::CodeGen::Address::getElementType(), clang::CodeGen::getFieldAlignmentSource(), clang::FieldDecl::getFieldIndex(), clang::ASTRecordLayout::getFieldOffset(), clang::CodeGen::CGRecordLayout::getLLVMFieldNo(), clang::NamedDecl::getName(), clang::Qualifiers::getObjCGCAttr(), clang::FieldDecl::getParent(), clang::Type::getPointeeType(), clang::CodeGen::LValue::getQuals(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::ValueDecl::getType(), clang::CodeGen::LValue::getVRQualifiers(), clang::FieldDecl::isBitField(), clang::Type::isReferenceType(), clang::TagDecl::isUnion(), clang::Qualifiers::removeObjCGCAttr(), clang::CodeGen::LValue::setTBAABaseType(), clang::CodeGen::LValue::setTBAAInfo(), clang::CodeGen::LValue::setTBAAOffset(), clang::CodeGen::CGBitFieldInfo::StorageOffset, clang::CodeGen::CGBitFieldInfo::StorageSize, clang::ast_matchers::type, clang::Qualifiers::Volatile, clang::Qualifiers::Weak, and clang::QualType::withCVRQualifiers().
Referenced by EmitCapturedFieldLValue(), emitDestructorsFunction(), clang::CodeGen::emitDoacrossInit(), EmitMaterializeTemporaryExpr(), emitPrivatesInit(), emitProxyTaskFunction(), clang::CodeGen::emitTaskCall(), emitTaskDupFunction(), clang::CodeGen::emitTaskInit(), clang::CodeGen::emitTaskLoopCall(), emitTaskPrivateMappingFunction(), and GenerateCapturedStmtFunction().
EmitLValueForFieldInitialization - Like EmitLValueForField, except that if the Field is a reference, this will return the address of the reference and not the address of the value stored in the reference.
Definition at line 3422 of file CGExpr.cpp.
References Builder, emitAddrOfFieldStorage(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::CodeGen::getFieldAlignmentSource(), clang::NamedDecl::getName(), clang::ValueDecl::getType(), and clang::Type::isReferenceType().
Referenced by EmitLambdaExpr(), EmitLValueForAnyFieldInitialization(), EmitMemberInitializer(), and InitCapturedStruct().
LValue CodeGenFunction::EmitLValueForIvar | ( | QualType | ObjectTy, |
llvm::Value * | Base, | ||
const ObjCIvarDecl * | Ivar, | ||
unsigned | CVRQualifiers | ||
) |
Definition at line 3945 of file CGExpr.cpp.
Referenced by emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), emitStructGetterCall(), emitStructSetterCall(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), and generateObjCSetterBody().
Given that we are currently emitting a lambda, emit an l-value for one of its members.
Definition at line 3274 of file CGExpr.cpp.
References clang::FieldDecl::getParent().
Referenced by StartFunction().
LValue CodeGenFunction::EmitMaterializeTemporaryExpr | ( | const MaterializeTemporaryExpr * | E | ) |
Definition at line 351 of file CGExpr.cpp.
References clang::SubobjectAdjustment::DTB::BasePath, CGM, ConvertTypeForMem(), createReferenceTemporary(), clang::CodeGen::Decl, clang::SubobjectAdjustment::DTB::DerivedClass, clang::SubobjectAdjustment::DerivedToBase, clang::SubobjectAdjustment::DerivedToBaseAdjustment, clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, E, EmitAggExpr(), EmitAnyExprToMem(), EmitCXXMemberDataPointerAddress(), EmitIgnoredExpr(), EmitLifetimeStart(), EmitLValueForField(), clang::CodeGen::CodeGenModule::EmitNullConstant(), EmitOpaqueValueLValue(), EmitScalarExpr(), EmitScalarInit(), clang::SubobjectAdjustment::Field, clang::SubobjectAdjustment::FieldAdjustment, clang::CodeGen::AggValueSlot::forAddr(), GetAddressOfBaseClass(), clang::CodeGen::Address::getAddressSpace(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::Address::getElementType(), getEvaluationKind(), clang::Expr::getExprLoc(), clang::MaterializeTemporaryExpr::getExtendingDecl(), clang::QualType::getObjCLifetime(), clang::CodeGen::Address::getPointer(), clang::QualType::getQualifiers(), clang::MaterializeTemporaryExpr::getStorageDuration(), clang::MaterializeTemporaryExpr::GetTemporaryExpr(), clang::Expr::getType(), I, clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, clang::SubobjectAdjustment::Kind, MakeAddrLValue(), clang::SubobjectAdjustment::MemberPointerAdjustment, clang::SubobjectAdjustment::P::MPT, clang::CodeGen::NormalEHLifetimeMarker, 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::SD_Automatic, clang::SD_FullExpression, clang::Expr::skipRValueSubobjectAdjustments(), clang::CodeGen::TEK_Aggregate, and clang::CodeGen::TEK_Scalar.
void CodeGenFunction::EmitMCountInstrumentation | ( | ) |
EmitMCountInstrumentation - Emit call to .mcount.
Definition at line 431 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), getTarget(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by StartFunction().
LValue CodeGenFunction::EmitMemberExpr | ( | const MemberExpr * | E | ) |
Definition at line 3242 of file CGExpr.cpp.
References EmitFunctionDeclLValue(), EmitGlobalVarDeclLValue(), clang::MemberExpr::getBase(), clang::MemberExpr::getExprLoc(), clang::MemberExpr::getMemberDecl(), clang::Type::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::Expr::getType(), clang::MemberExpr::isArrow(), and setObjCGCLValueClass().
Emit a "reference" to a __builtin_ms_va_list; this is always the value of the expression, because a __builtin_ms_va_list is a pointer to a char.
Definition at line 1813 of file CodeGenFunction.cpp.
References EmitLValue(), and clang::CodeGen::LValue::getAddress().
Referenced by EmitVAArg(), and EmitX86BuiltinExpr().
void CodeGenFunction::EmitMustTailThunk | ( | const CXXMethodDecl * | MD, |
llvm::Value * | AdjustedThisPtr, | ||
llvm::Value * | Callee | ||
) |
Emit a musttail call for a thunk with a potentially adjusted this pointer.
Definition at line 341 of file CGVTables.cpp.
References clang::CodeGen::CGFunctionInfo::arg_begin(), Builder, CGM, clang::CodeGen::CodeGenModule::ConstructAttributeList(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStore(), CurFn, CurFnInfo, EmitBlock(), FinishFunction(), GetAddrOfLocalVar(), getLLVMContext(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfoArgInfo::info, clang::CodeGen::ABIArgInfo::isDirect(), clang::CodeGen::ABIArgInfo::isInAlloca(), clang::CodeGen::ABIArgInfo::isIndirect(), clang::CodeGen::ABIArgInfo::isSRetAfterThis(), and clang::CodeGen::Type.
Referenced by EmitCallAndReturnForThunk().
Value * CodeGenFunction::EmitNeonCall | ( | llvm::Function * | F, |
SmallVectorImpl< llvm::Value * > & | O, | ||
const char * | name, | ||
unsigned | shift = 0 , |
||
bool | rightshift = false |
||
) |
Definition at line 2573 of file CGBuiltin.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), and EmitNeonShiftVector().
Referenced by EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), EmitARMBuiltinExpr(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), and packTBLDVectorList().
Value * CodeGenFunction::EmitNeonRShiftImm | ( | llvm::Value * | Vec, |
llvm::Value * | Amt, | ||
llvm::Type * | Ty, | ||
bool | usgn, | ||
const char * | name | ||
) |
Definition at line 2594 of file CGBuiltin.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitNeonShiftVector(), and clang::prec::Shift.
Referenced by EmitAArch64BuiltinExpr(), EmitARMBuiltinExpr(), and EmitCommonNeonBuiltinExpr().
Value * CodeGenFunction::EmitNeonShiftVector | ( | llvm::Value * | V, |
llvm::Type * | Ty, | ||
bool | negateForRightShift | ||
) |
Definition at line 2587 of file CGBuiltin.cpp.
Referenced by EmitARMBuiltinExpr(), EmitCommonNeonBuiltinExpr(), EmitNeonCall(), and EmitNeonRShiftImm().
Value * CodeGenFunction::EmitNeonSplat | ( | llvm::Value * | V, |
llvm::Constant * | Idx | ||
) |
Definition at line 2567 of file CGBuiltin.cpp.
References Builder.
Referenced by EmitAArch64BuiltinExpr(), EmitARMBuiltinExpr(), and EmitCommonNeonBuiltinExpr().
void CodeGenFunction::EmitNewArrayInitializer | ( | const CXXNewExpr * | E, |
QualType | elementType, | ||
llvm::Type * | ElementTy, | ||
Address | NewPtr, | ||
llvm::Value * | NumElements, | ||
llvm::Value * | AllocSizeWithoutCookie | ||
) |
Definition at line 831 of file CGExprCXX.cpp.
References clang::CharUnits::alignmentAtOffset(), clang::CharUnits::alignmentOfArrayElement(), Builder, CGM, ConvertTypeForMem(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateMemSet(), clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAlloca(), DeactivateCleanupBlock(), EHStack, EmitBlock(), EmitCXXAggrConstructorCall(), clang::CodeGen::Address::getAlignment(), clang::CXXNewExpr::getAllocatedType(), clang::Type::getAs(), clang::Type::getAsArrayTypeUnsafe(), clang::ASTContext::getConstantArrayElementCount(), getContext(), getDestroyer(), clang::CXXNewExpr::getInitializer(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), clang::CodeGen::CGBuilderTy::getSize(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSizeInChars(), clang::CXXNewExpr::hasInitializer(), clang::CodeGen::Address::invalid(), clang::Type::isConstantArrayType(), clang::QualType::isDestructedType(), clang::CXXRecordDecl::isEmpty(), clang::FunctionDecl::isTrivial(), clang::CodeGen::Address::isValid(), clang::CodeGen::CodeGenTypes::isZeroInitializable(), needsEHCleanup(), pushIrregularPartialArrayCleanup(), pushRegularPartialArrayCleanup(), clang::CodeGen::EHScopeStack::stable_begin(), and StoreAnyExprIntoOneUnit().
Referenced by EmitNewInitializer().
void CodeGenFunction::EmitNonNullArgCheck | ( | RValue | RV, |
QualType | ArgType, | ||
SourceLocation | ArgLoc, | ||
const FunctionDecl * | FD, | ||
unsigned | ParmNum | ||
) |
Create a check for a function parameter that may potentially be declared as non-null.
Definition at line 3148 of file CGCall.cpp.
References Builder, EmitCheck(), EmitCheckSourceLocation(), getNonNullAttr(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::CodeGen::RValue::getScalarVal(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::RValue::isScalar(), clang::None, and SanOpts.
Referenced by EmitCallArgs().
void CodeGenFunction::EmitNoreturnRuntimeCallOrInvoke | ( | llvm::Value * | callee, |
ArrayRef< llvm::Value * > | args | ||
) |
Emits a call or invoke to the given noreturn runtime function.
Definition at line 3425 of file CGCall.cpp.
References Builder, CurrentFuncletPad, getBundlesForFunclet(), getInvokeDest(), clang::CodeGen::CodeGenTypeCache::getRuntimeCC(), and getUnreachableBlock().
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall | ( | llvm::Value * | callee, |
const Twine & | name = "" |
||
) |
Referenced by BuildBlockRelease(), CallBeginCatch(), EmitAArch64BuiltinExpr(), emitARCCopyOperation(), EmitARCDestroyWeak(), EmitARCIntrinsicUse(), emitARCLoadOperation(), EmitARCRelease(), emitARCStoreOperation(), EmitARCStoreStrongCall(), emitARCValueOperation(), EmitARMBuiltinExpr(), emitCheckHandlerCall(), EmitExtendGCLifetime(), EmitFunctionInstrumentation(), emitGlobalDtorWithCXAAtExit(), emitGlobalDtorWithTLRegDtor(), EmitMCountInstrumentation(), EmitObjCAutoreleasePoolPush(), clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), GenerateCopyHelperFunction(), InitCatchParam(), and registerGlobalDtorWithAtExit().
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall | ( | llvm::Value * | callee, |
ArrayRef< llvm::Value * > | args, | ||
const Twine & | name = "" |
||
) |
EmitNullInitialization - Generate code to set a value of the given type to null, If the type contains data member pointers, they will be initialized to -1 in accordance with the Itanium C++ ABI.
Definition at line 1439 of file CodeGenFunction.cpp.
References Builder, CGM, clang::frontend::CPlusPlus, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), clang::CodeGen::CGBuilderTy::CreateMemSet(), emitNonZeroVLAInit(), clang::CodeGen::CodeGenModule::EmitNullConstant(), clang::CodeGen::Address::getAlignment(), clang::Type::getAs(), clang::ASTContext::getBaseElementType(), getContext(), clang::CodeGen::Address::getElementType(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getSize(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSizeInChars(), getVLASize(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CharUnits::isOne(), clang::CharUnits::isZero(), and clang::CodeGen::CodeGenTypes::isZeroInitializable().
Referenced by EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), clang::CodeGen::emitDoacrossInit(), EmitObjCForCollectionStmt(), and EmitSynthesizedCXXCopyCtor().
Definition at line 7942 of file CGBuiltin.cpp.
References clang::prec::And, Builder, CGM, EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), getNaturalPointeeTypeAlignment(), clang::Expr::getType(), MakeAtomicCmpXchgValue(), and MakeBinaryAtomicValue().
Referenced by EmitTargetArchBuiltinExpr().
llvm::Value * CodeGenFunction::EmitObjCArrayLiteral | ( | const ObjCArrayLiteral * | E | ) |
Definition at line 225 of file CGObjC.cpp.
References EmitObjCCollectionLiteral(), and clang::ObjCArrayLiteral::getArrayWithObjectsMethod().
void CodeGenFunction::EmitObjCAtSynchronizedStmt | ( | const ObjCAtSynchronizedStmt & | S | ) |
Definition at line 1749 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::EmitSynchronizedStmt(), and clang::CodeGen::CodeGenModule::getObjCRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitObjCAtThrowStmt | ( | const ObjCAtThrowStmt & | S | ) |
Definition at line 1745 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::EmitThrowStmt(), and clang::CodeGen::CodeGenModule::getObjCRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitObjCAtTryStmt | ( | const ObjCAtTryStmt & | S | ) |
Definition at line 1741 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::EmitTryStmt(), and clang::CodeGen::CodeGenModule::getObjCRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitObjCAutoreleasePoolCleanup | ( | llvm::Value * | Ptr | ) |
Definition at line 2396 of file CGObjC.cpp.
References EHStack, clang::CodeGen::CodeGenModule::getLangOpts(), and clang::CodeGen::NormalCleanup.
Referenced by GenerateCXXGlobalInitFunc().
void CodeGenFunction::EmitObjCAutoreleasePoolPop | ( | llvm::Value * | value | ) |
Produce the code to do a primitive release.
call void @objc_autoreleasePoolPop(i8* ptr)
Definition at line 2302 of file CGObjC.cpp.
References Builder, createARCRuntimeFunction(), EmitRuntimeCallOrInvoke(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::ObjCEntrypoints::objc_autoreleasePoolPop.
llvm::Value * CodeGenFunction::EmitObjCAutoreleasePoolPush | ( | ) |
Produce the code to do a objc_autoreleasepool_push.
call i8* @objc_autoreleasePoolPush(void)
Definition at line 2289 of file CGObjC.cpp.
References createARCRuntimeFunction(), EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::ObjCEntrypoints::objc_autoreleasePoolPush.
Referenced by EmitObjCAutoreleasePoolStmt(), and GenerateCXXGlobalInitFunc().
void CodeGenFunction::EmitObjCAutoreleasePoolStmt | ( | const ObjCAutoreleasePoolStmt & | S | ) |
Definition at line 3118 of file CGObjC.cpp.
References clang::CompoundStmt::body(), Builder, EHStack, clang::CodeGen::CGDebugInfo::EmitLexicalBlockEnd(), clang::CodeGen::CGDebugInfo::EmitLexicalBlockStart(), EmitObjCAutoreleasePoolPush(), EmitObjCMRRAutoreleasePoolPush(), EmitStmt(), getDebugInfo(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CompoundStmt::getLBracLoc(), clang::CompoundStmt::getRBracLoc(), clang::ObjCAutoreleasePoolStmt::getSubStmt(), clang::ObjCRuntime::hasNativeARC(), I, clang::CodeGen::NormalCleanup, clang::LangOptions::ObjCRuntime, and S.
Referenced by EmitStmt().
llvm::Value * CodeGenFunction::EmitObjCBoxedExpr | ( | const ObjCBoxedExpr * | E | ) |
EmitObjCBoxedExpr - This routine generates code to call the appropriate expression boxing method.
This will either be one of +[NSNumber numberWith<Type>:], or +[NSString stringWithUTF8String:], or [NSValue valueWithBytes:objCType:].
Definition at line 60 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), Builder, CGM, ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateMemTemp(), EmitAnyExpr(), EmitAnyExprToMem(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenModule::GetAddrOfConstantCString(), clang::ObjCBoxedExpr::getBoxingMethod(), clang::QualType::getCanonicalType(), clang::CodeGen::CGObjCRuntime::GetClass(), clang::ObjCMethodDecl::getClassInterface(), getContext(), clang::ASTContext::getObjCEncodingForType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::ConstantAddress::getPointer(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCMethodDecl::getSelector(), clang::ObjCBoxedExpr::getSubExpr(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::QualType::getUnqualifiedType(), clang::ObjCMethodDecl::isClassMethod(), clang::ObjCMethodDecl::param_begin(), and clang::ObjCMethodDecl::parameters().
llvm::Value * CodeGenFunction::EmitObjCCollectionLiteral | ( | const Expr * | E, |
const ObjCMethodDecl * | MethodWithObjects | ||
) |
Definition at line 113 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), Builder, CGM, Context, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::LangAS::Count, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateConstArrayGEP(), CreateMemTemp(), clang::CodeGen::Decl, E, 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::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCMethodDecl::getSelector(), clang::ASTContext::getSizeType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getTypeSize(), clang::QualType::getUnqualifiedType(), clang::CodeGen::Address::invalid(), clang::ObjCDictionaryElement::Key, MakeAddrLValue(), clang::ArrayType::Normal, clang::ObjCMethodDecl::param_begin(), clang::ObjCDictionaryElement::Value, and clang::QualType::withConst().
Referenced by EmitObjCArrayLiteral(), and EmitObjCDictionaryLiteral().
llvm::Value * CodeGenFunction::EmitObjCConsumeObject | ( | QualType | type, |
llvm::Value * | object | ||
) |
Produce the code for a CK_ARCConsumeObject.
Does a primitive release at the end of the full-expression.
Definition at line 1768 of file CGObjC.cpp.
References getARCCleanupKind().
Referenced by EmitARCExtendBlockObject(), EmitARCReclaimReturnedObject(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), and EmitObjCForCollectionStmt().
llvm::Value * CodeGenFunction::EmitObjCDictionaryLiteral | ( | const ObjCDictionaryLiteral * | E | ) |
Definition at line 229 of file CGObjC.cpp.
References EmitObjCCollectionLiteral(), and clang::ObjCDictionaryLiteral::getDictWithObjectsMethod().
LValue CodeGenFunction::EmitObjCEncodeExprLValue | ( | const ObjCEncodeExpr * | E | ) |
Definition at line 2279 of file CGExpr.cpp.
References clang::Expr::getType().
llvm::Value * CodeGenFunction::EmitObjCExtendObjectLifetime | ( | QualType | T, |
llvm::Value * | Ptr | ||
) |
Definition at line 1776 of file CGObjC.cpp.
References EmitARCRetainAutorelease().
void CodeGenFunction::EmitObjCForCollectionStmt | ( | const ObjCForCollectionStmt & | S | ) |
Definition at line 1452 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionCall(), Builder, ConvertType(), clang::LangAS::Count, clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), EmitARCRetainScalarExpr(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBlock(), EmitCall(), clang::CodeGen::CGDebugInfo::EmitLexicalBlockEnd(), clang::CodeGen::CGDebugInfo::EmitLexicalBlockStart(), EmitLValue(), EmitNullInitialization(), EmitObjCConsumeObject(), EmitScalarExpr(), EmitScalarInit(), EmitStmt(), EmitStoreThroughLValue(), clang::CodeGen::CGObjCRuntime::EnumerationMutationFunction(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::CodeGen::RValue::get(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::ObjCForCollectionStmt::getBody(), clang::ObjCForCollectionStmt::getCollection(), clang::ASTContext::getConstantArrayType(), clang::CodeGen::CodeGenModule::getContext(), getContext(), getCurrentProfileCount(), getDebugInfo(), clang::ObjCForCollectionStmt::getElement(), getJumpDestInCurrentScope(), getLangOpts(), clang::CodeGen::CodeGenModule::getObjCFastEnumerationStateType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::ASTContext::getPointerType(), getProfileCount(), clang::CodeGen::RValue::getScalarVal(), clang::SelectorTable::getSelector(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::Idents, incrementProfileCounter(), clang::CodeGen::CodeGenFunction::AutoVarEmission::invalid(), clang::VarDecl::isARCPseudoStrong(), clang::ArrayType::Normal, clang::Qualifiers::OCL_ExplicitNone, clang::ASTContext::Selectors, clang::CodeGen::Type, clang::VK_LValue, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitStmt().
LValue CodeGenFunction::EmitObjCIsaExpr | ( | const ObjCIsaExpr * | E | ) |
Definition at line 3480 of file CGExprScalar.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), EmitLValue(), EmitScalarExpr(), clang::CodeGen::LValue::getAddress(), clang::ObjCIsaExpr::getBase(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::Expr::getType(), clang::CodeGen::Address::invalid(), clang::Expr::isRValue(), and MakeAddrLValue().
LValue CodeGenFunction::EmitObjCIvarRefLValue | ( | const ObjCIvarRefExpr * | E | ) |
Definition at line 3953 of file CGExpr.cpp.
References clang::ObjCIvarRefExpr::getBase(), clang::Qualifiers::getCVRQualifiers(), clang::ObjCIvarRefExpr::getDecl(), clang::Type::getPointeeType(), clang::CodeGen::LValue::getPointer(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::ObjCIvarRefExpr::isArrow(), and setObjCGCLValueClass().
RValue CodeGenFunction::EmitObjCMessageExpr | ( | const ObjCMessageExpr * | E, |
ReturnValueSlot | Return = ReturnValueSlot() |
||
) |
Definition at line 341 of file CGObjC.cpp.
References AdjustObjCObjectType(), clang::ObjCMessageExpr::arguments(), Builder, CGM, clang::ObjCMessageExpr::Class, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStore(), CurCodeDecl, CurFuncDecl, EmitARCLoadWeakRetained(), EmitARCRetainAutorelease(), EmitARCRetainNonBlock(), EmitCallArgs(), EmitLValue(), EmitScalarExpr(), findWeakLValue(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::CodeGen::CGObjCRuntime::GenerateMessageSendSuper(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::Type::getAs(), clang::CodeGen::CGObjCRuntime::GetClass(), clang::ObjCMethodDecl::getClassInterface(), clang::ObjCMessageExpr::getClassReceiver(), clang::CodeGen::Address::getElementType(), clang::ObjCMessageExpr::getInstanceReceiver(), clang::ObjCObjectType::getInterface(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::ObjCMessageExpr::getMethodDecl(), clang::ObjCMethodDecl::getMethodFamily(), getNullForVariable(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ObjCMessageExpr::getReceiverKind(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::ObjCMessageExpr::getSelector(), clang::ObjCMessageExpr::getSuperType(), clang::Expr::getType(), clang::ObjCMessageExpr::Instance, clang::ObjCMessageExpr::isDelegateInitCall(), LoadObjCSelf(), clang::OMF_retain, shouldExtendReceiverForInnerPointerMessage(), clang::ObjCMessageExpr::SuperClass, clang::ObjCMessageExpr::SuperInstance, tryEmitARCRetainScalarExpr(), and clang::CodeGen::Type.
LValue CodeGenFunction::EmitObjCMessageExprLValue | ( | const ObjCMessageExpr * | E | ) |
Definition at line 3920 of file CGExpr.cpp.
References clang::CodeGen::RValue::getAggregateAddress(), clang::ObjCMessageExpr::getMethodDecl(), clang::ObjCMethodDecl::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::Type::isReferenceType(), and clang::CodeGen::RValue::isScalar().
void CodeGenFunction::EmitObjCMRRAutoreleasePoolPop | ( | llvm::Value * | Arg | ) |
Produce the code to do a primitive release.
[tmp drain];
Definition at line 2349 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::SelectorTable::getSelector(), clang::ASTContext::Idents, clang::ASTContext::Selectors, and clang::CodeGen::CodeGenTypeCache::VoidTy.
llvm::Value * CodeGenFunction::EmitObjCMRRAutoreleasePoolPush | ( | ) |
Produce the code to do an MRR version objc_autoreleasepool_push.
Which is: [[NSAutoreleasePool alloc] init]; Where alloc is declared as: + (id) alloc; in NSAutoreleasePool class. init is declared as: - (id) init; in its NSObject super class.
Definition at line 2324 of file CGObjC.cpp.
References clang::CodeGen::CGObjCRuntime::EmitNSAutoreleasePoolClassRef(), clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::RValue::getScalarVal(), clang::SelectorTable::getSelector(), clang::ASTContext::Idents, and clang::ASTContext::Selectors.
Referenced by EmitObjCAutoreleasePoolStmt().
llvm::Value * CodeGenFunction::EmitObjCProtocolExpr | ( | const ObjCProtocolExpr * | E | ) |
Definition at line 243 of file CGObjC.cpp.
References CGM, clang::CodeGen::CGObjCRuntime::GenerateProtocolRef(), clang::CodeGen::CodeGenModule::getObjCRuntime(), and clang::ObjCProtocolExpr::getProtocol().
llvm::Value * CodeGenFunction::EmitObjCSelectorExpr | ( | const ObjCSelectorExpr * | E | ) |
Emit a selector.
Definition at line 235 of file CGObjC.cpp.
References CGM, clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CGObjCRuntime::GetSelector(), and clang::ObjCSelectorExpr::getSelector().
LValue CodeGenFunction::EmitObjCSelectorLValue | ( | const ObjCSelectorExpr * | E | ) |
Definition at line 3934 of file CGExpr.cpp.
References clang::ObjCSelectorExpr::getSelector(), and clang::Expr::getType().
llvm::Value * CodeGenFunction::EmitObjCStringLiteral | ( | const ObjCStringLiteral * | E | ) |
Emits an instance of NSConstantString representing the object.
Definition at line 46 of file CGObjC.cpp.
References CGM, ConvertType(), clang::CodeGen::CGObjCRuntime::GenerateConstantString(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ObjCStringLiteral::getString(), and clang::Expr::getType().
llvm::Value * CodeGenFunction::EmitObjCThrowOperand | ( | const Expr * | expr | ) |
Definition at line 2971 of file CGObjC.cpp.
References EmitARCRetainAutoreleaseScalarExpr(), EmitScalarExpr(), and getLangOpts().
void CodeGenFunction::EmitOMPAggregateAssign | ( | Address | DestAddr, |
Address | SrcAddr, | ||
QualType | OriginalType, | ||
const llvm::function_ref< void(Address, Address)> & | CopyGen | ||
) |
Perform element by element copying of arrays with type OriginalType from SrcAddr to DestAddr using copying procedure generated by CopyGen.
DestAddr | Address of the destination array. |
SrcAddr | Address of the source array. |
OriginalType | Type of destination and source arrays. |
CopyGen | Copying procedure that copies value of single array element to another single array element. |
Definition at line 323 of file CGStmtOpenMP.cpp.
References clang::CharUnits::alignmentOfArrayElement(), Builder, createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), emitArrayLength(), EmitBlock(), clang::CodeGen::Address::getAlignment(), clang::Type::getAsArrayTypeUnsafe(), getContext(), clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getPointer(), and clang::ASTContext::getTypeSizeInChars().
Referenced by EmitOMPCopy(), EmitOMPFirstprivateClause(), and emitPrivatesInit().
LValue CodeGenFunction::EmitOMPArraySectionExpr | ( | const OMPArraySectionExpr * | E, |
bool | IsLowerBound = true |
||
) |
Definition at line 3033 of file CGExpr.cpp.
References Builder, emitArraySubscriptGEP(), emitOMPArraySectionBase(), clang::OMPArraySectionExpr::getBase(), clang::OMPArraySectionExpr::getBaseOriginalType(), clang::OMPArraySectionExpr::getColonLoc(), clang::CodeGen::Address::getElementType(), clang::OMPArraySectionExpr::getLength(), clang::OMPArraySectionExpr::getLowerBound(), clang::Type::getPointeeType(), clang::Expr::getType(), clang::Expr::IgnoreParenImpCasts(), clang::SourceLocation::isInvalid(), clang::Type::isPointerType(), isSimpleArrayDecayOperand(), Length, and clang::CharUnits::Zero().
Referenced by emitOMPArraySectionBase(), EmitOMPReductionClauseInit(), and clang::CodeGen::emitTaskCall().
void CodeGenFunction::EmitOMPAtomicDirective | ( | const OMPAtomicDirective & | S | ) |
Definition at line 3207 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::clauses(), EmitOMPAtomicExpr(), enterFullExpression(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPAtomicDirective::getExpr(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPAtomicDirective::getUpdateExpr(), clang::OMPAtomicDirective::getV(), clang::OMPAtomicDirective::getX(), clang::OMPAtomicDirective::isPostfixUpdate(), clang::OMPAtomicDirective::isXLHSInRHSPart(), clang::OMPC_unknown, and S.
Referenced by EmitStmt().
std::pair< bool, RValue > CodeGenFunction::EmitOMPAtomicSimpleUpdateExpr | ( | LValue | X, |
RValue | E, | ||
BinaryOperatorKind | BO, | ||
bool | IsXLHSInRHSPart, | ||
llvm::AtomicOrdering | AO, | ||
SourceLocation | Loc, | ||
const llvm::function_ref< RValue(RValue)> & | CommonGen | ||
) |
Emit atomic update code for constructs: X = X BO E or X = E BO E.
X | Value to be updated. |
E | Update value. |
BO | Binary operation for update operation. |
IsXLHSInRHSPart | true if X is LHS in RHS part of the update expression, false otherwise. |
AO | Atomic ordering of the generated atomic instructions. |
CommonGen | Code generator for complex expressions that cannot be expressed through atomicrmw instruction. |
Definition at line 2979 of file CGStmtOpenMP.cpp.
References EmitAtomicUpdate(), EmitLoadOfLValue(), emitOMPAtomicRMW(), EmitStoreThroughLValue(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isGlobalReg(), and clang::QualType::isVolatileQualified().
Referenced by EmitOMPAtomicCaptureExpr(), and EmitOMPAtomicUpdateExpr().
void CodeGenFunction::EmitOMPBarrierDirective | ( | const OMPBarrierDirective & | S | ) |
Definition at line 2592 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPCancelDirective | ( | const OMPCancelDirective & | S | ) |
Definition at line 3362 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPCancelDirective::getCancelRegion(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and clang::OMPD_unknown.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPCancellationPointDirective | ( | const OMPCancellationPointDirective & | S | ) |
Definition at line 3356 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPCancellationPointDirective::getCancelRegion(), clang::OMPExecutableDirective::getLocStart(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPCopy | ( | QualType | OriginalType, |
Address | DestAddr, | ||
Address | SrcAddr, | ||
const VarDecl * | DestVD, | ||
const VarDecl * | SrcVD, | ||
const Expr * | Copy | ||
) |
Emit proper copying of data from one variable to another.
OriginalType | Original type of the copied variables. |
DestAddr | Destination address. |
SrcAddr | Source address. |
DestVD | Destination variable used in CopyExpr (for arrays, has type of the base array element). |
SrcVD | Source variable used in CopyExpr (for arrays, has type of the base array element). |
Copy | Actual copygin expression for copying data from SrcVD to DestVD. |
Definition at line 534 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), EmitAggregateAssign(), EmitIgnoredExpr(), EmitOMPAggregateAssign(), clang::Type::isArrayType(), and clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize().
Referenced by emitCopyprivateCopyFunction(), EmitOMPCopyinClause(), and EmitOMPLastprivateClauseFinal().
bool CodeGenFunction::EmitOMPCopyinClause | ( | const OMPExecutableDirective & | D | ) |
Emit code for copyin clause in D directive.
The next code is generated at the start of outlined functions for directives:
D | OpenMP directive possibly with 'copyin' clause(s). |
Definition at line 692 of file CGStmtOpenMP.cpp.
References Builder, CapturedStmtInfo, CGM, createBasicBlock(), EmitBlock(), EmitLValue(), EmitOMPCopy(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::GetAddrOfGlobal(), clang::VarDecl::getCanonicalDecl(), clang::OMPExecutableDirective::getClausesOfKind(), getContext(), clang::ASTContext::getDeclAlign(), getLangOpts(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenModule::getStaticLocalDeclAddress(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::Address::invalid(), clang::VarDecl::isStaticLocal(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.
Referenced by EmitOMPParallelDirective().
void CodeGenFunction::EmitOMPCriticalDirective | ( | const OMPCriticalDirective & | S | ) |
Definition at line 2359 of file CGStmtOpenMP.cpp.
References Action, CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::DeclarationNameInfo::getAsString(), clang::OMPCriticalDirective::getDirectiveName(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPDistributeDirective | ( | const OMPDistributeDirective & | S | ) |
Definition at line 2736 of file CGStmtOpenMP.cpp.
References CGM, EmitOMPDistributeLoop(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPDistributeLoop | ( | const OMPDistributeDirective & | S | ) |
Definition at line 2620 of file CGStmtOpenMP.cpp.
References CGM, ConstantFoldsToSimpleInteger(), createBasicBlock(), EmitBlock(), EmitBranch(), EmitIgnoredExpr(), EmitOMPHelperVar(), EmitOMPInnerLoop(), EmitOMPPrivateLoopCounters(), emitPreCond(), EmitScalarConversion(), EmitScalarExpr(), EmitStopPoint(), EmitVarDecl(), clang::CodeGen::LValue::getAddress(), clang::OMPLoopDirective::getCalcLastIteration(), clang::OMPLoopDirective::getCond(), getContext(), clang::OMPLoopDirective::getEnsureUpperBound(), clang::OMPLoopDirective::getInc(), clang::OMPLoopDirective::getInit(), clang::OMPLoopDirective::getIsLastIterVariable(), clang::OMPLoopDirective::getIterationVariable(), getJumpDestInCurrentScope(), clang::OMPLoopDirective::getLastIteration(), clang::OMPExecutableDirective::getLocStart(), clang::OMPLoopDirective::getLowerBoundVariable(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPLoopDirective::getPreCond(), getProfileCount(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPLoopDirective::getStrideVariable(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::OMPLoopDirective::getUpperBoundVariable(), clang::Type::hasSignedIntegerRepresentation(), incrementProfileCounter(), clang::OMPC_DIST_SCHEDULE_unknown, clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), and S.
Referenced by EmitOMPDistributeDirective().
void CodeGenFunction::EmitOMPDistributeParallelForDirective | ( | const OMPDistributeParallelForDirective & | S | ) |
Definition at line 1868 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPDistributeParallelForSimdDirective | ( | const OMPDistributeParallelForSimdDirective & | S | ) |
Definition at line 1880 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPDistributeSimdDirective | ( | const OMPDistributeSimdDirective & | S | ) |
Definition at line 1892 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
bool CodeGenFunction::EmitOMPFirstprivateClause | ( | const OMPExecutableDirective & | D, |
OMPPrivateScope & | PrivateScope | ||
) |
Definition at line 572 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), CapturedStmtInfo, EmitAggregateAssign(), EmitAnyExprToMem(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitDecl(), EmitLValue(), EmitOMPAggregateAssign(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::OMPExecutableDirective::getAssociatedStmt(), getCanonicalDecl(), clang::OMPExecutableDirective::getClausesOfKind(), clang::VarDecl::getInit(), clang::QualType::getQualifiers(), clang::Expr::getType(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::Type::isArrayType(), isTrivialInitializer(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), clang::CodeGen::Type, and clang::VK_LValue.
Referenced by EmitOMPParallelDirective(), EmitOMPSingleDirective(), EmitOMPTargetDirectiveOutlinedFunction(), and EmitOMPTeamsDirective().
void CodeGenFunction::EmitOMPFlushDirective | ( | const OMPFlushDirective & | S | ) |
Definition at line 2610 of file CGStmtOpenMP.cpp.
References CGM, clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::None.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPForDirective | ( | const OMPForDirective & | S | ) |
Definition at line 2109 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPForDirective::hasCancel(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPForSimdDirective | ( | const OMPForSimdDirective & | S | ) |
Definition at line 2127 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPInnerLoop | ( | const Stmt & | S, |
bool | RequiresCleanup, | ||
const Expr * | LoopCond, | ||
const Expr * | IncExpr, | ||
const llvm::function_ref< void(CodeGenFunction &)> & | BodyGen, | ||
const llvm::function_ref< void(CodeGenFunction &)> & | PostIncGen | ||
) |
Emit inner loop of the worksharing/simd construct.
S | Directive, for which the inner loop must be emitted. |
RequiresCleanup | true, if directive has some associated private variables. |
LoopCond | Bollean condition for loop continuation. |
IncExpr | Increment expression for loop control variable. |
BodyGen | Generator for the inner body of the inner loop. |
PostIncGen | Genrator for post-increment code (required for ordered loop directvies). |
Definition at line 1274 of file CGStmtOpenMP.cpp.
References Builder, createBasicBlock(), EmitBlock(), EmitBranch(), EmitBranchOnBoolExpr(), EmitBranchThroughCleanup(), EmitIgnoredExpr(), getJumpDestInCurrentScope(), getProfileCount(), incrementProfileCounter(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), and clang::CodeGen::LoopInfoStack::push().
Referenced by EmitOMPDistributeLoop(), and EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPLastprivateClauseFinal | ( | const OMPExecutableDirective & | D, |
bool | NoFinals, | ||
llvm::Value * | IsLastIterCond = nullptr |
||
) |
Emit final copying of lastprivate values to original variables at the end of the worksharing or simd directive.
D | Directive that has at least one 'lastprivate' directives. |
IsLastIterCond | Boolean condition that must be set to 'i1 true' if it is the last iteration of the loop code in associated directive, or to 'i1 false' otherwise. If this item is nullptr, no final check is required. |
Definition at line 816 of file CGStmtOpenMP.cpp.
References Builder, createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateLoad(), EmitBlock(), EmitIgnoredExpr(), EmitOMPCopy(), GetAddrOfLocalVar(), getCanonicalDecl(), clang::OMPExecutableDirective::getClausesOfKind(), getNaturalTypeAlignment(), and HaveInsertPoint().
Referenced by EmitOMPSimdDirective().
bool CodeGenFunction::EmitOMPLastprivateClauseInit | ( | const OMPExecutableDirective & | D, |
OMPPrivateScope & | PrivateScope | ||
) |
Emit initial code for lastprivate variables.
If some variable is not also firstprivate, then the default initialization is used. Otherwise initialization of this variable is performed by EmitOMPFirstprivateClause method.
D | Directive that may have 'lastprivate' directives. |
PrivateScope | Private scope for capturing lastprivate variables for proper codegen in internal captured statement. |
Definition at line 758 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), CapturedStmtInfo, EmitDecl(), EmitLValue(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), getCanonicalDecl(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getDirectiveKind(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::isOpenMPSimdDirective(), clang::isOpenMPTaskLoopDirective(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.
Referenced by EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPLinearClause | ( | const OMPLoopDirective & | D, |
CodeGenFunction::OMPPrivateScope & | PrivateScope | ||
) |
Emit initial code for linear clauses.
Definition at line 1474 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), E, EmitVarDecl(), GetAddrOfLocalVar(), getCanonicalDecl(), clang::VarDecl::getCanonicalDecl(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getDirectiveKind(), HaveInsertPoint(), and clang::isOpenMPSimdDirective().
Referenced by EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPLinearClauseFinal | ( | const OMPLoopDirective & | D, |
const llvm::function_ref< llvm::Value *(CodeGenFunction &)> & | CondGen | ||
) |
Emit final code for linear clauses.
CondGen | Optional conditional code for final part of codegen for linear clause. |
Definition at line 1353 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), Builder, CapturedStmtInfo, createBasicBlock(), EmitBlock(), EmitIgnoredExpr(), EmitLValue(), clang::CodeGen::LValue::getAddress(), clang::OMPExecutableDirective::getClausesOfKind(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), and clang::VK_LValue.
Referenced by EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPLinearClauseInit | ( | const OMPLoopDirective & | D | ) |
Emit initial code for linear variables.
Creates private copies and initializes them with the values according to OpenMP standard.
D | Directive (possibly) with the 'linear' clause. |
Definition at line 1321 of file CGStmtOpenMP.cpp.
References CapturedStmtInfo, EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitExprAsInit(), EmitIgnoredExpr(), EmitVarDecl(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getAllocatedAddress(), clang::OMPExecutableDirective::getClausesOfKind(), clang::Expr::getExprLoc(), clang::VarDecl::getInit(), clang::Expr::getType(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::Expr::IgnoreImpCasts(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), MakeAddrLValue(), and clang::VK_LValue.
Referenced by EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPMasterDirective | ( | const OMPMasterDirective & | S | ) |
Definition at line 2350 of file CGStmtOpenMP.cpp.
References Action, CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPOrderedDirective | ( | const OMPOrderedDirective & | S | ) |
Definition at line 2756 of file CGStmtOpenMP.cpp.
References Action, CGM, emitOutlinedOrderedFunction(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPParallelDirective | ( | const OMPParallelDirective & | S | ) |
Definition at line 1226 of file CGStmtOpenMP.cpp.
References CGM, emitCommonOMPParallelDirective(), EmitOMPCopyinClause(), EmitOMPFirstprivateClause(), EmitOMPPrivateClause(), EmitOMPReductionClauseFinal(), EmitOMPReductionClauseInit(), emitPostUpdateForReductionClause(), EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPD_unknown, clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPParallelForDirective | ( | const OMPParallelForDirective & | S | ) |
Definition at line 2373 of file CGStmtOpenMP.cpp.
References emitCommonOMPParallelDirective(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPParallelForSimdDirective | ( | const OMPParallelForSimdDirective & | S | ) |
Definition at line 2383 of file CGStmtOpenMP.cpp.
References emitCommonOMPParallelDirective(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPParallelSectionsDirective | ( | const OMPParallelSectionsDirective & | S | ) |
Definition at line 2393 of file CGStmtOpenMP.cpp.
References emitCommonOMPParallelDirective(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPPrivateClause | ( | const OMPExecutableDirective & | D, |
CodeGenFunction::OMPPrivateScope & | PrivateScope | ||
) |
Definition at line 665 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), EmitDecl(), GetAddrOfLocalVar(), clang::OMPExecutableDirective::getClausesOfKind(), and HaveInsertPoint().
Referenced by EmitOMPParallelDirective(), EmitOMPSimdDirective(), EmitOMPSingleDirective(), EmitOMPTargetDirectiveOutlinedFunction(), and EmitOMPTeamsDirective().
void CodeGenFunction::EmitOMPPrivateLoopCounters | ( | const OMPLoopDirective & | S, |
CodeGenFunction::OMPPrivateScope & | LoopScope | ||
) |
Emit initial code for loop counters of loop-based directives.
Definition at line 1424 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), CapturedStmtInfo, clang::OMPLoopDirective::counters(), E, EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitLValue(), clang::CodeGen::LValue::getAddress(), clang::VarDecl::hasGlobalStorage(), HaveInsertPoint(), I, clang::if(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), clang::OMPLoopDirective::private_counters(), and clang::VK_LValue.
Referenced by EmitOMPDistributeLoop(), EmitOMPSimdDirective(), and emitPreCond().
void CodeGenFunction::EmitOMPReductionClauseFinal | ( | const OMPExecutableDirective & | D | ) |
Emit final update of reduction values to original variables at the end of the directive.
D | Directive that has at least one 'reduction' directives. |
Definition at line 1137 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getDirectiveKind(), clang::OMPExecutableDirective::getLocEnd(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), HaveInsertPoint(), clang::isOpenMPParallelDirective(), and Privates.
Referenced by EmitOMPParallelDirective(), and EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPReductionClauseInit | ( | const OMPExecutableDirective & | D, |
CodeGenFunction::OMPPrivateScope & | PrivateScope | ||
) |
Emit initial code for reduction variables.
Creates reduction copies and initializes them with the values according to OpenMP standard.
D | Directive (possibly) with the 'reduction' clause. |
PrivateScope | Private scope for capturing reduction variables for proper codegen in internal captured statement. |
Definition at line 934 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), clang::CodeGen::Base, Builder, CapturedStmtInfo, castToBase(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), emitInitWithReductionInitializer(), EmitLValue(), EmitOMPAggregateInit(), EmitOMPArraySectionExpr(), EmitVariablyModifiedType(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getAllocatedAddress(), clang::OMPExecutableDirective::getClausesOfKind(), getContext(), clang::CodeGen::LValue::getPointer(), getReductionInit(), clang::CodeGen::Address::getType(), clang::ValueDecl::getType(), getTypeSize(), HaveInsertPoint(), clang::CodeGen::Address::invalid(), loadToBegin(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::lookup(), and clang::VK_LValue.
Referenced by EmitOMPParallelDirective(), and EmitOMPSimdDirective().
void CodeGenFunction::EmitOMPSectionDirective | ( | const OMPSectionDirective & | S | ) |
Definition at line 2300 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPSectionDirective::hasCancel(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPSectionsDirective | ( | const OMPSectionsDirective & | S | ) |
Definition at line 2288 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and clang::OMPExecutableDirective::getSingleClause().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPSimdDirective | ( | const OMPSimdDirective & | S | ) |
Definition at line 1589 of file CGStmtOpenMP.cpp.
References CGM, ConstantFoldsToSimpleInteger(), createBasicBlock(), emitAlignedClause(), EmitBlock(), EmitBranch(), EmitIgnoredExpr(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLastprivateClauseInit(), EmitOMPLinearClause(), EmitOMPLinearClauseFinal(), EmitOMPLinearClauseInit(), EmitOMPPrivateClause(), EmitOMPPrivateLoopCounters(), EmitOMPReductionClauseFinal(), EmitOMPReductionClauseInit(), emitPostUpdateForReductionClause(), emitPreCond(), EmitStopPoint(), EmitVarDecl(), clang::OMPLoopDirective::getCalcLastIteration(), clang::OMPLoopDirective::getCond(), clang::OMPLoopDirective::getInc(), clang::OMPLoopDirective::getInit(), clang::OMPLoopDirective::getIterationVariable(), clang::OMPLoopDirective::getLastIteration(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPLoopDirective::getPreCond(), getProfileCount(), incrementProfileCounter(), clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), and S.
Referenced by EmitStmt().
void CodeGenFunction::emitOMPSimpleStore | ( | LValue | LVal, |
RValue | RVal, | ||
QualType | RValTy, | ||
SourceLocation | Loc | ||
) |
Definition at line 2831 of file CGStmtOpenMP.cpp.
References convertToComplexValue(), convertToScalarValue(), EmitStoreOfComplex(), EmitStoreThroughLValue(), clang::CodeGen::RValue::get(), getEvaluationKind(), clang::CodeGen::LValue::getType(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitOMPAtomicCaptureExpr(), and EmitOMPAtomicReadExpr().
void CodeGenFunction::EmitOMPSingleDirective | ( | const OMPSingleDirective & | S | ) |
Definition at line 2309 of file CGStmtOpenMP.cpp.
References Action, CGM, EmitOMPFirstprivateClause(), EmitOMPPrivateClause(), EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPD_unknown, clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetDataDirective | ( | const OMPTargetDataDirective & | S | ) |
Definition at line 3385 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), clang::LangOptions::OMPTargetTriples, and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetDirective | ( | const OMPTargetDirective & | S | ) |
Definition at line 3264 of file CGStmtOpenMP.cpp.
References CGM, ConstantFoldsToSimpleInteger(), clang::Ctor_Complete, CurFuncDecl, clang::Dtor_Complete, EmitOMPTargetDirectiveOutlinedFunction(), GenerateOpenMPCapturedVars(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getMangledName(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::LangOptions::OMPTargetTriples.
Referenced by EmitStmt().
|
static |
Emit outlined function for the target directive.
Definition at line 3244 of file CGStmtOpenMP.cpp.
References Action, EmitOMPFirstprivateClause(), EmitOMPPrivateClause(), EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), and S.
Referenced by EmitOMPTargetDirective().
void CodeGenFunction::EmitOMPTargetEnterDataDirective | ( | const OMPTargetEnterDataDirective & | S | ) |
Definition at line 3416 of file CGStmtOpenMP.cpp.
References CGM, clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::LangOptions::OMPTargetTriples.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetExitDataDirective | ( | const OMPTargetExitDataDirective & | S | ) |
Definition at line 3436 of file CGStmtOpenMP.cpp.
References CGM, clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::LangOptions::OMPTargetTriples.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetParallelDirective | ( | const OMPTargetParallelDirective & | S | ) |
Definition at line 3456 of file CGStmtOpenMP.cpp.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetParallelForDirective | ( | const OMPTargetParallelForDirective & | S | ) |
Definition at line 3461 of file CGStmtOpenMP.cpp.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetParallelForSimdDirective | ( | const OMPTargetParallelForSimdDirective & | S | ) |
Definition at line 1904 of file CGStmtOpenMP.cpp.
References CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTargetUpdateDirective | ( | const OMPTargetUpdateDirective & | S | ) |
Definition at line 3613 of file CGStmtOpenMP.cpp.
References CGM, clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPExecutableDirective::getSingleClause(), and clang::LangOptions::OMPTargetTriples.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskBasedDirective | ( | const OMPExecutableDirective & | S, |
const RegionCodeGenTy & | BodyGen, | ||
const TaskGenTy & | TaskGen, | ||
OMPTaskDataTy & | Data | ||
) |
Definition at line 2403 of file CGStmtOpenMP.cpp.
References Action, clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), ConstantFoldsToSimpleInteger(), clang::CodeGen::OMPTaskDataTy::Dependences, E, EmitScalarConversion(), EmitScalarExpr(), EvaluateExprAsBool(), clang::CodeGen::OMPTaskDataTy::Final, clang::CodeGen::OMPTaskDataTy::FirstprivateCopies, clang::CodeGen::OMPTaskDataTy::FirstprivateInits, clang::CodeGen::OMPTaskDataTy::FirstprivateVars, clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getClausesOfKind(), getContext(), clang::ASTContext::getIntTypeForBitwidth(), clang::OMPExecutableDirective::getSingleClause(), I, ID, clang::CodeGen::OMPTaskDataTy::LastprivateCopies, clang::CodeGen::OMPTaskDataTy::LastprivateVars, clang::CodeGen::OMPTaskDataTy::Priority, clang::CodeGen::OMPTaskDataTy::PrivateCopies, clang::CodeGen::OMPTaskDataTy::PrivateVars, Replacement, S, and clang::VK_LValue.
Referenced by EmitOMPTaskDirective(), and EmitOMPTaskLoopBasedDirective().
void CodeGenFunction::EmitOMPTaskDirective | ( | const OMPTaskDirective & | S | ) |
Definition at line 2557 of file CGStmtOpenMP.cpp.
References EmitOMPTaskBasedDirective(), EmitStmt(), GenerateCapturedStmtArgument(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getClausesOfKind(), getContext(), clang::OMPExecutableDirective::getLocStart(), clang::ASTContext::getRecordType(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPD_unknown, S, and clang::CodeGen::OMPTaskDataTy::Tied.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskgroupDirective | ( | const OMPTaskgroupDirective & | S | ) |
Definition at line 2600 of file CGStmtOpenMP.cpp.
References Action, CGM, EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPExecutableDirective::getLocStart(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), and S.
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskLoopBasedDirective | ( | const OMPLoopDirective & | S | ) |
Definition at line 3475 of file CGStmtOpenMP.cpp.
References CGM, EmitOMPTaskBasedDirective(), emitPreCond(), EmitScalarExpr(), GenerateCapturedStmtArgument(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::OMPLoopDirective::getCalcLastIteration(), clang::OMPExecutableDirective::getClausesOfKind(), clang::OMPLoopDirective::getCond(), getContext(), clang::OMPExecutableDirective::getDirectiveKind(), clang::OMPLoopDirective::getInc(), clang::OMPLoopDirective::getInit(), clang::OMPLoopDirective::getIsLastIterVariable(), clang::OMPLoopDirective::getIterationVariable(), clang::OMPLoopDirective::getLastIteration(), clang::OMPExecutableDirective::getLocStart(), clang::OMPLoopDirective::getLowerBoundVariable(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::OMPLoopDirective::getPreCond(), clang::ASTContext::getRecordType(), clang::OMPExecutableDirective::getSingleClause(), clang::OMPLoopDirective::getStrideVariable(), clang::OMPLoopDirective::getUpperBoundVariable(), I, clang::isOpenMPSimdDirective(), clang::isOpenMPTaskLoopDirective(), mapParam(), clang::CodeGen::OMPTaskDataTy::Nogroup, clang::OMPD_unknown, clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), S, clang::CodeGen::OMPTaskDataTy::Schedule, and clang::CodeGen::OMPTaskDataTy::Tied.
Referenced by EmitOMPTaskLoopDirective(), and EmitOMPTaskLoopSimdDirective().
void CodeGenFunction::EmitOMPTaskLoopDirective | ( | const OMPTaskLoopDirective & | S | ) |
Definition at line 3603 of file CGStmtOpenMP.cpp.
References EmitOMPTaskLoopBasedDirective().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskLoopSimdDirective | ( | const OMPTaskLoopSimdDirective & | S | ) |
Definition at line 3607 of file CGStmtOpenMP.cpp.
References EmitOMPTaskLoopBasedDirective().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskwaitDirective | ( | const OMPTaskwaitDirective & | S | ) |
Definition at line 2596 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTaskyieldDirective | ( | const OMPTaskyieldDirective & | S | ) |
Definition at line 2587 of file CGStmtOpenMP.cpp.
References CGM, clang::OMPExecutableDirective::getLocStart(), and clang::CodeGen::CodeGenModule::getOpenMPRuntime().
Referenced by EmitStmt().
void CodeGenFunction::EmitOMPTeamsDirective | ( | const OMPTeamsDirective & | S | ) |
Definition at line 3344 of file CGStmtOpenMP.cpp.
References emitCommonOMPTeamsDirective(), EmitOMPFirstprivateClause(), EmitOMPPrivateClause(), EmitStmt(), clang::OMPExecutableDirective::getAssociatedStmt(), clang::CodeGen::CodeGenFunction::OMPPrivateScope::Privatize(), and S.
Referenced by EmitStmt().
LValue CodeGenFunction::EmitOpaqueValueLValue | ( | const OpaqueValueExpr * | e | ) |
Definition at line 3704 of file CGExpr.cpp.
Referenced by EmitMaterializeTemporaryExpr().
void CodeGenFunction::EmitParmDecl | ( | const VarDecl & | D, |
ParamValue | Arg, | ||
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 1747 of file CGDecl.cpp.
References clang::CodeGen::ARCImpreciseLifetime, clang::CodeGen::ARCPreciseLifetime, clang::TargetCXXABI::areArgsDestroyedLeftToRightInCallee(), BlockInfo, Builder, CGM, ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateMemTemp(), CurCodeDecl, CurFuncIsThunk, clang::QualType::DK_cxx_destructor, EHStack, EmitARCInitWeak(), EmitARCRetainNonBlock(), EmitARCStoreStrongCall(), EmitAutoVarWithLifetime(), clang::CodeGen::CodeGenModule::EmitNullConstant(), EmitStoreOfScalar(), EmitVarAnnotations(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::ParamValue::getAnyValue(), getARCCleanupKind(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::TargetInfo::getCXXABI(), getDebugInfo(), clang::CodeGen::CodeGenFunction::ParamValue::getDirectValue(), clang::CodeGen::CodeGenFunction::ParamValue::getIndirectAddress(), clang::ObjCMethodDecl::getMethodFamily(), clang::NamedDecl::getName(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::Address::getPointer(), clang::QualType::getQualifiers(), clang::ObjCMethodDecl::getSelfDecl(), getTarget(), clang::CodeGen::Address::getType(), clang::ValueDecl::getType(), clang::Qualifiers::hasConst(), clang::CXXRecordDecl::hasNonTrivialDestructor(), hasScalarEvaluationKind(), clang::CodeGen::Address::invalid(), clang::VarDecl::isARCPseudoStrong(), clang::CodeGen::CodeGenFunction::ParamValue::isIndirect(), clang::codegenoptions::LimitedDebugInfo, MakeAddrLValue(), clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::OMF_init, pushDestroy(), setBlockContextParameter(), and clang::CodeGen::Type.
Referenced by EmitFunctionProlog(), and EmitInlinedInheritingCXXConstructorCall().
LValue CodeGenFunction::EmitPointerToDataMemberBinaryExpr | ( | const BinaryOperator * | E | ) |
Definition at line 4133 of file CGExpr.cpp.
References clang::Type::getAs(), clang::BinaryOperator::getLHS(), clang::BinaryOperator::getOpcode(), clang::BinaryOperator::getRHS(), and clang::Expr::getType().
Address CodeGenFunction::EmitPointerWithAlignment | ( | const Expr * | E, |
AlignmentSource * | Source = nullptr |
||
) |
EmitPointerWithAlignment - Given an expression with a pointer type, emit the value and compute our best estimate of the alignment of the pointee.
EmitPointerWithAlignment - Given an expression of pointer type, try to derive a more accurate bound on the alignment of the pointer.
Note that this function will conservatively fall back on the type when it doesn't
Source | - If non-null, this will be initialized with information about the source of the alignment. Note that this function will conservatively fall back on the type when it doesn't recognize the expression, which means that sometimes |
a worst-case One reasonable way to use this information is when there's a language guarantee that the pointer must be aligned to some stricter value, and we're simply trying to ensure that sufficiently obvious uses of under-aligned objects don't get miscompiled; for example, a placement new into the address of a local variable. In such a case, it's quite reasonable to just ignore the returned alignment when it isn't from an explicit source.
Definition at line 820 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::CodeGen::Address::getPointer(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::Expr::IgnoreParens(), clang::Type::isObjCObjectPointerType(), and clang::Type::isPointerType().
Referenced by EmitAMDGPUBuiltinExpr(), EmitARMBuiltinExpr(), EmitAtomicExpr(), EmitCXXDeleteExpr(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewExpr(), emitOMPArraySectionBase(), EmitSystemZIntrinsicWithCC(), EmitVAListRef(), and emitWritebackArg().
Definition at line 7370 of file CGBuiltin.cpp.
References Builder, ceil, CGM, ConvertType(), copysign, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitScalarExpr(), fabs, floor, fma, clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CallExpr::getNumArgs(), clang::Expr::getType(), ID, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, nearbyint, round, sqrt, trunc, clang::CodeGen::Type, and X.
Referenced by EmitTargetArchBuiltinExpr().
LValue CodeGenFunction::EmitPredefinedLValue | ( | const PredefinedExpr * | E | ) |
Definition at line 2284 of file CGExpr.cpp.
References clang::PredefinedExpr::getFunctionName(), clang::PredefinedExpr::getIdentType(), clang::PredefinedExpr::getIdentTypeName(), and clang::Expr::getType().
LValue CodeGenFunction::EmitPseudoObjectLValue | ( | const PseudoObjectExpr * | e | ) |
Definition at line 4261 of file CGExpr.cpp.
References emitPseudoObjectExpr().
RValue CodeGenFunction::EmitPseudoObjectRValue | ( | const PseudoObjectExpr * | e, |
AggValueSlot | slot = AggValueSlot::ignored() |
||
) |
Definition at line 4256 of file CGExpr.cpp.
References emitPseudoObjectExpr().
Emits a reference binding to the passed in expression.
Definition at line 485 of file CGExpr.cpp.
References EmitLValue(), EmitTypeCheck(), clang::CodeGen::RValue::get(), clang::Expr::getExprLoc(), clang::CodeGen::LValue::getPointer(), clang::Expr::getType(), clang::Type::isFunctionType(), clang::CodeGen::LValue::isSimple(), sanitizePerformTypeCheck(), and TCK_ReferenceBinding.
Referenced by EmitCallArg(), EmitCXXGlobalVarDeclInit(), EmitExprAsInit(), and EmitReturnStmt().
llvm::DebugLoc CodeGenFunction::EmitReturnBlock | ( | ) |
Emit the unified return block, trying to avoid its emission when possible.
Definition at line 223 of file CodeGenFunction.cpp.
References Builder, EmitBlock(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), and ReturnBlock.
Referenced by FinishFunction().
void CodeGenFunction::EmitReturnStmt | ( | const ReturnStmt & | S | ) |
EmitReturnStmt - Note that due to GCC extensions, this can have an operand if the function returns void, or may be missing one if the function returns non-void.
Fun stuff :).
Definition at line 981 of file CGStmt.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateFlagStore(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), EmitAnyExpr(), EmitBranchThroughCleanup(), EmitComplexExprIntoLValue(), EmitReferenceBindingToExpr(), EmitScalarExpr(), enterFullExpression(), FnRetTy, clang::CodeGen::AggValueSlot::forAddr(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), getContext(), getEvaluationKind(), getLangOpts(), clang::ReturnStmt::getNRVOCandidate(), clang::ReturnStmt::getRetValue(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::CodeGen::AggValueSlot::IsDestructed, clang::Expr::isEvaluatable(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::VarDecl::isNRVOVariable(), IsOutlinedSEHHelper, clang::Type::isReferenceType(), clang::CodeGen::Address::isValid(), clang::Type::isVoidType(), MakeAddrLValue(), NRVOFlags, clang::Result, ReturnBlock, ReturnValue, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitStmt(), and generateObjCGetterBody().
llvm::CallInst* clang::CodeGen::CodeGenFunction::EmitRuntimeCall | ( | llvm::Value * | callee, |
const Twine & | name = "" |
||
) |
Referenced by clang::CodeGen::emitBarrierCall(), clang::CodeGen::emitCancellationPointCall(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitDoacrossOrdered(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), emitFilterDispatchBlock(), clang::CodeGen::emitForDispatchInit(), clang::CodeGen::emitForNext(), clang::CodeGen::emitForOrderedIterationEnd(), clang::CodeGen::emitForStaticFinish(), emitForStaticInitCall(), clang::CodeGen::emitNumThreadsClause(), clang::CodeGen::emitProcBindClause(), clang::CodeGen::emitTaskInit(), clang::CodeGen::emitTaskLoopCall(), clang::CodeGen::emitTaskwaitCall(), clang::CodeGen::emitTaskyieldCall(), clang::CodeGen::emitThreadPrivateVarInit(), GenerateCXXGlobalInitFunc(), clang::CodeGen::getAddrOfThreadPrivate(), getEHResumeBlock(), and clang::CodeGen::getThreadID().
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 3456 of file CGCall.cpp.
References EmitCallOrInvoke(), and clang::CodeGen::CodeGenTypeCache::getRuntimeCC().
Referenced by EmitObjCAutoreleasePoolPop(), emitRTtypeidCall(), EmitRuntimeCallOrInvoke(), and GenerateCopyHelperFunction().
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 3449 of file CGCall.cpp.
References EmitRuntimeCallOrInvoke(), and clang::None.
RValue CodeGenFunction::EmitRValueForField | ( | LValue | LV, |
const FieldDecl * | FD, | ||
SourceLocation | Loc | ||
) |
Definition at line 3709 of file CGExpr.cpp.
References clang::CodeGen::LValue::asAggregateRValue(), clang::CodeGen::LValue::getPointer(), clang::ValueDecl::getType(), clang::Type::isReferenceType(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
void CodeGenFunction::EmitSanitizerStatReport | ( | llvm::SanitizerStatKind | SSK | ) |
Definition at line 2002 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::CodeGenModule::getSanStats().
Referenced by EmitVTablePtrCheck(), and EmitVTableTypeCheckedLoad().
LValue CodeGenFunction::EmitScalarCompoundAssignWithComplex | ( | const CompoundAssignOperator * | E, |
llvm::Value *& | Result | ||
) |
Definition at line 1102 of file CGExprComplex.cpp.
References getComplexOp(), and clang::BinaryOperator::getOpcode().
Value * CodeGenFunction::EmitScalarConversion | ( | llvm::Value * | Src, |
QualType | SrcTy, | ||
QualType | DstTy, | ||
SourceLocation | Loc | ||
) |
Emit a conversion from the specified type to the specified destination type, both of which are LLVM scalar types.
Definition at line 3453 of file CGExprScalar.cpp.
References hasScalarEvaluationKind().
Referenced by castValueFromUintptr(), convertToComplexValue(), convertToScalarValue(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitDoacrossOrdered(), clang::CodeGen::emitForNext(), EmitOMPDistributeLoop(), EmitOMPTaskBasedDirective(), EvaluateExprAsBool(), and GenerateOpenMPCapturedVars().
EmitScalarExpr - Emit the computation of the specified expression of LLVM scalar type, returning the result.
Emit the computation of the specified expression of scalar type, ignoring the result.
Definition at line 3443 of file CGExprScalar.cpp.
References clang::Expr::getType(), and hasScalarEvaluationKind().
Referenced by EmitAArch64BuiltinExpr(), emitAlignedClause(), EmitAMDGPUBuiltinExpr(), EmitAnyExpr(), EmitAnyExprToMem(), EmitARCExtendBlockObject(), emitARCRetainCallResult(), EmitARCStoreUnsafeUnretained(), emitARCUnsafeClaimCallResult(), EmitARMBuiltinExpr(), EmitAtomicExpr(), EmitAtomicInit(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitBinaryAtomicPost(), emitBinaryBuiltin(), EmitBlockCallExpr(), EmitCall(), emitCommonOMPParallelDirective(), clang::CodeGen::emitCriticalRegion(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitDeclInit(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitDoacrossOrdered(), emitFPIntBuiltin(), EmitFunctionProlog(), EmitIndirectGotoStmt(), EmitInitializerForField(), EmitMaterializeTemporaryExpr(), EmitNontemporalLoad(), EmitNontemporalStore(), emitNumTeamsClauseForTargetDirective(), EmitNVPTXBuiltinExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), EmitObjCThrowOperand(), EmitOMPDistributeLoop(), EmitOMPTaskBasedDirective(), EmitOMPTaskLoopBasedDirective(), EmitPPCBuiltinExpr(), EmitReturnStmt(), EmitScalarInit(), EmitSpecialRegisterBuiltin(), EmitSwitchStmt(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), emitTernaryBuiltin(), emitThreadLimitClauseForTargetDirective(), emitUnaryBuiltin(), EmitVariablyModifiedType(), EmitWebAssemblyBuiltinExpr(), EmitX86BuiltinExpr(), EvaluateExprAsBool(), GenerateSEHFilterFunction(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), and tryEmitARCRetainLoadOfScalar().
void CodeGenFunction::EmitScalarInit | ( | const Expr * | init, |
const ValueDecl * | D, | ||
LValue | lvalue, | ||
bool | capturedByInit | ||
) |
Definition at line 660 of file CGDecl.cpp.
References clang::CodeGen::ARCImpreciseLifetime, drillIntoBlockVariable(), EmitARCInitWeak(), EmitARCRelease(), EmitARCRetainAutoreleaseScalarExpr(), EmitARCRetainScalarExpr(), EmitARCStoreWeak(), EmitARCUnsafeUnretainedScalarExpr(), emitBlockByrefAddress(), EmitLoadOfScalar(), EmitScalarExpr(), EmitStoreOfScalar(), EmitStoreThroughLValue(), enterFullExpression(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getElementType(), clang::Expr::getExprLoc(), clang::CodeGen::LValue::getObjCLifetime(), isAccessedBy(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::CodeGen::LValue::setAddress(), and tryEmitARCCopyWeakInit().
Referenced by castValueFromUintptr(), createSectionLVal(), EmitAggMemberInitializer(), EmitDeclInit(), EmitExprAsInit(), EmitMaterializeTemporaryExpr(), EmitObjCForCollectionStmt(), and StoreAnyExprIntoOneUnit().
void CodeGenFunction::EmitScalarInit | ( | llvm::Value * | init, |
LValue | lvalue | ||
) |
EmitScalarInit - Initialize the given lvalue with the given object.
Definition at line 769 of file CGDecl.cpp.
References EmitARCInitWeak(), EmitARCRetain(), EmitARCRetainAutorelease(), EmitStoreOfScalar(), EmitStoreThroughLValue(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getObjCLifetime(), clang::CodeGen::LValue::getType(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
llvm::Value * CodeGenFunction::EmitScalarPrePostIncDec | ( | const UnaryOperator * | E, |
LValue | LV, | ||
bool | isInc, | ||
bool | isPre | ||
) |
Definition at line 3475 of file CGExprScalar.cpp.
llvm::Value * CodeGenFunction::EmitSEHAbnormalTermination | ( | ) |
Definition at line 1772 of file CGException.cpp.
References Builder, CurFn, and clang::CodeGen::CodeGenTypeCache::Int32Ty.
llvm::Value * CodeGenFunction::EmitSEHExceptionCode | ( | ) |
Definition at line 1767 of file CGException.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), and SEHCodeSlotStack.
void CodeGenFunction::EmitSEHExceptionCodeSave | ( | CodeGenFunction & | ParentCGF, |
llvm::Value * | ParentFP, | ||
llvm::Value * | EntryEBP | ||
) |
Definition at line 1719 of file CGException.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateBitCast(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CurFn, getContext(), clang::CodeGen::CodeGenTypeCache::getIntAlign(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetInfo::getTriple(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CodeGenTypeCache::IntTy, recoverAddrOfEscapedLocal(), SEHCodeSlotStack, SEHInfo, clang::CodeGen::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by EmitCapturedLocals().
llvm::Value * CodeGenFunction::EmitSEHExceptionInfo | ( | ) |
Definition at line 1758 of file CGException.cpp.
References clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and SEHInfo.
void CodeGenFunction::EmitSEHLeaveStmt | ( | const SEHLeaveStmt & | S | ) |
Definition at line 1884 of file CGException.cpp.
References Builder, EmitBranchThroughCleanup(), EmitStopPoint(), HaveInsertPoint(), isSEHTryScope(), and SEHTryEpilogueStack.
Referenced by EmitSimpleStmt().
void CodeGenFunction::EmitSEHTryStmt | ( | const SEHTryStmt & | S | ) |
Definition at line 1390 of file CGException.cpp.
References EmitBlock(), EmitStmt(), EnterSEHTryStmt(), ExitSEHTryStmt(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), getJumpDestInCurrentScope(), clang::SEHTryStmt::getTryBlock(), and SEHTryEpilogueStack.
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.
Definition at line 301 of file CGStmt.cpp.
References EmitAttributedStmt(), EmitBreakStmt(), EmitCaseStmt(), EmitCompoundStmt(), EmitContinueStmt(), EmitDeclStmt(), EmitDefaultStmt(), EmitGotoStmt(), EmitLabelStmt(), and EmitSEHLeaveStmt().
Referenced by EmitStmt().
void CodeGenFunction::EmitStartEHSpec | ( | const Decl * | D | ) |
EmitStartEHSpec - Emit the start of the exception spec.
Definition at line 424 of file CGException.cpp.
References CGM, EHStack, clang::EST_Dynamic, clang::EST_DynamicNone, clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(), clang::Type::getAs(), getContext(), clang::FunctionProtoType::getExceptionSpecType(), clang::FunctionProtoType::getExceptionType(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::FunctionProtoType::getNoexceptSpec(), clang::QualType::getNonReferenceType(), clang::FunctionProtoType::getNumExceptions(), getTarget(), clang::ValueDecl::getType(), clang::QualType::getUnqualifiedType(), I, clang::isNoexceptExceptionSpec(), clang::FunctionProtoType::NR_Nothrow, clang::CodeGen::EHScopeStack::pushFilter(), clang::CodeGen::EHScopeStack::pushTerminate(), and clang::CodeGen::EHFilterScope::setFilter().
Referenced by StartFunction().
void CodeGenFunction::EmitStaticVarDecl | ( | const VarDecl & | D, |
llvm::GlobalValue::LinkageTypes | Linkage | ||
) |
Definition at line 352 of file CGDecl.cpp.
References clang::CodeGen::CodeGenModule::AddGlobalAnnotations(), AddInitializerToStaticVarDecl(), clang::CodeGen::CodeGenModule::addUsedGlobal(), CGM, clang::CodeGen::CGDebugInfo::EmitGlobalVariable(), EmitVariablyModifiedType(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::VarDecl::getInit(), getLangOpts(), clang::CodeGen::CodeGenModule::getOrCreateStaticVarDecl(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getSanitizerMetadata(), clang::ValueDecl::getType(), clang::Type::isVariablyModifiedType(), clang::codegenoptions::LimitedDebugInfo, clang::CodeGen::SanitizerMetadata::reportGlobalToASan(), clang::CodeGen::CGDebugInfo::setLocation(), clang::CodeGen::CodeGenModule::setStaticLocalDeclAddress(), and clang::CodeGen::Type.
Referenced by EmitAutoVarAlloca(), EmitVarDecl(), and clang::CodeGen::CGOpenCLRuntime::EmitWorkGroupLocalVarDecl().
void CodeGenFunction::EmitStmt | ( | const Stmt * | S | ) |
EmitStmt - Emit the code for the statement.
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 48 of file CGStmt.cpp.
References Builder, CGM, ContainsLabel(), EmitAsmStmt(), EmitCapturedStmt(), EmitCXXForRangeStmt(), EmitCXXTryStmt(), EmitDoStmt(), EmitForStmt(), EmitIfStmt(), EmitIgnoredExpr(), EmitIndirectGotoStmt(), EmitObjCAtSynchronizedStmt(), EmitObjCAtThrowStmt(), EmitObjCAtTryStmt(), EmitObjCAutoreleasePoolStmt(), EmitObjCForCollectionStmt(), EmitOMPAtomicDirective(), EmitOMPBarrierDirective(), EmitOMPCancelDirective(), EmitOMPCancellationPointDirective(), EmitOMPCriticalDirective(), EmitOMPDistributeDirective(), EmitOMPDistributeParallelForDirective(), EmitOMPDistributeParallelForSimdDirective(), EmitOMPDistributeSimdDirective(), EmitOMPFlushDirective(), EmitOMPForDirective(), EmitOMPForSimdDirective(), EmitOMPMasterDirective(), EmitOMPOrderedDirective(), EmitOMPParallelDirective(), EmitOMPParallelForDirective(), EmitOMPParallelForSimdDirective(), EmitOMPParallelSectionsDirective(), EmitOMPSectionDirective(), EmitOMPSectionsDirective(), EmitOMPSimdDirective(), EmitOMPSingleDirective(), EmitOMPTargetDataDirective(), EmitOMPTargetDirective(), EmitOMPTargetEnterDataDirective(), EmitOMPTargetExitDataDirective(), EmitOMPTargetParallelDirective(), EmitOMPTargetParallelForDirective(), EmitOMPTargetParallelForSimdDirective(), EmitOMPTargetUpdateDirective(), EmitOMPTaskDirective(), EmitOMPTaskgroupDirective(), EmitOMPTaskLoopDirective(), EmitOMPTaskLoopSimdDirective(), EmitOMPTaskwaitDirective(), EmitOMPTaskyieldDirective(), EmitOMPTeamsDirective(), EmitReturnStmt(), EmitSEHTryStmt(), EmitSimpleStmt(), EmitStopPoint(), EmitSwitchStmt(), EmitWhileStmt(), EnsureInsertPoint(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CapturedStmt::getCapturedRegionKind(), HaveInsertPoint(), S, and clang::CodeGen::CodeGenPGO::setCurrentStmt().
Referenced by clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAttributedStmt(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCompoundStmtWithoutScope(), EmitConstructorBody(), EmitCXXForRangeStmt(), EmitCXXTryStmt(), EmitDefaultStmt(), EmitDestructorBody(), EmitDoStmt(), EmitForStmt(), EmitFunctionBody(), EmitIfStmt(), EmitLabelStmt(), EmitObjCAutoreleasePoolStmt(), EmitObjCForCollectionStmt(), EmitOMPCriticalDirective(), EmitOMPDistributeParallelForDirective(), EmitOMPDistributeParallelForSimdDirective(), EmitOMPDistributeSimdDirective(), EmitOMPMasterDirective(), EmitOMPParallelDirective(), EmitOMPSectionDirective(), EmitOMPSingleDirective(), EmitOMPTargetDataDirective(), EmitOMPTargetDirectiveOutlinedFunction(), EmitOMPTargetParallelForSimdDirective(), EmitOMPTaskDirective(), EmitOMPTaskgroupDirective(), EmitOMPTeamsDirective(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), ExitCXXTryStmt(), ExitSEHTryStmt(), GenerateBlockFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCSetterBody(), and GenerateSEHFinallyFunction().
Definition at line 3977 of file CGExpr.cpp.
References clang::CodeGen::RValue::getAggregateAddress(), and clang::Expr::getType().
void CodeGenFunction::EmitStopPoint | ( | const Stmt * | S | ) |
EmitStopPoint - Emit a debug stoppoint if we are emitting debug info.
Definition at line 38 of file CGStmt.cpp.
References Builder, and getDebugInfo().
Referenced by EmitBreakStmt(), EmitContinueStmt(), EmitCXXForRangeStmt(), EmitDeclStmt(), EmitForStmt(), EmitGotoStmt(), EmitOMPDistributeLoop(), EmitOMPSimdDirective(), EmitSEHLeaveStmt(), EmitStmt(), and EmitWhileStmt().
void CodeGenFunction::EmitStoreOfComplex | ( | ComplexPairTy | V, |
LValue | dest, | ||
bool | isInit | ||
) |
EmitStoreOfComplex - Store a complex number into the specified l-value.
Definition at line 1063 of file CGExprComplex.cpp.
Referenced by EmitAtomicUpdateValue(), EmitExprAsInit(), EmitFunctionEpilog(), EmitInitStoreOfNonAggregate(), emitOMPSimpleStore(), generateObjCGetterBody(), and InitCatchParam().
void CodeGenFunction::EmitStoreOfScalar | ( | llvm::Value * | Value, |
Address | Addr, | ||
bool | Volatile, | ||
QualType | Ty, | ||
AlignmentSource | AlignSource = AlignmentSource::Type , |
||
llvm::MDNode * | TBAAInfo = nullptr , |
||
bool | isInit = false , |
||
QualType | TBAABaseTy = QualType() , |
||
uint64_t | TBAAOffset = 0 , |
||
bool | isNontemporal = false |
||
) |
EmitStoreOfScalar - Store a scalar value to an address, taking care to appropriately convert from the memory representation to the LLVM value representation.
Definition at line 1374 of file CGExpr.cpp.
References Builder, clang::CodeGen::Address::getElementType(), clang::Type::isAtomicType(), clang::Type::isVectorType(), and Node.
Referenced by EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), EmitARCStoreUnsafeUnretained(), emitAtomicCmpXchg(), EmitAtomicExpr(), EmitCXXGlobalVarDeclInit(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitDoacrossOrdered(), EmitFunctionEpilog(), EmitInitStoreOfNonAggregate(), EmitNontemporalStore(), EmitParmDecl(), EmitScalarInit(), clang::CodeGen::emitTaskCall(), emitTaskDupFunction(), clang::CodeGen::emitTaskInit(), emitTaskPrivateMappingFunction(), clang::CodeGen::emitThreadIDAddress(), emitWriteback(), InitCatchParam(), and tryEmitARCRetainLoadOfScalar().
void CodeGenFunction::EmitStoreOfScalar | ( | llvm::Value * | value, |
LValue | lvalue, | ||
bool | isInit = false |
||
) |
EmitStoreOfScalar - Store a scalar value to an address, taking care to appropriately convert from the memory representation to the LLVM value representation.
The l-value must be a simple l-value. The isInit flag indicates whether this is an initialization. If so, atomic qualifiers are ignored and the store is always non-atomic.
Definition at line 1429 of file CGExpr.cpp.
References clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getAlignmentSource(), clang::CodeGen::LValue::getTBAABaseType(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::LValue::getTBAAOffset(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isNontemporal(), 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.
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 1682 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getBitFieldAddress(), 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, and clang::CodeGen::CGBitFieldInfo::StorageSize.
Definition at line 1749 of file CGExpr.cpp.
References Builder, clang::Type::getAs(), clang::CodeGen::LValue::getExtVectorAddress(), clang::CodeGen::LValue::getExtVectorElts(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::LValue::getType(), and clang::CodeGen::LValue::isVolatileQualified().
Store of global named registers are always calls to intrinsics.
Definition at line 1820 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getGlobalReg(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::LValue::getType(), clang::Type::isIntegerType(), and clang::Type::isPointerType().
Referenced by emitSimpleAtomicStore().
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 1593 of file CGExpr.cpp.
References Builder, clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getBaseIvarExp(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::Address::getPointer(), clang::CodeGen::LValue::getQuals(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::getVectorAddress(), clang::CodeGen::LValue::getVectorIdx(), clang::CodeGen::LValue::isBitField(), clang::CodeGen::LValue::isExtVectorElt(), clang::CodeGen::LValue::isGlobalObjCRef(), clang::CodeGen::LValue::isGlobalReg(), clang::CodeGen::LValue::isNonGC(), clang::CodeGen::LValue::isObjCIvar(), clang::CodeGen::LValue::isObjCStrong(), clang::CodeGen::LValue::isObjCWeak(), clang::CodeGen::RValue::isScalar(), clang::CodeGen::LValue::isSimple(), clang::CodeGen::LValue::isThreadLocalRef(), clang::CodeGen::LValue::isVectorElt(), clang::CodeGen::LValue::isVolatileQualified(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by EmitAnyExprToMem(), EmitAsmStmt(), EmitAtomicUpdateValue(), EmitAutoVarInit(), EmitExprAsInit(), EmitInitializerForField(), EmitLambdaExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitOMPAtomicSimpleUpdateExpr(), emitOMPSimpleStore(), emitProxyTaskFunction(), EmitScalarInit(), emitWriteback(), GenerateOpenMPCapturedVars(), and InitCapturedStruct().
LValue CodeGenFunction::EmitStringLiteralLValue | ( | const StringLiteral * | E | ) |
Definition at line 2274 of file CGExpr.cpp.
References clang::Expr::getType().
void CodeGenFunction::EmitSwitchStmt | ( | const SwitchStmt & | S | ) |
Definition at line 1472 of file CGStmt.cpp.
References Builder, CGM, ConstantFoldsToSimpleInteger(), createBasicBlock(), EmitAutoVarDecl(), EmitBlock(), EmitScalarExpr(), EmitStmt(), FindCaseStatementsForValue(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::SwitchStmt::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::SwitchStmt::getCond(), clang::SwitchStmt::getConditionVariable(), getContext(), clang::SwitchStmt::getInit(), getJumpDestInCurrentScope(), getLLVMContext(), clang::SwitchCase::getNextSwitchCase(), getProfileCount(), clang::SwitchStmt::getSwitchCaseList(), clang::CodeGen::CodeGenPGO::haveRegionCounts(), incrementProfileCounter(), and clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups().
Referenced by EmitStmt().
Definition at line 512 of file CGExprCXX.cpp.
References E, EmitNullInitialization(), EmitSynthesizedCXXCopyCtorCall(), clang::CXXConstructExpr::getConstructor(), getContext(), clang::Expr::getType(), and clang::CXXConstructExpr::requiresZeroInitialization().
Referenced by EmitBlockLiteral(), and GenerateCopyHelperFunction().
void CodeGenFunction::EmitSynthesizedCXXCopyCtorCall | ( | const CXXConstructorDecl * | D, |
Address | This, | ||
Address | Src, | ||
const CXXConstructExpr * | E | ||
) |
Definition at line 2290 of file CGClass.cpp.
References clang::CodeGen::CallArgList::add(), clang::CXXConstructExpr::arguments(), Builder, clang::Type::castAs(), CGM, clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::Ctor_Complete, EmitCallArgs(), EmitCXXConstructorCall(), clang::CodeGen::RValue::get(), clang::CXXConstructExpr::getConstructor(), getContext(), clang::CodeGen::Address::getPointer(), clang::CXXMethodDecl::getThisType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::FunctionProtoType::param_type_begin(), and clang::CodeGen::Type.
Referenced by EmitSynthesizedCXXCopyCtor().
Definition at line 7717 of file CGBuiltin.cpp.
References Builder, ceil, CGM, ConvertType(), EmitScalarExpr(), fabs, floor, fma, clang::CallExpr::getArg(), getContext(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), clang::Expr::getType(), ID, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, INTRINSIC_WITH_CC, clang::Expr::isIntegerConstantExpr(), nearbyint, rint, round, sqrt, trunc, clang::CodeGen::Type, and X.
Referenced by EmitTargetArchBuiltinExpr().
EmitTargetBuiltinExpr - Emit the given builtin call.
Returns 0 if the call is unhandled by the current target.
Definition at line 2511 of file CGBuiltin.cpp.
References BuiltinInfo, E, EmitTargetArchBuiltinExpr(), clang::ASTContext::getAuxTargetInfo(), getContext(), getTarget(), and clang::TargetInfo::getTriple().
llvm::Value * CodeGenFunction::EmitToMemory | ( | llvm::Value * | Value, |
QualType | Ty | ||
) |
EmitToMemory - Change a scalar value from its value representation to its in-memory representation.
Definition at line 1349 of file CGExpr.cpp.
References Builder, and hasBooleanRepresentation().
Referenced by EmitNontemporalStore(), and EmitToInt().
llvm::CallInst * CodeGenFunction::EmitTrapCall | ( | llvm::Intrinsic::ID | IntrID | ) |
Emit a call to trap or debugtrap and attach function attribute "trap-func-name" if specified.
Definition at line 2752 of file CGExpr.cpp.
References Builder.
Referenced by GenerateCode().
void CodeGenFunction::EmitTrapCheck | ( | llvm::Value * | Checked | ) |
Create a basic block that will call the trap intrinsic, and emit a conditional branch to it, for the -ftrapv checks.
Definition at line 2732 of file CGExpr.cpp.
References Builder.
Referenced by EmitVTablePtrCheck().
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 532 of file CGExpr.cpp.
References Builder, CGM, createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitBlock(), getContext(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CharUnits::getQuantity(), clang::ASTContext::getTypeSizeInChars(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::Type::isIncompleteType(), sanitizePerformTypeCheck(), SanOpts, TCK_DowncastPointer, TCK_Upcast, TCK_UpcastToVirtualBase, and clang::CodeGen::Type.
Referenced by commonEmitCXXMemberOrOperatorCall(), EmitCXXConstructorCall(), EmitCXXMemberPointerCallExpr(), EmitReferenceBindingToExpr(), and GetAddressOfBaseClass().
void CodeGenFunction::EmitTypeMetadataCodeForVCall | ( | const CXXRecordDecl * | RD, |
llvm::Value * | VTable, | ||
SourceLocation | Loc | ||
) |
If whole-program virtual table optimization is enabled, emit an assumption that VTable is a member of RD's type identifier.
Or, if vptr CFI is enabled, emit a check that VTable is a member of RD's type identifier.
Definition at line 2612 of file CGClass.cpp.
References Builder, CFITCK_VCall, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::CreateMetadataIdentifierForType(), EmitVTablePtrCheckForCall(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::TypeDecl::getTypeForDecl(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenModule::HasHiddenLTOVisibility(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and SanOpts.
LValue CodeGenFunction::EmitUnaryOpLValue | ( | const UnaryOperator * | E | ) |
Definition at line 2212 of file CGExpr.cpp.
References clang::CodeGen::LValue::getAddress(), clang::QualType::getAddressSpace(), clang::CodeGen::LValue::getAlignmentSource(), clang::QualType::getCanonicalType(), clang::CodeGen::Address::getElementType(), clang::UnaryOperator::getOpcode(), clang::Type::getPointeeType(), clang::UnaryOperator::getSubExpr(), clang::Expr::getType(), clang::CodeGen::LValue::getType(), clang::Type::isAnyComplexType(), clang::Type::isArithmeticType(), clang::QualType::isNull(), clang::Expr::isOBJCGCCandidate(), clang::CodeGen::LValue::isSimple(), and clang::LangOptions::NonGC.
EmitUnsupportedLValue - Emit a dummy l-value using the type of E and issue an ErrorUnsupported style diagnostic (using the provided Name).
Definition at line 935 of file CGExpr.cpp.
References clang::Expr::getType(), and clang::CharUnits::One().
EmitUnsupportedRValue - Emit a dummy r-value using the type of E and issue an ErrorUnsupported style diagnostic (using the provided Name).
Definition at line 929 of file CGExpr.cpp.
References clang::Expr::getType().
Generate code to get an argument from the passed in pointer and update it accordingly.
VE | The VAArgExpr for which to generate code. |
VAListAddr | Receives a reference to the va_list as emitted by either EmitVAListRef or EmitMSVAListRef . |
Definition at line 4133 of file CGCall.cpp.
References CGM, clang::CodeGen::ABIInfo::EmitMSVAArg(), EmitMSVAListRef(), clang::CodeGen::ABIInfo::EmitVAArg(), EmitVAListRef(), clang::CodeGen::CodeGenTypes::getABIInfo(), clang::VAArgExpr::getSubExpr(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), and clang::VAArgExpr::isMicrosoftABI().
Definition at line 3873 of file CGExpr.cpp.
Definition at line 1807 of file CodeGenFunction.cpp.
References EmitLValue(), EmitPointerWithAlignment(), clang::CodeGen::LValue::getAddress(), and getContext().
Referenced by EmitVAArg().
void CodeGenFunction::EmitVarAnnotations | ( | const VarDecl * | D, |
llvm::Value * | V | ||
) |
Emit local annotations for the local variable V, declared by D.
Definition at line 1865 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitAnnotationCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), I, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitAutoVarAlloca(), and EmitParmDecl().
void CodeGenFunction::EmitVarDecl | ( | const VarDecl & | D | ) |
EmitVarDecl - Emit a local variable declaration.
EmitVarDecl - This method handles emission of any variable declaration inside a function, including static vars etc.
This function can be called with a null (unreachable) insert point.
Definition at line 140 of file CGDecl.cpp.
References CGM, EmitAutoVarDecl(), EmitStaticVarDecl(), clang::CodeGen::CGOpenCLRuntime::EmitWorkGroupLocalVarDecl(), clang::QualType::getAddressSpace(), clang::CodeGen::CodeGenModule::getLLVMLinkageVarDefinition(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), clang::ValueDecl::getType(), clang::VarDecl::hasExternalStorage(), clang::VarDecl::hasLocalStorage(), clang::VarDecl::isStaticLocal(), and clang::LangAS::opencl_local.
Referenced by EmitDecl(), EmitOMPDistributeLoop(), EmitOMPHelperVar(), EmitOMPLinearClause(), EmitOMPLinearClauseInit(), and EmitOMPSimdDirective().
void CodeGenFunction::EmitVariablyModifiedType | ( | QualType | Ty | ) |
EmitVLASize - Capture all the sizes for the VLA expressions in the given variably-modified type and store them in the VLASizeMap.
This function can be called with a null (unreachable) insert point.
Definition at line 1664 of file CodeGenFunction.cpp.
References clang::Auto, Builder, EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitIgnoredExpr(), EmitScalarExpr(), EnsureInsertPoint(), getContext(), clang::ArrayType::getElementType(), clang::QualType::getSingleStepDesugaredType(), clang::VariableArrayType::getSizeExpr(), clang::QualType::getTypePtr(), clang::SanitizerSet::has(), clang::Type::isVariablyModifiedType(), Paren, SanOpts, and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by EmitAutoVarAlloca(), EmitDecl(), clang::CodeGen::CodeGenModule::EmitExplicitCastExprType(), EmitOMPReductionClauseInit(), emitReductionFunction(), EmitStaticVarDecl(), and StartFunction().
Value * CodeGenFunction::EmitVAStartEnd | ( | llvm::Value * | ArgValue, |
bool | IsStart | ||
) |
Emits a call to an LLVM variable-argument intrinsic, either llvm.va_start
or llvm.va_end
.
ArgValue | A reference to the va_list as emitted by either EmitVAListRef or EmitMSVAListRef . |
IsStart | If true , emits a call to llvm.va_start ; otherwise, calls llvm.va_end . |
Definition at line 390 of file CGBuiltin.cpp.
References Builder, ID, and clang::CodeGen::Type.
Referenced by EmitX86BuiltinExpr().
Emit assumption that vptr load == global vtable.
Definition at line 2261 of file CGClass.cpp.
References ApplyNonVirtualAndVirtualOffset(), clang::CodeGen::CodeGenFunction::VPtr::Base, Builder, CGM, clang::BaseSubobject::getBaseOffset(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::Address::getType(), clang::CodeGen::CGCXXABI::getVTableAddressPoint(), GetVTablePtr(), clang::CharUnits::isZero(), clang::CodeGen::CodeGenFunction::VPtr::NearestVBase, and clang::CodeGen::CodeGenFunction::VPtr::VTableClass.
Referenced by EmitVTableAssumptionLoads().
void CodeGenFunction::EmitVTableAssumptionLoads | ( | const CXXRecordDecl * | ClassDecl, |
Address | This | ||
) |
Emit assumption load for all bases.
Requires to be be called only on most-derived class and not under construction of the object.
Definition at line 2282 of file CGClass.cpp.
References CGM, clang::CodeGen::CGCXXABI::doStructorsInitializeVPtrs(), EmitVTableAssumptionLoad(), clang::CodeGen::CodeGenModule::getCXXABI(), and getVTablePointers().
Referenced by EmitCXXConstructorCall().
void CodeGenFunction::EmitVTablePtrCheck | ( | const CXXRecordDecl * | RD, |
llvm::Value * | VTable, | ||
CFITypeCheckKind | TCK, | ||
SourceLocation | Loc | ||
) |
EmitVTablePtrCheck - Emit a check that VTable is a valid virtual table for RD using llvm.type.test.
Definition at line 2688 of file CGClass.cpp.
References Builder, CFITCK_DerivedCast, CFITCK_ICall, CFITCK_NVCall, CFITCK_UnrelatedCast, CFITCK_VCall, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::CreateCrossDsoCfiTypeId(), clang::CodeGen::CodeGenModule::CreateMetadataIdentifierForType(), EmitCfiSlowPathCheck(), EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitSanitizerStatReport(), EmitTrapCheck(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getLLVMContext(), getLLVMContext(), clang::NamedDecl::getQualifiedNameAsString(), clang::TypeDecl::getTypeForDecl(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenModule::HasHiddenLTOVisibility(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, and clang::CodeGenOptions::SanitizeTrap.
Referenced by EmitVTablePtrCheckForCall(), and EmitVTablePtrCheckForCast().
void CodeGenFunction::EmitVTablePtrCheckForCall | ( | const CXXRecordDecl * | RD, |
llvm::Value * | VTable, | ||
CFITypeCheckKind | TCK, | ||
SourceLocation | Loc | ||
) |
EmitVTablePtrCheckForCall - Virtual method MD is being called via VTable.
If vptr CFI is enabled, emit a check that VTable is valid.
Definition at line 2633 of file CGClass.cpp.
References EmitVTablePtrCheck(), clang::SanitizerSet::has(), LeastDerivedClassWithSameLayout(), and SanOpts.
Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), and EmitTypeMetadataCodeForVCall().
void CodeGenFunction::EmitVTablePtrCheckForCast | ( | QualType | T, |
llvm::Value * | Derived, | ||
bool | MayBeNull, | ||
CFITypeCheckKind | TCK, | ||
SourceLocation | Loc | ||
) |
Derived is the presumed address of an object of type T after a cast.
If T is a polymorphic class type, emit a check that the virtual table for Derived belongs to a class derived from T.
Definition at line 2643 of file CGClass.cpp.
References Builder, clang::frontend::CPlusPlus, createBasicBlock(), EmitBlock(), EmitVTablePtrCheck(), clang::Type::getAs(), getLangOpts(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), GetVTablePtr(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::TagDecl::isCompleteDefinition(), clang::CXXRecordDecl::isDynamicClass(), LeastDerivedClassWithSameLayout(), and SanOpts.
llvm::Value * CodeGenFunction::EmitVTableTypeCheckedLoad | ( | const CXXRecordDecl * | RD, |
llvm::Value * | VTable, | ||
uint64_t | VTableByteOffset | ||
) |
Emit a type checked load from the given vtable.
Definition at line 2783 of file CGClass.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenModule::CreateMetadataIdentifierForType(), EmitCheck(), EmitSanitizerStatReport(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::TypeDecl::getTypeForDecl(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Definition at line 8078 of file CGBuiltin.cpp.
References Builder, CGM, ConvertType(), EmitScalarExpr(), clang::CallExpr::getArg(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::Expr::getType(), and clang::CodeGen::Type.
Referenced by EmitTargetArchBuiltinExpr().
Definition at line 647 of file CGStmt.cpp.
References Builder, CGM, createBasicBlock(), EmitAutoVarDecl(), EmitBlock(), EmitBranch(), EmitBranchThroughCleanup(), EmitStmt(), EmitStopPoint(), EvaluateExprAsBool(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::WhileStmt::getBody(), clang::WhileStmt::getCond(), clang::WhileStmt::getConditionVariable(), clang::CodeGen::CodeGenModule::getContext(), getJumpDestInCurrentScope(), getProfileCount(), incrementProfileCounter(), LoopStack, clang::CodeGen::LoopInfoStack::pop(), clang::CodeGen::LoopInfoStack::push(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), and SimplifyForwardingBlocks().
Referenced by EmitAttributedStmt(), and EmitStmt().
Definition at line 6679 of file CGBuiltin.cpp.
References Builder, BuildVector(), CGM, ConvertType(), clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateDefaultAlignedStore(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CodeGenModule::CreateRuntimeVariable(), clang::CodeGen::CGBuilderTy::CreateStore(), EmitMSVAListRef(), EmitScalarExpr(), EmitVAStartEnd(), EmitX86MaskedCompare(), EmitX86MaskedLoad(), EmitX86MaskedStore(), EmitX86Select(), clang::CharUnits::fromQuantity(), clang::ASTContext::GE_None, clang::CodeGen::Address::getAlignment(), clang::CallExpr::getArg(), clang::ASTContext::GetBuiltinType(), getContext(), clang::CodeGen::CodeGenModule::getIntrinsic(), getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::CallExpr::getNumArgs(), clang::CodeGen::Address::getPointer(), clang::Expr::getType(), clang::ASTContext::getTypeAlignInChars(), ID, clang::Expr::IgnoreParenCasts(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int64Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, INTRINSIC_X86_XSAVE_ID, clang::Expr::isIntegerConstantExpr(), Node, prefetch(), clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::CodeGen::Type.
Referenced by EmitTargetArchBuiltinExpr().
|
inline |
Definition at line 1203 of file CodeGenFunction.h.
|
inline |
EnsureInsertPoint - Ensure that an insertion point is defined so that emitted IR has a place to go.
Note that by definition, if this function creates a block then that block is unreachable; callers may do better to detect when no insertion point is defined and simply skip IR generation.
Definition at line 1641 of file CodeGenFunction.h.
References createBasicBlock(), EmitBlock(), and HaveInsertPoint().
Referenced by EmitAutoVarAlloca(), EmitAutoVarInit(), EmitCall(), EmitCompoundStmtWithoutScope(), EmitStmt(), EmitVariablyModifiedType(), and clang::CodeGen::CodeGenFunction::StmtExprEvaluation::~StmtExprEvaluation().
void CodeGenFunction::enterByrefCleanup | ( | const AutoVarEmission & | emission | ) |
Enter a cleanup to destroy a __block variable.
Note that this cleanup should be a no-op if the variable hasn't left the stack yet; if a cleanup is required for the variable itself, that needs to be done externally.
Definition at line 2286 of file CGBlocks.cpp.
References CGM, EHStack, clang::LangOptions::GCOnly, clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::Address::getPointer(), and clang::CodeGen::NormalAndEHCleanup.
Referenced by EmitAutoVarCleanups().
void CodeGenFunction::EnterCXXTryStmt | ( | const CXXTryStmt & | S, |
bool | IsFnTryBlock = false |
||
) |
Definition at line 542 of file CGException.cpp.
References CGM, createBasicBlock(), EHStack, clang::CodeGen::CGCXXABI::getAddrOfCXXCatchHandlerType(), clang::CodeGen::CGCXXABI::getCatchAllTypeInfo(), clang::CXXCatchStmt::getCaughtType(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CGObjCRuntime::GetEHType(), clang::CXXCatchStmt::getExceptionDecl(), clang::CXXTryStmt::getHandler(), clang::QualType::getNonReferenceType(), clang::CXXTryStmt::getNumHandlers(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ASTContext::getUnqualifiedArrayType(), I, clang::Type::isObjCObjectPointerType(), clang::CodeGen::EHScopeStack::pushCatch(), and clang::CodeGen::EHCatchScope::setHandler().
Referenced by EmitConstructorBody(), EmitCXXTryStmt(), and EmitDestructorBody().
void CodeGenFunction::EnterDtorCleanups | ( | const CXXDestructorDecl * | DD, |
CXXDtorType | DtorType | ||
) |
EnterDtorCleanups - Enter the cleanups necessary to complete the given phase of destruction for a destructor.
Emit all code that comes at the end of class's destructor.
The end result should call destructors on members and base classes in reverse order of their construction.
This is to call destructors on members and base classes in reverse order of their construction.
Definition at line 1807 of file CGClass.cpp.
References clang::CXXRecordDecl::bases(), CGM, clang::Dtor_Base, clang::Dtor_Complete, clang::Dtor_Deleting, clang::CodeGen::EHCleanup, EHStack, clang::RecordDecl::fields(), clang::Type::getAsUnionType(), getCleanupKind(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::RecordType::getDecl(), getDestroyer(), clang::CXXRecordDecl::getNumVBases(), clang::CXXDestructorDecl::getOperatorDelete(), clang::CXXMethodDecl::getParent(), clang::ValueDecl::getType(), clang::SanitizerSet::has(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::RecordDecl::isAnonymousStructOrUnion(), clang::QualType::isDestructedType(), clang::CXXRecordDecl::isPolymorphic(), clang::FunctionDecl::isTrivial(), clang::TagDecl::isUnion(), clang::CodeGen::NormalAndEHCleanup, SanOpts, clang::ast_matchers::type, and clang::CXXRecordDecl::vbases().
Referenced by EmitDestructorBody().
|
inline |
Definition at line 3124 of file CodeGenFunction.h.
References enterNonTrivialFullExpression(), and clang::ExprWithCleanups::getNumObjects().
Referenced by EmitARCRetainAutoreleaseScalarExpr(), EmitARCRetainScalarExpr(), EmitARCUnsafeUnretainedScalarExpr(), EmitOMPAtomicDirective(), EmitReturnStmt(), and EmitScalarInit().
void CodeGenFunction::enterNonTrivialFullExpression | ( | const ExprWithCleanups * | E | ) |
Enter a full-expression with a non-trivial number of objects to clean up.
This is in this file because, at the moment, the only kind of cleanup object is a BlockDecl*.
Definition at line 642 of file CGBlocks.cpp.
References enterBlockScope(), clang::ExprWithCleanups::getNumObjects(), and clang::ExprWithCleanups::getObjects().
Referenced by enterFullExpression().
void CodeGenFunction::EnterSEHTryStmt | ( | const SEHTryStmt & | S | ) |
Definition at line 1779 of file CGException.cpp.
References createBasicBlock(), CreateMemTemp(), EHStack, clang::CodeGen::CodeGenModule::EmitConstantExpr(), GenerateSEHFilterFunction(), GenerateSEHFinallyFunction(), getContext(), clang::SEHTryStmt::getExceptHandler(), clang::SEHExceptStmt::getFilterExpr(), clang::SEHTryStmt::getFinallyHandler(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetInfo::getTriple(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, clang::ASTContext::IntTy, clang::CodeGen::NormalAndEHCleanup, clang::CodeGen::EHScopeStack::pushCatch(), SEHCodeSlotStack, clang::CodeGen::EHCatchScope::setCatchAllHandler(), and clang::CodeGen::EHCatchScope::setHandler().
Referenced by EmitSEHTryStmt().
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 1383 of file CodeGenFunction.cpp.
References CGM, and clang::CodeGen::CodeGenModule::ErrorUnsupported().
llvm::Value * CodeGenFunction::EvaluateExprAsBool | ( | const Expr * | E | ) |
EvaluateExprAsBool - Perform the usual unary conversions on the specified expression and compare the result against zero, returning an Int1Ty value.
Definition at line 110 of file CGExpr.cpp.
References clang::ASTContext::BoolTy, CGM, EmitComplexExpr(), EmitComplexToScalarConversion(), clang::CodeGen::CGCXXABI::EmitMemberPointerIsNotNull(), EmitScalarConversion(), EmitScalarExpr(), clang::Type::getAs(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::Expr::getExprLoc(), clang::Expr::getType(), clang::Type::isAnyComplexType(), and clang::CodeGen::CodeGenPGO::setCurrentStmt().
Referenced by EmitBranchOnBoolExpr(), EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitOMPTaskBasedDirective(), clang::CodeGen::emitTaskLoopCall(), and EmitWhileStmt().
void CodeGenFunction::ExitCXXTryStmt | ( | const CXXTryStmt & | S, |
bool | IsFnTryBlock = false |
||
) |
Definition at line 1003 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::begin(), clang::CodeGen::EHScopeStack::begin(), Builder, CGM, clang::CodeGen::EHCatchScope::clearHandlerBlocks(), createBasicBlock(), CurCodeDecl, CurrentFuncletPad, EHStack, clang::CodeGen::CGCXXABI::emitBeginCatch(), EmitBlock(), EmitBlockAfterUses(), emitCatchDispatchBlock(), clang::CodeGen::CGCXXABI::emitRethrow(), EmitStmt(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CXXTryStmt::getHandler(), clang::CXXCatchStmt::getHandlerBlock(), clang::CXXTryStmt::getNumHandlers(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::EHScope::hasEHBranches(), HaveInsertPoint(), I, incrementProfileCounter(), and clang::CodeGen::EHScopeStack::popCatch().
Referenced by EmitConstructorBody(), EmitCXXTryStmt(), and EmitDestructorBody().
void CodeGenFunction::ExitSEHTryStmt | ( | const SEHTryStmt & | S | ) |
Definition at line 1818 of file CGException.cpp.
References clang::CodeGen::EHScopeStack::begin(), clang::CodeGen::EHCatchScope::Handler::Block, Builder, clang::CodeGen::EHCatchScope::clearHandlerBlocks(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateStore(), EHStack, EmitBlock(), EmitBlockAfterUses(), emitCatchDispatchBlock(), EmitStmt(), clang::SEHExceptStmt::getBlock(), clang::SEHTryStmt::getExceptHandler(), clang::SEHTryStmt::getFinallyHandler(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetInfo::getTriple(), clang::CodeGen::EHScope::hasEHBranches(), HaveInsertPoint(), clang::CodeGen::EHScopeStack::popCatch(), PopCleanupBlock(), and SEHCodeSlotStack.
Referenced by EmitSEHTryStmt().
void CodeGenFunction::FinishFunction | ( | SourceLocation | EndLoc = SourceLocation() | ) |
FinishFunction - Complete IR generation of the current function.
It is legal to call this function even if there is no current insertion point.
Definition at line 274 of file CodeGenFunction.cpp.
References AllocaInsertPt, Builder, CGM, clang::CodeGen::EHScopeStack::containsOnlyLifetimeMarkers(), CurCodeDecl, CurFnInfo, E, EHResumeBlock, EHStack, EmitBlock(), EmitEndEHSpec(), EmitFunctionEpilog(), EmitFunctionInstrumentation(), EmitIfUsed(), EmitReturnBlock(), clang::CodeGen::EHScopeStack::empty(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getDebugInfo(), clang::CodeGen::CodeGenModule::getModule(), I, PopCleanupBlocks(), PrologueCleanupDepth, ReturnBlock, ShouldInstrumentFunction(), and clang::CodeGen::EHScopeStack::stable_begin().
Referenced by createAtExitStub(), createOffloadingBinaryDescriptorFunction(), emitCombinerOrInitializer(), emitCopyprivateCopyFunction(), emitDestructorsFunction(), EmitMustTailThunk(), emitProxyTaskFunction(), emitReductionFunction(), emitTaskDupFunction(), emitTaskPrivateMappingFunction(), clang::CodeGen::emitThreadPrivateVarDefinition(), FinishThunk(), GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCopyHelperFunction(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateDestroyHelperFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), GenerateObjCGetter(), GenerateObjCMethod(), GenerateObjCSetter(), GenerateOpenMPCapturedStmtFunction(), GenerateSEHFilterFunction(), and GenerateSEHFinallyFunction().
void CodeGenFunction::FinishThunk | ( | ) |
Definition at line 245 of file CGVTables.cpp.
References CurCodeDecl, CurFuncDecl, and FinishFunction().
Referenced by EmitCallAndReturnForThunk().
llvm::Function * CodeGenFunction::GenerateBlockFunction | ( | GlobalDecl | GD, |
const CGBlockInfo & | Info, | ||
const DeclMapTy & | ldm, | ||
bool | IsLambdaConversionToBlock | ||
) |
Definition at line 1148 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBlockFunctionDeclaration(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), BlockInfo, BlockPointer, Builder, clang::BlockDecl::captures(), clang::BlockDecl::capturesCXXThis(), CGM, clang::Create(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CreateTempAlloca(), CurGD, clang::CodeGen::CGBlockInfo::CXXThisIndex, clang::CodeGen::CGBlockInfo::CXXThisOffset, EmitLambdaBlockInvokeBody(), EmitStmt(), FinishFunction(), clang::IdentifierTable::get(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CodeGenModule::getBlockMangledName(), clang::BlockDecl::getBody(), clang::BlockExpr::getBody(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CGBlockInfo::Capture::getConstant(), clang::CodeGen::CodeGenModule::getContext(), getContext(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::BlockExpr::getFunctionType(), clang::BlockExpr::getLocEnd(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::FunctionType::getReturnType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::Idents, incrementProfileCounter(), clang::InternalLinkage, clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::codegenoptions::LimitedDebugInfo, LoadBlockStruct(), clang::BlockDecl::param_begin(), clang::BlockDecl::param_end(), clang::CodeGen::CodeGenModule::ReturnSlotInterferesWithArgs(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), StartFunction(), clang::CodeGen::CGBlockInfo::UsesStret, and clang::ASTContext::VoidPtrTy.
Referenced by EmitBlockLiteral(), and clang::CodeGen::CodeGenModule::GetAddrOfGlobalBlock().
Address CodeGenFunction::GenerateCapturedStmtArgument | ( | const CapturedStmt & | S | ) |
Definition at line 2188 of file CGStmt.cpp.
References clang::CodeGen::LValue::getAddress(), and InitCapturedStruct().
Referenced by EmitOMPTaskDirective(), and EmitOMPTaskLoopBasedDirective().
llvm::Function * CodeGenFunction::GenerateCapturedStmtFunction | ( | const CapturedStmt & | S | ) |
Creates the outlined function for a CapturedStmt.
Definition at line 2195 of file CGStmt.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), Builder, CapturedStmtInfo, CGM, clang::Create(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitLoadOfLValue(), EmitLValueForField(), clang::CodeGen::ExtInfo, clang::RecordDecl::fields(), FinishFunction(), GetAddrOfLocalVar(), clang::CapturedDecl::getBody(), 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::CapturedStmt::getLocStart(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::getThisFieldDecl(), clang::CodeGen::CodeGenModule::getTypes(), clang::InternalLinkage, clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::isCXXThisExprCaptured(), clang::CapturedDecl::isNothrow(), MakeNaturalAlignAddrLValue(), clang::CapturedDecl::param_begin(), clang::CapturedDecl::param_end(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::setContextValue(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and StartFunction().
Referenced by EmitCapturedStmt().
void CodeGenFunction::GenerateCode | ( | GlobalDecl | GD, |
llvm::Function * | Fn, | ||
const CGFunctionInfo & | FnInfo | ||
) |
Definition at line 997 of file CodeGenFunction.cpp.
References clang::CodeGen::CodeGenPGO::assignRegionCounters(), Builder, BuildFunctionArgList(), CGM, clang::frontend::CPlusPlus, CurFn, CurGD, EmitCheck(), EmitCheckSourceLocation(), EmitConstructorBody(), EmitDestructorBody(), clang::CodeGen::CGCUDARuntime::emitDeviceStub(), EmitFunctionBody(), emitImplicitAssignmentOperatorBody(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitTrapCall(), FinishFunction(), clang::SourceRange::getBegin(), clang::FunctionDecl::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getCUDARuntime(), clang::GlobalDecl::getDecl(), clang::SourceRange::getEnd(), getLangOpts(), clang::FunctionDecl::getReturnType(), clang::FunctionDecl::getTemplateInstantiationPattern(), clang::SanitizerSet::has(), clang::FunctionDecl::hasImplicitReturnZero(), clang::FunctionDecl::isDefaulted(), clang::Type::isVoidType(), clang::None, SanOpts, SawAsmBlock, StartFunction(), and TryMarkNoThrow().
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 1331 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, clang::CodeGen::CGBlockInfo::BlockAlign, Builder, clang::BlockDecl::captures(), CGM, clang::FunctionDecl::Create(), clang::Create(), clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), EmitARCCopyWeak(), EmitARCRetainNonBlock(), EmitARCStoreStrongCall(), EmitNounwindRuntimeCall(), EmitRuntimeCallOrInvoke(), EmitSynthesizedCXXCopyCtor(), FinishFunction(), clang::IdentifierTable::get(), GetAddrOfLocalVar(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::BlockFieldFlags::getBitMask(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CodeGenModule::getBlockObjectAssign(), clang::ASTContext::getBlockVarCopyInits(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::CGBlockInfo::Capture::getOffset(), clang::CodeGen::Address::getPointer(), clang::QualType::getQualifiers(), clang::ASTContext::getTranslationUnitDecl(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::Idents, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::InternalLinkage, isBlockPointer(), 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::CodeGenModule::SetInternalFunctionAttributes(), StartFunction(), clang::CodeGen::CGBlockInfo::StructureType, clang::CodeGen::Type, 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 574 of file CGDeclCXX.cpp.
References Builder, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), FinishFunction(), getContext(), getTypes(), StartFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
void CodeGenFunction::GenerateCXXGlobalInitFunc | ( | llvm::Function * | Fn, |
ArrayRef< llvm::Function * > | CXXThreadLocals, | ||
Address | Guard = Address::invalid() |
||
) |
GenerateCXXGlobalInitFunc - Generates code for initializing global variables.
Definition at line 523 of file CGDeclCXX.cpp.
References Builder, clang::frontend::CPlusPlus, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), createBasicBlock(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), EmitBlock(), EmitObjCAutoreleasePoolCleanup(), EmitObjCAutoreleasePoolPush(), EmitRuntimeCall(), FinishFunction(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), getContext(), getLangOpts(), getTypes(), clang::CodeGen::Address::isValid(), StartFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc | ( | llvm::Function * | Fn, |
const VarDecl * | D, | ||
llvm::GlobalVariable * | Addr, | ||
bool | PerformInit | ||
) |
Emit the code necessary to initialize the given global variable.
Definition at line 495 of file CGDeclCXX.cpp.
References EmitCXXGlobalVarDeclInit(), EmitCXXGuardedInit(), FinishFunction(), getContext(), clang::Expr::getExprLoc(), clang::VarDecl::getInit(), clang::DeclaratorDecl::getLocStart(), getTypes(), StartFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
llvm::Function * CodeGenFunction::generateDestroyHelper | ( | Address | addr, |
QualType | type, | ||
Destroyer * | destroyer, | ||
bool | useEHCleanupForArray, | ||
const VarDecl * | VD | ||
) |
generateDestroyHelper - Generates a helper function which, when invoked, destroys the given object.
The address of the object should be in global memory.
Definition at line 601 of file CGDeclCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), CGM, clang::CodeGen::CodeGenModule::CreateGlobalInitOrDestructFunction(), emitDestroy(), FinishFunction(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::DeclaratorDecl::getLocStart(), clang::CodeGen::CodeGenModule::getTypes(), StartFunction(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitDeclDestroy(), and pushTemporaryCleanup().
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 1510 of file CGBlocks.cpp.
References clang::CodeGen::ARCImpreciseLifetime, clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, clang::CodeGen::CGBlockInfo::BlockAlign, BuildBlockRelease(), Builder, clang::BlockDecl::captures(), CGM, clang::FunctionDecl::Create(), clang::Create(), clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::ApplyDebugLocation::CreateEmpty(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), EmitARCDestroyStrong(), EmitARCDestroyWeak(), FinishFunction(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), clang::IdentifierTable::get(), GetAddrOfLocalVar(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CGBlockInfo::getBlockDecl(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::CGBlockInfo::Capture::getOffset(), clang::QualType::getQualifiers(), clang::ASTContext::getTranslationUnitDecl(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::Qualifiers::hasObjCLifetime(), clang::ASTContext::Idents, clang::InternalLinkage, clang::Type::isBlockPointerType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCRetainableType(), clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, PushDestructorCleanup(), clang::SC_Static, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), StartFunction(), clang::CodeGen::CGBlockInfo::StructureType, clang::CodeGen::Type, clang::ast_matchers::type, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by buildDisposeHelper().
llvm::Constant * CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction | ( | const ObjCPropertyImplDecl * | PID | ) |
Definition at line 3244 of file CGObjC.cpp.
References clang::QualType::addConst(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::frontend::CPlusPlus, clang::CXXConstructExpr::Create(), clang::FunctionDecl::Create(), clang::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(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), StartFunction(), clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by GenerateObjCGetter().
llvm::Constant * CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction | ( | const ObjCPropertyImplDecl * | PID | ) |
GenerateObjCAtomicSetterCopyHelperFunction - Given a c++ object type with non-trivial copy assignment function, produce following helper function.
static void copyHelper(Ty *dest, const Ty *source) { *dest = *source; }
Definition at line 3165 of file CGObjC.cpp.
References clang::QualType::addConst(), clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::frontend::CPlusPlus, clang::FunctionDecl::Create(), clang::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(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), StartFunction(), clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by GenerateObjCSetter().
void CodeGenFunction::GenerateObjCCtorDtorMethod | ( | ObjCImplementationDecl * | IMP, |
ObjCMethodDecl * | MD, | ||
bool | ctor | ||
) |
Definition at line 1402 of file CGObjC.cpp.
References AutoreleaseResult, Builder, clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::ObjCMethodDecl::createImplicitParams(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, EmitAggExpr(), emitCXXDestructMethod(), EmitLValueForIvar(), FinishFunction(), clang::CodeGen::AggValueSlot::forLValue(), clang::CodeGen::RValue::get(), clang::ObjCImplDecl::getClassInterface(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getObjCIdType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ObjCImplementationDecl::inits(), clang::CodeGen::AggValueSlot::IsDestructed, clang::CodeGen::AggValueSlot::IsNotAliased, LoadObjCSelf(), StartObjCMethod(), and TypeOfSelfObject().
void CodeGenFunction::GenerateObjCGetter | ( | ObjCImplementationDecl * | IMP, |
const ObjCPropertyImplDecl * | PID | ||
) |
GenerateObjCGetter - Synthesize an Objective-C property getter function.
Generate an Objective-C property getter function.
The given Decl must be an ObjCImplementationDecl. @synthesize is illegal within a category.
Definition at line 795 of file CGObjC.cpp.
References FinishFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), generateObjCGetterBody(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCPropertyDecl::getGetterMethodDecl(), clang::ObjCPropertyImplDecl::getPropertyDecl(), and StartObjCMethod().
void CodeGenFunction::generateObjCGetterBody | ( | const ObjCImplementationDecl * | classImpl, |
const ObjCPropertyImplDecl * | propImpl, | ||
const ObjCMethodDecl * | GetterMothodDecl, | ||
llvm::Constant * | AtomicHelperFn | ||
) |
Definition at line 863 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), AutoreleaseResult, clang::ASTContext::BoolTy, Builder, clang::CodeGen::CodeGenTypes::ConvertType(), ConvertType(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), EmitAggregateCopy(), EmitARCLoadWeak(), emitARCRetainLoadOfScalar(), EmitCall(), emitCPPObjectAtomicGetterCall(), EmitIvarOffset(), EmitLoadOfComplex(), EmitLoadOfLValue(), EmitLValueForIvar(), EmitReturnStmt(), EmitStoreOfComplex(), emitStructGetterCall(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCMethodDecl::getCmdDecl(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), getEvaluationKind(), clang::ObjCPropertyImplDecl::getGetterCXXConstructor(), clang::ObjCPropertyDecl::getGetterMethodDecl(), getLangOpts(), getLLVMContext(), clang::Qualifiers::getObjCLifetime(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::Address::getPointer(), 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(), MakeAddrLValue(), clang::Qualifiers::OCL_Weak, ReturnValue, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, clang::ASTContext::toBits(), clang::CodeGen::Type, TypeOfSelfObject(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by GenerateObjCGetter().
void CodeGenFunction::GenerateObjCMethod | ( | const ObjCMethodDecl * | OMD | ) |
Generate an Objective-C method.
An Objective-C method is a C function with its pointer, name, and types registered in the class struture.
Definition at line 558 of file CGObjC.cpp.
References clang::CodeGen::CodeGenPGO::assignRegionCounters(), CurFn, EmitCompoundStmtWithoutScope(), FinishFunction(), clang::ObjCMethodDecl::getBody(), clang::ObjCMethodDecl::getClassInterface(), incrementProfileCounter(), and StartObjCMethod().
Referenced by clang::CodeGen::CodeGenModule::EmitTopLevelDecl().
void CodeGenFunction::GenerateObjCSetter | ( | ObjCImplementationDecl * | IMP, |
const ObjCPropertyImplDecl * | PID | ||
) |
GenerateObjCSetter - Synthesize an Objective-C property setter function for the given property.
Generate an Objective-C property setter function.
The given Decl must be an ObjCImplementationDecl. @synthesize is illegal within a category.
Definition at line 1321 of file CGObjC.cpp.
References FinishFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCSetterBody(), clang::ObjCImplDecl::getClassInterface(), clang::ObjCPropertyImplDecl::getPropertyDecl(), clang::ObjCPropertyDecl::getSetterMethodDecl(), and StartObjCMethod().
void CodeGenFunction::generateObjCSetterBody | ( | const ObjCImplementationDecl * | classImpl, |
const ObjCPropertyImplDecl * | propImpl, | ||
llvm::Constant * | AtomicHelperFn | ||
) |
Definition at line 1145 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::ASTContext::BoolTy, Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), EmitCall(), emitCPPObjectAtomicSetterCall(), EmitIvarOffset(), EmitLValueForIvar(), EmitStmt(), emitStructSetterCall(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), GetAddrOfLocalVar(), 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(), clang::CodeGen::Type, TypeOfSelfObject(), UseOptimizedSetter(), clang::VK_LValue, clang::VK_RValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by GenerateObjCSetter().
llvm::Function * CodeGenFunction::GenerateOpenMPCapturedStmtFunction | ( | const CapturedStmt & | S | ) |
Definition at line 198 of file CGStmtOpenMP.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenPGO::assignRegionCounters(), CapturedStmtInfo, clang::CapturedStmt::captures(), clang::Type::castAs(), castValueFromUintptr(), CGM, clang::ImplicitParamDecl::Create(), clang::Create(), clang::CodeGen::Decl, clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitLoadOfLValue(), EmitLoadOfReference(), clang::CodeGen::ExtInfo, clang::RecordDecl::fields(), FinishFunction(), clang::IdentifierTable::get(), clang::CodeGen::LValue::getAddress(), GetAddrOfLocalVar(), clang::CapturedDecl::getBody(), clang::CapturedStmt::getCapturedDecl(), clang::CapturedStmt::getCapturedRecordDecl(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CapturedDecl::getContextParamPosition(), clang::ASTContext::getDeclAlign(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::getHelperName(), clang::NamedDecl::getIdentifier(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::Address::getPointer(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::Address::getType(), clang::CodeGen::LValue::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::ASTContext::getVariableArrayDecayedType(), I, clang::ASTContext::Idents, clang::InternalLinkage, clang::Type::isAnyPointerType(), clang::CapturedDecl::isNothrow(), clang::Type::isReferenceType(), clang::Type::isVariablyModifiedType(), MakeAddrLValue(), clang::CapturedDecl::param_begin(), clang::CapturedDecl::param_end(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and StartFunction().
Referenced by emitOutlinedOrderedFunction().
void CodeGenFunction::GenerateOpenMPCapturedVars | ( | const CapturedStmt & | S, |
SmallVectorImpl< llvm::Value * > & | CapturedVars | ||
) |
Definition at line 125 of file CGStmtOpenMP.cpp.
References clang::CapturedStmt::capture_init_begin(), clang::CapturedStmt::capture_init_end(), clang::CapturedStmt::captures(), CreateMemTemp(), E, EmitLoadOfLValue(), EmitLValue(), EmitScalarConversion(), EmitStoreThroughLValue(), clang::RecordDecl::field_begin(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CapturedStmt::getCapturedRecordDecl(), getContext(), clang::CodeGen::Address::getPointer(), clang::CodeGen::RValue::getScalarVal(), I, MakeAddrLValue(), and MakeNaturalAlignAddrLValue().
Referenced by emitCommonOMPParallelDirective(), emitCommonOMPTeamsDirective(), and EmitOMPTargetDirective().
llvm::Function * CodeGenFunction::GenerateSEHFilterFunction | ( | CodeGenFunction & | ParentCGF, |
const SEHExceptStmt & | Except | ||
) |
Create a stub filter function that will ultimately hold the code of the filter expression.
The EH preparation passes in LLVM will outline the code from the main function body into this stub.
Definition at line 1689 of file CGException.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateStore(), CurFn, EmitScalarExpr(), FinishFunction(), getContext(), clang::SEHExceptStmt::getFilterExpr(), clang::Expr::getType(), clang::Type::isSignedIntegerType(), ReturnValue, and startOutlinedSEHHelper().
Referenced by EnterSEHTryStmt().
llvm::Function * CodeGenFunction::GenerateSEHFinallyFunction | ( | CodeGenFunction & | ParentCGF, |
const SEHFinallyStmt & | Finally | ||
) |
Definition at line 1706 of file CGException.cpp.
References CurFn, EmitStmt(), FinishFunction(), clang::SEHFinallyStmt::getBlock(), and startOutlinedSEHHelper().
Referenced by EnterSEHTryStmt().
void CodeGenFunction::generateThunk | ( | llvm::Function * | Fn, |
const CGFunctionInfo & | FnInfo, | ||
GlobalDecl | GD, | ||
const ThunkInfo & | Thunk | ||
) |
Generate a thunk for the given method.
Definition at line 396 of file CGVTables.cpp.
References clang::CodeGen::CodeGenTypes::arrangeGlobalDeclaration(), CGM, EmitCallAndReturnForThunk(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), StartThunk(), and clang::CodeGen::Type.
llvm::Function * CodeGenFunction::GenerateVarArgsThunk | ( | llvm::Function * | Fn, |
const CGFunctionInfo & | FnInfo, | ||
GlobalDecl | GD, | ||
const ThunkInfo & | Thunk | ||
) |
Definition at line 144 of file CGVTables.cpp.
References Builder, CGM, CurFn, clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::Type::getAs(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::CodeGen::RValue::getScalarVal(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), I, clang::ReturnAdjustment::isEmpty(), clang::CodeGen::CGFunctionInfo::isVariadic(), PerformReturnAdjustment(), clang::CodeGen::CGCXXABI::performThisAdjustment(), clang::ThunkInfo::Return, clang::CodeGen::CodeGenModule::ReturnTypeUsesSRet(), clang::ThunkInfo::This, and clang::CodeGen::Type.
getAccessedFieldNo - Given an encoded value and a result number, return the input field number being accessed.
Definition at line 507 of file CGExpr.cpp.
Address CodeGenFunction::GetAddressOfBaseClass | ( | Address | Value, |
const CXXRecordDecl * | Derived, | ||
CastExpr::path_const_iterator | PathBegin, | ||
CastExpr::path_const_iterator | PathEnd, | ||
bool | NullCheckValue, | ||
SourceLocation | Loc | ||
) |
GetAddressOfBaseClass - This function will add the necessary delta to the load of 'this' and returns address of the base class.
Definition at line 265 of file CGClass.cpp.
References ApplyNonVirtualAndVirtualOffset(), Builder, CGM, clang::CodeGen::CodeGenModule::computeNonVirtualBaseClassOffset(), ConvertType(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitBlock(), EmitTypeCheck(), clang::CodeGen::Address::getAlignment(), clang::ASTContext::getASTRecordLayout(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::Address::getPointer(), clang::ASTContext::getRecordType(), clang::ASTRecordLayout::getVBaseClassOffset(), clang::CodeGen::CGCXXABI::GetVirtualBaseClassOffset(), clang::CharUnits::isZero(), sanitizePerformTypeCheck(), TCK_Upcast, TCK_UpcastToVirtualBase, and clang::CodeGen::Type.
Referenced by EmitMaterializeTemporaryExpr().
Address CodeGenFunction::GetAddressOfDerivedClass | ( | Address | Value, |
const CXXRecordDecl * | Derived, | ||
CastExpr::path_const_iterator | PathBegin, | ||
CastExpr::path_const_iterator | PathEnd, | ||
bool | NullCheckValue | ||
) |
Definition at line 368 of file CGClass.cpp.
References Builder, CGM, ConvertType(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateBitCast(), EmitBlock(), clang::ASTContext::getCanonicalType(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), getContext(), clang::CodeGen::CodeGenModule::GetNonVirtualBaseClassOffset(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::Type.
Address CodeGenFunction::GetAddressOfDirectBaseInCompleteClass | ( | Address | 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 197 of file CGClass.cpp.
References Builder, ConvertType(), clang::CodeGen::CGBuilderTy::CreateConstInBoundsByteGEP(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), getContext(), clang::CodeGen::Address::getElementType(), clang::ASTRecordLayout::getVBaseClassOffset(), and clang::CodeGen::CodeGenTypeCache::Int8Ty.
Referenced by EmitBaseInitializer().
Definition at line 1010 of file CGBlocks.cpp.
References BlockInfo, Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), emitBlockByrefAddress(), EmitLoadOfReference(), clang::Type::getAs(), getBlockByrefInfo(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CGBlockInfo::Capture::getIndex(), clang::NamedDecl::getName(), clang::CodeGen::CGBlockInfo::Capture::getOffset(), clang::ValueDecl::getType(), clang::CodeGen::CGBlockInfo::Capture::isConstant(), and LoadBlockStruct().
Referenced by EmitLambdaBlockInvokeBody().
llvm::BlockAddress * CodeGenFunction::GetAddrOfLabel | ( | const LabelDecl * | L | ) |
Definition at line 1514 of file CodeGenFunction.cpp.
References CurFn, clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), GetIndirectGotoBlock(), and getJumpDestForLabel().
GetAddrOfLocalVar - Return the address of a local variable.
Definition at line 1818 of file CodeGenFunction.h.
Referenced by EmitAggMemberInitializer(), emitCombinerOrInitializer(), emitCopyprivateCopyFunction(), EmitDelegateCallArg(), emitDestructorsFunction(), clang::CodeGen::CGObjCRuntime::EmitInitOfCatchParam(), EmitMemberInitializer(), EmitMustTailThunk(), EmitObjCMessageExpr(), EmitOMPAggregateReduction(), EmitOMPFirstprivateClause(), EmitOMPLastprivateClauseFinal(), EmitOMPLastprivateClauseInit(), EmitOMPLinearClause(), EmitOMPPrivateClause(), EmitOMPReductionClauseInit(), emitProxyTaskFunction(), emitReductionFunction(), emitTaskDupFunction(), emitTaskPrivateMappingFunction(), clang::CodeGen::CGCXXABI::EmitThisParam(), clang::CodeGen::emitThreadPrivateVarDefinition(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCopyHelperFunction(), GenerateDestroyHelperFunction(), generateObjCGetterBody(), generateObjCSetterBody(), GenerateOpenMPCapturedStmtFunction(), mapParam(), and tryRemoveRetainOfSelf().
|
inline |
Retrieves the default cleanup kind for an ARC cleanup.
Except under -fobjc-arc-eh, ARC cleanups are normal-only.
Definition at line 2957 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().
const BlockByrefInfo & CodeGenFunction::getBlockByrefInfo | ( | const VarDecl * | D | ) |
BuildByrefInfo - 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 2065 of file CGBlocks.cpp.
References clang::CharUnits::alignTo(), clang::ASTContext::BlockRequiresCopying(), clang::CodeGen::BlockByrefInfo::ByrefAlignment, CGM, ConvertTypeForMem(), clang::serialized_diags::create(), clang::CodeGen::BlockByrefInfo::FieldIndex, clang::CodeGen::BlockByrefInfo::FieldOffset, clang::CharUnits::fromQuantity(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::ASTContext::getDeclAlign(), getLLVMContext(), clang::NamedDecl::getNameAsString(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::CharUnits::getQuantity(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, max(), clang::CodeGen::CodeGenTypeCache::PointerSizeInBytes, clang::CodeGen::Type, and clang::CodeGen::BlockByrefInfo::Type.
Referenced by EmitAutoVarAlloca(), emitBlockByrefAddress(), and GetAddrOfBlockDecl().
|
inline |
Definition at line 1300 of file CodeGenFunction.h.
References needsEHCleanup(), clang::CodeGen::NormalAndEHCleanup, and clang::CodeGen::NormalCleanup.
Referenced by emitCXXDestructMethod(), EnterDtorCleanups(), and pushDestroy().
|
inline |
Definition at line 1196 of file CodeGenFunction.h.
References CGM, and clang::CodeGen::CodeGenModule::getContext().
Referenced by AddDirectArgument(), BuildFunctionArgList(), clang::CodeGen::CGCXXABI::buildThisParam(), CanDevirtualizeMemberFunctionCall(), CanSkipVTablePointerInitialization(), castToBase(), castValueFromUintptr(), CheckAggExprForMemSetUse(), commonEmitCXXMemberOrOperatorCall(), ConstantFoldsToSimpleInteger(), ConvertType(), CreateIRTemp(), CreateMemTemp(), createReferenceTemporary(), EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), emitAddrOfFieldStorage(), emitAddrOfImagComponent(), emitAddrOfVarFromArray(), EmitAggMemberInitializer(), EmitAggregateCopy(), emitAlignedClause(), EmitARMBuiltinExpr(), EmitArrayDelete(), emitArrayLength(), emitArraySubscriptGEP(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), EmitAtomicStore(), EmitAutoVarAlloca(), EmitAutoVarInit(), EmitBaseInitializer(), EmitBinaryAtomicPost(), EmitBlockCallExpr(), EmitBlockCopyAndAutorelease(), EmitBlockLiteral(), EmitBuiltinNewDeleteCall(), emitByrefStructureInit(), EmitCall(), EmitCallAndReturnForThunk(), EmitCallArg(), EmitCallArgs(), EmitCapturedFieldLValue(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCommonNeonBuiltinExpr(), EmitCompoundStmt(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), EmitCXXConstructorCall(), EmitCXXDeleteExpr(), EmitCXXGlobalVarDeclInit(), EmitCXXMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXTypeidExpr(), EmitDeclInvariant(), EmitDeleteCall(), emitDestroy(), EmitEndEHSpec(), clang::CodeGen::emitForNext(), EmitFunctionDeclLValue(), EmitFunctionProlog(), EmitGlobalVarDeclLValue(), EmitInheritedCXXConstructorCall(), EmitInitializerForField(), EmitLambdaBlockInvokeBody(), EmitLambdaDelegatingInvokeBody(), EmitMemberInitializer(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitObjCBoxedExpr(), EmitObjCForCollectionStmt(), EmitObjCMRRAutoreleasePoolPop(), EmitObjCMRRAutoreleasePoolPush(), emitOffloadingArrays(), EmitOMPAggregateAssign(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), EmitOMPCopyinClause(), EmitOMPDistributeLoop(), EmitOMPReductionClauseInit(), EmitOMPTaskBasedDirective(), EmitOMPTaskDirective(), EmitOMPTaskLoopBasedDirective(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), emitPrivatesInit(), emitReductionFunction(), EmitReturnStmt(), EmitSEHExceptionCodeSave(), EmitStartEHSpec(), EmitStaticVarDecl(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtor(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitTargetBuiltinExpr(), clang::CodeGen::emitThreadIDAddress(), EmitTypeCheck(), clang::CodeGen::emitUpdateLocation(), EmitVAListRef(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVariablyModifiedType(), EmitVTablePtrCheck(), EmitX86_64VAArgFromMemory(), EmitX86BuiltinExpr(), EnterSEHTryStmt(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), EvaluateExprAsBool(), forConstantArrayExpansion(), GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCopyHelperFunction(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateDestroyHelperFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCGetterBody(), generateObjCSetterBody(), GenerateOpenMPCapturedStmtFunction(), GenerateOpenMPCapturedVars(), GenerateSEHFilterFunction(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getBlockByrefInfo(), getItaniumDynamicCastFn(), getNaturalTypeAlignment(), GetNumNonZeroBytesInInit(), getRangeForType(), getTypeSize(), getVLASize(), getVTablePointers(), GetVTTParameter(), InitCapturedStruct(), isCheapEnoughToEvaluateUnconditionally(), loadToBegin(), LookupNeonLLVMIntrinsic(), LValueIsSuitableForInlineAtomic(), MakeAddrLValue(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), MakeNaturalAlignAddrLValue(), performTypeAdjustment(), ShouldEmitVTableTypeCheckedLoad(), StartFunction(), startOutlinedSEHHelper(), StartThunk(), and TypeOfSelfObject().
|
inline |
Get the profiler's current count.
This is generally the count for the most recently incremented counter.
Definition at line 999 of file CodeGenFunction.h.
Referenced by EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), EmitDoStmt(), and EmitObjCForCollectionStmt().
|
inline |
Definition at line 1197 of file CodeGenFunction.h.
Referenced by clang::CodeGen::ApplyDebugLocation::ApplyDebugLocation(), EmitAutoVarAlloca(), EmitDecl(), EmitDeclRefExprDbgValue(), EmitObjCAutoreleasePoolStmt(), EmitObjCForCollectionStmt(), EmitParmDecl(), EmitStaticVarDecl(), EmitStopPoint(), FinishFunction(), GenerateBlockFunction(), clang::CodeGen::CodeGenFunction::LexicalScope::LexicalScope(), setBlockContextParameter(), StartFunction(), and clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope().
CodeGenFunction::Destroyer * CodeGenFunction::getDestroyer | ( | QualType::DestructionKind | destructionKind | ) |
Definition at line 1429 of file CGDecl.cpp.
References destroyARCStrongPrecise, destroyARCWeak, destroyCXXObject, clang::QualType::DK_cxx_destructor, clang::QualType::DK_none, clang::QualType::DK_objc_strong_lifetime, and clang::QualType::DK_objc_weak_lifetime.
Referenced by EmitArrayDelete(), emitAutoVarTypeCleanup(), emitCXXDestructMethod(), EmitDeclDestroy(), EmitNewArrayInitializer(), clang::CodeGen::emitThreadPrivateVarDefinition(), enterBlockScope(), EnterDtorCleanups(), pushDestroy(), and pushEHDestroy().
llvm::BasicBlock * CodeGenFunction::getEHDispatchBlock | ( | EHScopeStack::stable_iterator | scope | ) |
Definition at line 576 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, createBasicBlock(), EHStack, clang::CodeGen::EHScope::Filter, clang::CodeGen::EHScopeStack::find(), clang::CodeGen::EHPersonality::get(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), getEHResumeBlock(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::EHScope::getKind(), getMSVCDispatchBlock(), clang::CodeGen::EHCatchScope::getNumHandlers(), getTerminateHandler(), clang::CodeGen::EHCatchScope::Handler::isCatchAll(), clang::CodeGen::EHScope::PadEnd, clang::CodeGen::EHScope::setCachedEHDispatchBlock(), clang::CodeGen::EHScopeStack::stable_end(), clang::CodeGen::EHScope::Terminate, and clang::CodeGen::EHPersonality::usesFuncletPads().
Referenced by emitCatchDispatchBlock(), emitCatchPadBlock(), EmitLandingPad(), and getInvokeDestImpl().
llvm::BasicBlock * CodeGenFunction::getEHResumeBlock | ( | bool | isCleanup | ) |
Definition at line 1353 of file CGException.cpp.
References Builder, clang::CodeGen::EHPersonality::CatchallRethrowFn, CGM, createBasicBlock(), EHResumeBlock, EmitRuntimeCall(), clang::CodeGen::EHPersonality::get(), getCatchallRethrowFn(), getExceptionFromSlot(), getSelectorFromSlot(), and clang::CodeGen::Type.
Referenced by emitFilterDispatchBlock(), and getEHDispatchBlock().
Address CodeGenFunction::getEHSelectorSlot | ( | ) |
Definition at line 389 of file CGException.cpp.
References CreateTempAlloca(), EHSelectorSlot, clang::CharUnits::fromQuantity(), and clang::CodeGen::CodeGenTypeCache::Int32Ty.
Referenced by EmitLandingPad(), and getSelectorFromSlot().
|
static |
hasAggregateLLVMType - Return true if the specified AST type will map into an aggregate LLVM type or is void.
Definition at line 170 of file CodeGenFunction.cpp.
References clang::Auto, clang::QualType::getCanonicalType(), clang::Type::getTypeClass(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::ast_matchers::type.
Referenced by convertToComplexValue(), convertToType(), EmitAggMemberInitializer(), EmitAnyExpr(), EmitAnyExprToMem(), EmitCall(), EmitDeclInit(), EmitExprAsInit(), EmitFunctionEpilog(), EmitInitializerForField(), emitInitWithReductionInitializer(), EmitMaterializeTemporaryExpr(), emitOMPSimpleStore(), EmitReturnStmt(), generateObjCGetterBody(), hasAggregateEvaluationKind(), hasScalarEvaluationKind(), InitCatchParam(), and StoreAnyExprIntoOneUnit().
llvm::Value * CodeGenFunction::getExceptionFromSlot | ( | ) |
Returns the contents of the function's exception object and selector slots.
Definition at line 395 of file CGException.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), and getExceptionSlot().
Referenced by emitFilterDispatchBlock(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), getEHResumeBlock(), getTerminateHandler(), and InitCatchParam().
Address CodeGenFunction::getExceptionSlot | ( | ) |
Returns a pointer to the function's exception object and selector slot, which is assigned in every landing pad.
Definition at line 383 of file CGException.cpp.
References CreateTempAlloca(), ExceptionSlot, clang::CodeGen::CodeGenTypeCache::getPointerAlign(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitLandingPad(), and getExceptionFromSlot().
llvm::BasicBlock * CodeGenFunction::GetIndirectGotoBlock | ( | ) |
Definition at line 1526 of file CodeGenFunction.cpp.
References createBasicBlock(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitIndirectGotoStmt(), and GetAddrOfLabel().
|
inline |
Definition at line 1231 of file CodeGenFunction.h.
References EHStack, getInvokeDestImpl(), and clang::CodeGen::EHScopeStack::requiresLandingPad().
Referenced by EmitCall(), EmitCallOrInvoke(), and EmitNoreturnRuntimeCallOrInvoke().
llvm::BasicBlock * CodeGenFunction::getInvokeDestImpl | ( | ) |
Definition at line 685 of file CGException.cpp.
References clang::CodeGen::EHScopeStack::begin(), CGM, CurFn, currentFunctionUsesSEHTry(), EHStack, EmitLandingPad(), clang::CodeGen::EHScopeStack::empty(), clang::CodeGen::EHPersonality::get(), clang::CodeGen::EHScope::getCachedLandingPad(), getEHDispatchBlock(), clang::CodeGen::EHScopeStack::getInnermostEHScope(), clang::CodeGen::CodeGenModule::getLangOpts(), getOpaquePersonalityFn(), isNonEHScope(), clang::CodeGen::EHScopeStack::requiresLandingPad(), and clang::CodeGen::EHPersonality::usesFuncletPads().
Referenced by getInvokeDest().
CodeGenFunction::JumpDest CodeGenFunction::getJumpDestForLabel | ( | const LabelDecl * | S | ) |
getBasicBlockForLabel - Return the LLVM basicblock that the specified label maps to.
Definition at line 452 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().
|
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 700 of file CodeGenFunction.h.
References EHStack, clang::CodeGen::EHScopeStack::getInnermostNormalCleanup(), and NextCleanupDestIndex.
Referenced by EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitLabel(), EmitObjCForCollectionStmt(), EmitOMPDistributeLoop(), EmitOMPInnerLoop(), EmitSEHTryStmt(), EmitSwitchStmt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitWhileStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), getJumpDestInCurrentScope(), and StartFunction().
|
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 709 of file CodeGenFunction.h.
References createBasicBlock(), getJumpDestInCurrentScope(), and clang::Name.
|
inline |
Definition at line 1209 of file CodeGenFunction.h.
References CGM, and clang::CodeGen::CodeGenModule::getLangOpts().
Referenced by AddInitializerToStaticVarDecl(), CanDevirtualizeMemberFunctionCall(), CheckAggExprForMemSetUse(), EmitAggregateCopy(), EmitAsmStmt(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitCallArg(), EmitCUDADevicePrintfCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXConstructExpr(), EmitCXXGlobalVarDeclInit(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitDestructorBody(), EmitFunctionEpilog(), EmitGlobalVarDeclLValue(), EmitLifetimeStart(), EmitNullInitialization(), emitNumTeamsClauseForTargetDirective(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCMessageExpr(), EmitObjCThrowOperand(), EmitOMPCopyinClause(), emitPointerArithmetic(), EmitReturnStmt(), EmitStaticVarDecl(), emitThreadLimitClauseForTargetDirective(), EmitVTablePtrCheckForCast(), GenerateCode(), GenerateCopyHelperFunction(), GenerateCXXGlobalInitFunc(), GenerateDestroyHelperFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), generateObjCGetterBody(), getNaturalTypeAlignment(), getRangeForType(), getTerminateHandler(), getTerminateLandingPad(), needsEHCleanup(), pushTemporaryCleanup(), StartFunction(), tryEmitARCRetainLoadOfScalar(), and ~CodeGenFunction().
|
inline |
Definition at line 1239 of file CodeGenFunction.h.
References CGM, and clang::CodeGen::CodeGenModule::getLLVMContext().
Referenced by AddDirectArgument(), createBasicBlock(), EmitAArch64BuiltinExpr(), EmitARMBuiltinExpr(), EmitAsmStmt(), emitAutoreleasedReturnValueMarker(), EmitBinaryAtomicPost(), EmitBranchOnBoolExpr(), EmitCall(), EmitCastToVoidPtr(), emitCatchPadBlock(), emitCheckHandlerCall(), EmitCommonNeonBuiltinExpr(), EmitFunctionProlog(), EmitMustTailThunk(), emitRangedBuiltin(), EmitSwitchStmt(), EmitSystemZBuiltinExpr(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVTablePtrCheck(), EmitX86BuiltinExpr(), EmitX86MaskedCompare(), generateObjCGetterBody(), generateObjCSetterBody(), getAsmSrcLocInfo(), getBlockByrefInfo(), getItaniumDynamicCastFn(), getUnreachableBlock(), MakeAtomicCmpXchgValue(), and MakeBinaryAtomicValue().
llvm::BasicBlock * CodeGenFunction::getMSVCDispatchBlock | ( | EHScopeStack::stable_iterator | scope | ) |
Definition at line 626 of file CGException.cpp.
References Builder, clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, createBasicBlock(), EHStack, clang::CodeGen::EHScope::Filter, clang::CodeGen::EHScopeStack::find(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::EHScope::getKind(), getTerminateHandler(), clang::CodeGen::EHScope::PadEnd, clang::CodeGen::EHScope::setCachedEHDispatchBlock(), clang::CodeGen::EHScopeStack::stable_end(), and clang::CodeGen::EHScope::Terminate.
Referenced by getEHDispatchBlock().
CharUnits CodeGenFunction::getNaturalPointeeTypeAlignment | ( | QualType | T, |
AlignmentSource * | Source = nullptr |
||
) |
Definition at line 99 of file CodeGenFunction.cpp.
References getNaturalTypeAlignment(), and clang::Type::getPointeeType().
Referenced by EmitNVPTXBuiltinExpr().
CharUnits CodeGenFunction::getNaturalTypeAlignment | ( | QualType | T, |
AlignmentSource * | Source = nullptr , |
||
bool | forPointeeType = false |
||
) |
Definition at line 105 of file CodeGenFunction.cpp.
References clang::CodeGen::AttributedType, CGM, clang::CharUnits::fromQuantity(), clang::Type::getAs(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), getContext(), getLangOpts(), clang::CharUnits::getQuantity(), clang::ASTContext::getTypeAlignInChars(), clang::ASTContext::isAlignmentRequired(), clang::Type::isIncompleteType(), clang::CharUnits::One(), clang::ASTContext::toCharUnitsFromBits(), and clang::CodeGen::Type.
Referenced by EmitCXXConstructorCall(), EmitCXXMemberDataPointerAddress(), emitOMPArraySectionBase(), EmitOMPLastprivateClauseFinal(), emitTaskDupFunction(), clang::CodeGen::emitTaskInit(), getNaturalPointeeTypeAlignment(), MakeNaturalAlignAddrLValue(), MakeNaturalAlignPointeeAddrLValue(), and StartFunction().
Address CodeGenFunction::getNormalCleanupDestSlot | ( | ) |
Definition at line 1215 of file CGCleanup.cpp.
References Builder, and clang::CharUnits::fromQuantity().
Referenced by ResolveAllBranchFixups(), and TransitionToCleanupSwitch().
CodeGenFunction::JumpDest CodeGenFunction::getOMPCancelDestination | ( | OpenMPDirectiveKind | Kind | ) |
Definition at line 3376 of file CGStmtOpenMP.cpp.
References ReturnBlock.
Referenced by clang::CodeGen::emitBarrierCall(), and clang::CodeGen::emitCancellationPointCall().
|
inline |
getOpaqueLValueMapping - Given an opaque value expression (which must be mapped to an l-value), return its mapping.
Definition at line 1827 of file CodeGenFunction.h.
References clang::CodeGen::CodeGenFunction::OpaqueValueMapping::shouldBindAsLValue().
|
inline |
getOpaqueRValueMapping - Given an opaque value expression (which must be mapped to an r-value), return its mapping.
Definition at line 1838 of file CodeGenFunction.h.
References clang::CodeGen::CodeGenFunction::OpaqueValueMapping::shouldBindAsLValue().
|
inline |
Get the profiler's count for the given statement.
Definition at line 985 of file CodeGenFunction.h.
References clang::LangAS::Count.
Referenced by EmitBranchOnBoolExpr(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitIfStmt(), EmitObjCForCollectionStmt(), EmitOMPDistributeLoop(), EmitOMPInnerLoop(), EmitOMPSimdDirective(), EmitSwitchStmt(), and EmitWhileStmt().
llvm::Value * CodeGenFunction::getSelectorFromSlot | ( | ) |
Definition at line 399 of file CGException.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), and getEHSelectorSlot().
Referenced by emitCatchDispatchBlock(), emitFilterDispatchBlock(), and getEHResumeBlock().
|
inline |
Definition at line 1238 of file CodeGenFunction.h.
References Target.
Referenced by canEmitDelegateCallArgs(), deactivateArgCleanupsBeforeCall(), EmitARMBuiltinExpr(), EmitAsmStmt(), EmitAtomicExpr(), EmitAutoVarAlloca(), EmitCall(), EmitCallArgs(), EmitCommonNeonBuiltinExpr(), EmitDestructorBody(), EmitEndEHSpec(), EmitFunctionProlog(), emitGlobalDtorWithCXAAtExit(), EmitMCountInstrumentation(), EmitParmDecl(), EmitSignBit(), EmitStartEHSpec(), EmitTargetBuiltinExpr(), getAsmSrcLocInfo(), and GetNumNonZeroBytesInInit().
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 1320 of file CGException.cpp.
References Builder, CGM, clang::frontend::CPlusPlus, createBasicBlock(), CurrentFuncletPad, clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), clang::CodeGen::EHPersonality::get(), clang::CodeGen::CodeGenModule::getCXXABI(), getExceptionFromSlot(), getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), and clang::CodeGen::EHPersonality::usesFuncletPads().
Referenced by getEHDispatchBlock(), and getMSVCDispatchBlock().
llvm::BasicBlock * CodeGenFunction::getTerminateLandingPad | ( | ) |
getTerminateLandingPad - Return a landing pad that just calls terminate.
Definition at line 1286 of file CGException.cpp.
References Builder, CGM, clang::frontend::CPlusPlus, createBasicBlock(), CurFn, clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), clang::CodeGen::EHPersonality::get(), getCatchAllValue(), clang::CodeGen::CodeGenModule::getCXXABI(), getLangOpts(), getOpaquePersonalityFn(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitLandingPad().
|
inline |
Definition at line 1195 of file CodeGenFunction.h.
References CGM, and clang::CodeGen::CodeGenModule::getTypes().
Referenced by BuildFunctionArgList(), EmitCall(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCXXConstructorCall(), EmitDeclDestroy(), EmitGlobalVarDeclLValue(), EmitLambdaDelegatingInvokeBody(), emitStructGetterCall(), emitStructSetterCall(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateObjCGetterBody(), generateObjCSetterBody(), GetNumNonZeroBytesInInit(), and isSimpleZero().
llvm::Value * CodeGenFunction::getTypeSize | ( | QualType | Ty | ) |
Returns calculated size of the specified type.
Definition at line 105 of file CGStmtOpenMP.cpp.
References Builder, CGM, getContext(), clang::CodeGen::CodeGenModule::getSize(), getVLASize(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by EmitAArch64BuiltinExpr(), EmitARMBuiltinExpr(), EmitAsmStmt(), EmitOMPReductionClauseInit(), clang::CodeGen::emitTaskCall(), clang::CodeGen::emitTaskInit(), and LValueIsSuitableForInlineAtomic().
GetUndefRValue - Get an appropriate 'undef' rvalue for the given type.
Definition at line 903 of file CGExpr.cpp.
References clang::Type::castAs(), clang::ComplexType::getElementType(), clang::Type::isVoidType(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitCall().
|
inline |
Definition at line 1223 of file CodeGenFunction.h.
References createBasicBlock(), and getLLVMContext().
Referenced by destroyOptimisticNormalEntry(), EmitNoreturnRuntimeCallOrInvoke(), and clang::CodeGen::CodeGenFunction::FinallyInfo::enter().
std::pair< llvm::Value *, QualType > CodeGenFunction::getVLASize | ( | const VariableArrayType * | vla | ) |
getVLASize - Returns an LLVM value that corresponds to the size, in non-variably-sized elements, of a variable length array type, plus that largest non-variably-sized element type.
Assumes that the type has already been emitted with EmitVariablyModifiedType.
Definition at line 1641 of file CodeGenFunction.cpp.
References Builder, getContext(), clang::ArrayType::getElementType(), clang::VariableArrayType::getSizeExpr(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by emitArrayLength(), EmitAutoVarAlloca(), EmitNullInitialization(), emitPointerArithmetic(), getArrayIndexingBound(), getTypeSize(), and getVLASize().
std::pair< llvm::Value *, QualType > CodeGenFunction::getVLASize | ( | QualType | vla | ) |
Definition at line 1634 of file CodeGenFunction.cpp.
References clang::ASTContext::getAsVariableArrayType(), getContext(), and getVLASize().
CodeGenFunction::VPtrsVector CodeGenFunction::getVTablePointers | ( | const CXXRecordDecl * | VTableClass | ) |
Definition at line 2481 of file CGClass.cpp.
References clang::CharUnits::Zero().
Referenced by EmitVTableAssumptionLoads(), getVTablePointers(), and InitializeVTablePointers().
void CodeGenFunction::getVTablePointers | ( | BaseSubobject | Base, |
const CXXRecordDecl * | NearestVBase, | ||
CharUnits | OffsetFromNearestVBase, | ||
bool | BaseIsNonVirtualPrimaryBase, | ||
const CXXRecordDecl * | VTableClass, | ||
VisitedVirtualBasesSetTy & | VBases, | ||
VPtrsVector & | vptrs | ||
) |
Definition at line 2492 of file CGClass.cpp.
References clang::CodeGen::Base, clang::CXXRecordDecl::bases(), clang::ASTContext::getASTRecordLayout(), clang::BaseSubobject::getBase(), clang::ASTRecordLayout::getBaseClassOffset(), clang::BaseSubobject::getBaseOffset(), getContext(), clang::ASTRecordLayout::getPrimaryBase(), clang::ASTRecordLayout::getVBaseClassOffset(), getVTablePointers(), I, clang::CXXRecordDecl::isDynamicClass(), and clang::CharUnits::Zero().
llvm::Value * CodeGenFunction::GetVTablePtr | ( | Address | This, |
llvm::Type * | VTableTy, | ||
const CXXRecordDecl * | VTableClass | ||
) |
GetVTablePtr - Return the Value of the vtable pointer member pointed to by This.
Definition at line 2563 of file CGClass.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenModule::DecorateInstructionWithInvariantGroup(), clang::CodeGen::CodeGenModule::DecorateInstructionWithTBAA(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGen::CodeGenModule::getTBAAInfoForVTablePtr().
Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), EmitVTableAssumptionLoad(), and EmitVTablePtrCheckForCast().
llvm::Value * CodeGenFunction::GetVTTParameter | ( | GlobalDecl | GD, |
bool | ForVirtualBase, | ||
bool | Delegating | ||
) |
GetVTTParameter - Return the VTT parameter that should be passed to a base constructor/destructor with virtual bases.
FIXME: VTTs are Itanium ABI-specific, so the definition should move to ItaniumCXXABI.cpp together with all the references to VTT.
Definition at line 425 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().
Definition at line 1583 of file CodeGenFunction.h.
References getEvaluationKind(), and clang::CodeGen::TEK_Aggregate.
Referenced by EmitAggExpr(), EmitAggExprToLValue(), EmitAnyExprToTemp(), EmitCallArg(), EmitCompoundStmtWithoutScope(), EmitFunctionEpilog(), and clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::shouldBindAsLValue().
Definition at line 1579 of file CodeGenFunction.h.
References getEvaluationKind(), and clang::CodeGen::TEK_Scalar.
Referenced by convertToScalarValue(), EmitAsmStmt(), EmitCallAndReturnForThunk(), EmitComplexToScalarConversion(), EmitForwardingCallToLambda(), EmitFunctionProlog(), EmitParmDecl(), EmitScalarConversion(), EmitScalarExpr(), isAggregateTypeForABI(), and StartFunction().
hasVolatileMember - returns true if aggregate type has a volatile member.
Definition at line 1784 of file CodeGenFunction.h.
References clang::Type::getAs(), and clang::RecordDecl::hasVolatileMember().
Referenced by EmitAggregateAssign(), and LValueIsSuitableForInlineAtomic().
|
inline |
HaveInsertPoint - True if an insertion point is defined.
If not, this indicates that the current code being emitted is unreachable.
Definition at line 1633 of file CodeGenFunction.h.
References Builder.
Referenced by CleanupTy::Emit(), emitAlignedClause(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), clang::CodeGen::emitBarrierCall(), EmitBlockWithFallThrough(), EmitBreakStmt(), EmitCall(), clang::CodeGen::emitCancelCall(), clang::CodeGen::emitCancellationPointCall(), EmitCleanup(), EmitContinueStmt(), clang::CodeGen::emitCriticalRegion(), EmitDeclStmt(), clang::CodeGen::emitDoacrossInit(), clang::CodeGen::emitForDispatchInit(), clang::CodeGen::emitForOrderedIterationEnd(), clang::CodeGen::emitForStaticFinish(), emitForStaticInitCall(), EmitGotoStmt(), clang::CodeGen::emitInlinedDirective(), clang::CodeGen::emitMasterRegion(), clang::CodeGen::emitNumThreadsClause(), EmitOMPCopyinClause(), EmitOMPFirstprivateClause(), EmitOMPLastprivateClauseFinal(), EmitOMPLastprivateClauseInit(), EmitOMPLinearClause(), EmitOMPLinearClauseFinal(), EmitOMPLinearClauseInit(), EmitOMPPrivateClause(), EmitOMPPrivateLoopCounters(), EmitOMPReductionClauseFinal(), EmitOMPReductionClauseInit(), clang::CodeGen::emitOrderedRegion(), emitPostUpdateForReductionClause(), emitPreCond(), clang::CodeGen::emitProcBindClause(), EmitSEHLeaveStmt(), emitSimdlenSafelenClause(), EmitStmt(), clang::CodeGen::emitTargetDataCalls(), clang::CodeGen::emitTargetDataStandAloneCall(), clang::CodeGen::emitTaskCall(), clang::CodeGen::emitTaskgroupRegion(), clang::CodeGen::emitTaskLoopCall(), clang::CodeGen::emitTaskwaitCall(), clang::CodeGen::emitTaskyieldCall(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsCall(), EnsureInsertPoint(), enterBlockScope(), ExitCXXTryStmt(), ExitSEHTryStmt(), and protectFromPeepholes().
|
inline |
Increment the profiler's counter for the given statement.
Definition at line 978 of file CodeGenFunction.h.
References Builder, CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), and clang::CodeGenOptions::hasProfileClangInstr().
Referenced by EmitBlockWithFallThrough(), clang::CodeGen::CodeGenFunction::CGCapturedStmtInfo::EmitBody(), EmitBranchOnBoolExpr(), EmitConstructorBody(), EmitCXXForRangeStmt(), EmitDestructorBody(), EmitForStmt(), EmitFunctionBody(), EmitIfStmt(), emitImplicitAssignmentOperatorBody(), EmitLabel(), EmitObjCForCollectionStmt(), EmitOMPDistributeLoop(), EmitOMPInnerLoop(), EmitOMPSimdDirective(), EmitSwitchStmt(), EmitWhileStmt(), ExitCXXTryStmt(), GenerateBlockFunction(), and GenerateObjCMethod().
LValue CodeGenFunction::InitCapturedStruct | ( | const CapturedStmt & | S | ) |
Definition at line 2146 of file CGStmt.cpp.
References clang::CapturedStmt::capture_init_begin(), clang::CapturedStmt::capture_init_end(), CreateMemTemp(), E, EmitInitializerForField(), EmitLValueForFieldInitialization(), EmitStoreThroughLValue(), clang::RecordDecl::field_begin(), clang::CodeGen::RValue::get(), clang::CapturedStmt::getCapturedRecordDecl(), getContext(), clang::ASTContext::getRecordType(), I, MakeAddrLValue(), and clang::None.
Referenced by EmitCapturedStmt(), and GenerateCapturedStmtArgument().
void CodeGenFunction::initFullExprCleanup | ( | ) |
Set up the last cleaup that was pushed as a conditional full-expression cleanup.
Definition at line 285 of file CGCleanup.cpp.
References clang::CodeGen::EHScopeStack::begin(), Builder, clang::format::cleanup(), clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAlloca(), clang::CodeGen::EHCleanupScope(), EHStack, clang::CharUnits::One(), and setBeforeOutermostConditional().
Referenced by EnterNewDeleteCleanup(), pushCleanupAfterFullExpr(), and pushFullExprCleanup().
void CodeGenFunction::InitializeVTablePointer | ( | const VPtr & | vptr | ) |
Initialize the vtable pointer of the given subobject.
Definition at line 2431 of file CGClass.cpp.
References ApplyNonVirtualAndVirtualOffset(), clang::CodeGen::CodeGenFunction::VPtr::Base, Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenModule::DecorateInstructionWithInvariantGroup(), clang::CodeGen::CodeGenModule::DecorateInstructionWithTBAA(), clang::BaseSubobject::getBaseOffset(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenModule::getTBAAInfoForVTablePtr(), clang::CodeGen::CGCXXABI::GetVirtualBaseClassOffset(), clang::CodeGen::CGCXXABI::getVTableAddressPointInStructor(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CGCXXABI::isVirtualOffsetNeededForVTableField(), clang::CharUnits::isZero(), LoadCXXThisAddress(), clang::CodeGen::CodeGenFunction::VPtr::NearestVBase, clang::CodeGen::CodeGenFunction::VPtr::OffsetFromNearestVBase, clang::CodeGen::Type, clang::CodeGen::CodeGenFunction::VPtr::VTableClass, and clang::CharUnits::Zero().
Referenced by InitializeVTablePointers().
void CodeGenFunction::InitializeVTablePointers | ( | const CXXRecordDecl * | ClassDecl | ) |
Definition at line 2549 of file CGClass.cpp.
References CGM, clang::CodeGen::CGCXXABI::doStructorsInitializeVPtrs(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CXXRecordDecl::getNumVBases(), getVTablePointers(), clang::CodeGen::CGCXXABI::initializeHiddenVirtualInheritanceMembers(), InitializeVTablePointer(), and clang::CXXRecordDecl::isDynamicClass().
Referenced by EmitBaseInitializer(), EmitCtorPrologue(), and EmitDestructorBody().
void CodeGenFunction::InitTempAlloca | ( | Address | Alloca, |
llvm::Value * | Value | ||
) |
InitTempAlloca - Provide an initial value for the given alloca which will be observable at all locations in the function.
The address should be something that was returned from one of the CreateTempAlloca or CreateMemTemp routines, and the initializer must be valid in the entry block (i.e. it must either be a constant or an argument value).
Definition at line 85 of file CGExpr.cpp.
References AllocaInsertPt, clang::CodeGen::Address::getAlignment(), clang::CodeGen::Address::getPointer(), and clang::CharUnits::getQuantity().
Referenced by clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsCall().
void CodeGenFunction::InsertHelper | ( | llvm::Instruction * | I, |
const llvm::Twine & | Name, | ||
llvm::BasicBlock * | BB, | ||
llvm::BasicBlock::iterator | InsertPt | ||
) | const |
CGBuilder insert helper.
This function is called after an instruction is created using Builder.
Definition at line 1908 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::SanitizerMetadata::disableSanitizerForInstruction(), clang::CodeGen::CodeGenModule::getSanitizerMetadata(), clang::CodeGen::LoopInfoStack::InsertHelper(), IsSanitizerScope, and LoopStack.
|
inline |
Returns true while emitting a cleanuppad.
Definition at line 398 of file CodeGenFunction.h.
References CurrentFuncletPad.
Referenced by EmitCall().
|
inline |
isInConditionalBranch - Return true if we're currently emitting one branch or the other of a conditional expression.
Definition at line 761 of file CodeGenFunction.h.
Referenced by EnterNewDeleteCleanup(), pushCleanupAfterFullExpr(), pushFullExprCleanup(), pushLifetimeExtendedDestroy(), setBeforeOutermostConditional(), and SetupCleanupBlockActivation().
|
inlinestatic |
Definition at line 3294 of file CodeGenFunction.h.
Referenced by EmitCallArgs().
|
inlinestatic |
Definition at line 3308 of file CodeGenFunction.h.
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 972 of file CGCleanup.cpp.
References clang::CodeGen::EHScopeStack::stable_iterator::encloses(), and clang::CodeGen::CodeGenFunction::JumpDest::getScopeDepth().
Referenced by EmitCaseStmt().
|
inline |
Returns true inside SEH __try blocks.
Definition at line 395 of file CodeGenFunction.h.
References SEHTryEpilogueStack.
Referenced by EmitCall(), and EmitSEHLeaveStmt().
Determine whether the given initializer is trivial in the sense that it requires no code to be generated.
Definition at line 1164 of file CGDecl.cpp.
Referenced by AllTrivialInitializers(), checkInitIsRequired(), EmitAutoVarInit(), EmitOMPFirstprivateClause(), and emitPrivatesInit().
Address CodeGenFunction::LoadBlockStruct | ( | ) |
Definition at line 1141 of file CGBlocks.cpp.
References clang::CodeGen::CGBlockInfo::BlockAlign, BlockInfo, and BlockPointer.
Referenced by EmitBlockLiteral(), GenerateBlockFunction(), and GetAddrOfBlockDecl().
|
inline |
LoadCXXThis - Load the value of 'this'.
This function is only valid while generating code for an C++ member function.
Definition at line 1898 of file CodeGenFunction.h.
Referenced by EmitAsanPrologueOrEpilogue(), EmitBlockLiteral(), EmitCallAndReturnForThunk(), EmitCtorPrologue(), EmitDestructorBody(), EmitMemberInitializer(), and LoadCXXThisAddress().
Address CodeGenFunction::LoadCXXThisAddress | ( | ) |
Definition at line 109 of file CGClass.cpp.
References CGM, CurFuncDecl, clang::CodeGen::CodeGenModule::getClassPointerAlignment(), clang::CharUnits::isZero(), and LoadCXXThis().
Referenced by EmitBaseInitializer(), EmitCallAndReturnForThunk(), EmitCtorPrologue(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDestructorBody(), and InitializeVTablePointer().
|
inline |
LoadCXXVTT - Load the VTT parameter to base constructors/destructors have virtual bases.
Definition at line 1908 of file CodeGenFunction.h.
Referenced by GetVTTParameter().
llvm::Value * CodeGenFunction::LoadObjCSelf | ( | ) |
LoadObjCSelf - Load the value of self.
This function is only valid while generating code for an Objective-C method.
Definition at line 1437 of file CGObjC.cpp.
References CurCodeDecl, CurFuncDecl, EmitDeclRefLValue(), EmitLoadOfScalar(), clang::ValueDecl::getType(), and clang::VK_LValue.
Referenced by emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), emitCXXDestructMethod(), EmitObjCMessageExpr(), emitStructGetterCall(), emitStructSetterCall(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), and generateObjCSetterBody().
Function * CodeGenFunction::LookupNeonLLVMIntrinsic | ( | unsigned | IntrinsicID, |
unsigned | Modifier, | ||
llvm::Type * | ArgTy, | ||
const CallExpr * | E | ||
) |
Definition at line 3233 of file CGBuiltin.cpp.
References Add1ArgType, Add2ArgTypes, AddRetType, CGM, ConvertType(), clang::CodeGen::CodeGenTypeCache::FloatTy, clang::CallExpr::getCallReturnType(), getContext(), clang::CodeGen::CodeGenModule::getIntrinsic(), InventFloatType, clang::CodeGen::Type, Use128BitVectors, Use64BitVectors, VectorizeArgTypes, and VectorizeRetType.
Referenced by EmitCommonNeonBuiltinExpr(), and EmitCommonNeonSISDBuiltinExpr().
An LValue is a candidate for having its loads and stores be made atomic if we are operating under /volatile:ms and the LValue itself is volatile and performing such an operation can be performed without a libcall.
Definition at line 1271 of file CGAtomic.cpp.
References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::LValue::getType(), clang::ASTContext::getTypeSize(), getTypeSize(), hasVolatileMember(), and clang::CodeGen::LValue::isVolatile().
|
inline |
Definition at line 1654 of file CodeGenFunction.h.
References CGM, getContext(), clang::CodeGen::CodeGenModule::getTBAAInfo(), and clang::CodeGen::LValue::MakeAddr().
Referenced by castValueFromUintptr(), createSectionLVal(), EmitAggExprToLValue(), EmitAnyExprToMem(), EmitAsmStmt(), emitAtomicCmpXchg(), EmitAtomicExpr(), EmitAtomicUpdateValue(), EmitAutoVarInit(), EmitBlockLiteral(), EmitCall(), EmitDeclInit(), clang::CodeGen::emitDoacrossInit(), EmitFunctionDeclLValue(), EmitFunctionEpilog(), EmitFunctionProlog(), EmitGlobalVarDeclLValue(), EmitInitializerForField(), EmitLambdaExpr(), EmitMaterializeTemporaryExpr(), EmitObjCCollectionLiteral(), EmitObjCIsaExpr(), EmitOMPLinearClauseInit(), EmitParmDecl(), emitPrivatesInit(), emitProxyTaskFunction(), emitPseudoObjectExpr(), EmitReturnStmt(), clang::CodeGen::emitTaskCall(), emitTaskPrivateMappingFunction(), clang::CodeGen::emitThreadIDAddress(), EmitThreadPrivateVarDeclLValue(), emitWritebackArg(), generateObjCGetterBody(), GenerateOpenMPCapturedStmtFunction(), GenerateOpenMPCapturedVars(), InitCapturedStruct(), InitCatchParam(), loadToBegin(), MakeNaturalAlignPointeeAddrLValue(), and StoreAnyExprIntoOneUnit().
|
inline |
Definition at line 1660 of file CodeGenFunction.h.
References CGM, getContext(), clang::CodeGen::CodeGenModule::getTBAAInfo(), and clang::CodeGen::LValue::MakeAddr().
LValue CodeGenFunction::MakeNaturalAlignAddrLValue | ( | llvm::Value * | V, |
QualType | T | ||
) |
Definition at line 145 of file CodeGenFunction.cpp.
References CGM, getContext(), getNaturalTypeAlignment(), clang::CodeGen::CodeGenModule::getTBAAInfo(), and clang::CodeGen::LValue::MakeAddr().
Referenced by castValueFromUintptr(), EmitCapturedFieldLValue(), EmitFunctionEpilog(), emitInitWithReductionInitializer(), EmitMemberInitializer(), EmitNontemporalLoad(), EmitNontemporalStore(), clang::CodeGen::emitTaskInit(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), GenerateCapturedStmtFunction(), GenerateOpenMPCapturedVars(), clang::CodeGen::CodeGenFunction::ConstantEmission::getReferenceLValue(), and InitCatchParam().
LValue CodeGenFunction::MakeNaturalAlignPointeeAddrLValue | ( | llvm::Value * | V, |
QualType | T | ||
) |
Given a value of type T* that may not be to a complete object, construct an l-value with the natural pointee alignment of T.
Definition at line 155 of file CodeGenFunction.cpp.
References getNaturalTypeAlignment(), and MakeAddrLValue().
|
inline |
Determines whether an EH cleanup is required to destroy a type with the given destruction kind.
Definition at line 1286 of file CodeGenFunction.h.
References CGM, clang::QualType::DK_cxx_destructor, clang::QualType::DK_none, clang::QualType::DK_objc_strong_lifetime, clang::QualType::DK_objc_weak_lifetime, clang::CodeGen::CodeGenModule::getCodeGenOpts(), and getLangOpts().
Referenced by EmitArrayDelete(), EmitDeclDestroy(), EmitInitializerForField(), EmitMemberInitializer(), EmitNewArrayInitializer(), clang::CodeGen::emitThreadPrivateVarDefinition(), enterBlockScope(), getCleanupKind(), and pushEHDestroy().
void CodeGenFunction::popCatchScope | ( | ) |
popCatchScope - Pops the catch scope at the top of the EHScope stack, emitting any required code (other than the catch handlers themselves).
Definition at line 996 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().
PopCleanupBlock - Will pop the cleanup entry on the stack and process all branch fixups.
Pops a cleanup block.
If the block includes a normal cleanup, the current insertion point is threaded through the cleanup, as are any branch fixups on the cleanup.
Definition at line 603 of file CGCleanup.cpp.
References Builder, clang::Create(), createLoadInstBefore(), CreateNormalEntry(), createStoreInstBefore(), clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, destroyOptimisticNormalEntry(), E, clang::CodeGen::EHCleanupScope(), EmitCleanup(), clang::CodeGen::FixupDepth, ForwardPrebranchedFallthrough(), clang::CodeGen::EHPersonality::get(), I, clang::CodeGen::BranchFixup::InitialBranch, clang::CodeGen::Address::invalid(), clang::CodeGen::Address::isValid(), clang::CodeGen::BranchFixup::OptimisticBranchBlock, ResolveAllBranchFixups(), S, clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsEHCleanupKind(), clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsForEHCleanup(), clang::CodeGen::EHScopeStack::Cleanup::Flags::setIsNormalCleanupKind(), SimplifyCleanupEntry(), and clang::CodeGen::EHPersonality::usesFuncletPads().
Referenced by EmitArrayDelete(), emitArrayDestroy(), EmitDestructorBody(), EmitObjectDelete(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitSEHTryStmt(), and pushCleanupAfterFullExpr().
void CodeGenFunction::PopCleanupBlocks | ( | EHScopeStack::stable_iterator | OldCleanupStackSize | ) |
Takes the old cleanup stack size and emits the cleanup blocks that have been added.
Pops cleanup blocks until the given savepoint is reached.
Definition at line 421 of file CGCleanup.cpp.
References clang::CodeGen::EHCleanupScope(), clang::CodeGen::EHScopeStack::stable_iterator::isValid(), and clang::CodeGen::EHScopeStack::stable_iterator::strictlyEncloses().
Referenced by FinishFunction(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::ForceCleanup(), and clang::CodeGen::CodeGenFunction::RunCleanupsScope::~RunCleanupsScope().
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 440 of file CGCleanup.cpp.
References E, clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupHeader::getKind(), clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupHeader::getSize(), and I.
CodeGenFunction::PeepholeProtection CodeGenFunction::protectFromPeepholes | ( | RValue | rvalue | ) |
protectFromPeepholes - Protect a value that we're intending to store to the side, but which will probably be used later, from aggressive peepholing optimizations that might delete it.
Pass the result to unprotectFromPeepholes to declare that protection is no longer required.
There's no particular reason why this shouldn't apply to l-values, it's just that no existing peepholes work on pointers.
Definition at line 1826 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 1537 of file CGExprCXX.cpp.
References EHStack, and clang::CodeGen::NormalAndEHCleanup.
|
inline |
Queue a cleanup to be pushed after finishing the current full-expression.
Definition at line 424 of file CodeGenFunction.h.
References ActivateCleanupBlock(), Buffer, DeactivateCleanupBlock(), initFullExprCleanup(), isInConditionalBranch(), LifetimeExtendedCleanupStack, PopCleanupBlock(), PushDestructorCleanup(), and clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupHeader::Size.
void CodeGenFunction::pushDestroy | ( | QualType::DestructionKind | dtorKind, |
Address | addr, | ||
QualType | type | ||
) |
pushDestroy - Push the standard destructor for the given type as at least a normal cleanup.
Definition at line 1454 of file CGDecl.cpp.
References clang::CodeGen::EHCleanup, getCleanupKind(), and getDestroyer().
Referenced by EmitAutoVarWithLifetime(), emitDestructorsFunction(), EmitParmDecl(), enterBlockScope(), pushEHDestroy(), and pushTemporaryCleanup().
void CodeGenFunction::pushDestroy | ( | CleanupKind | kind, |
Address | addr, | ||
QualType | type, | ||
Destroyer * | destroyer, | ||
bool | useEHCleanupForArray | ||
) |
Definition at line 1463 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 2421 of file CGClass.cpp.
References clang::Type::getAsCXXRecordDecl(), clang::CXXRecordDecl::getDestructor(), and clang::CXXRecordDecl::hasTrivialDestructor().
Referenced by GenerateDestroyHelperFunction(), and pushCleanupAfterFullExpr().
void CodeGenFunction::PushDestructorCleanup | ( | const CXXDestructorDecl * | Dtor, |
Address | Addr | ||
) |
PushDestructorCleanup - Push a cleanup to call the complete-object variant of the given destructor on the object at the given address.
Definition at line 2416 of file CGClass.cpp.
References EHStack, and clang::CodeGen::NormalAndEHCleanup.
void CodeGenFunction::pushEHDestroy | ( | QualType::DestructionKind | dtorKind, |
Address | addr, | ||
QualType | type | ||
) |
pushEHDestroy - Push the standard destructor for the given type as an EH-only cleanup.
Definition at line 1444 of file CGDecl.cpp.
References clang::CodeGen::EHCleanup, getDestroyer(), needsEHCleanup(), and pushDestroy().
Referenced by EmitInitializerForField(), and EmitMemberInitializer().
|
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 406 of file CodeGenFunction.h.
References EHStack, initFullExprCleanup(), isInConditionalBranch(), clang::CodeGen::EHScopeStack::pushCleanupTuple(), and saveValueInCond().
void CodeGenFunction::pushIrregularPartialArrayCleanup | ( | llvm::Value * | arrayBegin, |
Address | arrayEndPointer, | ||
QualType | elementType, | ||
CharUnits | elementAlign, | ||
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.
elementType | - the immediate element type of the array; possibly still an array type |
Definition at line 1682 of file CGDecl.cpp.
References clang::CodeGen::EHCleanup.
Referenced by EmitNewArrayInitializer().
void CodeGenFunction::pushLifetimeExtendedDestroy | ( | CleanupKind | kind, |
Address | addr, | ||
QualType | type, | ||
Destroyer * | destroyer, | ||
bool | useEHCleanupForArray | ||
) |
Definition at line 1474 of file CGDecl.cpp.
References clang::CodeGen::EHCleanup, EHStack, isInConditionalBranch(), clang::CodeGen::NormalCleanup, and clang::ast_matchers::type.
Referenced by pushTemporaryCleanup().
void CodeGenFunction::pushRegularPartialArrayCleanup | ( | llvm::Value * | arrayBegin, |
llvm::Value * | arrayEnd, | ||
QualType | elementType, | ||
CharUnits | elementAlign, | ||
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.
elementType | - the immediate element type of the array; possibly still an array type |
Definition at line 1699 of file CGDecl.cpp.
References clang::CodeGen::EHCleanup.
Referenced by emitArrayDestroy(), EmitCXXAggrConstructorCall(), and EmitNewArrayInitializer().
void CodeGenFunction::pushStackRestore | ( | CleanupKind | kind, |
Address | SPMem | ||
) |
Address CodeGenFunction::recoverAddrOfEscapedLocal | ( | CodeGenFunction & | ParentCGF, |
Address | ParentVar, | ||
llvm::Value * | ParentFP | ||
) |
Recovers the address of a local in a parent function.
ParentVar is the address of the variable used in the immediate parent function. It can either be an alloca or a call to llvm.localrecover if there are nested outlined functions. ParentFP is the frame pointer of the outermost parent frame.
Definition at line 1496 of file CGException.cpp.
References AllocaInsertPt, Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), CurFn, clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::Address::getName(), clang::CodeGen::Address::getPointer(), clang::CodeGen::Address::getType(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by EmitCapturedLocals(), and EmitSEHExceptionCodeSave().
void CodeGenFunction::registerGlobalDtorWithAtExit | ( | const VarDecl & | D, |
llvm::Constant * | fn, | ||
llvm::Constant * | addr | ||
) |
Call atexit() with a function that passes the given argument to the given function.
Register a global destructor using the C atexit runtime function.
Definition at line 227 of file CGDeclCXX.cpp.
References CGM, createAtExitStub(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::IntTy.
void CodeGenFunction::ResolveBranchFixups | ( | llvm::BasicBlock * | Target | ) |
Definition at line 382 of file CGCleanup.cpp.
References Builder, clang::CodeGen::BranchFixup::Destination, clang::CodeGen::BranchFixup::DestinationIndex, E, I, clang::CodeGen::BranchFixup::OptimisticBranchBlock, and TransitionToCleanupSwitch().
Referenced by EmitLabel().
bool CodeGenFunction::sanitizePerformTypeCheck | ( | ) | const |
Whether any type-checking sanitizers are enabled.
If false
, calls to EmitTypeCheck can be skipped.
Definition at line 525 of file CGExpr.cpp.
References clang::SanitizerSet::has(), and SanOpts.
Referenced by EmitReferenceBindingToExpr(), EmitTypeCheck(), and GetAddressOfBaseClass().
|
inline |
Definition at line 362 of file CodeGenFunction.h.
References clang::CodeGen::InvariantValue< T >::save().
Referenced by pushFullExprCleanup().
|
inline |
Definition at line 763 of file CodeGenFunction.h.
References clang::CodeGen::Address::getAlignment(), clang::CodeGen::Address::getPointer(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenFunction::ConditionalEvaluation::getStartingBlock(), and isInConditionalBranch().
Referenced by initFullExprCleanup(), and SetupCleanupBlockActivation().
void CodeGenFunction::setBlockContextParameter | ( | const ImplicitParamDecl * | D, |
unsigned | argNum, | ||
llvm::Value * | ptr | ||
) |
Definition at line 1109 of file CGBlocks.cpp.
References BlockInfo, BlockPointer, Builder, CGM, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::BlockExpr::getBody(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getDebugInfo(), clang::NamedDecl::getName(), clang::ValueDecl::getType(), clang::codegenoptions::LimitedDebugInfo, and clang::CodeGen::CGBlockInfo::StructureType.
Referenced by EmitParmDecl().
|
inline |
Set the profiler's current count.
Definition at line 993 of file CodeGenFunction.h.
Referenced by EmitBlockWithFallThrough(), and EmitBranchOnBoolExpr().
void CodeGenFunction::SetFPAccuracy | ( | llvm::Value * | Val, |
float | Accuracy | ||
) |
SetFPAccuracy - Set the minimum required accuracy of the given floating point operation, expressed as the maximum relative error in ulp.
Definition at line 4171 of file CGExpr.cpp.
References Node.
bool CodeGenFunction::ShouldEmitVTableTypeCheckedLoad | ( | const CXXRecordDecl * | RD | ) |
Returns whether we should perform a type checked load when loading a virtual function for virtual calls to members of RD.
This is generally true when both vcall CFI and whole-program-vtables are enabled.
Definition at line 2772 of file CGClass.cpp.
References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::NamedDecl::getQualifiedNameAsString(), clang::ASTContext::getSanitizerBlacklist(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenModule::HasHiddenLTOVisibility(), clang::SanitizerBlacklist::isBlacklistedType(), clang::CodeGenOptions::SanitizeTrap, and SanOpts.
bool CodeGenFunction::ShouldInstrumentFunction | ( | ) |
ShouldInstrumentFunction - Return true if the current function should be instrumented with __cyg_profile_func_* calls.
Definition at line 392 of file CodeGenFunction.cpp.
References CGM, CurFuncDecl, and clang::CodeGen::CodeGenModule::getCodeGenOpts().
Referenced by FinishFunction(), and StartFunction().
Definition at line 1325 of file CGExprScalar.cpp.
References clang::CastExpr::getCastKind(), clang::CastExpr::getSubExpr(), clang::Expr::IgnoreParens(), and clang::VK_RValue.
|
inline |
Definition at line 1205 of file CodeGenFunction.h.
References CGM, and clang::CodeGen::CodeGenModule::getCodeGenOpts().
Referenced by EmitARCStoreStrong(), and emitAutoreleaseOfResult().
bool CodeGenFunction::ShouldXRayInstrumentFunction | ( | ) | const |
ShouldXRayInstrument - Return true if the current function should be instrumented with XRay nop sleds.
Definition at line 402 of file CodeGenFunction.cpp.
References CGM, and clang::CodeGen::CodeGenModule::getCodeGenOpts().
Referenced by 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 375 of file CGStmt.cpp.
References EHStack, and clang::CodeGen::EHScopeStack::empty().
Referenced by EmitDoStmt(), and EmitWhileStmt().
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.
Loc | The location to be associated with the function. |
StartLoc | The location of the function body. |
Definition at line 653 of file CodeGenFunction.cpp.
References AllocaInsertPt, AutoreleaseResult, Builder, clang::CC_C, CGM, clang::SanitizerSet::clear(), clang::frontend::CPlusPlus, clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), createBasicBlock(), CreateIRTemp(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), CurCodeDecl, CurFn, CurFnInfo, CurFuncDecl, CurSEHParent, EHStack, EmitFunctionInstrumentation(), EmitFunctionProlog(), clang::CodeGen::CGCXXABI::EmitInstanceFunctionProlog(), EmitLoadOfLValue(), EmitLValueForLambdaField(), EmitMCountInstrumentation(), EmitStartEHSpec(), EmitVariablyModifiedType(), endsWithReturn(), clang::RecordDecl::fields(), FnRetTy, clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenModule::GetAddrOfRTTIDescriptor(), clang::Type::getAs(), clang::CXXRecordDecl::getCaptureFields(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), getDebugInfo(), clang::GlobalDecl::getDecl(), clang::ASTContext::getFunctionType(), clang::CodeGen::ABIArgInfo::getInAllocaFieldIndex(), clang::CodeGen::ABIArgInfo::getIndirectAlign(), getJumpDestInCurrentScope(), clang::CodeGen::ABIArgInfo::getKind(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), getNaturalTypeAlignment(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::FunctionDecl::getOverloadedOperator(), clang::CXXMethodDecl::getParent(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CGFunctionInfo::getReturnInfo(), clang::CodeGen::CGFunctionInfo::getReturnType(), clang::CodeGen::RValue::getScalarVal(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::ValueDecl::getType(), clang::CodeGen::TargetCodeGenInfo::getUBSanFunctionSignature(), clang::SanitizerSet::has(), clang::SanitizerSet::hasOneOf(), hasScalarEvaluationKind(), clang::CodeGen::ABIArgInfo::InAlloca, clang::CodeGen::ABIArgInfo::Indirect, clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::Address::invalid(), clang::FunctionDecl::isInlined(), clang::CodeGen::CodeGenModule::isInSanitizerBlacklist(), clang::CXXRecordDecl::isLambda(), clang::FunctionDecl::isMain(), clang::Type::isObjCRetainableType(), clang::Type::isPointerType(), clang::CodeGen::CGFunctionInfo::isReturnsRetained(), clang::CodeGen::ABIArgInfo::isSRetAfterThis(), clang::Type::isVariablyModifiedType(), clang::Type::isVoidType(), LambdaCaptureFields, LambdaThisCaptureField, clang::SanitizerSet::Mask, clang::CodeGenOptions::OnlyHintInlining, PrologueCleanupDepth, clang::Redeclarable< decl_type >::redecls(), ReturnBlock, ReturnValue, SanOpts, ShouldInstrumentFunction(), ShouldXRayInstrumentFunction(), clang::CodeGen::EHScopeStack::stable_begin(), and clang::FunctionDecl::usesSEHTry().
Referenced by createAtExitStub(), createOffloadingBinaryDescriptorFunction(), emitCombinerOrInitializer(), emitCopyprivateCopyFunction(), emitDestructorsFunction(), emitProxyTaskFunction(), emitReductionFunction(), emitTaskDupFunction(), emitTaskPrivateMappingFunction(), clang::CodeGen::emitThreadPrivateVarDefinition(), GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCopyHelperFunction(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateCXXGlobalVarDeclInitFunc(), generateDestroyHelper(), GenerateDestroyHelperFunction(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCAtomicSetterCopyHelperFunction(), GenerateOpenMPCapturedStmtFunction(), StartObjCMethod(), startOutlinedSEHHelper(), and StartThunk().
void CodeGenFunction::StartObjCMethod | ( | const ObjCMethodDecl * | OMD, |
const ObjCContainerDecl * | CD | ||
) |
StartObjCMethod - Begin emission of an ObjCMethod.
This generates the LLVM function and sets the other context used by CodeGenFunction.
Definition at line 518 of file CGObjC.cpp.
References clang::CodeGen::CodeGenTypes::arrangeObjCMethodDeclaration(), CGM, CurGD, EHStack, clang::CodeGen::CGObjCRuntime::GenerateMethod(), getARCCleanupKind(), clang::ObjCMethodDecl::getCmdDecl(), clang::Selector::getIdentifierInfoForSlot(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCMethodDecl::getLocEnd(), clang::ObjCMethodDecl::getLocStart(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ObjCMethodDecl::getReturnType(), clang::ObjCMethodDecl::getSelector(), clang::ObjCMethodDecl::getSelfDecl(), clang::CodeGen::CodeGenModule::getTypes(), clang::ObjCMethodDecl::isInstanceMethod(), clang::IdentifierInfo::isStr(), clang::Selector::isUnarySelector(), clang::ObjCMethodDecl::param_begin(), clang::ObjCMethodDecl::param_end(), clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), and StartFunction().
Referenced by GenerateObjCCtorDtorMethod(), GenerateObjCGetter(), GenerateObjCMethod(), and GenerateObjCSetter().
void CodeGenFunction::startOutlinedSEHHelper | ( | CodeGenFunction & | ParentCGF, |
bool | IsFilter, | ||
const Stmt * | OutlinedStmt | ||
) |
Arrange a function prototype that can be called by Windows exception handling personalities.
On Win64, the prototype looks like: RetTy func(void *EHPtrs, void *ParentFP);
Definition at line 1617 of file CGException.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::ImplicitParamDecl::Create(), clang::Create(), CurFn, CurSEHParent, EmitCapturedLocals(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CGCXXABI::getMangleContext(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getTarget(), clang::TargetInfo::getTriple(), clang::CodeGen::CodeGenModule::getTypes(), clang::InternalLinkage, IsOutlinedSEHHelper, clang::ASTContext::LongTy, clang::MangleContext::mangleSEHFilterExpression(), clang::MangleContext::mangleSEHFinallyBlock(), clang::Name, clang::CodeGen::CodeGenModule::SetLLVMFunctionAttributes(), StartFunction(), clang::ASTContext::UnsignedCharTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by GenerateSEHFilterFunction(), and GenerateSEHFinallyFunction().
void CodeGenFunction::StartThunk | ( | llvm::Function * | Fn, |
GlobalDecl | GD, | ||
const CGFunctionInfo & | FnInfo | ||
) |
Definition at line 208 of file CGVTables.cpp.
References clang::CodeGen::CGCXXABI::addImplicitStructorParams(), clang::CodeGen::CGCXXABI::buildThisParam(), CGM, CurCodeDecl, CurFuncDecl, CurFuncIsThunk, CurGD, clang::CodeGen::CGCXXABI::EmitInstanceFunctionProlog(), clang::Type::getAs(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::GlobalDecl::getDecl(), clang::FunctionType::getReturnType(), clang::CXXMethodDecl::getThisType(), clang::ValueDecl::getType(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::FunctionDecl::param_begin(), clang::FunctionDecl::param_end(), StartFunction(), and clang::ASTContext::VoidPtrTy.
Referenced by generateThunk().
CodeGenFunction::ConstantEmission CodeGenFunction::tryEmitAsConstant | ( | DeclRefExpr * | refExpr | ) |
Try to emit a reference to the given value without producing it as an l-value.
This is actually more than an optimization: we can't produce an l-value for variables that we never actually captured in a block or lambda, which means const int variables or constexpr literals or similar.
Definition at line 1135 of file CGExpr.cpp.
References CEK_AsReferenceOnly, CEK_AsValueOnly, CEK_None, checkVarTypeForConstantEmission(), clang::Expr::EvaluateAsLValue(), clang::Expr::EvaluateAsRValue(), clang::DeclRefExpr::getDecl(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Expr::EvalStatus::HasSideEffects, and clang::Expr::EvalResult::Val.
QualType CodeGenFunction::TypeOfSelfObject | ( | ) |
TypeOfSelfObject - Return type of object that this self represents.
Definition at line 1444 of file CGObjC.cpp.
References CurFuncDecl, clang::ASTContext::getCanonicalType(), getContext(), clang::ObjCObjectPointerType::getPointeeType(), and clang::ObjCMethodDecl::getSelfDecl().
Referenced by emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), emitStructGetterCall(), emitStructSetterCall(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), and generateObjCSetterBody().
void CodeGenFunction::unprotectFromPeepholes | ( | PeepholeProtection | protection | ) |
Definition at line 1845 of file CodeGenFunction.cpp.
Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::unbind().
Value * CodeGenFunction::vectorWrapScalar16 | ( | llvm::Value * | Op | ) |
Definition at line 4776 of file CGBuiltin.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CodeGenTypeCache::Int16Ty, clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::CodeGen::Type.
Referenced by EmitAArch64BuiltinExpr().
|
friend |
Definition at line 109 of file CodeGenFunction.h.
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 174 of file CodeGenFunction.h.
Referenced by CreateTempAlloca(), EmitCapturedLocals(), clang::CodeGen::emitUpdateLocation(), FinishFunction(), clang::CodeGen::getThreadID(), InitTempAlloca(), recoverAddrOfEscapedLocal(), and StartFunction().
bool clang::CodeGen::CodeGenFunction::AutoreleaseResult |
In ARC, whether we should autorelease the return value.
Definition at line 277 of file CodeGenFunction.h.
Referenced by EmitCallAndReturnForThunk(), EmitFunctionEpilog(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), and StartFunction().
const CodeGen::CGBlockInfo* clang::CodeGen::CodeGenFunction::BlockInfo |
Definition at line 289 of file CodeGenFunction.h.
Referenced by EmitBlockLiteral(), EmitFunctionEpilog(), EmitLambdaBlockInvokeBody(), EmitParmDecl(), GenerateBlockFunction(), GetAddrOfBlockDecl(), LoadBlockStruct(), and setBlockContextParameter().
llvm::Value* clang::CodeGen::CodeGenFunction::BlockPointer |
Definition at line 290 of file CodeGenFunction.h.
Referenced by GenerateBlockFunction(), LoadBlockStruct(), and setBlockContextParameter().
CGBuilderTy clang::CodeGen::CodeGenFunction::Builder |
Definition at line 141 of file CodeGenFunction.h.
Referenced by AddDirectArgument(), AddInitializerToStaticVarDecl(), clang::CodeGen::CodeGenFunction::OMPPrivateScope::addPrivate(), AdjustObjCObjectType(), clang::CodeGen::CallArgList::allocateArgumentMemory(), clang::CodeGen::ApplyDebugLocation::ApplyDebugLocation(), ApplyNonVirtualAndVirtualOffset(), BuildAggStore(), BuildAppleKextVirtualCall(), BuildBlockRelease(), BuildVector(), castToBase(), CheckAggExprForMemSetUse(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), createIdentFieldGEP(), createPlaceholderSlot(), EmitAArch64BuiltinExpr(), EmitAArch64CompareBuiltinExpr(), EmitAArch64TblBuiltinExpr(), emitAddressAtOffset(), emitAddrOfFieldStorage(), emitAddrOfImagComponent(), emitAddrOfRealComponent(), emitAddrOfVarFromArray(), EmitAggMemberInitializer(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAMDGPUBuiltinExpr(), EmitAnnotationCall(), EmitAnyExprToExn(), emitARCCopyOperation(), EmitARCDestroyStrong(), EmitARCDestroyWeak(), EmitARCInitWeak(), emitARCLoadOperation(), emitARCOperationAfterCall(), EmitARCRelease(), EmitARCRetainAutorelease(), EmitARCRetainBlock(), emitARCStoreOperation(), EmitARCStoreStrongCall(), emitARCValueOperation(), emitArgumentDemotion(), EmitARMBuiltinExpr(), EmitArrayDelete(), emitArrayDestroy(), emitArrayLength(), emitArraySubscriptGEP(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), EmitAtomicStore(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), emitAutoreleasedReturnValueMarker(), EmitAutoVarAlloca(), EmitAutoVarInit(), clang::CodeGen::emitBarrierCall(), EmitBinaryAtomicPost(), emitBinaryBuiltin(), EmitBitCastOfLValueToProperType(), EmitBlock(), EmitBlockAfterUses(), emitBlockByrefAddress(), EmitBlockCallExpr(), EmitBlockLiteral(), EmitBranch(), EmitBranchOnBoolExpr(), emitByrefStructureInit(), EmitCall(), EmitCallArg(), EmitCallArgs(), EmitCallOrInvoke(), clang::CodeGen::emitCancellationPointCall(), EmitCapturedLocals(), EmitCaseStmt(), EmitCaseStmtRange(), EmitCastToVoidPtr(), emitCatchDispatchBlock(), emitCatchPadBlock(), emitCheckHandlerCall(), EmitCleanup(), EmitCommonNeonBuiltinExpr(), EmitCommonNeonSISDBuiltinExpr(), emitCopyprivateCopyFunction(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), clang::CodeGen::emitCriticalRegion(), EmitCtorPrologue(), EmitCUDADevicePrintfCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXForRangeStmt(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXTypeidExpr(), EmitDeclInvariant(), EmitDelegateCallArg(), EmitDeleteCall(), emitDestroy(), EmitDestructorBody(), clang::CodeGen::emitDoacrossInit(), EmitDoStmt(), EmitDynamicCast(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryFooter(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitEntryHeader(), EmitExtendGCLifetime(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), clang::CodeGen::emitForDispatchInit(), emitForStaticInitCall(), EmitForStmt(), emitFPIntBuiltin(), EmitFromInt(), EmitFunctionDeclLValue(), EmitFunctionEpilog(), EmitFunctionInstrumentation(), EmitFunctionProlog(), EmitIndirectGotoStmt(), EmitInitializerForField(), clang::CodeGen::CGObjCRuntime::EmitInitOfCatchParam(), EmitLandingPad(), EmitLifetimeEnd(), EmitLifetimeStart(), EmitMemberInitializer(), clang::CodeGen::CGCXXABI::EmitMemberPointerComparison(), clang::CodeGen::CGCXXABI::EmitMemberPointerIsNotNull(), emitMergePHI(), EmitMustTailThunk(), EmitNeonCall(), EmitNeonRShiftImm(), EmitNeonSplat(), EmitNewArrayInitializer(), EmitNonNullArgCheck(), EmitNontemporalStore(), emitNonZeroVLAInit(), EmitNoreturnRuntimeCallOrInvoke(), EmitNullBaseClassInitialization(), EmitNullInitialization(), emitNumTeamsClauseForTargetDirective(), clang::CodeGen::emitNumThreadsClause(), EmitNVPTXBuiltinExpr(), EmitObjCAutoreleasePoolPop(), EmitObjCAutoreleasePoolStmt(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCForCollectionStmt(), EmitObjCIsaExpr(), EmitObjCMessageExpr(), emitOffloadingArrays(), emitOffloadingArraysArgument(), EmitOMPAggregateAssign(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), emitOMPArraySectionBase(), emitOMPAtomicRMW(), EmitOMPCopyinClause(), EmitOMPInnerLoop(), EmitOMPLastprivateClauseFinal(), EmitOMPLinearClauseFinal(), EmitOMPReductionClauseInit(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), emitPostUpdateForReductionClause(), EmitPPCBuiltinExpr(), emitPrivatesInit(), emitProxyTaskFunction(), emitRangedBuiltin(), emitReductionFunction(), EmitReturnBlock(), EmitReturnStmt(), emitRoundPointerUpToAlignment(), EmitSanitizerStatReport(), EmitSEHAbnormalTermination(), EmitSEHExceptionCode(), EmitSEHExceptionCodeSave(), EmitSEHLeaveStmt(), EmitSignBit(), EmitSpecialRegisterBuiltin(), EmitStmt(), EmitStopPoint(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), clang::CodeGen::emitTaskCall(), clang::CodeGen::emitTaskInit(), clang::CodeGen::emitTaskLoopCall(), clang::CodeGen::CGOpenMPRuntimeNVPTX::emitTeamsCall(), emitTernaryBuiltin(), clang::CodeGen::CGCXXABI::EmitThisParam(), emitThreadLimitClauseForTargetDirective(), EmitThreadPrivateVarDeclLValue(), clang::CodeGen::emitThreadPrivateVarDefinition(), clang::CodeGen::emitThreadPrivateVarInit(), EmitToInt(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitTypeMetadataCodeForVCall(), emitUnaryBuiltin(), clang::CodeGen::emitUpdateLocation(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVariablyModifiedType(), emitVoidPtrDirectVAArg(), emitVoidPtrVAArg(), EmitVTableAssumptionLoad(), EmitVTablePtrCheck(), EmitVTablePtrCheckForCast(), EmitVTableTypeCheckedLoad(), EmitWebAssemblyBuiltinExpr(), EmitWhileStmt(), emitWriteback(), emitWritebackArg(), EmitX86_64VAArgFromMemory(), EmitX86BuiltinExpr(), EmitX86MaskedCompare(), EmitX86MaskedLoad(), EmitX86MaskedStore(), EmitX86Select(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), EnterStructPointerForCoercedAccess(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), findDominatingStoreToReturnValue(), FinishFunction(), forConstantArrayExpansion(), clang::CodeGen::CallArgList::freeArgumentMemory(), GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCopyHelperFunction(), GenerateCXXGlobalDtorsFunc(), GenerateCXXGlobalInitFunc(), GenerateDestroyHelperFunction(), GenerateObjCCtorDtorMethod(), generateObjCGetterBody(), generateObjCSetterBody(), GenerateSEHFilterFunction(), GenerateVarArgsThunk(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), GetAddrOfBlockDecl(), clang::CodeGen::getAddrOfThreadPrivate(), getArrayIndexingBound(), getEHResumeBlock(), getExceptionFromSlot(), getMaskVecValue(), getMSVCDispatchBlock(), getSelectorFromSlot(), getTerminateHandler(), getTerminateLandingPad(), clang::CodeGen::getThreadID(), getTypeSize(), getVLASize(), GetVTablePtr(), GetVTTParameter(), HaveInsertPoint(), incrementProfileCounter(), InitCatchParam(), initFullExprCleanup(), InitializeVTablePointer(), clang::CodeGen::CodeGenFunction::LexicalScope::LexicalScope(), loadToBegin(), MakeAtomicCmpXchgValue(), MakeBinaryAtomicValue(), packTBLDVectorList(), PerformReturnAdjustment(), performTypeAdjustment(), PPC64_initDwarfEHRegSizeTable(), protectFromPeepholes(), clang::CodeGen::CGCXXABI::ReadArrayCookie(), recoverAddrOfEscapedLocal(), ResolveAllBranchFixups(), clang::CodeGen::DominatingLLVMValue::restore(), clang::CodeGen::DominatingLLVMValue::save(), setBlockContextParameter(), SetupCleanupBlockActivation(), SimplifyCleanupEntry(), StartFunction(), tryEmitARCCopyWeakInit(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), vectorWrapScalar16(), clang::CodeGen::ApplyDebugLocation::~ApplyDebugLocation(), and clang::CodeGen::CodeGenFunction::LexicalScope::~LexicalScope().
CGCapturedStmtInfo* clang::CodeGen::CodeGenFunction::CapturedStmtInfo |
Definition at line 242 of file CodeGenFunction.h.
Referenced by clang::CodeGen::CodeGenFunction::CGCapturedStmtRAII::CGCapturedStmtRAII(), clang::CodeGen::emitBarrierCall(), clang::CodeGen::emitCancelCall(), clang::CodeGen::emitCancellationPointCall(), EmitCapturedStmt(), clang::CodeGen::emitInlinedDirective(), EmitOMPCopyinClause(), EmitOMPFirstprivateClause(), EmitOMPLastprivateClauseInit(), EmitOMPLinearClauseFinal(), EmitOMPLinearClauseInit(), EmitOMPPrivateLoopCounters(), EmitOMPReductionClauseInit(), emitOutlinedOrderedFunction(), clang::CodeGen::emitTaskwaitCall(), clang::CodeGen::emitTaskyieldCall(), clang::CodeGen::emitThreadIDAddress(), GenerateCapturedStmtFunction(), GenerateOpenMPCapturedStmtFunction(), clang::CodeGen::getThreadID(), and clang::CodeGen::CodeGenFunction::CGCapturedStmtRAII::~CGCapturedStmtRAII().
CodeGenModule& clang::CodeGen::CodeGenFunction::CGM |
Definition at line 136 of file CodeGenFunction.h.
Referenced by AddInitializerToStaticVarDecl(), clang::CodeGen::CallArgList::allocateArgumentMemory(), ApplyNonVirtualAndVirtualOffset(), BuildAggStore(), BuildAppleKextVirtualCall(), BuildAppleKextVirtualDestructorCall(), BuildBlockRelease(), buildFMulAdd(), BuildFunctionArgList(), CalculateCookiePadding(), CallBeginCatch(), canEmitDelegateCallArgs(), checkTargetFeatures(), CodeGenFunction(), CoerceIntOrPtrToIntOrPtr(), ConvertType(), ConvertTypeForMem(), createAtExitStub(), CreateCoercedLoad(), CreateCoercedStore(), CreateDefaultAlignTempAlloca(), createReferenceTemporary(), CreateTempAllocaForCoercion(), EmitAArch64BuiltinExpr(), EmitAArch64TblBuiltinExpr(), emitAddrOfFieldStorage(), EmitAggregateCopy(), EmitAlignmentAssumption(), EmitAMDGPUBuiltinExpr(), EmitAnnotationCall(), emitARCCopyOperation(), emitARCLoadOperation(), emitARCStoreOperation(), emitARCValueOperation(), EmitARMBuiltinExpr(), EmitArrayDelete(), EmitAsanPrologueOrEpilogue(), EmitAsmStmt(), EmitAtomicExpr(), emitAtomicLibcall(), EmitAtomicStore(), emitAutoreleasedReturnValueMarker(), EmitAutoVarAlloca(), EmitAutoVarCleanups(), EmitAutoVarInit(), EmitBaseInitializer(), emitBinaryBuiltin(), EmitBlockCallExpr(), EmitBlockLiteral(), EmitBlockWithFallThrough(), EmitBranchOnBoolExpr(), emitByrefStructureInit(), EmitCall(), EmitCallAndReturnForThunk(), EmitCallArg(), EmitCallArgs(), EmitCallOrInvoke(), EmitCapturedStmt(), EmitCaseStmt(), emitCatchDispatchBlock(), emitCheckHandlerCall(), EmitCommonNeonBuiltinExpr(), emitCommonOMPParallelDirective(), emitCommonOMPTeamsDirective(), EmitConstructorBody(), emitCPPObjectAtomicGetterCall(), emitCPPObjectAtomicSetterCall(), EmitCtorPrologue(), EmitCUDADevicePrintfCallExpr(), EmitCUDAKernelCallExpr(), EmitCXXConstructorCall(), EmitCXXDestructorCall(), EmitCXXForRangeStmt(), EmitCXXGlobalVarDeclInit(), EmitCXXGuardedInit(), EmitCXXMemberCallExpr(), EmitCXXMemberDataPointerAddress(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberOrOperatorMemberCallExpr(), EmitCXXMemberPointerCallExpr(), EmitCXXNewAllocSize(), EmitCXXNewExpr(), EmitCXXThrowExpr(), EmitCXXTypeidExpr(), EmitDecl(), EmitDeclDestroy(), EmitDeclInit(), EmitDeclInvariant(), EmitDeclRefExprDbgValue(), EmitDelegateCallArg(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDestructorBody(), EmitDoStmt(), EmitDynamicCast(), EmitDynamicCastToNull(), EmitEndEHSpec(), EmitFAbs(), EmitFieldAnnotations(), emitFilterDispatchBlock(), EmitForStmt(), EmitForwardingCallToLambda(), emitFPIntBuiltin(), EmitFunctionDeclLValue(), EmitFunctionEpilog(), EmitFunctionInstrumentation(), EmitFunctionProlog(), emitGlobalDtorWithCXAAtExit(), emitGlobalDtorWithTLRegDtor(), EmitGlobalVarDeclLValue(), EmitInheritedCXXConstructorCall(), emitInitWithReductionInitializer(), EmitInlinedInheritingCXXConstructorCall(), EmitLambdaStaticInvokeFunction(), EmitLambdaToBlockPointerBody(), EmitLifetimeEnd(), EmitLifetimeStart(), EmitMaterializeTemporaryExpr(), EmitMCountInstrumentation(), EmitMemberInitializer(), EmitMustTailThunk(), EmitNewArrayInitializer(), EmitNewDeleteCall(), EmitNullBaseClassInitialization(), EmitNullInitialization(), EmitNVPTXBuiltinExpr(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCMessageExpr(), EmitObjCProtocolExpr(), EmitObjCSelectorExpr(), EmitObjCStringLiteral(), EmitObjectDelete(), emitOffloadingArrays(), emitOffloadingArraysArgument(), EmitOMPAtomicCaptureExpr(), EmitOMPAtomicDirective(), EmitOMPAtomicReadExpr(), emitOMPAtomicRMW(), EmitOMPAtomicUpdateExpr(), EmitOMPAtomicWriteExpr(), EmitOMPBarrierDirective(), EmitOMPCancelDirective(), EmitOMPCancellationPointDirective(), EmitOMPCopyinClause(), EmitOMPCriticalDirective(), EmitOMPDistributeDirective(), EmitOMPDistributeLoop(), EmitOMPDistributeParallelForDirective(), EmitOMPDistributeParallelForSimdDirective(), EmitOMPDistributeSimdDirective(), EmitOMPFlushDirective(), EmitOMPForDirective(), EmitOMPForSimdDirective(), EmitOMPMasterDirective(), EmitOMPOrderedDirective(), EmitOMPParallelDirective(), EmitOMPReductionClauseFinal(), EmitOMPSectionDirective(), EmitOMPSectionsDirective(), EmitOMPSimdDirective(), EmitOMPSingleDirective(), EmitOMPTargetDataDirective(), EmitOMPTargetDirective(), EmitOMPTargetEnterDataDirective(), EmitOMPTargetExitDataDirective(), EmitOMPTargetParallelForSimdDirective(), EmitOMPTargetUpdateDirective(), EmitOMPTaskgroupDirective(), EmitOMPTaskLoopBasedDirective(), EmitOMPTaskwaitDirective(), EmitOMPTaskyieldDirective(), EmitOverflowIntrinsic(), EmitParmDecl(), emitPointerArithmetic(), EmitPPCBuiltinExpr(), emitRangedBuiltin(), emitReductionCombiner(), emitRTtypeidCall(), EmitSanitizerStatReport(), EmitSignBit(), EmitSpecialRegisterBuiltin(), EmitStartEHSpec(), EmitStaticVarDecl(), EmitStmt(), emitStructGetterCall(), emitStructSetterCall(), EmitSwitchStmt(), EmitSynthesizedCXXCopyCtorCall(), EmitSystemZBuiltinExpr(), EmitSystemZIntrinsicWithCC(), clang::CodeGen::CGCXXABI::emitTerminateForUnexpectedException(), emitTernaryBuiltin(), EmitThreadPrivateVarDeclLValue(), EmitTypeCheck(), EmitTypeidFromVTable(), EmitTypeMetadataCodeForVCall(), emitUnaryBuiltin(), clang::CodeGen::emitUpdateLocation(), EmitVAArg(), clang::CodeGen::CGObjCRuntime::EmitValueForIvarAtOffset(), EmitVarAnnotations(), EmitVarDecl(), emitVoidPtrDirectVAArg(), EmitVTableAssumptionLoad(), EmitVTableAssumptionLoads(), EmitVTablePtrCheck(), EmitVTableTypeCheckedLoad(), EmitWebAssemblyBuiltinExpr(), EmitWhileStmt(), emitWritebackArg(), EmitX86BuiltinExpr(), enterBlockScope(), enterByrefCleanup(), EnterCXXTryStmt(), EnterDtorCleanups(), EnterStructPointerForCoercedAccess(), ErrorUnsupported(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), EvaluateExprAsBool(), ExitCXXTryStmt(), FinishFunction(), clang::CodeGen::CallArgList::freeArgumentMemory(), GenerateBlockFunction(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GenerateCapturedStmtFunction(), GenerateCode(), GenerateCopyHelperFunction(), generateDestroyHelper(), GenerateDestroyHelperFunction(), GenerateOpenMPCapturedStmtFunction(), generateThunk(), GenerateVarArgsThunk(), clang::CodeGen::EHPersonality::get(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), getARCCleanupKind(), getAsmSrcLocInfo(), getBadCastFn(), getBadTypeidFn(), getBlockByrefInfo(), getContext(), getEHResumeBlock(), getInvokeDestImpl(), getItaniumDynamicCastFn(), getLangOpts(), getLLVMContext(), getNaturalTypeAlignment(), getTerminateHandler(), getTerminateLandingPad(), getTypes(), getTypeSize(), GetVTablePtr(), GetVTTParameter(), incrementProfileCounter(), InitCatchParam(), InitializeVTablePointer(), InitializeVTablePointers(), InsertHelper(), LoadCXXThisAddress(), LookupNeonLLVMIntrinsic(), LValueIsSuitableForInlineAtomic(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), needsEHCleanup(), packTBLDVectorList(), PerformReturnAdjustment(), pushTemporaryCleanup(), registerGlobalDtorWithAtExit(), clang::CodeGen::DominatingLLVMValue::save(), setBlockContextParameter(), ShouldEmitVTableTypeCheckedLoad(), ShouldInstrumentFunction(), shouldUseFusedARCCalls(), ShouldXRayInstrumentFunction(), StartFunction(), StartObjCMethod(), StartThunk(), tryEmitFMulAdd(), tryEmitFusedAutoreleaseOfResult(), tryRemoveRetainOfSelf(), and ~CodeGenFunction().
const Decl* clang::CodeGen::CodeGenFunction::CurCodeDecl |
CurCodeDecl - This is the inner-most code context, which includes blocks.
Definition at line 153 of file CodeGenFunction.h.
Referenced by EmitCall(), EmitFunctionEpilog(), EmitFunctionProlog(), EmitInheritedCXXConstructorCall(), EmitLambdaToBlockPointerBody(), EmitObjCMessageExpr(), EmitParmDecl(), clang::CodeGen::CGCXXABI::ErrorUnsupportedABI(), ExitCXXTryStmt(), FinishFunction(), FinishThunk(), clang::CodeGen::EHPersonality::get(), GetVTTParameter(), clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::InlinedInheritingConstructorScope(), LoadObjCSelf(), StartFunction(), StartThunk(), tryRemoveRetainOfSelf(), and clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::~InlinedInheritingConstructorScope().
llvm::Function* clang::CodeGen::CodeGenFunction::CurFn |
Definition at line 156 of file CodeGenFunction.h.
Referenced by emitAtomicCmpXchg(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), EmitBlock(), EmitBlockAfterUses(), EmitBlockLiteral(), EmitCapturedLocals(), EmitCaseStmtRange(), EmitDestructorBody(), EmitFunctionEpilog(), EmitFunctionInstrumentation(), EmitIfUsed(), EmitMustTailThunk(), EmitSEHAbnormalTermination(), EmitSEHExceptionCodeSave(), clang::CodeGen::emitUpdateLocation(), clang::CodeGen::emitUserDefinedReduction(), enterBlockScope(), clang::CodeGen::functionFinished(), GenerateCode(), GenerateObjCMethod(), GenerateSEHFilterFunction(), GenerateSEHFinallyFunction(), GenerateVarArgsThunk(), GetAddrOfLabel(), getInvokeDestImpl(), getTerminateLandingPad(), clang::CodeGen::getThreadID(), recoverAddrOfEscapedLocal(), StartFunction(), and startOutlinedSEHHelper().
const CGFunctionInfo* clang::CodeGen::CodeGenFunction::CurFnInfo |
Definition at line 154 of file CodeGenFunction.h.
Referenced by EmitAsmStmt(), EmitCallAndReturnForThunk(), EmitMustTailThunk(), FinishFunction(), and StartFunction().
const Decl* clang::CodeGen::CodeGenFunction::CurFuncDecl |
CurFuncDecl - Holds the Decl for the current outermost non-closure context.
Definition at line 151 of file CodeGenFunction.h.
Referenced by checkTargetFeatures(), computeBlockInfo(), EmitObjCMessageExpr(), EmitOMPTargetDirective(), clang::CodeGen::emitUpdateLocation(), FinishThunk(), clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::InlinedInheritingConstructorScope(), LoadCXXThisAddress(), LoadObjCSelf(), ShouldInstrumentFunction(), StartFunction(), StartThunk(), TypeOfSelfObject(), and clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::~InlinedInheritingConstructorScope().
bool clang::CodeGen::CodeGenFunction::CurFuncIsThunk |
In C++, whether we are code generating a thunk.
This controls whether we should emit cleanups.
Definition at line 274 of file CodeGenFunction.h.
Referenced by EmitParmDecl(), and StartThunk().
GlobalDecl clang::CodeGen::CodeGenFunction::CurGD |
CurGD - The GlobalDecl for the current function being compiled.
Definition at line 159 of file CodeGenFunction.h.
Referenced by clang::CodeGen::CGCXXABI::buildThisParam(), EmitAsanPrologueOrEpilogue(), EmitBlockLiteral(), EmitCallAndReturnForThunk(), EmitConstructorBody(), EmitCXXConstructExpr(), EmitDelegateCXXConstructorCall(), EmitDelegatingCXXConstructorCall(), EmitDestructorBody(), EmitFunctionProlog(), emitImplicitAssignmentOperatorBody(), EmitInlinedInheritingCXXConstructorCall(), EmitLambdaToBlockPointerBody(), GenerateBlockFunction(), GenerateCode(), GetVTTParameter(), clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::InlinedInheritingConstructorScope(), StartObjCMethod(), StartThunk(), and clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::~InlinedInheritingConstructorScope().
llvm::Instruction* clang::CodeGen::CodeGenFunction::CurrentFuncletPad = nullptr |
Definition at line 303 of file CodeGenFunction.h.
Referenced by EmitCall(), EmitCallOrInvoke(), emitCatchPadBlock(), EmitNoreturnRuntimeCallOrInvoke(), ExitCXXTryStmt(), getTerminateHandler(), and isCleanupPadScope().
const FunctionDecl* clang::CodeGen::CodeGenFunction::CurSEHParent = nullptr |
Definition at line 283 of file CodeGenFunction.h.
Referenced by currentFunctionUsesSEHTry(), StartFunction(), and startOutlinedSEHHelper().
|
static |
Definition at line 3007 of file CodeGenFunction.h.
Referenced by emitAutoVarTypeCleanup(), EmitAutoVarWithLifetime(), enterBlockScope(), and pushTemporaryCleanup().
|
static |
Definition at line 3008 of file CodeGenFunction.h.
Referenced by EmitAutoVarWithLifetime(), getDestroyer(), and pushTemporaryCleanup().
|
static |
Definition at line 3009 of file CodeGenFunction.h.
Referenced by EmitAutoVarWithLifetime(), getDestroyer(), and pushTemporaryCleanup().
|
static |
Definition at line 2004 of file CodeGenFunction.h.
Referenced by EmitCXXAggrConstructorCall(), getDestroyer(), and pushTemporaryCleanup().
llvm::BasicBlock* clang::CodeGen::CodeGenFunction::EHResumeBlock |
EHResumeBlock - Unified block containing a call to llvm.eh.resume.
Definition at line 338 of file CodeGenFunction.h.
Referenced by FinishFunction(), and getEHResumeBlock().
llvm::AllocaInst* clang::CodeGen::CodeGenFunction::EHSelectorSlot |
The selector slot.
Under the MandatoryCleanup model, all landing pads write the current selector value into this alloca.
Definition at line 346 of file CodeGenFunction.h.
Referenced by getEHSelectorSlot().
EHScopeStack clang::CodeGen::CodeGenFunction::EHStack |
Definition at line 299 of file CodeGenFunction.h.
Referenced by CallBeginCatch(), EmitAnyExprToExn(), EmitArrayDelete(), clang::CodeGen::CGObjCRuntime::EmitAtSynchronizedStmt(), EmitAutoVarCleanups(), emitAutoVarTypeCleanup(), EmitBaseInitializer(), EmitCallArg(), emitCXXDestructMethod(), EmitCXXNewExpr(), EmitDelegatingCXXConstructorCall(), clang::CodeGen::emitDoacrossInit(), EmitEndEHSpec(), EmitFunctionProlog(), EmitLabel(), EmitLandingPad(), EmitNewArrayInitializer(), EmitObjCAutoreleasePoolCleanup(), EmitObjCAutoreleasePoolStmt(), EmitObjectDelete(), EmitParmDecl(), EmitStartEHSpec(), clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), enterBlockScope(), enterByrefCleanup(), EnterCXXTryStmt(), EnterDtorCleanups(), EnterNewDeleteCleanup(), EnterSEHTryStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), ExitCXXTryStmt(), ExitSEHTryStmt(), FinishFunction(), getEHDispatchBlock(), getInvokeDest(), getInvokeDestImpl(), getJumpDestInCurrentScope(), getMSVCDispatchBlock(), InitCatchParam(), initFullExprCleanup(), clang::CodeGen::RegionCodeGenTy::operator()(), popCatchScope(), pushCallObjectDeleteCleanup(), PushDestructorCleanup(), pushFullExprCleanup(), pushLifetimeExtendedDestroy(), pushStackRestore(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), clang::CodeGen::CodeGenFunction::LexicalScope::rescopeLabels(), ResolveAllBranchFixups(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::RunCleanupsScope(), SetupCleanupBlockActivation(), SimplifyForwardingBlocks(), StartFunction(), and StartObjCMethod().
llvm::Value* clang::CodeGen::CodeGenFunction::ExceptionSlot |
The exception slot.
All landing pads write the current exception pointer into this alloca.
Definition at line 342 of file CodeGenFunction.h.
Referenced by getExceptionSlot().
CGBlockInfo* clang::CodeGen::CodeGenFunction::FirstBlockInfo |
FirstBlockInfo - The head of a singly-linked-list of block layouts.
Definition at line 335 of file CodeGenFunction.h.
Referenced by EmitBlockLiteral(), enterBlockScope(), and ~CodeGenFunction().
QualType clang::CodeGen::CodeGenFunction::FnRetTy |
Definition at line 155 of file CodeGenFunction.h.
Referenced by EmitAsmStmt(), EmitInlinedInheritingCXXConstructorCall(), EmitReturnStmt(), clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::InlinedInheritingConstructorScope(), StartFunction(), and clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::~InlinedInheritingConstructorScope().
bool clang::CodeGen::CodeGenFunction::IsOutlinedSEHHelper |
True if the current function is an outlined SEH helper.
This can be a finally block or filter expression.
Definition at line 287 of file CodeGenFunction.h.
Referenced by EmitReturnStmt(), and startOutlinedSEHHelper().
bool clang::CodeGen::CodeGenFunction::IsSanitizerScope |
True if CodeGen currently emits code implementing sanitizer checks.
Definition at line 262 of file CodeGenFunction.h.
Referenced by InsertHelper(), and clang::CodeGen::CodeGenFunction::SanitizerScope::SanitizerScope().
Definition at line 292 of file CodeGenFunction.h.
Referenced by StartFunction().
FieldDecl* clang::CodeGen::CodeGenFunction::LambdaThisCaptureField |
Definition at line 293 of file CodeGenFunction.h.
Referenced by StartFunction().
llvm::SmallVector<char, 256> clang::CodeGen::CodeGenFunction::LifetimeExtendedCleanupStack |
Definition at line 300 of file CodeGenFunction.h.
Referenced by pushCleanupAfterFullExpr(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::RunCleanupsScope(), and ~CodeGenFunction().
LoopInfoStack clang::CodeGen::CodeGenFunction::LoopStack |
Definition at line 140 of file CodeGenFunction.h.
Referenced by EmitCXXForRangeStmt(), EmitDoStmt(), EmitForStmt(), EmitOMPInnerLoop(), emitSimdlenSafelenClause(), EmitWhileStmt(), and InsertHelper().
unsigned clang::CodeGen::CodeGenFunction::NextCleanupDestIndex |
Definition at line 332 of file CodeGenFunction.h.
Referenced by getJumpDestForLabel(), and getJumpDestInCurrentScope().
llvm::AllocaInst* clang::CodeGen::CodeGenFunction::NormalCleanupDest |
i32s containing the indexes of the cleanup destinations.
Definition at line 330 of file CodeGenFunction.h.
Referenced by destroyOptimisticNormalEntry().
llvm::DenseMap<const VarDecl *, llvm::Value *> clang::CodeGen::CodeGenFunction::NRVOFlags |
A mapping from NRVO variables to the flags used to indicate when the NRVO has been applied to this variable.
Definition at line 297 of file CodeGenFunction.h.
Referenced by EmitAutoVarAlloca(), and EmitReturnStmt().
SmallVector<llvm::Value*, 8> clang::CodeGen::CodeGenFunction::ObjCEHValueStack |
ObjCEHValueStack - Stack of Objective-C exception values, used for rethrows.
Definition at line 369 of file CodeGenFunction.h.
Referenced by clang::CodeGen::CGObjCRuntime::EmitTryCatchStmt().
EHScopeStack::stable_iterator clang::CodeGen::CodeGenFunction::PrologueCleanupDepth |
PrologueCleanupDepth - The cleanup depth enclosing all the cleanups associated with the parameters.
Definition at line 163 of file CodeGenFunction.h.
Referenced by FinishFunction(), and StartFunction().
JumpDest clang::CodeGen::CodeGenFunction::ReturnBlock |
ReturnBlock - Unified return block.
Definition at line 166 of file CodeGenFunction.h.
Referenced by EmitForwardingCallToLambda(), EmitReturnBlock(), EmitReturnStmt(), FinishFunction(), getOMPCancelDestination(), and StartFunction().
Address clang::CodeGen::CodeGenFunction::ReturnValue |
ReturnValue - The temporary alloca to hold the return value.
This is invalid iff the function has no return value.
Definition at line 170 of file CodeGenFunction.h.
Referenced by EmitAsmStmt(), EmitAutoVarAlloca(), EmitCallAndReturnForThunk(), EmitCXXMemberOrOperatorCall(), EmitCXXMemberPointerCallExpr(), EmitForwardingCallToLambda(), EmitFunctionEpilog(), EmitFunctionProlog(), EmitInlinedInheritingCXXConstructorCall(), emitProxyTaskFunction(), EmitReturnStmt(), emitStructGetterCall(), clang::CodeGen::emitThreadPrivateVarDefinition(), findDominatingStoreToReturnValue(), generateObjCGetterBody(), GenerateSEHFilterFunction(), clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::InlinedInheritingConstructorScope(), StartFunction(), and clang::CodeGen::CodeGenFunction::InlinedInheritingConstructorScope::~InlinedInheritingConstructorScope().
SanitizerSet clang::CodeGen::CodeGenFunction::SanOpts |
Sanitizers enabled for this function.
Definition at line 259 of file CodeGenFunction.h.
Referenced by EmitCXXMemberOrOperatorMemberCallExpr(), EmitFunctionEpilog(), EmitNonNullArgCheck(), emitPointerArithmetic(), EmitTypeCheck(), EmitTypeMetadataCodeForVCall(), EmitVariablyModifiedType(), EmitVTablePtrCheckForCall(), EmitVTablePtrCheckForCast(), EnterDtorCleanups(), GenerateCode(), sanitizePerformTypeCheck(), ShouldEmitVTableTypeCheckedLoad(), and StartFunction().
bool clang::CodeGen::CodeGenFunction::SawAsmBlock |
Whether we processed a Microsoft-style asm block during CodeGen.
These can potentially set the return value.
Definition at line 281 of file CodeGenFunction.h.
Referenced by EmitAsmStmt(), and GenerateCode().
SmallVector<Address, 1> clang::CodeGen::CodeGenFunction::SEHCodeSlotStack |
A stack of exception code slots.
Entering an __except block pushes a slot on the stack and leaving pops one. The __exception_code() intrinsic loads a value from the top of the stack.
Definition at line 351 of file CodeGenFunction.h.
Referenced by EmitCapturedLocals(), EmitSEHExceptionCode(), EmitSEHExceptionCodeSave(), EnterSEHTryStmt(), and ExitSEHTryStmt().
llvm::Value* clang::CodeGen::CodeGenFunction::SEHInfo = nullptr |
Value returned by __exception_info intrinsic.
Definition at line 354 of file CodeGenFunction.h.
Referenced by EmitSEHExceptionCodeSave(), and EmitSEHExceptionInfo().
llvm::SmallVector<const JumpDest *, 2> clang::CodeGen::CodeGenFunction::SEHTryEpilogueStack |
Definition at line 301 of file CodeGenFunction.h.
Referenced by EmitSEHLeaveStmt(), EmitSEHTryStmt(), and isSEHTryScope().
const TargetInfo& clang::CodeGen::CodeGenFunction::Target |
Definition at line 137 of file CodeGenFunction.h.
Referenced by EmitIndirectGotoStmt(), and getTarget().