clang
17.0.0git
|
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code. More...
#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/CodeGen/CodeGenFunction.h"
Classes | |
class | AbstractCallee |
An abstract representation of regular/ObjC call/message targets. More... | |
class | ArrayInitLoopExprScope |
The scope of an ArrayInitLoopExpr. More... | |
class | AutoVarEmission |
class | CallLifetimeEnd |
class | CGCapturedStmtInfo |
API for captured statement code generation. More... | |
class | CGCapturedStmtRAII |
RAII for correct setting/restoring of CapturedStmtInfo. More... | |
struct | CGCoroInfo |
class | CGFPOptionsRAII |
class | ConditionalEvaluation |
An object to manage conditionally-evaluated expressions. More... | |
class | ConstantEmission |
struct | CXXDefaultArgExprScope |
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... | |
struct | MultiVersionResolverOption |
struct | OMPBuilderCBHelpers |
class | OMPCancelStackRAII |
Controls insertion of cancellation exit blocks in worksharing constructs. More... | |
class | OMPLocalDeclMapRAII |
Save/restore original map of previously emitted local vars in case when we need to duplicate emission of the same code several times in the same function for OpenMP code. More... | |
class | OMPMapVars |
The class used to assign some variables some temporarily addresses. 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... | |
struct | OMPTargetDataInfo |
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 | ParentLoopDirectiveForScanRegion |
Manages parent directive for scan directives. More... | |
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... | |
struct | PrototypeWrapper |
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 | VlaSizePair |
struct | VPtr |
Struct with all information about dynamic [sub]class needed to set vptr. More... | |
Public Member Functions | |
void | InsertHelper (llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB, llvm::BasicBlock::iterator InsertPt) const |
CGBuilder insert helper. More... | |
bool | isCoroutine () const |
bool | hasLabelBeenSeenInCurrentScope () const |
Return true if a label was seen in the current scope. More... | |
llvm::Instruction * | getPostAllocaInsertPoint () |
Return PostAllocaInsertPt. More... | |
bool | checkIfFunctionMustProgress () |
Returns true if a function must make progress, which means the mustprogress attribute can be added. More... | |
bool | checkIfLoopMustProgress (bool HasConstantCond) |
Returns true if a loop must make progress, which means the mustprogress attribute can be added. 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, potentially with an active flag. More... | |
template<class T , class... As> | |
void | pushCleanupAfterFullExprWithActiveFlag (CleanupKind Kind, Address ActiveFlag, As... A) |
void | initFullExprCleanup () |
Set up the last cleanup that was pushed as a conditional full-expression cleanup. More... | |
void | initFullExprCleanupWithFlag (Address ActiveFlag) |
Address | createCleanupActiveFlag () |
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, QualType T, 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, std::initializer_list< llvm::Value ** > ValuesToReload={}) |
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, std::initializer_list< llvm::Value ** > ValuesToReload={}) |
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 * | getFuncletEHDispatchBlock (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, llvm::Value *StepV=nullptr) |
Increment the profiler's counter for the given statement by StepV . 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 () |
const TargetCodeGenInfo & | getTargetHooks () const |
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 block literal. More... | |
llvm::Function * | GenerateBlockFunction (GlobalDecl GD, const CGBlockInfo &Info, const DeclMapTy &ldm, bool IsLambdaConversionToBlock, bool BuildGlobalBlock) |
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, bool CanThrow) |
void | emitByrefStructureInit (const AutoVarEmission &emission) |
Initialize the structural components of a __block variable, i.e. More... | |
void | enterByrefCleanup (CleanupKind Kind, Address Addr, BlockFieldFlags Flags, bool LoadBlockVarAddr, bool CanThrow) |
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) |
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 | markAsIgnoreThreadCheckingAtRuntime (llvm::Function *Fn) |
Annotate the function with an attribute that disables TSan checking at runtime. More... | |
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 (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 | EmitLambdaBlockInvokeBody () |
void | EmitLambdaDelegatingInvokeBody (const CXXMethodDecl *MD) |
void | EmitLambdaStaticInvokeBody (const CXXMethodDecl *MD) |
void | EmitLambdaVLACapture (const VariableArrayType *VAT, LValue LV) |
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, bool IsUnprototyped) |
void | EmitCallAndReturnForThunk (llvm::FunctionCallee Callee, const ThunkInfo *Thunk, bool IsUnprototyped) |
void | FinishThunk () |
void | EmitMustTailThunk (GlobalDecl GD, llvm::Value *AdjustedThisPtr, llvm::FunctionCallee 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, bool IsUnprototyped) |
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) |
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, Address 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, llvm::Type *VTableTy, uint64_t VTableByteOffset) |
Emit a type checked load from the given vtable. 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 | ShouldSkipSanitizerInstrumentation () |
ShouldSkipSanitizerInstrumentation - Return true if the current function should not be instrumented with sanitizers. More... | |
bool | ShouldXRayInstrumentFunction () const |
ShouldXRayInstrument - Return true if the current function should be instrumented with XRay nop sleds. More... | |
bool | AlwaysEmitXRayCustomEvents () const |
AlwaysEmitXRayCustomEvents - Return true if we must unconditionally emit XRay custom event handling calls. More... | |
bool | AlwaysEmitXRayTypedEvents () const |
AlwaysEmitXRayTypedEvents - Return true if clang must unconditionally emit XRay typed event handling calls. More... | |
llvm::Value * | DecodeAddrUsedInPrologue (llvm::Value *F, llvm::Value *EncodedAddr) |
Decode an address used in a function prologue, encoded by EncodeAddrForUseInPrologue . 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 | EmitReturnValueCheck (llvm::Value *RV) |
Emit a test that checks if the return value RV is nonnull. 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 * | getTerminateFunclet () |
getTerminateLandingPad - Return a cleanup funclet 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 Source=AlignmentSource::Type) |
LValue | MakeAddrLValue (Address Addr, QualType T, LValueBaseInfo BaseInfo, TBAAAccessInfo TBAAInfo) |
LValue | MakeAddrLValue (llvm::Value *V, QualType T, CharUnits Alignment, AlignmentSource Source=AlignmentSource::Type) |
LValue | MakeAddrLValueWithoutTBAA (Address Addr, QualType T, AlignmentSource Source=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) |
Address | EmitLoadOfReference (LValue RefLVal, LValueBaseInfo *PointeeBaseInfo=nullptr, TBAAAccessInfo *PointeeTBAAInfo=nullptr) |
LValue | EmitLoadOfReferenceLValue (LValue RefLVal) |
LValue | EmitLoadOfReferenceLValue (Address RefAddr, QualType RefTy, AlignmentSource Source=AlignmentSource::Type) |
Address | EmitLoadOfPointer (Address Ptr, const PointerType *PtrTy, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=nullptr) |
Load a pointer with type PtrTy stored at address Ptr . More... | |
LValue | EmitLoadOfPointerLValue (Address Ptr, const PointerType *PtrTy) |
llvm::AllocaInst * | CreateTempAlloca (llvm::Type *Ty, const Twine &Name="tmp", llvm::Value *ArraySize=nullptr) |
CreateTempAlloca - This creates an alloca and inserts it into the entry block if ArraySize is nullptr, otherwise inserts it at the current insertion point of the builder. More... | |
Address | CreateTempAlloca (llvm::Type *Ty, CharUnits align, const Twine &Name="tmp", llvm::Value *ArraySize=nullptr, Address *Alloca=nullptr) |
CreateTempAlloca - This creates a alloca and inserts it into the entry block. More... | |
Address | CreateTempAllocaWithoutCast (llvm::Type *Ty, CharUnits align, const Twine &Name="tmp", llvm::Value *ArraySize=nullptr) |
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... | |
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", Address *Alloca=nullptr) |
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignmen and cast it to the default address space. More... | |
Address | CreateMemTemp (QualType T, CharUnits Align, const Twine &Name="tmp", Address *Alloca=nullptr) |
Address | CreateMemTempWithoutCast (QualType T, const Twine &Name="tmp") |
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignmen without casting it to the default address space. More... | |
Address | CreateMemTempWithoutCast (QualType T, CharUnits Align, const Twine &Name="tmp") |
AggValueSlot | CreateAggTemp (QualType T, const Twine &Name="tmp", Address *Alloca=nullptr) |
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 - Similarly 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... | |
AggValueSlot::Overlap_t | getOverlapForReturnValue () |
Determine whether a return value slot may overlap some other object. More... | |
AggValueSlot::Overlap_t | getOverlapForFieldInit (const FieldDecl *FD) |
Determine whether a field initialization may overlap some other object. More... | |
AggValueSlot::Overlap_t | getOverlapForBaseInit (const CXXRecordDecl *RD, const CXXRecordDecl *BaseRD, bool IsVirtual) |
Determine whether a base class initialization may overlap some other object. More... | |
void | EmitAggregateAssign (LValue Dest, LValue Src, QualType EltTy) |
Emit an aggregate assignment. More... | |
void | EmitAggregateCopyCtor (LValue Dest, LValue Src, AggValueSlot::Overlap_t MayOverlap) |
void | EmitAggregateCopy (LValue Dest, LValue Src, QualType EltTy, AggValueSlot::Overlap_t MayOverlap, bool isVolatile=false) |
EmitAggregateCopy - Emit an aggregate copy. More... | |
Address | GetAddrOfLocalVar (const VarDecl *VD) |
GetAddrOfLocalVar - Return the address of a local variable. More... | |
LValue | getOrCreateOpaqueLValueMapping (const OpaqueValueExpr *e) |
Given an opaque value expression, return its LValue mapping if it exists, otherwise create one. More... | |
RValue | getOrCreateOpaqueRValueMapping (const OpaqueValueExpr *e) |
Given an opaque value expression, return its RValue mapping if it exists, otherwise create one. More... | |
llvm::Value * | getArrayInitIndex () |
Get the index of the current ArrayInitLoopExpr, if any. 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... | |
VlaSizePair | getVLAElements1D (const VariableArrayType *vla) |
Return the number of elements for a single dimension for the given array type. More... | |
VlaSizePair | getVLAElements1D (QualType vla) |
VlaSizePair | getVLASize (const VariableArrayType *vla) |
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... | |
VlaSizePair | 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, AggValueSlot ThisAVS, const CXXConstructExpr *E) |
void | EmitCXXConstructorCall (const CXXConstructorDecl *D, CXXCtorType Type, bool ForVirtualBase, bool Delegating, Address This, CallArgList &Args, AggValueSlot::Overlap_t Overlap, SourceLocation Loc, bool NewPointerIsChecked) |
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 NewPointerIsChecked, 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 NewPointerIsChecked, 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, QualType ThisTy) |
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... | |
void | EmitSehCppScopeBegin () |
void | EmitSehCppScopeEnd () |
void | EmitSehTryScopeBegin () |
void | EmitSehTryScopeEnd () |
llvm::Value * | EmitLifetimeStart (llvm::TypeSize 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, llvm::Value *NumElements=nullptr, CharUnits CookieSize=CharUnits()) |
RValue | EmitBuiltinNewDeleteCall (const FunctionProtoType *Type, const CallExpr *TheCallExpr, 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(), SanitizerSet SkippedChecks=SanitizerSet(), llvm::Value *ArraySize=nullptr) |
Emit a check that V is the address of storage of the appropriate size and alignment for an object of type Type (or if ArraySize is provided, for an array of that bound). 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) |
llvm::DebugLoc | SourceLocToDebugLoc (SourceLocation Location) |
Converts Location to a DebugLoc, if debug information is enabled. More... | |
unsigned | getDebugInfoFIndex (const RecordDecl *Rec, unsigned FieldIndex) |
Get the record field index as represented in debug info. More... | |
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) |
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 | EmitAndRegisterVariableArrayDimensions (CGDebugInfo *DI, const VarDecl &D, bool EmitDebugInfo) |
Emits the alloca and debug information for the size expressions for each dimension of an array. 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 | emitAlignmentAssumptionCheck (llvm::Value *Ptr, QualType Ty, SourceLocation Loc, SourceLocation AssumptionLoc, llvm::Value *Alignment, llvm::Value *OffsetValue, llvm::Value *TheCheck, llvm::Instruction *Assumption) |
void | emitAlignmentAssumption (llvm::Value *PtrValue, QualType Ty, SourceLocation Loc, SourceLocation AssumptionLoc, llvm::Value *Alignment, llvm::Value *OffsetValue=nullptr) |
void | emitAlignmentAssumption (llvm::Value *PtrValue, const Expr *E, SourceLocation AssumptionLoc, llvm::Value *Alignment, llvm::Value *OffsetValue=nullptr) |
void | EmitStopPoint (const Stmt *S) |
EmitStopPoint - Emit a debug stoppoint if we are emitting debug info. More... | |
void | EmitStmt (const Stmt *S, ArrayRef< const Attr * > Attrs=std::nullopt) |
EmitStmt - Emit the code for the statement. More... | |
bool | EmitSimpleStmt (const Stmt *S, ArrayRef< const Attr * > Attrs) |
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=std::nullopt) |
void | EmitDoStmt (const DoStmt &S, ArrayRef< const Attr * > Attrs=std::nullopt) |
void | EmitForStmt (const ForStmt &S, ArrayRef< const Attr * > Attrs=std::nullopt) |
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, ArrayRef< const Attr * > Attrs) |
void | EmitCaseStmt (const CaseStmt &S, ArrayRef< const Attr * > Attrs) |
void | EmitCaseStmtRange (const CaseStmt &S, ArrayRef< const Attr * > Attrs) |
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 | EmitCoroutineBody (const CoroutineBodyStmt &S) |
void | EmitCoreturnStmt (const CoreturnStmt &S) |
RValue | EmitCoawaitExpr (const CoawaitExpr &E, AggValueSlot aggSlot=AggValueSlot::ignored(), bool ignoreResult=false) |
LValue | EmitCoawaitLValue (const CoawaitExpr *E) |
RValue | EmitCoyieldExpr (const CoyieldExpr &E, AggValueSlot aggSlot=AggValueSlot::ignored(), bool ignoreResult=false) |
LValue | EmitCoyieldLValue (const CoyieldExpr *E) |
RValue | EmitCoroutineIntrinsic (const CallExpr *E, unsigned int IID) |
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 | VolatilizeTryBlocks (llvm::BasicBlock *BB, llvm::SmallPtrSet< llvm::BasicBlock *, 10 > &V) |
void | pushSEHCleanup (CleanupKind kind, llvm::Function *FinallyFunc) |
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 | EmitSimpleOMPExecutableDirective (const OMPExecutableDirective &D) |
Emit simple code for OpenMP directives in Simd-only mode. More... | |
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=std::nullopt) |
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, SourceLocation Loc) |
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) |
void | EmitOMPUseDevicePtrClause (const OMPUseDevicePtrClause &C, OMPPrivateScope &PrivateScope, const llvm::DenseMap< const ValueDecl *, Address > &CaptureDeviceAddrMap) |
void | EmitOMPUseDeviceAddrClause (const OMPUseDeviceAddrClause &C, OMPPrivateScope &PrivateScope, const llvm::DenseMap< const ValueDecl *, Address > &CaptureDeviceAddrMap) |
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, bool ForInscan=false) |
Emit initial code for reduction variables. More... | |
void | EmitOMPReductionClauseFinal (const OMPExecutableDirective &D, const OpenMPDirectiveKind ReductionKind) |
Emit final update of reduction values to original variables at the end of the directive. More... | |
bool | EmitOMPLinearClauseInit (const OMPLoopDirective &D) |
Emit initial code for linear variables. More... | |
void | EmitOMPTaskBasedDirective (const OMPExecutableDirective &S, const OpenMPDirectiveKind CapturedRegion, const RegionCodeGenTy &BodyGen, const TaskGenTy &TaskGen, OMPTaskDataTy &Data) |
void | EmitOMPTargetTaskBasedDirective (const OMPExecutableDirective &S, const RegionCodeGenTy &BodyGen, OMPTargetDataInfo &InputInfo) |
void | processInReduction (const OMPExecutableDirective &S, OMPTaskDataTy &Data, CodeGenFunction &CGF, const CapturedStmt *CS, OMPPrivateScope &Scope) |
void | EmitOMPMetaDirective (const OMPMetaDirective &S) |
void | EmitOMPParallelDirective (const OMPParallelDirective &S) |
void | EmitOMPSimdDirective (const OMPSimdDirective &S) |
void | EmitOMPTileDirective (const OMPTileDirective &S) |
void | EmitOMPUnrollDirective (const OMPUnrollDirective &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 | EmitOMPMaskedDirective (const OMPMaskedDirective &S) |
void | EmitOMPCriticalDirective (const OMPCriticalDirective &S) |
void | EmitOMPParallelForDirective (const OMPParallelForDirective &S) |
void | EmitOMPParallelForSimdDirective (const OMPParallelForSimdDirective &S) |
void | EmitOMPParallelSectionsDirective (const OMPParallelSectionsDirective &S) |
void | EmitOMPParallelMasterDirective (const OMPParallelMasterDirective &S) |
void | EmitOMPTaskDirective (const OMPTaskDirective &S) |
void | EmitOMPTaskyieldDirective (const OMPTaskyieldDirective &S) |
void | EmitOMPErrorDirective (const OMPErrorDirective &S) |
void | EmitOMPBarrierDirective (const OMPBarrierDirective &S) |
void | EmitOMPTaskwaitDirective (const OMPTaskwaitDirective &S) |
void | EmitOMPTaskgroupDirective (const OMPTaskgroupDirective &S) |
void | EmitOMPFlushDirective (const OMPFlushDirective &S) |
void | EmitOMPDepobjDirective (const OMPDepobjDirective &S) |
void | EmitOMPScanDirective (const OMPScanDirective &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 | EmitOMPMasterTaskLoopDirective (const OMPMasterTaskLoopDirective &S) |
void | EmitOMPMasterTaskLoopSimdDirective (const OMPMasterTaskLoopSimdDirective &S) |
void | EmitOMPParallelMasterTaskLoopDirective (const OMPParallelMasterTaskLoopDirective &S) |
void | EmitOMPParallelMasterTaskLoopSimdDirective (const OMPParallelMasterTaskLoopSimdDirective &S) |
void | EmitOMPDistributeDirective (const OMPDistributeDirective &S) |
void | EmitOMPDistributeParallelForDirective (const OMPDistributeParallelForDirective &S) |
void | EmitOMPDistributeParallelForSimdDirective (const OMPDistributeParallelForSimdDirective &S) |
void | EmitOMPDistributeSimdDirective (const OMPDistributeSimdDirective &S) |
void | EmitOMPTargetParallelForSimdDirective (const OMPTargetParallelForSimdDirective &S) |
void | EmitOMPTargetSimdDirective (const OMPTargetSimdDirective &S) |
void | EmitOMPTeamsDistributeDirective (const OMPTeamsDistributeDirective &S) |
void | EmitOMPTeamsDistributeSimdDirective (const OMPTeamsDistributeSimdDirective &S) |
void | EmitOMPTeamsDistributeParallelForSimdDirective (const OMPTeamsDistributeParallelForSimdDirective &S) |
void | EmitOMPTeamsDistributeParallelForDirective (const OMPTeamsDistributeParallelForDirective &S) |
void | EmitOMPTargetTeamsDirective (const OMPTargetTeamsDirective &S) |
void | EmitOMPTargetTeamsDistributeDirective (const OMPTargetTeamsDistributeDirective &S) |
void | EmitOMPTargetTeamsDistributeParallelForDirective (const OMPTargetTeamsDistributeParallelForDirective &S) |
void | EmitOMPTargetTeamsDistributeParallelForSimdDirective (const OMPTargetTeamsDistributeParallelForSimdDirective &S) |
void | EmitOMPTargetTeamsDistributeSimdDirective (const OMPTargetTeamsDistributeSimdDirective &S) |
void | EmitOMPGenericLoopDirective (const OMPGenericLoopDirective &S) |
void | EmitOMPInteropDirective (const OMPInteropDirective &S) |
llvm::CanonicalLoopInfo * | EmitOMPCollapsedCanonicalLoopNest (const Stmt *S, int Depth) |
Emit the Stmt S and return its topmost canonical loop, if any. More... | |
void | EmitOMPCanonicalLoop (const OMPCanonicalLoop *S) |
Emit an OMPCanonicalLoop using the OpenMPIRBuilder. More... | |
void | EmitOMPInnerLoop (const OMPExecutableDirective &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... | |
void | EmitOMPLoopBody (const OMPLoopDirective &D, JumpDest LoopExit) |
Helper for the OpenMP loop directives. More... | |
bool | EmitOMPWorksharingLoop (const OMPLoopDirective &S, Expr *EUB, const CodeGenLoopBoundsTy &CodeGenLoopBounds, const CodeGenDispatchBoundsTy &CGDispatchBounds) |
Emit code for the worksharing loop-based directive. More... | |
void | EmitOMPDistributeLoop (const OMPLoopDirective &S, const CodeGenLoopTy &CodeGenLoop, Expr *IncExpr) |
Emit code for the distribute loop-based directive. More... | |
void | EmitOMPSimdInit (const OMPLoopDirective &D) |
Helpers for the OpenMP loop directives. More... | |
void | EmitOMPSimdFinal (const OMPLoopDirective &D, const llvm::function_ref< llvm::Value *(CodeGenFunction &)> CondGen) |
LValue | EmitOMPSharedLValue (const Expr *E) |
Emits the lvalue for the expression with possibly captured variable. More... | |
llvm::Value * | EmitNonNullRValueCheck (RValue RV, QualType T) |
Create a check that a scalar RValue is non-null. 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... | |
bool | EmitScalarRangeCheck (llvm::Value *Value, QualType Ty, SourceLocation Loc) |
Check if the scalar Value is within the valid range for the given type Ty . More... | |
llvm::Value * | EmitLoadOfScalar (Address Addr, bool Volatile, QualType Ty, SourceLocation Loc, AlignmentSource Source=AlignmentSource::Type, 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 (Address Addr, bool Volatile, QualType Ty, SourceLocation Loc, LValueBaseInfo BaseInfo, TBAAAccessInfo TBAAInfo, bool isNontemporal=false) |
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 Source=AlignmentSource::Type, bool isInit=false, 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, Address Addr, bool Volatile, QualType Ty, LValueBaseInfo BaseInfo, TBAAAccessInfo TBAAInfo, bool isInit=false, bool isNontemporal=false) |
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, SourceLocation Loc) |
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 | EmitMatrixSubscriptExpr (const MatrixSubscriptExpr *E) |
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) |
void | EmitIgnoredConditionalOperator (const AbstractConditionalOperator *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, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=nullptr) |
ConstantEmission | tryEmitAsConstant (DeclRefExpr *refExpr) |
Try to emit a reference to the given value without producing it as an l-value. More... | |
ConstantEmission | tryEmitAsConstant (const MemberExpr *ME) |
llvm::Value * | emitScalarConstant (const ConstantEmission &Constant, Expr *E) |
RValue | EmitPseudoObjectRValue (const PseudoObjectExpr *e, AggValueSlot slot=AggValueSlot::ignored()) |
LValue | EmitPseudoObjectLValue (const PseudoObjectExpr *e) |
llvm::Value * | EmitIvarOffset (const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar) |
llvm::Value * | EmitIvarOffsetAsPointerDiff (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 | 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, const APValue &Init) |
RValue | EmitCall (const CGFunctionInfo &CallInfo, const CGCallee &Callee, ReturnValueSlot ReturnValue, const CallArgList &Args, llvm::CallBase **callOrInvoke, bool IsMustTail, SourceLocation Loc) |
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 (const CGFunctionInfo &CallInfo, const CGCallee &Callee, ReturnValueSlot ReturnValue, const CallArgList &Args, llvm::CallBase **callOrInvoke=nullptr, bool IsMustTail=false) |
RValue | EmitCall (QualType FnType, const CGCallee &Callee, const CallExpr *E, ReturnValueSlot ReturnValue, llvm::Value *Chain=nullptr) |
RValue | EmitCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue=ReturnValueSlot()) |
RValue | EmitSimpleCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue) |
Emit a CallExpr without considering whether it might be a subclass. More... | |
CGCallee | EmitCallee (const Expr *E) |
void | checkTargetFeatures (const CallExpr *E, const FunctionDecl *TargetDecl) |
void | checkTargetFeatures (SourceLocation Loc, const FunctionDecl *TargetDecl) |
llvm::CallInst * | EmitRuntimeCall (llvm::FunctionCallee callee, const Twine &name="") |
llvm::CallInst * | EmitRuntimeCall (llvm::FunctionCallee callee, ArrayRef< llvm::Value * > args, const Twine &name="") |
llvm::CallInst * | EmitNounwindRuntimeCall (llvm::FunctionCallee callee, const Twine &name="") |
llvm::CallInst * | EmitNounwindRuntimeCall (llvm::FunctionCallee callee, ArrayRef< llvm::Value * > args, const Twine &name="") |
SmallVector< llvm::OperandBundleDef, 1 > | getBundlesForFunclet (llvm::Value *Callee) |
llvm::CallBase * | EmitCallOrInvoke (llvm::FunctionCallee 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::CallBase * | EmitRuntimeCallOrInvoke (llvm::FunctionCallee callee, ArrayRef< llvm::Value * > args, const Twine &name="") |
Emits a call or invoke instruction to the given runtime function. More... | |
llvm::CallBase * | EmitRuntimeCallOrInvoke (llvm::FunctionCallee callee, const Twine &name="") |
Emits a call or invoke instruction to the given nullary runtime function. More... | |
void | EmitNoreturnRuntimeCallOrInvoke (llvm::FunctionCallee callee, ArrayRef< llvm::Value * > args) |
Emits a call or invoke to the given noreturn runtime function. More... | |
CGCallee | 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... | |
CGCallee | BuildAppleKextVirtualDestructorCall (const CXXDestructorDecl *DD, CXXDtorType Type, const CXXRecordDecl *RD) |
BuildVirtualCall - This routine makes indirect vtable call for call to virtual destructors. More... | |
void | defaultInitNonTrivialCStructVar (LValue Dst) |
void | callCStructDefaultConstructor (LValue Dst) |
void | callCStructDestructor (LValue Dst) |
void | callCStructCopyConstructor (LValue Dst, LValue Src) |
void | callCStructMoveConstructor (LValue Dst, LValue Src) |
void | callCStructCopyAssignmentOperator (LValue Dst, LValue Src) |
void | callCStructMoveAssignmentOperator (LValue Dst, LValue Src) |
RValue | EmitCXXMemberOrOperatorCall (const CXXMethodDecl *Method, const CGCallee &Callee, ReturnValueSlot ReturnValue, llvm::Value *This, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E, CallArgList *RtlArgs) |
RValue | EmitCXXDestructorCall (GlobalDecl Dtor, const CGCallee &Callee, llvm::Value *This, QualType ThisTy, llvm::Value *ImplicitParam, QualType ImplicitParamTy, const CallExpr *E) |
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, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=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 | EmitCXXPseudoDestructorExpr (const CXXPseudoDestructorExpr *E) |
RValue | EmitCUDAKernelCallExpr (const CUDAKernelCallExpr *E, ReturnValueSlot ReturnValue) |
RValue | EmitNVPTXDevicePrintfCallExpr (const CallExpr *E) |
RValue | EmitAMDGPUDevicePrintfCallExpr (const CallExpr *E) |
RValue | EmitOpenMPDevicePrintfCallExpr (const CallExpr *E) |
RValue | EmitBuiltinExpr (const GlobalDecl GD, unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue) |
RValue | emitRotate (const CallExpr *E, bool IsRotateRight) |
RValue | emitBuiltinOSLogFormat (const CallExpr &E) |
Emit IR for __builtin_os_log_format. More... | |
RValue | EmitBuiltinIsAligned (const CallExpr *E) |
Emit IR for __builtin_is_aligned. More... | |
RValue | EmitBuiltinAlignTo (const CallExpr *E, bool AlignUp) |
Emit IR for __builtin_align_up/__builtin_align_down. More... | |
llvm::Function * | generateBuiltinOSLogHelperFunction (const analyze_os_log::OSLogBufferLayout &Layout, CharUnits BufferAlignment) |
RValue | EmitBlockCallExpr (const CallExpr *E, ReturnValueSlot ReturnValue) |
llvm::Value * | EmitTargetBuiltinExpr (unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue) |
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, ReturnValueSlot ReturnValue, llvm::Triple::ArchType Arch) |
llvm::Value * | EmitARMMVEBuiltinExpr (unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue, llvm::Triple::ArchType Arch) |
llvm::Value * | EmitARMCDEBuiltinExpr (unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue, llvm::Triple::ArchType Arch) |
llvm::Value * | EmitCMSEClearRecord (llvm::Value *V, llvm::IntegerType *ITy, QualType RTy) |
llvm::Value * | EmitCMSEClearRecord (llvm::Value *V, llvm::ArrayType *ATy, QualType RTy) |
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::Triple::ArchType Arch) |
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, const llvm::ElementCount &Count) |
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::Type * | SVEBuiltinMemEltTy (const SVETypeFlags &TypeFlags) |
SVEBuiltinMemEltTy - Returns the memory element type for this memory access builtin. More... | |
SmallVector< llvm::Type *, 2 > | getSVEOverloadTypes (const SVETypeFlags &TypeFlags, llvm::Type *ReturnType, ArrayRef< llvm::Value * > Ops) |
llvm::Type * | getEltType (const SVETypeFlags &TypeFlags) |
llvm::ScalableVectorType * | getSVEType (const SVETypeFlags &TypeFlags) |
llvm::ScalableVectorType * | getSVEPredType (const SVETypeFlags &TypeFlags) |
llvm::Value * | EmitSVETupleSetOrGet (const SVETypeFlags &TypeFlags, llvm::Type *ReturnType, ArrayRef< llvm::Value * > Ops) |
llvm::Value * | EmitSVETupleCreate (const SVETypeFlags &TypeFlags, llvm::Type *ReturnType, ArrayRef< llvm::Value * > Ops) |
llvm::Value * | EmitSVEAllTruePred (const SVETypeFlags &TypeFlags) |
llvm::Value * | EmitSVEDupX (llvm::Value *Scalar) |
llvm::Value * | EmitSVEDupX (llvm::Value *Scalar, llvm::Type *Ty) |
llvm::Value * | EmitSVEReinterpret (llvm::Value *Val, llvm::Type *Ty) |
llvm::Value * | EmitSVEPMull (const SVETypeFlags &TypeFlags, llvm::SmallVectorImpl< llvm::Value * > &Ops, unsigned BuiltinID) |
llvm::Value * | EmitSVEMovl (const SVETypeFlags &TypeFlags, llvm::ArrayRef< llvm::Value * > Ops, unsigned BuiltinID) |
llvm::Value * | EmitSVEPredicateCast (llvm::Value *Pred, llvm::ScalableVectorType *VTy) |
llvm::Value * | EmitSVEGatherLoad (const SVETypeFlags &TypeFlags, llvm::SmallVectorImpl< llvm::Value * > &Ops, unsigned IntID) |
llvm::Value * | EmitSVEScatterStore (const SVETypeFlags &TypeFlags, llvm::SmallVectorImpl< llvm::Value * > &Ops, unsigned IntID) |
llvm::Value * | EmitSVEMaskedLoad (const CallExpr *, llvm::Type *ReturnTy, SmallVectorImpl< llvm::Value * > &Ops, unsigned BuiltinID, bool IsZExtReturn) |
llvm::Value * | EmitSVEMaskedStore (const CallExpr *, SmallVectorImpl< llvm::Value * > &Ops, unsigned BuiltinID) |
llvm::Value * | EmitSVEPrefetchLoad (const SVETypeFlags &TypeFlags, SmallVectorImpl< llvm::Value * > &Ops, unsigned BuiltinID) |
llvm::Value * | EmitSVEGatherPrefetch (const SVETypeFlags &TypeFlags, SmallVectorImpl< llvm::Value * > &Ops, unsigned IntID) |
llvm::Value * | EmitSVEStructLoad (const SVETypeFlags &TypeFlags, SmallVectorImpl< llvm::Value * > &Ops, unsigned IntID) |
llvm::Value * | EmitSVEStructStore (const SVETypeFlags &TypeFlags, SmallVectorImpl< llvm::Value * > &Ops, unsigned IntID) |
llvm::Value * | EmitAArch64SVEBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitAArch64BuiltinExpr (unsigned BuiltinID, const CallExpr *E, llvm::Triple::ArchType Arch) |
llvm::Value * | EmitBPFBuiltinExpr (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 * | EmitHexagonBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
llvm::Value * | EmitRISCVBuiltinExpr (unsigned BuiltinID, const CallExpr *E, ReturnValueSlot ReturnValue) |
llvm::Value * | EmitLoongArchBuiltinExpr (unsigned BuiltinID, const CallExpr *E) |
void | ProcessOrderScopeAMDGCN (llvm::Value *Order, llvm::Value *Scope, llvm::AtomicOrdering &AO, llvm::SyncScope::ID &SSID) |
llvm::Value * | EmitMSVCBuiltinExpr (MSVCIntrin BuiltinID, const CallExpr *E) |
llvm::Value * | EmitBuiltinAvailable (const VersionTuple &Version) |
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 | emitARCCopyAssignWeak (QualType Ty, Address DstAddr, Address SrcAddr) |
void | emitARCMoveAssignWeak (QualType Ty, Address DstAddr, Address SrcAddr) |
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... | |
llvm::Value * | EmitObjCAutorelease (llvm::Value *value, llvm::Type *returnType) |
Autorelease the given object. More... | |
llvm::Value * | EmitObjCRetainNonBlock (llvm::Value *value, llvm::Type *returnType) |
Retain the given object, with normal retain semantics. More... | |
void | EmitObjCRelease (llvm::Value *value, ARCPreciseLifetime_t precise) |
Release the given object. 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 * | EmitObjCAlloc (llvm::Value *value, llvm::Type *returnType) |
Allocate the given objc object. More... | |
llvm::Value * | EmitObjCAllocWithZone (llvm::Value *value, llvm::Type *returnType) |
Allocate the given objc object. More... | |
llvm::Value * | EmitObjCAllocInit (llvm::Value *value, llvm::Type *resultType) |
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 | EmitARCNoopIntrinsicUse (ArrayRef< llvm::Value * > values) |
Emit a call to "clang.arc.noop.use", which consumes the result of a call that has operand bundle "clang.arc.attachedcall". 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 | EmitAggregateStore (llvm::Value *Val, Address Dest, bool DestIsVolatile) |
Build all the stores needed to initialize an aggregate at Dest with the value Val. 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... | |
ComplexPairTy | EmitPromotedComplexExpr (const Expr *E, QualType PromotionType) |
llvm::Value * | EmitPromotedScalarExpr (const Expr *E, QualType PromotionType) |
ComplexPairTy | EmitPromotedValue (ComplexPairTy result, QualType PromotionType) |
ComplexPairTy | EmitUnPromotedValue (ComplexPairTy result, QualType PromotionType) |
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 | EmitInvariantStart (llvm::Constant *Addr, CharUnits Size) |
void | EmitCXXGlobalVarDeclInit (const VarDecl &D, llvm::GlobalVariable *GV, bool PerformInit) |
EmitCXXGlobalVarDeclInit - Create the initializer for a C++ variable with global storage. More... | |
llvm::Function * | createAtExitStub (const VarDecl &VD, llvm::FunctionCallee 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... | |
llvm::Function * | createTLSAtExitStub (const VarDecl &VD, llvm::FunctionCallee Dtor, llvm::Constant *Addr, llvm::FunctionCallee &AtExit) |
Create a stub function, suitable for being passed to __pt_atexit_np, which passes the given address to the given destructor function. More... | |
void | registerGlobalDtorWithAtExit (const VarDecl &D, llvm::FunctionCallee fn, llvm::Constant *addr) |
Call atexit() with a function that passes the given argument to the given function. More... | |
void | registerGlobalDtorWithAtExit (llvm::Constant *dtorStub) |
Call atexit() with function dtorStub. More... | |
llvm::Value * | unregisterGlobalDtorWithUnAtExit (llvm::Constant *dtorStub) |
Call unatexit() with function dtorStub. More... | |
void | EmitCXXGuardedInit (const VarDecl &D, llvm::GlobalVariable *DeclPtr, bool PerformInit) |
Emit code in this function to perform a guarded variable initialization. More... | |
void | EmitCXXGuardedInitBranch (llvm::Value *NeedsInit, llvm::BasicBlock *InitBlock, llvm::BasicBlock *NoInitBlock, GuardKind Kind, const VarDecl *D) |
Emit a branch to select whether or not to perform guarded initialization. More... | |
void | GenerateCXXGlobalInitFunc (llvm::Function *Fn, ArrayRef< llvm::Function * > CXXThreadLocals, ConstantAddress Guard=ConstantAddress::invalid()) |
GenerateCXXGlobalInitFunc - Generates code for initializing global variables. More... | |
void | GenerateCXXGlobalCleanUpFunc (llvm::Function *Fn, ArrayRef< std::tuple< llvm::FunctionType *, llvm::WeakTrackingVH, llvm::Constant * >> DtorsOrStermFinalizers) |
GenerateCXXGlobalCleanUpFunc - Generates code for cleaning up 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 | EmitCXXThrowExpr (const CXXThrowExpr *E, bool KeepInsertionPoint=true) |
RValue | EmitAtomicExpr (AtomicExpr *E) |
llvm::Value * | EmitAnnotationCall (llvm::Function *AnnotationFn, llvm::Value *AnnotatedVal, StringRef AnnotationStr, SourceLocation Location, const AnnotateAttr *Attr) |
Emit an annotation call (intrinsic). 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 | EmitBranchToCounterBlock (const Expr *Cond, BinaryOperator::Opcode LOp, llvm::BasicBlock *TrueBlock, llvm::BasicBlock *FalseBlock, uint64_t TrueCount=0, Stmt::Likelihood LH=Stmt::LH_None, const Expr *CntrIdx=nullptr) |
EmitBranchToCounterBlock - Emit a conditional branch to a new block that increments a profile counter based on the semantics of the given logical operator opcode. More... | |
void | EmitBranchOnBoolExpr (const Expr *Cond, llvm::BasicBlock *TrueBlock, llvm::BasicBlock *FalseBlock, uint64_t TrueCount, Stmt::Likelihood LH=Stmt::LH_None) |
EmitBranchOnBoolExpr - Emit a branch on a boolean condition (e.g. More... | |
void | EmitNullabilityCheck (LValue LHS, llvm::Value *RHS, SourceLocation Loc) |
Given an assignment *LHS = RHS , emit a test that checks if RHS is nonnull, if LHS is marked _Nonnull. More... | |
llvm::Value * | EmitCheckedInBoundsGEP (llvm::Type *ElemTy, llvm::Value *Ptr, ArrayRef< llvm::Value * > IdxList, bool SignedIndices, bool IsSubtraction, SourceLocation Loc, const Twine &Name="") |
Same as IRBuilder::CreateInBoundsGEP, but additionally emits a check to detect undefined behavior when the pointer overflow sanitizer is enabled. More... | |
llvm::Value * | EmitCheckedArgForBuiltin (const Expr *E, BuiltinCheckKind Kind) |
Emits an argument for a call to a builtin. 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 | EmitKCFIOperandBundle (const CGCallee &Callee, SmallVectorImpl< llvm::OperandBundleDef > &Bundles) |
void | EmitCheck (ArrayRef< std::pair< llvm::Value *, SanitizerMask >> Checked, SanitizerHandler Check, ArrayRef< llvm::Constant * > StaticArgs, ArrayRef< llvm::Value * > DynamicArgs) |
Create a basic block that will either trap or call a handler function in the UBSan 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 | EmitUnreachable (SourceLocation Loc) |
Emit a reached-unreachable diagnostic if Loc is valid and runtime checking is enabled. More... | |
void | EmitTrapCheck (llvm::Value *Checked, SanitizerHandler CheckHandlerID) |
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 | EmitCfiCheckStub () |
Emit a stub for the cross-DSO CFI check function. More... | |
void | EmitCfiCheckFail () |
Emit a cross-DSO CFI failure handling function. More... | |
void | EmitNonNullArgCheck (RValue RV, QualType ArgType, SourceLocation ArgLoc, AbstractCallee AC, 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... | |
void | SetFastMathFlags (FPOptions FPFeatures) |
Set the codegen fast-math flags. More... | |
llvm::Value * | emitBoolVecConversion (llvm::Value *SrcVec, unsigned NumElementsDst, const llvm::Twine &Name="") |
void | EmitCallArgs (CallArgList &Args, PrototypeWrapper Prototype, llvm::iterator_range< CallExpr::const_arg_iterator > ArgRange, AbstractCallee AC=AbstractCallee(), unsigned ParamsToSkip=0, EvaluationOrder Order=EvaluationOrder::Default) |
EmitCallArgs - Emit call arguments for a function. More... | |
Address | EmitPointerWithAlignment (const Expr *Addr, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=nullptr) |
EmitPointerWithAlignment - Given an expression with a pointer type, emit the value and compute our best estimate of the alignment of the pointee. More... | |
llvm::Value * | LoadPassedObjectSize (const Expr *E, QualType EltTy) |
If E references a parameter with pass_object_size info or a constant array size modifier, emit the object size divided by the size of EltTy . More... | |
void | EmitSanitizerStatReport (llvm::SanitizerStatKind SSK) |
void | EmitMultiVersionResolver (llvm::Function *Resolver, ArrayRef< MultiVersionResolverOption > Options) |
void | EmitX86MultiVersionResolver (llvm::Function *Resolver, ArrayRef< MultiVersionResolverOption > Options) |
void | EmitAArch64MultiVersionResolver (llvm::Function *Resolver, ArrayRef< MultiVersionResolverOption > Options) |
![]() | |
CharUnits | getIntSize () const |
CharUnits | getIntAlign () const |
CharUnits | getSizeSize () const |
CharUnits | getSizeAlign () const |
CharUnits | getPointerSize () const |
CharUnits | getPointerAlign () const |
llvm::CallingConv::ID | getRuntimeCC () const |
LangAS | getASTAllocaAddressSpace () const |
Static Public Member Functions | |
static bool | cxxDestructorCanThrow (QualType T) |
Check if T is a C++ class that has a destructor that can throw. More... | |
static bool | IsConstructorDelegationValid (const CXXConstructorDecl *Ctor) |
Checks whether the given constructor is a valid subject for the complete-to-base constructor delegation optimization, i.e. More... | |
static TypeEvaluationKind | getEvaluationKind (QualType T) |
getEvaluationKind - Return the TypeEvaluationKind of QualType T . 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 | IsWrappedCXXThis (const Expr *E) |
Check if E is a C++ "this" pointer wrapped in value-preserving casts. More... | |
static bool | ShouldNullCheckClassCastValue (const CastExpr *Cast) |
static bool | isNullPointerAllowed (TypeCheckKind TCK) |
Determine whether the pointer type check TCK permits null pointers. More... | |
static bool | isVptrCheckRequired (TypeCheckKind TCK, QualType Ty) |
Determine whether the pointer type check TCK requires a vptr check. More... | |
static void | EmitOMPTargetDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetDirective &S) |
Emit device code for the target directive. More... | |
static void | EmitOMPTargetParallelDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetParallelDirective &S) |
static void | EmitOMPTargetParallelForDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetParallelForDirective &S) |
Emit device code for the target parallel for directive. More... | |
static void | EmitOMPTargetParallelForSimdDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetParallelForSimdDirective &S) |
Emit device code for the target parallel for simd directive. More... | |
static void | EmitOMPTargetTeamsDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetTeamsDirective &S) |
Emit device code for the target teams directive. More... | |
static void | EmitOMPTargetTeamsDistributeDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetTeamsDistributeDirective &S) |
Emit device code for the target teams distribute directive. More... | |
static void | EmitOMPTargetTeamsDistributeSimdDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetTeamsDistributeSimdDirective &S) |
Emit device code for the target teams distribute simd directive. More... | |
static void | EmitOMPTargetSimdDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetSimdDirective &S) |
Emit device code for the target simd directive. More... | |
static void | EmitOMPTargetTeamsDistributeParallelForSimdDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetTeamsDistributeParallelForSimdDirective &S) |
Emit device code for the target teams distribute parallel for simd directive. More... | |
static void | EmitOMPTargetTeamsDistributeParallelForDeviceFunction (CodeGenModule &CGM, StringRef ParentName, const OMPTargetTeamsDistributeParallelForDirective &S) |
static std::string | getNonTrivialCopyConstructorStr (QualType QT, CharUnits Alignment, bool IsVolatile, ASTContext &Ctx) |
static std::string | getNonTrivialDestructorStr (QualType QT, CharUnits Alignment, bool IsVolatile, ASTContext &Ctx) |
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 | mightAddDeclToScope (const Stmt *S) |
Determine if the given statement might introduce a declaration into the current scope, by being a (possibly-labelled) DeclStmt. More... | |
static bool | isInstrumentedCondition (const Expr *C) |
isInstrumentedCondition - Determine whether the given condition is an instrumentable condition (i.e. More... | |
Public Attributes | |
const typedef llvm::function_ref< void(CodeGenFunction &, llvm::Function *, const OMPTaskDataTy &)> | TaskGenTy |
CodeGenModule & | CGM |
const TargetInfo & | Target |
CodeGenFunction * | ParentCGF = nullptr |
LoopInfoStack | LoopStack |
CGBuilderTy | Builder |
VarBypassDetector | Bypasses |
SmallVector< llvm::CanonicalLoopInfo *, 4 > | OMPLoopNestStack |
List of recently emitted OMPCanonicalLoops. More... | |
int | ExpectedOMPLoopDepth = 0 |
Number of nested loop to be consumed by the last surrounding loop-associated directive. More... | |
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 = nullptr |
llvm::SmallVector< const ParmVarDecl *, 4 > | FnArgs |
Save Parameter Decl for coroutine. More... | |
CGCoroInfo | CurCoro |
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 = Address::invalid() |
ReturnValue - The temporary alloca to hold the return value. More... | |
Address | ReturnValuePointer = Address::invalid() |
ReturnValuePointer - The temporary alloca to hold a pointer to sret. More... | |
const Expr * | RetExpr = nullptr |
If a return statement is being visited, this holds the return statment's result expression. 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 = nullptr |
SanitizerSet | SanOpts |
Sanitizers enabled for this function. More... | |
bool | IsSanitizerScope = false |
True if CodeGen currently emits code implementing sanitizer checks. More... | |
bool | CurFuncIsThunk = false |
In C++, whether we are code generating a thunk. More... | |
bool | AutoreleaseResult = false |
In ARC, whether we should autorelease the return value. More... | |
bool | SawAsmBlock = false |
Whether we processed a Microsoft-style asm block during CodeGen. More... | |
GlobalDecl | CurSEHParent |
bool | IsOutlinedSEHHelper = false |
True if the current function is an outlined SEH helper. More... | |
bool | IsInPreservedAIRegion = false |
True if CodeGen currently emits code inside presereved access index region. More... | |
bool | InNoMergeAttributedStmt = false |
True if the current statement has nomerge attribute. More... | |
bool | InNoInlineAttributedStmt = false |
True if the current statement has noinline attribute. More... | |
bool | InAlwaysInlineAttributedStmt = false |
True if the current statement has always_inline attribute. More... | |
const CallExpr * | MustTailCall = nullptr |
const CodeGen::CGBlockInfo * | BlockInfo = nullptr |
llvm::Value * | BlockPointer = nullptr |
llvm::DenseMap< const ValueDecl *, FieldDecl * > | LambdaCaptureFields |
FieldDecl * | LambdaThisCaptureField = nullptr |
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 |
Address | NormalCleanupDest = Address::invalid() |
i32s containing the indexes of the cleanup destinations. More... | |
unsigned | NextCleanupDestIndex = 1 |
llvm::BasicBlock * | EHResumeBlock = nullptr |
EHResumeBlock - Unified block containing a call to llvm.eh.resume. More... | |
llvm::Value * | ExceptionSlot = nullptr |
The exception slot. More... | |
llvm::AllocaInst * | EHSelectorSlot = nullptr |
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... | |
const OMPExecutableDirective * | OMPParentLoopDirectiveForScan = nullptr |
Parent loop-based directive for scan directive. More... | |
llvm::BasicBlock * | OMPBeforeScanBlock = nullptr |
llvm::BasicBlock * | OMPAfterScanBlock = nullptr |
llvm::BasicBlock * | OMPScanExitBlock = nullptr |
llvm::BasicBlock * | OMPScanDispatch = nullptr |
bool | OMPFirstScanLoop = false |
FPOptions | CurFPFeatures |
SmallVector< llvm::Value *, 8 > | ObjCEHValueStack |
ObjCEHValueStack - Stack of Objective-C exception values, used for rethrows. More... | |
EHScopeStack::stable_iterator | CurrentCleanupScopeDepth |
CurrentSourceLocExprScope | CurSourceLocExprScope |
Source location information about the default argument or member initializer expression we're evaluating, if any. 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 * | HalfTy |
half, bfloat, float, double More... | |
llvm::Type * | BFloatTy |
llvm::Type * | FloatTy |
llvm::Type * | DoubleTy |
llvm::IntegerType * | IntTy |
int More... | |
llvm::IntegerType * | CharTy |
char 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 { | |
llvm::PointerType * AllocaVoidPtrTy | |
llvm::PointerType * AllocaInt8PtrTy | |
}; | |
void* in alloca address space More... | |
union { | |
llvm::PointerType * GlobalsVoidPtrTy | |
llvm::PointerType * GlobalsInt8PtrTy | |
}; | |
void* in default globals address space More... | |
llvm::PointerType * | ConstGlobalsPtrTy |
void* in the address space for constant globals 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 | |
}; | |
The size and alignment of a pointer into the generic address space. More... | |
union { | |
unsigned char SizeSizeInBytes | |
unsigned char SizeAlignInBytes | |
}; | |
The size and alignment of size_t. More... | |
LangAS | ASTAllocaAddressSpace |
llvm::CallingConv::ID | RuntimeCC |
Static Public Attributes | |
static Destroyer | destroyCXXObject |
static Destroyer | destroyARCStrongImprecise |
static Destroyer | destroyARCStrongPrecise |
static Destroyer | destroyARCWeak |
static Destroyer | emitARCIntrinsicUse |
static Destroyer | destroyNonTrivialCStruct |
Friends | |
class | CGCXXABI |
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code.
Definition at line 232 of file CodeGenFunction.h.
typedef llvm::function_ref<std::pair<llvm::Value *, llvm::Value *> CodeGenFunction &, const OMPExecutableDirective &S, Address LB, Address UB)> clang::CodeGen::CodeGenFunction::CodeGenDispatchBoundsTy |
Definition at line 311 of file CodeGenFunction.h.
typedef llvm::function_ref<std::pair<LValue, LValue> CodeGenFunction &, const OMPExecutableDirective &S)> clang::CodeGen::CodeGenFunction::CodeGenLoopBoundsTy |
Definition at line 305 of file CodeGenFunction.h.
typedef llvm::function_ref<void(CodeGenFunction &, const OMPLoopDirective &, JumpDest)> clang::CodeGen::CodeGenFunction::CodeGenLoopTy |
Definition at line 297 of file CodeGenFunction.h.
typedef llvm::function_ref<void(CodeGenFunction &, SourceLocation, const unsigned, const bool)> clang::CodeGen::CodeGenFunction::CodeGenOrderedTy |
Definition at line 300 of file CodeGenFunction.h.
typedef std::pair<llvm::Value *, llvm::Value *> clang::CodeGen::CodeGenFunction::ComplexPairTy |
Definition at line 268 of file CodeGenFunction.h.
typedef llvm::DenseMap<const Decl *, Address> clang::CodeGen::CodeGenFunction::DeclMapTy |
Definition at line 985 of file CodeGenFunction.h.
typedef void clang::CodeGen::CodeGenFunction::Destroyer(CodeGenFunction &CGF, Address addr, QualType ty) |
Definition at line 2037 of file CodeGenFunction.h.
using clang::CodeGen::CodeGenFunction::SourceLocExprScopeGuard = CurrentSourceLocExprScope::SourceLocExprScopeGuard |
Definition at line 1599 of file CodeGenFunction.h.
typedef void clang::CodeGen::CodeGenFunction::SpecialInitFn(CodeGenFunction &Init, const VarDecl &D, llvm::Value *Address) |
Definition at line 3041 of file CodeGenFunction.h.
typedef llvm::SmallPtrSet<const CXXRecordDecl *, 4> clang::CodeGen::CodeGenFunction::VisitedVirtualBasesSetTy |
Definition at line 2281 of file CodeGenFunction.h.
Definition at line 2279 of file CodeGenFunction.h.
anonymous enum |
An enumeration which makes it easier to specify whether or not an operation is a subtraction.
Enumerator | |
---|---|
NotSubtraction | |
IsSubtraction |
Definition at line 4588 of file CodeGenFunction.h.
Specifies which type of sanitizer check to apply when handling a particular builtin.
Enumerator | |
---|---|
BCK_CTZPassedZero | |
BCK_CLZPassedZero |
Definition at line 4604 of file CodeGenFunction.h.
Enumerator | |
---|---|
CFITCK_VCall | |
CFITCK_NVCall | |
CFITCK_DerivedCast | |
CFITCK_UnrelatedCast | |
CFITCK_ICall | |
CFITCK_NVMFCall | |
CFITCK_VMFCall |
Definition at line 2297 of file CodeGenFunction.h.
|
strong |
Definition at line 4745 of file CodeGenFunction.h.
|
strong |
Enumerator | |
---|---|
VariableGuard | |
TlsGuard |
Definition at line 4474 of file CodeGenFunction.h.
Situations in which we might emit a check for the suitability of a pointer or glvalue.
Needs to be kept in sync with ubsan_handlers.cpp in compiler-rt.
Definition at line 2952 of file CodeGenFunction.h.
CodeGenFunction::CodeGenFunction | ( | CodeGenModule & | cgm, |
bool | suppressNewContext = false |
||
) |
Definition at line 71 of file CodeGenFunction.cpp.
References clang::Target.
CodeGenFunction::~CodeGenFunction | ( | ) |
Definition at line 86 of file CodeGenFunction.cpp.
References CGM, CurFn, clang::CodeGen::CGOpenMPRuntime::functionFinished(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::CodeGen::CGOpenMPRuntime::getOMPBuilder(), 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 1270 of file CGCleanup.cpp.
References ForActivation, and SetupCleanupBlockActivation().
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 339 of file CGDecl.cpp.
References CGM, clang::CPlusPlus, clang::QualType::DK_cxx_destructor, EmitCXXGuardedInit(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::ConstantEmitter::finalize(), clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenModule::getContext(), getContext(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::VarDecl::getFlexibleArrayInitChars(), clang::VarDecl::getInit(), getLangOpts(), clang::CodeGen::CodeGenModule::getModule(), clang::ValueDecl::getType(), clang::ASTContext::getTypeSizeInChars(), clang::VarDecl::hasFlexibleArrayInit(), HaveInsertPoint(), clang::CodeGen::CodeGenModule::isTypeConstant(), clang::VarDecl::needsDestruction(), and clang::CodeGen::ConstantEmitter::tryEmitForInitializer().
Referenced by EmitStaticVarDecl().
bool CodeGenFunction::AlwaysEmitXRayCustomEvents | ( | ) | const |
AlwaysEmitXRayCustomEvents - Return true if we must unconditionally emit XRay custom event handling calls.
AlwaysEmitXRayCustomEvents - Return true if we should emit IR for calls to the __xray_customevent(...) builtin calls, when doing XRay instrumentation.
Definition at line 556 of file CodeGenFunction.cpp.
References CGM, clang::XRayInstrKind::Custom, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::XRayInstrSet::Mask, and clang::CodeGenOptions::XRayInstrumentationBundle.
bool CodeGenFunction::AlwaysEmitXRayTypedEvents | ( | ) | const |
AlwaysEmitXRayTypedEvents - Return true if clang must unconditionally emit XRay typed event handling calls.
Definition at line 563 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::XRayInstrSet::Mask, clang::XRayInstrKind::Typed, and clang::CodeGenOptions::XRayInstrumentationBundle.
CGCallee 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 276 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.
CGCallee 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 297 of file CGCXX.cpp.
References clang::CodeGen::CodeGenTypes::arrangeCXXStructorDeclaration(), BuildAppleKextVirtualCall(), CGM, clang::Dtor_Base, clang::Dtor_Complete, clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getTypes(), and clang::CXXMethodDecl::isVirtual().
Referenced by BuildAppleKextVirtualCall().
void CodeGenFunction::BuildBlockRelease | ( | llvm::Value * | DeclPtr, |
BlockFieldFlags | flags, | ||
bool | CanThrow | ||
) |
Definition at line 2801 of file CGBlocks.cpp.
References Builder, CanThrow(), CGM, EmitNounwindRuntimeCall(), EmitRuntimeCallOrInvoke(), clang::CodeGen::BlockFieldFlags::getBitMask(), clang::CodeGen::CodeGenModule::getBlockObjectDispose(), clang::CodeGen::CodeGenTypeCache::Int32Ty, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and V.
QualType CodeGenFunction::BuildFunctionArgList | ( | GlobalDecl | GD, |
FunctionArgList & | Args | ||
) |
Definition at line 1296 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::CXXMethodDecl::getThisType(), getTypes(), clang::CodeGen::CGCXXABI::hasMostDerivedReturn(), clang::CodeGen::CGCXXABI::HasThisReturn(), clang::CodeGen::CodeGenTypes::inheritingCtorHasParams(), clang::CXXMethodDecl::isInstance(), clang::ImplicitParamDecl::Other, clang::FunctionDecl::parameters(), and clang::ASTContext::VoidPtrTy.
Referenced by EmitCall(), EmitInlinedInheritingCXXConstructorCall(), and GenerateCode().
llvm::Value * CodeGenFunction::BuildVector | ( | ArrayRef< llvm::Value * > | Ops | ) |
Definition at line 12345 of file CGBuiltin.cpp.
Definition at line 898 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
Definition at line 886 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
Referenced by GenerateCopyHelperFunction(), and generateObjCGetterBody().
void CodeGenFunction::callCStructDefaultConstructor | ( | LValue | Dst | ) |
Definition at line 851 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
void CodeGenFunction::callCStructDestructor | ( | LValue | Dst | ) |
Definition at line 875 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
Definition at line 923 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
Referenced by generateObjCSetterBody().
Definition at line 911 of file CGNonTrivialStruct.cpp.
References callSpecialFunction(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::LValue::isVolatile(), and string().
|
inline |
Returns true if a function must make progress, which means the mustprogress attribute can be added.
Definition at line 568 of file CodeGenFunction.h.
References CGM, clang::CodeGen::CodeGenModule::getCodeGenOpts(), and getLangOpts().
Referenced by checkIfLoopMustProgress().
Returns true if a loop must make progress, which means the mustprogress attribute can be added.
HasConstantCond
indicates whether the branch condition is a known constant.
Definition at line 587 of file CodeGenFunction.h.
References CGM, checkIfFunctionMustProgress(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and getLangOpts().
void CodeGenFunction::checkTargetFeatures | ( | const CallExpr * | E, |
const FunctionDecl * | TargetDecl | ||
) |
Definition at line 2549 of file CodeGenFunction.cpp.
References clang::CallExpr::getBeginLoc().
Referenced by EmitCall().
void CodeGenFunction::checkTargetFeatures | ( | SourceLocation | Loc, |
const FunctionDecl * | TargetDecl | ||
) |
Definition at line 2556 of file CodeGenFunction.cpp.
References clang::ASTContext::BuiltinInfo, CGM, CurCodeDecl, clang::Builtin::evaluateRequiredTargetFeatures(), clang::ASTContext::filterFunctionTargetAttrs(), clang::Decl::getAttr(), clang::FunctionDecl::getBuiltinID(), clang::CodeGen::CodeGenModule::getContext(), clang::NamedDecl::getDeclName(), clang::CodeGen::CodeGenModule::getDiags(), clang::ASTContext::getFunctionFeatureMap(), clang::Builtin::Context::getRequiredFeatures(), clang::Decl::hasAttr(), clang::FunctionDecl::isMultiVersion(), clang::DiagnosticsEngine::Report(), and string().
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 1578 of file CodeGenFunction.cpp.
Referenced by EmitBranchOnBoolExpr(), and clang::CodeGen::CGOpenMPRuntime::emitIfClause().
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 1592 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 1531 of file CodeGenFunction.cpp.
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 1499 of file CodeGenFunction.cpp.
Referenced by ConstantFoldsToSimpleInteger(), and EmitAutoVarInit().
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 5526 of file CGExpr.cpp.
References clang::CodeGen::LValue::asAggregateRValue(), clang::CodeGen::Decl, EmitLoadOfComplex(), EmitLoadOfScalar(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getComplex(), getEvaluationKind(), MakeAddrLValue(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::ast_matchers::type.
Referenced by EmitAtomicExpr(), EmitCall(), and EmitDelegateCallArg().
|
inline |
Definition at line 2406 of file CodeGenFunction.h.
References ConvertType(), and getContext().
llvm::Type * CodeGenFunction::ConvertType | ( | QualType | T | ) |
Definition at line 215 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenTypes::ConvertType(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by AdjustObjCObjectType(), ConvertType(), emitArgumentDemotion(), emitArrayLength(), EmitArrayToPointerDecay(), EmitAtomicDecrementValue(), EmitAtomicIncrementValue(), EmitCall(), EmitCastLValue(), emitCmdValueForGetterSetterBody(), EmitCommonNeonSISDBuiltinExpr(), EmitCXXTypeidExpr(), EmitCXXUuidofExpr(), EmitDeleteCall(), EmitDynamicCastToNull(), EmitFromMemory(), EmitFunctionEpilog(), EmitFunctionProlog(), EmitIvarOffsetAsPointerDiff(), EmitLoadOfBitfieldLValue(), EmitLoadOfScalar(), emitMaybeConstrainedFPToIntRoundBuiltin(), clang::CodeGen::CGCXXABI::EmitMemberDataPointerAddress(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), EmitObjCIsaExpr(), EmitObjCStringLiteral(), emitOMPArraySectionBase(), EmitPointerWithAlignment(), EmitPromotedValue(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), EmitUnPromotedValue(), emitWritebackArg(), generateObjCGetterBody(), GenerateSEHFilterFunction(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), GetAddressOfDirectBaseInCompleteClass(), getItaniumDynamicCastFn(), GetUndefRValue(), LoadCXXThisAddress(), MakeAtomicCmpXchgValue(), performTypeAdjustment(), StartFunction(), tryEmitSpecializedAllocInit(), and tryGenerateSpecializedMessageSend().
llvm::Type * CodeGenFunction::ConvertTypeForMem | ( | QualType | T | ) |
Definition at line 211 of file CodeGenFunction.cpp.
References CGM, clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by castValueToType(), clang::CodeGen::CGOpenMPRuntime::checkAndEmitLastprivateConditional(), complexTempStructure(), createPlaceholderSlot(), EmitAnyExprToExn(), emitArrayDestroy(), emitArrayLength(), emitArraySubscriptGEP(), EmitArrayToPointerDecay(), EmitAtomicExpr(), EmitAutoVarAlloca(), EmitCall(), EmitCastLValue(), clang::CodeGen::ReductionCodeGen::emitCleanups(), EmitCXXConstructorCall(), EmitCXXDeleteExpr(), EmitCXXMemberDataPointerAddress(), EmitCXXNewExpr(), EmitDeclDestroy(), EmitDeclRefLValue(), emitDependData(), clang::CodeGen::CGOpenMPRuntime::emitDestroyClause(), EmitFunctionProlog(), emitGlobalToListCopyFunction(), emitInterWarpCopyFunction(), clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalInit(), clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalUpdate(), emitListToGlobalCopyFunction(), EmitLoadOfPointer(), EmitLoadOfReference(), EmitLValueForFieldInitialization(), EmitMaterializeTemporaryExpr(), EmitNewArrayInitializer(), EmitObjCIsaExpr(), emitOMPArraySectionBase(), EmitOMPUseDeviceAddrClause(), EmitOMPUseDevicePtrClause(), EmitParmDecl(), emitPartialArrayDestroy(), emitPointerArithmetic(), EmitPointerWithAlignment(), emitPrivatesInit(), emitShuffleAndReduceFunction(), clang::CodeGen::CGOpenMPRuntime::emitSingleRegion(), EmitStaticVarDecl(), EmitStoreThroughBitfieldLValue(), EmitToMemory(), clang::CodeGen::CGOpenMPRuntime::emitUpdateClause(), emitVoidPtrVAArg(), emitWritebackArg(), EmitX86_64VAArgFromMemory(), forConstantArrayExpansion(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateVarArgsThunk(), clang::CodeGen::CGOpenMPRuntimeGPU::getAddressOfLocalVariable(), getBlockByrefInfo(), clang::CodeGen::CGOpenMPRuntime::getDepobjElements(), clang::CodeGen::CGCXXABI::getThisAddress(), getVAListElementType(), InitCatchParam(), loadToBegin(), MakeAddrLValue(), MakeNaturalAlignAddrLValue(), MakeNaturalAlignPointeeAddrLValue(), PerformReturnAdjustment(), and shuffleAndStore().
|
inline |
CreateAggTemp - Create a temporary memory object for the given aggregate type.
Definition at line 2614 of file CodeGenFunction.h.
Referenced by EmitAnyExpr(), EmitAnyExprToTemp(), EmitCallArg(), EmitCXXBindTemporaryLValue(), and EmitCXXConstructLValue().
llvm::Function * CodeGenFunction::createAtExitStub | ( | const VarDecl & | VD, |
llvm::FunctionCallee | 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 234 of file CGDeclCXX.cpp.
References CGM, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by emitGlobalDtorWithTLRegDtor(), and registerGlobalDtorWithAtExit().
|
inline |
createBasicBlock - Create an LLVM basic block.
Definition at line 2429 of file CodeGenFunction.h.
References clang::transformer::before(), getLLVMContext(), and clang::transformer::name().
Referenced by CreateNormalEntry(), clang::CodeGen::CatchRetScope::Emit(), emitArrayDestroy(), emitAtomicCmpXchgFailureSet(), EmitAtomicExpr(), EmitAtomicOp(), clang::CodeGen::CGOpenMPRuntime::emitBarrierCall(), EmitBranchOnBoolExpr(), EmitBranchToCounterBlock(), EmitCall(), clang::CodeGen::CGOpenMPRuntime::emitCancellationPointCall(), emitCatchDispatchBlock(), EmitCfiSlowPathCheck(), EmitCheck(), EmitCleanup(), clang::CodeGen::CGOpenMPRuntimeGPU::emitCriticalRegion(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXNewExpr(), EmitDynamicCast(), EmitDynamicCastToNull(), emitDynamicTlsInitialization(), emitFilterDispatchBlock(), clang::CodeGen::CGOpenMPRuntime::emitIfClause(), emitInterWarpCopyFunction(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), emitPostUpdateForReductionClause(), EmitReturnValueCheck(), EmitSehScope(), emitShuffleAndReduceFunction(), EmitTrapCheck(), EmitTypeCheck(), EmitTypeidFromVTable(), clang::CodeGen::CGOpenMPRuntime::emitUDMapperArrayInitOrDel(), clang::CodeGen::CGOpenMPRuntime::emitUpdateClause(), EmitVTablePtrCheckForCast(), emitWasmCatchPadBlock(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), getEHDispatchBlock(), getEHResumeBlock(), getFuncletEHDispatchBlock(), GetIndirectGotoBlock(), getJumpDestForLabel(), getTerminateFunclet(), getTerminateHandler(), getTerminateLandingPad(), getUnreachableBlock(), PerformReturnAdjustment(), shuffleAndStore(), and StartFunction().
Address CodeGenFunction::createCleanupActiveFlag | ( | ) |
Definition at line 292 of file CGCleanup.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAllocaWithoutCast(), clang::CharUnits::One(), and setBeforeOutermostConditional().
Referenced by initFullExprCleanup(), pushCleanupAfterFullExpr(), and pushLifetimeExtendedDestroy().
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 124 of file CGExpr.cpp.
Referenced by EmitCheckValue(), clang::CodeGen::CGOpenMPRuntimeGPU::emitTeamsCall(), and StartFunction().
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 131 of file CGExpr.cpp.
Referenced by EmitInlinedInheritingCXXConstructorCall(), and StartFunction().
Address CodeGenFunction::CreateMemTemp | ( | QualType | T, |
CharUnits | Align, | ||
const Twine & | Name = "tmp" , |
||
Address * | Alloca = nullptr |
||
) |
Definition at line 142 of file CGExpr.cpp.
Address CodeGenFunction::CreateMemTemp | ( | QualType | T, |
const Twine & | Name = "tmp" , |
||
Address * | Alloca = nullptr |
||
) |
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignmen and cast it to the default address space.
Returns the original alloca instruction by Alloca
if it is not nullptr.
Definition at line 136 of file CGExpr.cpp.
Referenced by castToBase(), castValueToType(), complexTempStructure(), EmitAggExprToLValue(), EmitAtomicExpr(), EmitCall(), EmitCompoundLiteralLValue(), clang::CodeGen::CGOpenMPRuntime::emitDependClause(), clang::CodeGen::CGOpenMPRuntime::emitDepobjElementsSizes(), clang::CodeGen::CGOpenMPRuntime::emitDoacrossInit(), clang::CodeGen::CGOpenMPRuntime::emitDoacrossOrdered(), EmitExtVectorElementExpr(), EmitFunctionProlog(), emitGlobalToListReduceFunction(), emitInterWarpCopyFunction(), EmitLambdaDelegatingInvokeBody(), clang::CodeGen::CGOpenMPRuntime::emitLastprivateConditionalInit(), emitListToGlobalReduceFunction(), emitNonContiguousDescriptor(), EmitObjCBoxedExpr(), EmitObjCCollectionLiteral(), emitOffloadingArrays(), EmitParmDecl(), EmitSEHExceptionCodeSave(), emitShuffleAndReduceFunction(), clang::CodeGen::CGOpenMPRuntime::emitSingleRegion(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), clang::CodeGen::CGOpenMPRuntime::emitTaskReductionInit(), clang::CodeGen::CGOpenMPRuntime::emitThreadIDAddress(), EmitValToTemp(), GenerateBlockFunction(), clang::CodeGen::CGOpenMPRuntimeGPU::getParameterAddress(), clang::CodeGen::CallArg::getRValue(), GetUndefRValue(), setBlockContextParameter(), and clang::CodeGen::CodeGenFunction::OMPMapVars::setVarAddr().
Address CodeGenFunction::CreateMemTempWithoutCast | ( | QualType | T, |
CharUnits | Align, | ||
const Twine & | Name = "tmp" |
||
) |
Definition at line 159 of file CGExpr.cpp.
CreateMemTemp - Create a temporary memory object of the given type, with appropriate alignmen without casting it to the default address space.
Definition at line 164 of file CGExpr.cpp.
Referenced by EmitCall().
Address CodeGenFunction::CreateTempAlloca | ( | llvm::Type * | Ty, |
CharUnits | Align, | ||
const Twine & | Name = "tmp" , |
||
llvm::Value * | ArraySize = nullptr , |
||
Address * | AllocaAddr = nullptr |
||
) |
CreateTempAlloca - This creates a alloca and inserts it into the entry block.
The alloca is casted to default address space if necessary.
Definition at line 80 of file CGExpr.cpp.
llvm::AllocaInst * CodeGenFunction::CreateTempAlloca | ( | llvm::Type * | Ty, |
const Twine & | Name = "tmp" , |
||
llvm::Value * | ArraySize = nullptr |
||
) |
CreateTempAlloca - This creates an alloca and inserts it into the entry block if ArraySize
is nullptr, otherwise inserts it at the current insertion point of the builder.
The caller is responsible for setting an appropriate alignment on the alloca.
ArraySize
is the number of array elements to be allocated if it is not nullptr.
LangAS::Default is the address space of pointers to local variables and temporaries, as exposed in the source language. In certain configurations, this is not the same as the alloca address space, and a cast is needed to lift the pointer from the alloca AS into LangAS::Default. This can happen when the target uses a restricted address space for the stack but the source language requires LangAS::Default to be a generic address space. The latter condition is common for most programming languages; OpenCL is an exception in that LangAS::Default is the private address space, which naturally maps to the stack.
Because the address of a temporary is often exposed to the program in various ways, this function will perform the cast. The original alloca instruction is returned through Alloca
if it is not nullptr.
The cast is not performaed in CreateTempAllocaWithoutCast. This is more efficient if the caller knows that the address will not be exposed.
Definition at line 111 of file CGExpr.cpp.
Referenced by EmitAutoVarAlloca(), EmitBlockLiteral(), EmitCall(), EmitDeleteCall(), EmitFunctionProlog(), EmitNewArrayInitializer(), emitWritebackArg(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), GenerateBlockFunction(), getEHSelectorSlot(), getExceptionSlot(), InitCatchParam(), clang::CodeGen::DominatingLLVMValue::save(), and SetupCleanupBlockActivation().
Address CodeGenFunction::CreateTempAllocaWithoutCast | ( | llvm::Type * | Ty, |
CharUnits | align, | ||
const Twine & | Name = "tmp" , |
||
llvm::Value * | ArraySize = nullptr |
||
) |
CreateTempAlloca - This creates a alloca and inserts it into the entry block.
Definition at line 69 of file CGExpr.cpp.
Referenced by createCleanupActiveFlag().
llvm::Function * CodeGenFunction::createTLSAtExitStub | ( | const VarDecl & | VD, |
llvm::FunctionCallee | Dtor, | ||
llvm::Constant * | Addr, | ||
llvm::FunctionCallee & | AtExit | ||
) |
Create a stub function, suitable for being passed to __pt_atexit_np, which passes the given address to the given destructor function.
Definition at line 271 of file CGDeclCXX.cpp.
|
inline |
Definition at line 2025 of file CodeGenFunction.h.
References CurSEHParent.
Referenced by EmitCall(), and getInvokeDestImpl().
Check if T
is a C++ class that has a destructor that can throw.
Definition at line 1703 of file CGBlocks.cpp.
References clang::Type::getAsCXXRecordDecl().
Referenced by EmitAutoVarCleanups(), and pushCaptureCleanup().
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 1282 of file CGCleanup.cpp.
Referenced by deactivateArgCleanupsBeforeCall(), EmitAnyExprToExn(), EmitCXXNewExpr(), EmitNewArrayInitializer(), and generateObjCSetterBody().
llvm::Value * CodeGenFunction::DecodeAddrUsedInPrologue | ( | llvm::Value * | F, |
llvm::Value * | EncodedAddr | ||
) |
Decode an address used in a function prologue, encoded by EncodeAddrForUseInPrologue
.
Definition at line 571 of file CodeGenFunction.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::IntPtrTy.
Referenced by EmitCall().
void CodeGenFunction::defaultInitNonTrivialCStructVar | ( | LValue | Dst | ) |
Definition at line 818 of file CGNonTrivialStruct.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::LValue::getAddress(), getContext(), clang::CodeGen::LValue::getType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::LValue::isVolatile(), clang::QualType::withVolatile(), and clang::CharUnits::Zero().
Referenced by EmitAutoVarInit().
|
inline |
Definition at line 1991 of file CodeGenFunction.h.
Value * CodeGenFunction::EmitAArch64BuiltinExpr | ( | unsigned | BuiltinID, |
const CallExpr * | E, | ||
llvm::Triple::ArchType | Arch | ||
) |
Definition at line 9723 of file CGBuiltin.cpp.
References clang::AArch64::FirstSVEBuiltin, and clang::AArch64::LastSVEBuiltin.
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 7505 of file CGBuiltin.cpp.
void CodeGenFunction::EmitAArch64MultiVersionResolver | ( | llvm::Function * | Resolver, |
ArrayRef< MultiVersionResolverOption > | Options | ||
) |
Definition at line 2705 of file CodeGenFunction.cpp.
Should not happen
Definition at line 9390 of file CGBuiltin.cpp.
References AArch64SVEIntrinsicMap, AArch64SVEIntrinsicsProvenSorted, findARMVectorIntrinsicInMap(), clang::ASTContext::GE_None, clang::CallExpr::getArg(), clang::Expr::getIntegerConstantExpr(), clang::SVETypeFlags::getMergeType(), clang::CallExpr::getNumArgs(), clang::Expr::getType(), InsertExplicitZeroOperand(), clang::SVETypeFlags::isGatherLoad(), clang::SVETypeFlags::isGatherPrefetch(), clang::SVETypeFlags::isLoad(), clang::SVETypeFlags::isPrefetch(), clang::SVETypeFlags::isScatterStore(), clang::SVETypeFlags::isStore(), clang::SVETypeFlags::isStructLoad(), clang::SVETypeFlags::isStructStore(), clang::SVETypeFlags::isTupleCreate(), clang::SVETypeFlags::isTupleGet(), clang::SVETypeFlags::isTupleSet(), clang::SVETypeFlags::isUndef(), and clang::SVETypeFlags::isZExtReturn().
Definition at line 361 of file CGExprComplex.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStructGEP(), and clang::CodeGen::Address::getName().
Referenced by EmitUnaryOpLValue().
Definition at line 356 of file CGExprComplex.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStructGEP(), and clang::CodeGen::Address::getName().
Referenced by EmitUnaryOpLValue().
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 2029 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(), EmitAnyExpr(), EmitAnyExprToMem(), EmitAtomicInit(), EmitBaseInitializer(), EmitCallArg(), EmitCXXBindTemporaryLValue(), EmitCXXConstructExpr(), EmitDeclInit(), EmitDelegatingCXXConstructorCall(), EmitExprAsInit(), EmitInitializerForField(), EmitMaterializeTemporaryExpr(), EmitNewArrayInitializer(), emitPseudoObjectExpr(), GenerateObjCAtomicGetterCopyHelperFunction(), GenerateObjCCtorDtorMethod(), InitCatchParam(), and StoreAnyExprIntoOneUnit().
EmitAggExprToLValue - Emit the computation of the specified expression of aggregate type into a temporary LValue.
Definition at line 2041 of file CGExprAgg.cpp.
References CreateMemTemp(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::AggValueSlot::DoesNotOverlap, EmitAggExpr(), clang::CodeGen::AggValueSlot::forLValue(), clang::Expr::getType(), hasAggregateEvaluationKind(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, and MakeAddrLValue().
Referenced by EmitBinaryOperatorLValue(), EmitCastLValue(), EmitConditionalOperatorLValue(), EmitIgnoredConditionalOperator(), EmitInitListLValue(), EmitLValue(), and EmitVAArgExprLValue().
|
inline |
Emit an aggregate assignment.
Definition at line 2697 of file CodeGenFunction.h.
References EmitAggregateCopy(), hasVolatileMember(), and clang::CodeGen::AggValueSlot::MayOverlap.
Referenced by emitPrivatesInit().
void CodeGenFunction::EmitAggregateCopy | ( | LValue | Dest, |
LValue | Src, | ||
QualType | EltTy, | ||
AggValueSlot::Overlap_t | MayOverlap, | ||
bool | isVolatile = false |
||
) |
EmitAggregateCopy - Emit an aggregate copy.
isVolatile | true iff either the source or the destination is volatile. |
MayOverlap | Whether the tail padding of the destination might be occupied by some other object. More efficient code can often be generated if not. |
Definition at line 2092 of file CGExprAgg.cpp.
References Builder, CGM, clang::CPlusPlus, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), clang::CodeGen::CodeGenModule::DecorateInstructionWithTBAA(), emitArrayLength(), clang::CodeGen::CGObjCRuntime::EmitGCMemmoveCollectable(), clang::CodeGen::LValue::getAddress(), clang::Type::getAs(), clang::ASTContext::getBaseElementType(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::RecordType::getDecl(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::CodeGen::CodeGenModule::getObjCRuntime(), getTargetHooks(), clang::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::CodeGenModule::getTBAAStructInfo(), clang::ASTContext::getTypeInfoDataSizeInChars(), clang::ASTContext::getTypeInfoInChars(), clang::Decl::hasAttr(), 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::Type::isCUDADeviceBuiltinSurfaceType(), clang::Type::isCUDADeviceBuiltinTextureType(), clang::CXXRecordDecl::isEmpty(), clang::TagDecl::isUnion(), clang::CodeGen::CodeGenModule::mergeTBAAInfoForMemoryTransfer(), clang::LangOptions::NonGC, clang::CodeGen::CodeGenTypeCache::SizeTy, and clang::TypeInfo::Width.
Referenced by clang::CodeGen::CallArg::copyInto(), EmitAggregateAssign(), EmitAggregateCopyCtor(), emitGlobalToListCopyFunction(), emitListToGlobalCopyFunction(), EmitMemberInitializer(), clang::CodeGen::CGOpenMPRuntime::emitTaskInit(), generateObjCGetterBody(), clang::CodeGen::CallArg::getRValue(), and InitCatchParam().
|
inline |
Definition at line 2702 of file CodeGenFunction.h.
References EmitAggregateCopy(), and clang::CodeGen::LValue::getType().
Referenced by EmitCXXConstructorCall().
Build all the stores needed to initialize an aggregate at Dest with the value Val.
Definition at line 1334 of file CGCall.cpp.
References Builder, clang::CodeGen::CGBuilderTy::CreateStore(), and clang::CodeGen::CGBuilderTy::CreateStructGEP().
Referenced by CreateCoercedStore(), and EmitCall().
void CodeGenFunction::emitAlignmentAssumption | ( | llvm::Value * | PtrValue, |
const Expr * | E, | ||
SourceLocation | AssumptionLoc, | ||
llvm::Value * | Alignment, | ||
llvm::Value * | OffsetValue = nullptr |
||
) |
Definition at line 2450 of file CodeGenFunction.cpp.
References emitAlignmentAssumption(), clang::Expr::getExprLoc(), and clang::Expr::getType().
void CodeGenFunction::emitAlignmentAssumption | ( | llvm::Value * | PtrValue, |
QualType | Ty, | ||
SourceLocation | Loc, | ||
SourceLocation | AssumptionLoc, | ||
llvm::Value * | Alignment, | ||
llvm::Value * | OffsetValue = nullptr |
||
) |
Definition at line 2410 of file CodeGenFunction.cpp.
References Builder, CGM, emitAlignmentAssumptionCheck(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, SanOpts, and clang::interp::Zero().
Referenced by emitAlignedClause(), and emitAlignmentAssumption().
void CodeGenFunction::emitAlignmentAssumptionCheck | ( | llvm::Value * | Ptr, |
QualType | Ty, | ||
SourceLocation | Loc, | ||
SourceLocation | AssumptionLoc, | ||
llvm::Value * | Alignment, | ||
llvm::Value * | OffsetValue, | ||
llvm::Value * | TheCheck, | ||
llvm::Instruction * | Assumption | ||
) |
Definition at line 2797 of file CodeGenFunction.cpp.
References Builder, EmitCheck(), EmitCheckSourceLocation(), EmitCheckTypeDescriptor(), EmitCheckValue(), clang::Type::getPointeeType(), clang::SanitizerSet::has(), clang::QualType::isVolatileQualified(), and SanOpts.
Referenced by emitAlignmentAssumption().
Definition at line 16864 of file CGBuiltin.cpp.
References clang::CallExpr::getArg(), and clang::tooling::X().
Referenced by EmitTargetArchBuiltinExpr().
Definition at line 179 of file CGGPUBuiltin.cpp.
References clang::CallExpr::arguments(), Builder, CGM, EmitCallArgs(), clang::CodeGen::CodeGenModule::ErrorUnsupported(), clang::CodeGen::RValue::get(), clang::Type::getAs(), clang::CallExpr::getBuiltinCallee(), clang::CallExpr::getDirectCallee(), clang::CallExpr::getNumArgs(), getTarget(), clang::ValueDecl::getType(), and clang::CodeGen::CodeGenTypeCache::IntTy.
void CodeGenFunction::EmitAndRegisterVariableArrayDimensions | ( | CGDebugInfo * | DI, |
const VarDecl & | D, | ||
bool | EmitDebugInfo | ||
) |
Emits the alloca and debug information for the size expressions for each dimension of an array.
It registers the association of its (1-dimensional) QualTypes and size expression's debug node, so that CGDebugInfo can reference this node when creating the DISubrange object to describe the array types.
Definition at line 1363 of file CGDecl.cpp.
References getContext(), clang::ValueDecl::getType(), clang::QualType::getUnqualifiedType(), and getVLAElements1D().
llvm::Value * CodeGenFunction::EmitAnnotationCall | ( | llvm::Function * | AnnotationFn, |
llvm::Value * | AnnotatedVal, | ||
StringRef | AnnotationStr, | ||
SourceLocation | Location, | ||
const AnnotateAttr * | Attr | ||
) |
Emit an annotation call (intrinsic).
Definition at line 2462 of file CodeGenFunction.cpp.
References Builder, CGM, clang::CodeGen::CodeGenTypeCache::ConstGlobalsPtrTy, clang::CodeGen::CodeGenModule::EmitAnnotationArgs(), clang::CodeGen::CodeGenModule::EmitAnnotationLineNo(), clang::CodeGen::CodeGenModule::EmitAnnotationString(), and clang::CodeGen::CodeGenModule::EmitAnnotationUnit().
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 213 of file CGExpr.cpp.
References clang::CodeGen::AggValueSlot::asRValue(), CreateAggTemp(), EmitAggExpr(), EmitComplexExpr(), EmitScalarExpr(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getComplex(), getEvaluationKind(), clang::Expr::getType(), clang::CodeGen::AggValueSlot::isIgnored(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by clang::CodeGen::CodeGenFunction::OpaqueValueMappingData::bind(), EmitAnyExprToTemp(), EmitBinaryOperatorLValue(), EmitIgnoredExpr(), EmitObjCBoxedExpr(), emitOMPAtomicCaptureExpr(), emitOMPAtomicUpdateExpr(), emitOMPAtomicWriteExpr(), emitPseudoObjectExpr(), emitSimdlenSafelenClause(), GenerateObjCAtomicGetterCopyHelperFunction(), and getOrCreateOpaqueRValueMapping().
Definition at line 395 of file CGException.cpp.
References Builder, clang::format::cleanup(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), DeactivateCleanupBlock(), clang::CodeGen::EHCleanup, EHStack, EmitAnyExprToMem(), clang::CodeGen::Address::getPointer(), clang::QualType::getQualifiers(), clang::Expr::getType(), and clang::CodeGen::EHScopeStack::stable_begin().
void CodeGenFunction::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.
EmitAnyExprToMem - Evaluate an expression into a given memory location.
Definition at line 242 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::AggValueSlot::MayOverlap, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitAnyExprToExn(), EmitCompoundLiteralLValue(), clang::CodeGen::ReductionCodeGen::emitInitialization(), EmitMaterializeTemporaryExpr(), EmitObjCBoxedExpr(), EmitOMPAggregateInit(), clang::CodeGen::CGOpenMPRuntime::emitTaskLoopCall(), and EmitValToTemp().
EmitAnyExprToTemp - Similarly to EmitAnyExpr(), however, the result will always be accessible even if no aggregate location is provided.
EmitAnyExprToTemp - Similar to EmitAnyExpr(), however, the result will always be accessible even if no aggregate location is provided.
Definition at line 232 of file CGExpr.cpp.
References CreateAggTemp(), EmitAnyExpr(), clang::Expr::getType(), hasAggregateEvaluationKind(), and clang::CodeGen::AggValueSlot::ignored().
Referenced by EmitCallArg(), and EmitStmtExprLValue().
llvm::Value * CodeGenFunction::EmitARCAutorelease | ( | llvm::Value * | value | ) |
Autorelease the given object.
call i8* @objc_autorelease(i8* value)
Definition at line 2558 of file CGObjC.cpp.
References CGM, 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 2567 of file CGObjC.cpp.
References CGM, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_autoreleaseReturnValue.
Referenced by emitAutoreleaseOfResult().
Definition at line 2688 of file CGObjC.cpp.
References EmitARCLoadWeakRetained(), EmitARCStoreWeak(), and EmitObjCConsumeObject().
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 2682 of file CGObjC.cpp.
References CGM, 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 2487 of file CGObjC.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateLoad(), EmitARCRelease(), EmitARCStoreStrongCall(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), and getNullForVariable().
Referenced by EmitObjectDelete().
void CodeGenFunction::EmitARCDestroyWeak | ( | Address | addr | ) |
void @objc_destroyWeak(i8** addr) Essentially objc_storeWeak(addr, nil).
Definition at line 2659 of file CGObjC.cpp.
References Builder, CGM, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), EmitNounwindRuntimeCall(), getARCIntrinsic(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::ObjCEntrypoints::objc_destroyWeak.
Referenced by emitARCMoveAssignWeak(), EmitCXXPseudoDestructorExpr(), and EmitObjectDelete().
llvm::Value * CodeGenFunction::EmitARCExtendBlockObject | ( | const Expr * | expr | ) |
Definition at line 3505 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 2641 of file CGObjC.cpp.
References Builder, CGM, 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 2132 of file CGObjC.cpp.
References CGM, clang::CodeGen::ObjCEntrypoints::clang_arc_use, EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::CodeGenModule::getObjCEntrypoints().
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 2614 of file CGObjC.cpp.
References CGM, emitARCLoadOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_loadWeak.
Referenced by EmitLoadOfLValue(), and generateObjCGetterBody().
llvm::Value * CodeGenFunction::EmitARCLoadWeakRetained | ( | Address | addr | ) |
i8* @objc_loadWeakRetained(i8** addr)
Definition at line 2621 of file CGObjC.cpp.
References CGM, emitARCLoadOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_loadWeakRetained.
Referenced by emitARCCopyAssignWeak(), emitARCMoveAssignWeak(), EmitLoadOfLValue(), EmitObjCMessageExpr(), and tryEmitARCRetainLoadOfScalar().
Definition at line 2695 of file CGObjC.cpp.
References EmitARCDestroyWeak(), EmitARCLoadWeakRetained(), EmitARCStoreWeak(), and EmitObjCConsumeObject().
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 2673 of file CGObjC.cpp.
References CGM, emitARCCopyOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_moveWeak.
Referenced by tryEmitARCCopyWeakInit().
void CodeGenFunction::EmitARCNoopIntrinsicUse | ( | ArrayRef< llvm::Value * > | values | ) |
Emit a call to "clang.arc.noop.use", which consumes the result of a call that has operand bundle "clang.arc.attachedcall".
Definition at line 2144 of file CGObjC.cpp.
References CGM, clang::CodeGen::ObjCEntrypoints::clang_arc_noop_use, EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenModule::getIntrinsic(), and clang::CodeGen::CodeGenModule::getObjCEntrypoints().
Referenced by emitOptimizedARCReturnCall().
llvm::Value * CodeGenFunction::EmitARCReclaimReturnedObject | ( | const Expr * | e, |
bool | allowUnsafeClaim | ||
) |
Definition at line 3070 of file CGObjC.cpp.
References CGM, 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 2458 of file CGObjC.cpp.
References clang::CodeGen::ARCImpreciseLifetime, Builder, CGM, EmitNounwindRuntimeCall(), getARCIntrinsic(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::ObjCEntrypoints::objc_release.
Referenced by clang::CodeGen::CGObjCRuntime::destroyCalleeDestroyedArguments(), EmitARCDestroyStrong(), EmitARCStoreStrong(), EmitCXXPseudoDestructorExpr(), 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 2306 of file CGObjC.cpp.
References EmitARCRetainBlock(), EmitARCRetainNonBlock(), and clang::ast_matchers::type.
Referenced by emitARCRetainLoadOfScalar(), EmitARCRetainScalarExpr(), and EmitARCStoreStrong().
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 2589 of file CGObjC.cpp.
References Builder, EmitARCAutorelease(), EmitARCRetainAutoreleaseNonBlock(), EmitARCRetainBlock(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::ast_matchers::type.
Referenced by EmitARCRetainAutoreleaseScalarExpr(), EmitObjCExtendObjectLifetime(), and EmitObjCMessageExpr().
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 2440 of file CGObjC.cpp.
References emitOptimizedARCReturnCall().
Referenced by emitARCRetainCallResult(), and EmitForwardingCallToLambda().
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 2606 of file CGObjC.cpp.
References CGM, 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 2577 of file CGObjC.cpp.
References CGM, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retainAutoreleaseReturnValue.
Referenced by tryEmitFusedAutoreleaseOfResult().
llvm::Value * CodeGenFunction::EmitARCRetainAutoreleaseScalarExpr | ( | const Expr * | expr | ) |
Definition at line 3489 of file CGObjC.cpp.
References EmitARCAutorelease(), EmitARCRetainAutorelease(), 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 2327 of file CGObjC.cpp.
References Builder, CGM, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), 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 2315 of file CGObjC.cpp.
References CGM, emitARCValueOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_retain.
Referenced by EmitARCRetain(), emitARCRetainCallResult(), clang::CodeGen::CGObjCRuntime::EmitInitOfCatchParam(), EmitObjCMessageExpr(), EmitParmDecl(), emitWriteback(), GenerateCopyHelperFunction(), and InitCatchParam().
llvm::Value * CodeGenFunction::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.
Definition at line 3474 of file CGObjC.cpp.
References EmitARCRetain(), clang::Expr::getType(), and tryEmitARCRetainScalarExpr().
Referenced by EmitScalarInit().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreAutoreleasing | ( | const BinaryOperator * | e | ) |
Definition at line 3660 of file CGObjC.cpp.
References EmitARCRetainAutoreleaseScalarExpr(), EmitLValue(), EmitStoreOfScalar(), clang::BinaryOperator::getLHS(), and clang::BinaryOperator::getRHS().
Referenced by EmitBinaryOperatorLValue().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreStrong | ( | const BinaryOperator * | e, |
bool | ignored | ||
) |
Definition at line 3629 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::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 2523 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::CharUnits::isZero(), clang::CodeGen::CodeGenTypeCache::PointerAlignInBytes, shouldUseFusedARCCalls(), and clang::ast_matchers::type.
Referenced by EmitARCStoreStrong(), and EmitBinaryOperatorLValue().
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 2501 of file CGObjC.cpp.
References Builder, CGM, EmitNounwindRuntimeCall(), getARCIntrinsic(), clang::CodeGen::Address::getElementType(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::ObjCEntrypoints::objc_storeStrong.
Referenced by destroyARCStrongWithStore(), EmitARCDestroyStrong(), EmitARCStoreStrong(), EmitParmDecl(), and GenerateCopyHelperFunction().
std::pair< LValue, llvm::Value * > CodeGenFunction::EmitARCStoreUnsafeUnretained | ( | const BinaryOperator * | e, |
bool | ignored | ||
) |
Definition at line 3610 of file CGObjC.cpp.
References EmitARCUnsafeUnretainedScalarExpr(), EmitLValue(), EmitScalarExpr(), EmitStoreOfScalar(), clang::BinaryOperator::getLHS(), and clang::BinaryOperator::getRHS().
i8* @objc_storeWeak(i8** addr, i8* value) Returns value.
Definition at line 2629 of file CGObjC.cpp.
References CGM, emitARCStoreOperation(), clang::CodeGen::CodeGenModule::getObjCEntrypoints(), and clang::CodeGen::ObjCEntrypoints::objc_storeWeak.
Referenced by emitARCCopyAssignWeak(), emitARCMoveAssignWeak(), and 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 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 2452 of file CGObjC.cpp.
References emitOptimizedARCReturnCall().
Referenced by emitARCUnsafeClaimCallResult().
llvm::Value * CodeGenFunction::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.
Definition at line 3599 of file CGObjC.cpp.
References emitARCUnsafeUnretainedScalarExpr().
Referenced by EmitARCStoreUnsafeUnretained(), and EmitScalarInit().
Value * CodeGenFunction::EmitARMBuiltinExpr | ( | unsigned | BuiltinID, |
const CallExpr * | E, | ||
ReturnValueSlot | ReturnValue, | ||
llvm::Triple::ArchType | Arch | ||
) |
Definition at line 7720 of file CGBuiltin.cpp.
References clang::Expr::EvaluateAsInt(), and clang::CallExpr::getArg().
Referenced by EmitTargetArchBuiltinExpr().
Value * CodeGenFunction::EmitARMCDEBuiltinExpr | ( | unsigned | BuiltinID, |
const CallExpr * | E, | ||
ReturnValueSlot | ReturnValue, | ||
llvm::Triple::ArchType | Arch | ||
) |
Definition at line 8628 of file CGBuiltin.cpp.
Value * CodeGenFunction::EmitARMMVEBuiltinExpr | ( | unsigned | BuiltinID, |
const CallExpr * | E, | ||
ReturnValueSlot | ReturnValue, | ||
llvm::Triple::ArchType | Arch | ||
) |
Definition at line 8527 of file CGBuiltin.cpp.
References clang::CallExpr::getArg(), and clang::Expr::getType().
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 2236 of file CGDecl.cpp.
References Builder, ConvertTypeForMem(), createBasicBlock(), EmitBlock(), clang::Type::isArrayType(), PopCleanupBlock(), pushRegularPartialArrayCleanup(), and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by EmitArrayDelete(), emitDestroy(), and emitPartialArrayDestroy().
llvm::Value * CodeGenFunction::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.
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 2074 of file CodeGenFunction.cpp.
References clang::ast_matchers::arrayType, Builder, ConvertType(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::Address::getAlignment(), clang::ASTContext::getAsArrayType(), getContext(), clang::CodeGen::Address::getElementType(), clang::CodeGen::Address::getPointer(), getVLASize(), clang::CodeGen::CodeGenFunction::VlaSizePair::NumElts, and clang::CodeGen::CodeGenTypeCache::SizeTy.
Referenced by EmitAggregateCopy(), EmitCXXAggrConstructorCall(), emitDestroy(), EmitOMPAggregateInit(), and EmitOMPAggregateReduction().
LValue CodeGenFunction::EmitArraySubscriptExpr | ( | const ArraySubscriptExpr * | E, |
bool | Accessed = false |
||
) |
Definition at line 3771 of file CGExpr.cpp.
References clang::ast_matchers::arrayType, Builder, clang::Type::castAs(), CGM, clang::CodeGen::CGBuilderTy::CreateElementBitCast(), emitArraySubscriptGEP(), EmitBoundsCheck(), EmitExtVectorElementLValue(), EmitLValue(), EmitPointerWithAlignment(), EmitScalarExpr(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::Address::getAlignment(), getArrayElementAlign(), clang::Type::getAs(), clang::ArraySubscriptExpr::getBase(), clang::CodeGen::LValue::getBaseInfo(), getContext(), clang::CodeGen::Address::getElementType(), clang::ArraySubscriptExpr::getExprLoc(), clang::ArraySubscriptExpr::getIdx(), getLangOpts(), clang::ArraySubscriptExpr::getLHS(), clang::CodeGen::Address::getPointer(), clang::CharUnits::getQuantity(), clang::ArraySubscriptExpr::getRHS(), clang::CodeGen::CodeGenModule::getTBAAInfoForSubobject(), clang::Expr::getType(), clang::CodeGen::LValue::getType(), clang::ASTContext::getTypeSizeInChars(), getVLASize(), clang::SanitizerSet::has(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::CodeGen::Address::invalid(), clang::Expr::isOBJCGCCandidate(), clang::Type::isSignedIntegerOrEnumerationType(), clang::CodeGen::LValue::isSimple(), isSimpleArrayDecayOperand(), clang::Type::isVectorType(), MakeAddrLValue(), clang::CodeGen::LValue::MakeVectorElt(), clang::LangOptions::NonGC, clang::CodeGen::CodeGenFunction::VlaSizePair::NumElts, SanOpts, clang::CodeGen::LValue::setNonGC(), and setObjCGCLValueClass().
Referenced by EmitCheckedLValue(), EmitLValue(), and EmitOMPArraySectionExpr().
Address CodeGenFunction::EmitArrayToPointerDecay | ( | const Expr * | Array, |
LValueBaseInfo * | BaseInfo = nullptr , |
||
TBAAAccessInfo * | TBAAInfo = nullptr |
||
) |
Definition at line 3596 of file CGExpr.cpp.
References Builder, clang::Type::castAsArrayTypeUnsafe(), CGM, ConvertType(), ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateConstArrayGEP(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), EmitLValue(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::LValue::getBaseInfo(), clang::CodeGen::Address::getElementType(), clang::ArrayType::getElementType(), clang::CodeGen::CodeGenModule::getTBAAAccessInfo(), clang::Expr::getType(), clang::Type::isArrayType(), and clang::Type::isVariableArrayType().
Referenced by EmitPointerWithAlignment().
void CodeGenFunction::EmitAsanPrologueOrEpilogue | ( | bool | Prologue | ) |
Definition at line 777 of file CGClass.cpp.
References Builder, CGM, 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::DeclContext::getParent(), clang::CharUnits::getQuantity(), clang::ValueDecl::getType(), clang::ASTContext::getTypeInfoInChars(), clang::CodeGen::CodeGenTypeCache::IntPtrTy, clang::FieldDecl::isBitField(), LoadCXXThis(), clang::RecordDecl::mayInsertExtraPadding(), Offset, clang::ASTContext::toCharUnitsFromBits(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by EmitConstructorBody(), and EmitDestructorBody().
void CodeGenFunction::EmitAsmStmt | ( | const AsmStmt & | S | ) |
Definition at line 2330 of file CGStmt.cpp.
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 2116 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 806 of file CGAtomic.cpp.
References clang::interp::Add(), clang::CodeGen::CallArgList::add(), AddDirectArgument(), clang::prec::And, clang::ASTContext::BoolTy, Builder, CGM, convertTempToRValue(), ConvertTypeForMem(), createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), CreateMemTemp(), clang::CodeGen::CGBuilderTy::CreateStore(), CurFn, EmitAtomicInit(), emitAtomicLibcall(), EmitAtomicOp(), EmitCastToVoidPtr(), EmitPointerWithAlignment(), EmitPostAtomicMinMax(), EmitScalarExpr(), EmitStoreOfScalar(), EmitValToTemp(), clang::CodeGen::RValue::get(), clang::CodeGen::Address::getAlignment(), clang::Type::getAs(), clang::AtomicExpr::getBeginLoc(), getContext(), clang::CodeGen::CodeGenModule::getDiags(), clang::Expr::getExprLoc(), clang::ASTContext::getIntPtrType(), clang::ASTContext::getIntTypeForBitwidth(), clang::TargetInfo::getMaxAtomicInlineWidth(), 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::AtomicExpr::getScope(), clang::AtomicExpr::getScopeModel(), clang::CodeGen::CodeGenModule::getSize(), getTarget(), clang::ASTContext::getTargetAddressSpace(), getTargetHooks(), clang::CodeGen::Address::getType(), clang::Expr::getType(), clang::ASTContext::getTypeInfoInChars(), clang::ASTContext::getTypeSizeInChars(), clang::QualType::getUnqualifiedType(), clang::AtomicExpr::getVal1(), clang::AtomicExpr::getVal2(), clang::AtomicExpr::getValueType(), clang::AtomicExpr::getWeak(), int, clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::Address::invalid(), clang::AtomicExpr::isCmpXChg(), clang::Type::isFloatingType(), clang::AtomicExpr::isOpenCL(), clang::Type::isPointerType(), clang::Type::isSignedIntegerType(), clang::CodeGen::Address::isValid(), clang::Type::isVoidType(), MakeAddrLValue(), clang::opencl_generic, clang::CodeGen::TargetCodeGenInfo::performAddrSpaceCast(), clang::DiagnosticsEngine::Report(), clang::CodeGen::CodeGenTypeCache::SizeTy, string(), clang::interp::Sub(), clang::ASTContext::toBits(), clang::ASTContext::toCharUnitsFromBits(), V, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::ASTContext::VoidTy.
Definition at line 2141 of file CGAtomic.cpp.
References clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::AggValueSlot::DoesNotOverlap, 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 1609 of file CGAtomic.cpp.
References clang::CodeGen::LValue::getType(), clang::Type::isAtomicType(), and clang::CodeGen::LValue::isVolatileQualified().
Referenced by EmitLoadOfScalar(), and emitSimpleAtomicLoad().
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 1655 of file CGAtomic.cpp.
Definition at line 2028 of file CGAtomic.cpp.
References clang::CodeGen::LValue::getType(), clang::Type::isAtomicType(), and clang::CodeGen::LValue::isVolatileQualified().
Referenced by clang::CodeGen::CGOpenMPRuntime::checkAndEmitLastprivateConditional(), emitSimpleAtomicStore(), and EmitStoreOfScalar().
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 2046 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::CodeGen::LValue::getTBAAInfo(), clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::RValue::isAggregate(), clang::CodeGen::LValue::isSimple(), clang::CodeGen::CodeGenTypeCache::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 2134 of file CGAtomic.cpp.
Referenced by EmitOMPAtomicSimpleUpdateExpr().
void CodeGenFunction::EmitAttributedStmt | ( | const AttributedStmt & | S | ) |
Definition at line 698 of file CGStmt.cpp.
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 1428 of file CGDecl.cpp.
References Builder, Bypasses, CGM, ConvertTypeForMem(), clang::CPlusPlus, clang::CodeGen::CGBuilderTy::CreateStore(), CreateTempAlloca(), clang::Default, EmitLifetimeStart(), EmitStaticVarDecl(), EmitVariablyModifiedType(), EnsureInsertPoint(), clang::CodeGen::CGOpenMPRuntime::getAddressOfLocalVariable(), clang::CodeGen::CodeGenFunction::OMPBuilderCBHelpers::getAddressOfLocalVariable(), clang::QualType::getAddressSpace(), clang::Type::getAs(), getBlockByrefInfo(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), getContext(), clang::TargetInfo::getCXXABI(), clang::CodeGen::CodeGenModule::getDataLayout(), getDebugInfo(), clang::ASTContext::getDeclAlign(), clang::VarDecl::getInit(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::NamedDecl::getName(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::CodeGen::Address::getPointer(), getTarget(), clang::ValueDecl::getType(), hasLabelBeenSeenInCurrentScope(), clang::CodeGenOptions::hasReducedDebugInfo(), HaveInsertPoint(), clang::InternalLinkage, clang::CodeGen::Address::invalid(), clang::Type::isArrayType(), clang::CodeGen::VarBypassDetector::IsBypassed(), clang::Expr::isConstantInitializer(), clang::Type::isConstantSizeType(), clang::VarDecl::isConstexpr(), clang::VarDecl::isEscapingByref(), clang::VarDecl::isExceptionVariable(), clang::TargetCXXABI::isMicrosoft(), clang::VarDecl::isNRVOVariable(), clang::QualType::isPODType(), clang::Type::isRecordType(), clang::CodeGen::CodeGenModule::isTypeConstant(), clang::CodeGen::Address::isValid(), clang::Type::isVariablyModifiedType(), NRVOFlags, clang::CharUnits::One(), clang::OpenCL, clang::opencl_constant, clang::opencl_private, ReturnValue, clang::CodeGen::CodeGenFunction::AutoVarEmission::useLifetimeMarkers(), and clang::interp::Zero().
Referenced by EmitAutoVarDecl(), clang::CodeGen::CGOpenMPRuntime::emitNumThreadsForTargetDirective(), and getNumThreads().
void CodeGenFunction::EmitAutoVarCleanups | ( | const AutoVarEmission & | emission | ) |
Definition at line 2047 of file CGDecl.cpp.
References clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_WEAK, CGM, cxxDestructorCanThrow(), EHStack, emitAutoVarTypeCleanup(), enterByrefCleanup(), clang::LangOptions::GCOnly, clang::CodeGen::CodeGenModule::GetAddrOfFunction(), clang::Decl::getAttr(), getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), getLangOpts(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::Decl::hasAttr(), HaveInsertPoint(), clang::QualType::isObjCGCWeak(), clang::VarDecl::needsDestruction(), clang::LangOptions::NonGC, clang::CodeGen::NormalAndEHCleanup, and clang::CodeGen::NormalCleanup.
Referenced by EmitAutoVarDecl(), clang::CodeGen::CGOpenMPRuntime::emitNumThreadsForTargetDirective(), and getNumThreads().
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 1327 of file CGDecl.cpp.
References EmitAutoVarAlloca(), EmitAutoVarCleanups(), and EmitAutoVarInit().
Referenced by EmitVarDecl().
void CodeGenFunction::EmitAutoVarInit | ( | const AutoVarEmission & | emission | ) |
Definition at line 1815 of file CGDecl.cpp.
References Builder, CGM, constWithPadding(), ContainsLabel(), clang::CodeGen::ApplyDebugLocation::CreateDefaultArtificial(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), defaultInitNonTrivialCStructVar(), drillIntoBlockVariable(), emitBlockByrefAddress(), emitByrefStructureInit(), EmitExprAsInit(), emitStoresForConstant(), EmitStoreThroughLValue(), EnsureInsertPoint(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getAllocatedAddress(), clang::Decl::getAttr(), getContext(), clang::VarDecl::getInit(), clang::ASTContext::getLangOpts(), clang::Decl::getLocation(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), clang::ValueDecl::getType(), HaveInsertPoint(), clang::CodeGen::CodeGenTypeCache::Int8Ty, isCapturedBy(), clang::VarDecl::isConstexpr(), isTrivialInitializer(), MakeAddrLValue(), clang::VarDecl::mightBeUsableInConstantExpressions(), No, clang::LangOptions::Pattern, clang::QualType::PDIK_Struct, replaceUndef(), clang::CodeGen::LValue::setNonGC(), clang::CodeGen::ConstantEmitter::tryEmitAbstractForInitializer(), clang::ast_matchers::type, clang::LangOptions::Uninitialized, and Yes.
Referenced by EmitAutoVarDecl().
void CodeGenFunction::emitAutoVarTypeCleanup | ( | const AutoVarEmission & | emission, |
QualType::DestructionKind | dtorKind | ||
) |
Enter a destroy cleanup for the given local variable.
Definition at line 1980 of file CGDecl.cpp.
References destroyARCStrongImprecise, destroyNonTrivialCStruct, clang::QualType::DK_cxx_destructor, clang::QualType::DK_none, clang::QualType::DK_nontrivial_c_struct, clang::QualType::DK_objc_strong_lifetime, clang::QualType::DK_objc_weak_lifetime, clang::CodeGen::EHCleanup, EHStack, getARCCleanupKind(), getDestroyer(), clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress(), clang::CodeGen::NormalAndEHCleanup, clang::ast_matchers::type, and clang::dataflow::var().
Referenced by EmitAutoVarCleanups().
LValue CodeGenFunction::EmitBinaryOperatorLValue | ( | const BinaryOperator * | E | ) |
Definition at line 5123 of file CGExpr.cpp.
References CGM, clang::CodeGen::CGOpenMPRuntime::checkAndEmitLastprivateConditional(), EmitAggExprToLValue(), EmitAnyExpr(), EmitARCStoreAutoreleasing(), EmitARCStoreStrong(), EmitCheckedLValue(), EmitComplexAssignmentLValue(), EmitIgnoredExpr(), EmitLValue(), EmitNullabilityCheck(), EmitPointerToDataMemberBinaryExpr(), EmitStoreThroughLValue(), EnsureInsertPoint(), getEvaluationKind(), clang::BinaryOperator::getExprLoc(), getLangOpts(), clang::BinaryOperator::getLHS(), clang::QualType::getObjCLifetime(), clang::BinaryOperator::getOpcode(), clang::CodeGen::CodeGenModule::getOpenMPRuntime(), clang::BinaryOperator::getRHS(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::CodeGen::RValue::isScalar(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, TCK_Store, clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, and clang::CodeGen::TEK_Scalar.
Referenced by EmitLValue().
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 564 of file CGStmt.cpp.
References Builder, CurFn, and EmitBranch().
Referenced by clang::CodeGen::CatchRetScope::Emit(), emitArrayDestroy(), EmitBranchOnBoolExpr(), EmitBranchToCounterBlock(), EmitCall(), emitCatchDispatchBlock(), EmitCfiSlowPathCheck(), EmitCheck(), EmitCleanup(), EmitCtorPrologue(), clang::CodeGen::CGCUDARuntime::EmitCUDAKernelCallExpr(), EmitCXXAggrConstructorCall(), EmitCXXDeleteExpr(), EmitCXXNewExpr(), EmitDynamicCast(), EmitDynamicCastToNull(), emitFilterDispatchBlock(), clang::CodeGen::CGOpenMPRuntime::emitIfClause(), emitInterWarpCopyFunction(), EmitLabel(), EmitLandingPad(), EmitMustTailThunk(), EmitNewArrayInitializer(), emitNonZeroVLAInit(), EmitObjectDelete(), EmitOMPAggregateInit(), EmitOMPAggregateReduction(), emitPostUpdateForReductionClause(), EmitReturnBlock(), EmitReturnValueCheck(), EmitSehScope(), emitShuffleAndReduceFunction(), EmitTrapCheck(), EmitTypeCheck(), EmitTypeidFromVTable(), clang::CodeGen::CGOpenMPRuntime::emitUDMapperArrayInitOrDel(), clang::CodeGen::CGOpenMPRuntime::emitUpdateClause(), EmitVTablePtrCheckForCast(), emitWasmCatchPadBlock(), emitWriteback(), emitWritebackArg(), EnsureInsertPoint(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), FinishFunction(), GenerateCXXGlobalInitFunc(), GetAddressOfBaseClass(), GetAddressOfDerivedClass(), PerformReturnAdjustment(), and shuffleAndStore().
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 601 of file CGStmt.cpp.
References Builder, and CurFn.
Referenced by emitCatchDispatchBlock(), emitCatchPadBlock(), emitFilterDispatchBlock(), and emitWasmCatchPadBlock().
Address CodeGenFunction::emitBlockByrefAddress | ( | Address | baseAddr, |
const BlockByrefInfo & | info, | ||
bool | followForward, | ||
const llvm::Twine & | name | ||
) |
Definition at line 2579 of file CGBlocks.cpp.
References Builder, clang::CodeGen::BlockByrefInfo::ByrefAlignment, clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStructGEP(), clang::CodeGen::BlockByrefInfo::FieldIndex, clang::transformer::name(), and clang::CodeGen::BlockByrefInfo::Type.
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 2572 of file CGBlocks.cpp.
References getBlockByrefInfo(), and clang::dataflow::var().
Referenced by drillIntoBlockVariable(), EmitAutoVarInit(), EmitDeclRefLValue(), EmitScalarInit(), generateByrefCopyHelper(), generateByrefDisposeHelper(), GetAddrOfBlockDecl(), and clang::CodeGen::CodeGenFunction::AutoVarEmission::getObjectAddress().
RValue CodeGenFunction::EmitBlockCallExpr | ( | const CallExpr * | E, |
ReturnValueSlot | ReturnValue | ||
) |
Definition at line 1180 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::CreateStructGEP(), EmitCall(), EmitCallArgs(), EmitScalarExpr(), clang::CodeGen::RValue::get(), clang::ASTContext::getAddrSpaceQualType(), clang::Type::getAs(), clang::CallExpr::getCallee(), clang::CallExpr::getCalleeDecl(), getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getGenericBlockLiteralType(), clang::CodeGen::CGOpenCLRuntime::getGenericVoidPointerType(), clang::CodeGen::CGOpenCLRuntime::getInvokeFunction(), getLangOpts(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), clang::Type::getPointeeType(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::ASTContext::getPointerType(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::OpenCL, clang::opencl_generic, ReturnValue, clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by EmitCallExpr().
llvm::Value * CodeGenFunction::EmitBlockCopyAndAutorelease | ( | llvm::Value * | Block, |
QualType | Ty | ||
) |
Definition at line 3935 of file CGObjC.cpp.
References clang::Block, CGM, clang::CodeGen::CGObjCRuntime::GenerateMessageSend(), clang::IdentifierTable::get(), getContext(), clang::SelectorTable::getNullarySelector(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ASTContext::Idents, and clang::ASTContext::Selectors.
llvm::Value * CodeGenFunction::EmitBlockLiteral | ( | const BlockExpr * | blockExpr | ) |
Emit block literal.
Emit a block literal expression in the current function.
Definition at line 783 of file CGBlocks.cpp.
References clang::Block, clang::CodeGen::CGBlockInfo::BlockAlign, clang::ast_matchers::blockExpr, clang::CodeGen::CGBlockInfo::BlockExpression, clang::CodeGen::CGBlockInfo::CanBeGlobal, CGM, computeBlockInfo(), CreateTempAlloca(), CurFn,