13#ifndef LLVM_CLANG_LIB_CODEGEN_CODEGENMODULE_H
14#define LLVM_CLANG_LIB_CODEGEN_CODEGENMODULE_H
32#include "llvm/ADT/DenseMap.h"
33#include "llvm/ADT/SetVector.h"
34#include "llvm/ADT/SmallPtrSet.h"
35#include "llvm/ADT/StringMap.h"
36#include "llvm/IR/Module.h"
37#include "llvm/IR/ValueHandle.h"
38#include "llvm/Transforms/Utils/SanitizerStats.h"
50class IndexedInstrProfReader;
62class ObjCImplementationDecl;
75class HeaderSearchOptions;
76class DiagnosticsEngine;
78class CXXDestructorDecl;
80class CoverageSourceInfo;
94class CoverageMappingModuleGen;
95class TargetCodeGenInfo;
216 uint32_t VisitedInMainFile;
217 uint32_t MissingInMainFile;
224 : VisitedInMainFile(0), MissingInMainFile(0),
Visited(0), Missing(0),
265 void Profile(llvm::FoldingSetNodeID &
id)
const {
308 unsigned NumAutoVarInit = 0;
309 llvm::Module &TheModule;
312 std::unique_ptr<CGCXXABI> ABI;
313 llvm::LLVMContext &VMContext;
314 std::string ModuleNameHash;
315 bool CXX20ModuleInits =
false;
316 std::unique_ptr<CodeGenTBAA> TBAA;
318 mutable std::unique_ptr<TargetCodeGenInfo> TheTargetCodeGenInfo;
329 std::unique_ptr<CGOpenCLRuntime> OpenCLRuntime;
330 std::unique_ptr<CGOpenMPRuntime> OpenMPRuntime;
331 std::unique_ptr<CGCUDARuntime> CUDARuntime;
332 std::unique_ptr<CGHLSLRuntime> HLSLRuntime;
333 std::unique_ptr<CGDebugInfo> DebugInfo;
334 std::unique_ptr<ObjCEntrypoints> ObjCData;
335 llvm::MDNode *NoObjCARCExceptionsMetadata =
nullptr;
336 std::unique_ptr<llvm::IndexedInstrProfReader> PGOReader;
338 std::unique_ptr<llvm::SanitizerStatReport> SanStats;
349 llvm::DenseMap<StringRef, GlobalDecl> DeferredDecls;
353 std::vector<GlobalDecl> DeferredDeclsToEmit;
355 DeferredDeclsToEmit.emplace_back(GD);
356 addEmittedDeferredDecl(GD);
360 llvm::DenseMap<llvm::StringRef, GlobalDecl> EmittedDeferredDecls;
363 if (!llvm::isa<FunctionDecl>(GD.
getDecl()))
366 if (llvm::GlobalValue::isLinkOnceLinkage(L) ||
367 llvm::GlobalValue::isWeakLinkage(L)) {
374 std::vector<GlobalDecl> Aliases;
379 std::vector<GlobalDecl> MultiVersionFuncs;
381 typedef llvm::StringMap<llvm::TrackingVH<llvm::Constant> > ReplacementsTy;
382 ReplacementsTy Replacements;
388 GlobalValReplacements;
392 llvm::DenseMap<const VarDecl*, llvm::GlobalVariable*> InitializerConstants;
400 std::vector<const CXXRecordDecl*> DeferredVTables;
403 std::vector<const CXXRecordDecl *> OpportunisticVTables;
408 std::vector<llvm::WeakTrackingVH> LLVMUsed;
409 std::vector<llvm::WeakTrackingVH> LLVMCompilerUsed;
420 llvm::MapVector<GlobalDecl, StringRef> MangledDeclNames;
421 llvm::StringMap<GlobalDecl, llvm::BumpPtrAllocator> Manglings;
424 std::vector<llvm::Constant*> Annotations;
427 llvm::StringMap<llvm::Constant*> AnnotationStrings;
430 llvm::DenseMap<unsigned, llvm::Constant *> AnnotationArgs;
432 llvm::StringMap<llvm::GlobalVariable *> CFConstantStringMap;
434 llvm::DenseMap<llvm::Constant *, llvm::GlobalVariable *> ConstantStringMap;
435 llvm::DenseMap<const UnnamedGlobalConstantDecl *, llvm::GlobalVariable *>
436 UnnamedGlobalConstantDeclMap;
437 llvm::DenseMap<const Decl*, llvm::Constant *> StaticLocalDeclMap;
438 llvm::DenseMap<const Decl*, llvm::GlobalVariable*> StaticLocalDeclGuardMap;
439 llvm::DenseMap<const Expr*, llvm::Constant *> MaterializedGlobalTemporaryMap;
441 llvm::DenseMap<QualType, llvm::Constant *> AtomicSetterHelperFnMap;
442 llvm::DenseMap<QualType, llvm::Constant *> AtomicGetterHelperFnMap;
445 llvm::DenseMap<QualType, llvm::Constant *> TypeDescriptorMap;
449 typedef llvm::MapVector<IdentifierInfo *,
450 llvm::GlobalValue *> StaticExternCMap;
451 StaticExternCMap StaticExternCValues;
454 std::vector<const VarDecl *> CXXThreadLocals;
458 std::vector<llvm::Function *> CXXThreadLocalInits;
459 std::vector<const VarDecl *> CXXThreadLocalInitVars;
462 std::vector<llvm::Function *> CXXGlobalInits;
469 llvm::DenseMap<const Decl*, unsigned> DelayedCXXInitPosition;
471 typedef std::pair<OrderGlobalInitsOrStermFinalizers, llvm::Function *>
474 struct GlobalInitPriorityCmp {
475 bool operator()(
const GlobalInitData &LHS,
476 const GlobalInitData &RHS)
const {
477 return LHS.first.priority < RHS.first.priority;
483 SmallVector<GlobalInitData, 8> PrioritizedCXXGlobalInits;
488 typedef std::tuple<llvm::FunctionType *, llvm::WeakTrackingVH,
490 CXXGlobalDtorsOrStermFinalizer_t;
491 SmallVector<CXXGlobalDtorsOrStermFinalizer_t, 8>
492 CXXGlobalDtorsOrStermFinalizers;
494 typedef std::pair<OrderGlobalInitsOrStermFinalizers, llvm::Function *>
497 struct StermFinalizerPriorityCmp {
498 bool operator()(
const StermFinalizerData &LHS,
499 const StermFinalizerData &RHS)
const {
500 return LHS.first.priority < RHS.first.priority;
506 SmallVector<StermFinalizerData, 8> PrioritizedCXXStermFinalizers;
509 llvm::SetVector<clang::Module *> ImportedModules;
516 SmallVector<llvm::MDNode *, 16> LinkerOptionsMetadata;
519 SmallVector<llvm::MDNode *, 16> ELFDependentLibraries;
526 llvm::WeakTrackingVH CFConstantStringClassRef;
530 QualType ObjCFastEnumerationStateType;
535 void createObjCRuntime();
537 void createOpenCLRuntime();
538 void createOpenMPRuntime();
539 void createCUDARuntime();
540 void createHLSLRuntime();
542 bool isTriviallyRecursive(
const FunctionDecl *F);
543 bool shouldEmitFunction(GlobalDecl GD);
544 bool shouldOpportunisticallyEmitVTables();
546 llvm::DenseMap<const CompoundLiteralExpr *, llvm::GlobalVariable *>
547 EmittedCompoundLiterals;
551 llvm::DenseMap<const BlockExpr *, llvm::Constant *> EmittedGlobalBlocks;
556 llvm::Constant *NSConcreteGlobalBlock =
nullptr;
557 llvm::Constant *NSConcreteStackBlock =
nullptr;
559 llvm::FunctionCallee BlockObjectAssign =
nullptr;
560 llvm::FunctionCallee BlockObjectDispose =
nullptr;
562 llvm::Type *BlockDescriptorType =
nullptr;
563 llvm::Type *GenericBlockLiteralType =
nullptr;
574 llvm::Function *LifetimeStartFn =
nullptr;
577 llvm::Function *LifetimeEndFn =
nullptr;
579 std::unique_ptr<SanitizerMetadata> SanitizerMD;
581 llvm::MapVector<const Decl *, bool> DeferredEmptyCoverageMappingDecls;
583 std::unique_ptr<CoverageMappingModuleGen> CoverageMapping;
588 typedef llvm::DenseMap<QualType, llvm::Metadata *> MetadataTypeMap;
589 MetadataTypeMap MetadataIdMap;
590 MetadataTypeMap VirtualMetadataIdMap;
591 MetadataTypeMap GeneralizedMetadataIdMap;
593 llvm::DenseMap<const llvm::Constant *, llvm::GlobalVariable *> RTTIProxyMap;
598 GlobalTopLevelStmtBlockInFlight;
631 assert(OpenCLRuntime !=
nullptr);
632 return *OpenCLRuntime;
637 assert(OpenMPRuntime !=
nullptr);
638 return *OpenMPRuntime;
643 assert(CUDARuntime !=
nullptr);
649 assert(HLSLRuntime !=
nullptr);
654 assert(ObjCData !=
nullptr);
665 llvm::IndexedInstrProfReader *
getPGOReader()
const {
return PGOReader.get(); }
668 return CoverageMapping.get();
672 return StaticLocalDeclMap[D];
676 StaticLocalDeclMap[D] =
C;
681 llvm::GlobalValue::LinkageTypes
Linkage);
684 return StaticLocalDeclGuardMap[D];
687 llvm::GlobalVariable *
C) {
688 StaticLocalDeclGuardMap[D] =
C;
698 return AtomicSetterHelperFnMap[Ty];
701 llvm::Constant *Fn) {
702 AtomicSetterHelperFnMap[Ty] = Fn;
706 return AtomicGetterHelperFnMap[Ty];
709 llvm::Constant *Fn) {
710 AtomicGetterHelperFnMap[Ty] = Fn;
714 return TypeDescriptorMap[Ty];
717 TypeDescriptorMap[Ty] =
C;
723 if (!NoObjCARCExceptionsMetadata)
724 NoObjCARCExceptionsMetadata =
726 return NoObjCARCExceptionsMetadata;
735 const {
return HeaderSearchOpts; }
737 const {
return PreprocessorOpts; }
742 return TheModule.getDataLayout();
814 if (
Base.getTBAAInfo().isMayAlias())
870 llvm_unreachable(
"unknown visibility!");
881 llvm::GlobalVariable *
883 llvm::GlobalValue::LinkageTypes
Linkage,
884 llvm::Align Alignment);
887 llvm::FunctionType *ty,
const Twine &name,
const CGFunctionInfo &FI,
889 llvm::GlobalVariable::LinkageTypes
Linkage =
890 llvm::GlobalVariable::InternalLinkage);
916 llvm::Type *Ty =
nullptr,
923 bool ForVTable =
false,
924 bool DontDefer =
false,
1007 return EmittedGlobalBlocks.lookup(BE);
1028 StringRef Name =
".str");
1041 const char *GlobalName =
nullptr);
1049 llvm::GlobalVariable *
1055 llvm::GlobalVariable *GV);
1074 llvm::FunctionType *FnType =
nullptr,
1075 bool DontDefer =
false,
1085 llvm::FunctionType *FnType =
nullptr,
bool DontDefer =
false,
1091 unsigned BuiltinID);
1120 template<
typename SomeDecl>
1134 CXXGlobalDtorsOrStermFinalizers.emplace_back(DtorFn.getFunctionType(),
1135 DtorFn.getCallee(), Object);
1140 CXXGlobalDtorsOrStermFinalizers.emplace_back(DtorFn.getFunctionType(),
1141 DtorFn.getCallee(),
nullptr);
1147 AddGlobalDtor(StermFinalizer,
Priority);
1153 PrioritizedCXXStermFinalizers.size());
1154 PrioritizedCXXStermFinalizers.push_back(
1155 std::make_pair(Key, StermFinalizer));
1161 llvm::FunctionCallee
1163 llvm::AttributeList ExtraAttrs = llvm::AttributeList(),
1164 bool Local =
false,
bool AssumeConvergent =
false);
1219 llvm::Function *F,
bool IsThunk);
1254 llvm::AttributeList &Attrs,
unsigned &
CallingConv,
1255 bool AttrOnCallSite,
bool IsThunk);
1276 bool WillInternalize);
1318 llvm::GlobalValue::LinkageTypes
1320 bool IsConstantVariable);
1323 llvm::GlobalValue::LinkageTypes
1349 const AnnotateAttr *AA,
1361 StringRef
Category = StringRef())
const;
1367 StringRef
Category = StringRef())
const;
1381 return SanitizerMD.get();
1385 DeferredVTables.push_back(RD);
1445 llvm::GlobalObject::VCallVisibility
1451 llvm::GlobalVariable *VTable,
1503 std::vector<const CXXRecordDecl *>
1506 llvm::GlobalVariable *
1539 bool forPointeeType =
false);
1551 const Decl *D)
const;
1559 llvm::Constant *GetOrCreateLLVMFunction(
1560 StringRef MangledName, llvm::Type *Ty,
GlobalDecl D,
bool ForVTable,
1561 bool DontDefer =
false,
bool IsThunk =
false,
1562 llvm::AttributeList ExtraAttrs = llvm::AttributeList(),
1570 llvm::Constant *GetOrCreateMultiVersionResolver(
GlobalDecl GD);
1578 StringRef &CurName);
1581 GetOrCreateLLVMGlobal(StringRef MangledName, llvm::Type *Ty,
LangAS AddrSpace,
1585 bool GetCPUAndFeaturesAttributes(
GlobalDecl GD,
1586 llvm::AttrBuilder &AttrBuilder);
1587 void setNonAliasAttributes(
GlobalDecl GD, llvm::GlobalObject *GO);
1590 void SetFunctionAttributes(
GlobalDecl GD, llvm::Function *F,
1591 bool IsIncompleteFunction,
bool IsThunk);
1593 void EmitGlobalDefinition(
GlobalDecl D, llvm::GlobalValue *GV =
nullptr);
1595 void EmitGlobalFunctionDefinition(
GlobalDecl GD, llvm::GlobalValue *GV);
1596 void EmitMultiVersionFunctionDefinition(
GlobalDecl GD, llvm::GlobalValue *GV);
1598 void EmitGlobalVarDefinition(
const VarDecl *D,
bool IsTentative =
false);
1599 void EmitExternalVarDeclaration(
const VarDecl *D);
1602 void emitCPUDispatchDefinition(
GlobalDecl GD);
1613 void EmitCXXThreadLocalInitFunc();
1619 void EmitCXXGlobalInitFunc();
1622 void EmitCXXGlobalCleanUpFunc();
1626 void EmitCXXGlobalVarDeclInitFunc(
const VarDecl *D,
1627 llvm::GlobalVariable *Addr,
1630 void EmitPointerToInitFunc(
const VarDecl *VD, llvm::GlobalVariable *Addr,
1631 llvm::Function *InitFunc, InitSegAttr *ISA);
1634 void AddGlobalCtor(llvm::Function *Ctor,
int Priority = 65535,
1635 unsigned LexOrder = ~0
U,
1636 llvm::Constant *AssociatedData =
nullptr);
1637 void AddGlobalDtor(llvm::Function *Dtor,
int Priority = 65535,
1638 bool IsDtorAttrFunc =
false);
1643 void EmitCtorList(
CtorList &Fns,
const char *GlobalName);
1646 void EmitDeferred();
1652 void EmitVTablesOpportunistically();
1655 void applyReplacements();
1658 void applyGlobalValReplacements();
1660 void checkAliases();
1662 std::map<int, llvm::TinyPtrVector<llvm::Function *>> DtorsUsingAtExit;
1666 void registerGlobalDtorsWithAtExit();
1671 void unregisterGlobalDtorsWithUnAtExit();
1674 void emitMultiVersionFunctions();
1677 void EmitDeferredVTables();
1681 void emitAtAvailableLinkGuard();
1684 void emitLLVMUsed();
1690 void EmitModuleLinkOptions();
1699 bool CheckAndReplaceExternCIFuncs(llvm::GlobalValue *Elem,
1700 llvm::GlobalValue *CppFunc);
1704 void EmitStaticExternCAliases();
1706 void EmitDeclMetadata();
1709 void EmitVersionIdentMetadata();
1712 void EmitCommandLineMetadata();
1716 void EmitBackendOptionsMetadata(
const CodeGenOptions &CodeGenOpts);
1719 void EmitOpenCLMetadata();
1723 void EmitCoverageFile();
1733 bool MayBeEmittedEagerly(
const ValueDecl *D);
1737 void SimplifyPersonality();
1741 void getTrivialDefaultFunctionAttributes(StringRef Name,
bool HasOptnone,
1742 bool AttrOnCallSite,
1743 llvm::AttrBuilder &FuncAttrs);
1748 void getDefaultFunctionAttributes(StringRef Name,
bool HasOptnone,
1749 bool AttrOnCallSite,
1750 llvm::AttrBuilder &FuncAttrs);
1752 llvm::Metadata *CreateMetadataIdentifierImpl(
QualType T, MetadataTypeMap &Map,
Enums/classes describing ABI related information about constructors, destructors and thunks.
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
This file defines OpenMP nodes for declarative directives.
llvm::DenseSet< const void * > Visited
Defines the clang::LangOptions interface.
Defines the clang::Module class, which describes a module in the source code.
__DEVICE__ void * memset(void *__a, int __b, size_t __c)
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
CharUnits getTypeSizeInChars(QualType T) const
Return the size of the specified (complete) type T, in characters.
Attr - This represents one attribute.
Represents a block literal declaration, which is like an unnamed FunctionDecl.
BlockExpr - Adaptor class for mixing a BlockDecl with expressions.
Represents a C++ destructor within a class.
Represents a C++ struct/union/class.
const CXXBaseSpecifier *const * path_const_iterator
CharUnits - This is an opaque type for sizes expressed in character units.
QuantityType getQuantity() const
getQuantity - Get the raw integer representation of this quantity.
CodeGenOptions - Track various options which control how the code is optimized and passed to the back...
A pair of helper functions for a __block variable.
virtual ~BlockByrefHelpers()
void Profile(llvm::FoldingSetNodeID &id) const
virtual void emitCopy(CodeGenFunction &CGF, Address dest, Address src)=0
BlockByrefHelpers(CharUnits alignment)
virtual bool needsCopy() const
llvm::Constant * CopyHelper
CharUnits Alignment
The alignment of the field.
virtual void emitDispose(CodeGenFunction &CGF, Address field)=0
BlockByrefHelpers(const BlockByrefHelpers &)=default
virtual bool needsDispose() const
llvm::Constant * DisposeHelper
virtual void profileImpl(llvm::FoldingSetNodeID &id) const =0
Implements C++ ABI-specific code generation functions.
Abstract information about a function or function prototype.
This class gathers all debug information during compilation and is responsible for emitting to llvm g...
CGFunctionInfo - Class to encapsulate the information about a function definition.
Implements runtime-specific code generation functions.
CodeGenFunction - This class organizes the per-function state that is used while generating LLVM code...
This class organizes the cross-function state that is used while generating LLVM code.
StringRef getBlockMangledName(GlobalDecl GD, const BlockDecl *BD)
llvm::FunctionCallee getBlockObjectAssign()
const PreprocessorOptions & getPreprocessorOpts() const
ConstantAddress GetAddrOfMSGuidDecl(const MSGuidDecl *GD)
Get the address of a GUID.
void AddCXXPrioritizedStermFinalizerEntry(llvm::Function *StermFinalizer, int Priority)
void setGVProperties(llvm::GlobalValue *GV, GlobalDecl GD) const
Set visibility, dllimport/dllexport and dso_local.
void AddCXXDtorEntry(llvm::FunctionCallee DtorFn, llvm::Constant *Object)
Add a destructor and object to add to the C++ global destructor function.
llvm::FoldingSet< BlockByrefHelpers > ByrefHelpersCache
void AddVTableTypeMetadata(llvm::GlobalVariable *VTable, CharUnits Offset, const CXXRecordDecl *RD)
Create and attach type metadata for the given vtable.
void UpdateCompletedType(const TagDecl *TD)
llvm::MDNode * getTBAAAccessTagInfo(TBAAAccessInfo Info)
getTBAAAccessTagInfo - Get TBAA tag for a given memory access.
llvm::MDNode * getNoObjCARCExceptionsMetadata()
void AddCXXStermFinalizerToGlobalDtor(llvm::Function *StermFinalizer, int Priority)
Add an sterm finalizer to its own llvm.global_dtors entry.
llvm::GlobalVariable::ThreadLocalMode GetDefaultLLVMTLSModel() const
Get LLVM TLS mode from CodeGenOptions.
void EmitExplicitCastExprType(const ExplicitCastExpr *E, CodeGenFunction *CGF=nullptr)
Emit type info if type of an expression is a variably modified type.
void SetInternalFunctionAttributes(GlobalDecl GD, llvm::Function *F, const CGFunctionInfo &FI)
Set the attributes on the LLVM function for the given decl and function info.
void setDSOLocal(llvm::GlobalValue *GV) const
llvm::GlobalObject::VCallVisibility GetVCallVisibilityLevel(const CXXRecordDecl *RD, llvm::DenseSet< const CXXRecordDecl * > &Visited)
Returns the vcall visibility of the given type.
llvm::MDNode * getTBAAStructInfo(QualType QTy)
CGHLSLRuntime & getHLSLRuntime()
Return a reference to the configured HLSL runtime.
llvm::Constant * EmitAnnotationArgs(const AnnotateAttr *Attr)
Emit additional args of the annotation.
llvm::Module & getModule() const
llvm::FunctionCallee CreateRuntimeFunction(llvm::FunctionType *Ty, StringRef Name, llvm::AttributeList ExtraAttrs=llvm::AttributeList(), bool Local=false, bool AssumeConvergent=false)
Create or return a runtime function declaration with the specified type and name.
CGDebugInfo * getModuleDebugInfo()
ConstantAddress GetAddrOfConstantCompoundLiteral(const CompoundLiteralExpr *E)
Returns a pointer to a constant global variable for the given file-scope compound literal expression.
bool NeedAllVtablesTypeId() const
Returns whether this module needs the "all-vtables" type identifier.
void addCompilerUsedGlobal(llvm::GlobalValue *GV)
Add a global to a list to be added to the llvm.compiler.used metadata.
std::vector< const CXXRecordDecl * > getMostBaseClasses(const CXXRecordDecl *RD)
Return a vector of most-base classes for RD.
CodeGenVTables & getVTables()
CtorList & getGlobalDtors()
llvm::ConstantInt * CreateCrossDsoCfiTypeId(llvm::Metadata *MD)
Generate a cross-DSO type identifier for MD.
void setStaticLocalDeclAddress(const VarDecl *D, llvm::Constant *C)
llvm::Constant * EmitNullConstantForBase(const CXXRecordDecl *Record)
Return a null constant appropriate for zero-initializing a base class with the given type.
llvm::Function * getLLVMLifetimeStartFn()
Lazily declare the @llvm.lifetime.start intrinsic.
CharUnits GetTargetTypeStoreSize(llvm::Type *Ty) const
Return the store size, in character units, of the given LLVM type.
void AddCXXStermFinalizerEntry(llvm::FunctionCallee DtorFn)
Add an sterm finalizer to the C++ global cleanup function.
void setTypeDescriptorInMap(QualType Ty, llvm::Constant *C)
bool getExpressionLocationsEnabled() const
Return true if we should emit location information for expressions.
CharUnits getMinimumClassObjectSize(const CXXRecordDecl *CD)
Returns the minimum object size for an object of the given class type (or a class derived from it).
void addGlobalValReplacement(llvm::GlobalValue *GV, llvm::Constant *C)
llvm::FunctionCallee getAddrAndTypeOfCXXStructor(GlobalDecl GD, const CGFunctionInfo *FnInfo=nullptr, llvm::FunctionType *FnType=nullptr, bool DontDefer=false, ForDefinition_t IsForDefinition=NotForDefinition)
llvm::Constant * GetAddrOfRTTIDescriptor(QualType Ty, bool ForEH=false)
Get the address of the RTTI descriptor for the given type.
llvm::Constant * GetAddrOfFunction(GlobalDecl GD, llvm::Type *Ty=nullptr, bool ForVTable=false, bool DontDefer=false, ForDefinition_t IsForDefinition=NotForDefinition)
Return the address of the given function.
Address createUnnamedGlobalFrom(const VarDecl &D, llvm::Constant *Constant, CharUnits Align)
void setGVPropertiesAux(llvm::GlobalValue *GV, const NamedDecl *D) const
const IntrusiveRefCntPtr< llvm::vfs::FileSystem > & getFileSystem() const
void setAddrOfGlobalBlock(const BlockExpr *BE, llvm::Constant *Addr)
Notes that BE's global block is available via Addr.
void setStaticLocalDeclGuardAddress(const VarDecl *D, llvm::GlobalVariable *C)
bool ReturnTypeUsesFPRet(QualType ResultType)
Return true iff the given type uses 'fpret' when used as a return type.
void EmitMainVoidAlias()
Emit an alias for "main" if it has no arguments (needed for wasm).
void DecorateInstructionWithInvariantGroup(llvm::Instruction *I, const CXXRecordDecl *RD)
Adds !invariant.barrier !tag to instruction.
llvm::Constant * getBuiltinLibFunction(const FunctionDecl *FD, unsigned BuiltinID)
Given a builtin id for a function like "__builtin_fabsf", return a Function* for "fabsf".
DiagnosticsEngine & getDiags() const
bool isInNoSanitizeList(SanitizerMask Kind, llvm::Function *Fn, SourceLocation Loc) const
llvm::Constant * getAddrOfCXXStructor(GlobalDecl GD, const CGFunctionInfo *FnInfo=nullptr, llvm::FunctionType *FnType=nullptr, bool DontDefer=false, ForDefinition_t IsForDefinition=NotForDefinition)
Return the address of the constructor/destructor of the given type.
bool isPaddedAtomicType(QualType type)
ConstantAddress GetAddrOfConstantString(const StringLiteral *Literal)
Return a pointer to a constant NSString object for the given string.
llvm::Constant * getNullPointer(llvm::PointerType *T, QualType QT)
Get target specific null pointer.
void ErrorUnsupported(const Stmt *S, const char *Type)
Print out an error that codegen doesn't support the specified stmt yet.
llvm::Constant * EmitAnnotateAttr(llvm::GlobalValue *GV, const AnnotateAttr *AA, SourceLocation L)
Generate the llvm::ConstantStruct which contains the annotation information for a given GlobalValue.
llvm::GlobalValue::LinkageTypes getLLVMLinkageForDeclarator(const DeclaratorDecl *D, GVALinkage Linkage, bool IsConstantVariable)
Returns LLVM linkage for a declarator.
TBAAAccessInfo mergeTBAAInfoForMemoryTransfer(TBAAAccessInfo DestInfo, TBAAAccessInfo SrcInfo)
mergeTBAAInfoForMemoryTransfer - Get merged TBAA information for the purposes of memory transfer call...
llvm::Type * getBlockDescriptorType()
Fetches the type of a generic block descriptor.
llvm::Constant * GetAddrOfGlobalBlock(const BlockExpr *BE, StringRef Name)
Gets the address of a block which requires no captures.
llvm::Constant * getAtomicGetterHelperFnMap(QualType Ty)
const LangOptions & getLangOpts() const
CGCUDARuntime & getCUDARuntime()
Return a reference to the configured CUDA runtime.
int getUniqueBlockCount()
Fetches the global unique block count.
llvm::Constant * EmitAnnotationLineNo(SourceLocation L)
Emit the annotation line number.
QualType getObjCFastEnumerationStateType()
Retrieve the record type that describes the state of an Objective-C fast enumeration loop (for....
CtorList & getGlobalCtors()
CharUnits getNaturalTypeAlignment(QualType T, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=nullptr, bool forPointeeType=false)
CodeGenTypes & getTypes()
bool shouldMapVisibilityToDLLExport(const NamedDecl *D) const
CGOpenCLRuntime & getOpenCLRuntime()
Return a reference to the configured OpenCL runtime.
const std::string & getModuleNameHash() const
const TargetInfo & getTarget() const
void EmitGlobal(GlobalDecl D)
Emit code for a single global function or var decl.
llvm::GlobalVariable * getStaticLocalDeclGuardAddress(const VarDecl *D)
llvm::Metadata * CreateMetadataIdentifierForType(QualType T)
Create a metadata identifier for the given type.
llvm::Constant * getTypeDescriptorFromMap(QualType Ty)
llvm::IndexedInstrProfReader * getPGOReader() const
llvm::GlobalValue::LinkageTypes getLLVMLinkageVarDefinition(const VarDecl *VD, bool IsConstant)
Returns LLVM linkage for a declarator.
void addUsedGlobal(llvm::GlobalValue *GV)
Add a global to a list to be added to the llvm.used metadata.
void AppendLinkerOptions(StringRef Opts)
Appends Opts to the "llvm.linker.options" metadata value.
bool hasObjCRuntime()
Return true iff an Objective-C runtime has been configured.
void AddDependentLib(StringRef Lib)
Appends a dependent lib to the appropriate metadata value.
void mergeDefaultFunctionDefinitionAttributes(llvm::Function &F, bool WillInternalize)
Apply default attributes to F, accounting for merge semantics of attributes that should not overwrite...
void Release()
Finalize LLVM code generation.
llvm::FunctionCallee IsOSVersionAtLeastFn
ProfileList::ExclusionType isFunctionBlockedByProfileList(llvm::Function *Fn, SourceLocation Loc) const
llvm::MDNode * getTBAABaseTypeInfo(QualType QTy)
getTBAABaseTypeInfo - Get metadata that describes the given base access type.
void EmitVTableTypeMetadata(const CXXRecordDecl *RD, llvm::GlobalVariable *VTable, const VTableLayout &VTLayout)
Emit type metadata for the given vtable using the given layout.
bool lookupRepresentativeDecl(StringRef MangledName, GlobalDecl &Result) const
void EmitOMPAllocateDecl(const OMPAllocateDecl *D)
Emit a code for the allocate directive.
void setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const
Set the visibility for the given LLVM GlobalValue.
CoverageMappingModuleGen * getCoverageMapping() const
llvm::Constant * GetNonVirtualBaseClassOffset(const CXXRecordDecl *ClassDecl, CastExpr::path_const_iterator PathBegin, CastExpr::path_const_iterator PathEnd)
Returns the offset from a derived class to a class.
bool TryEmitBaseDestructorAsAlias(const CXXDestructorDecl *D)
Try to emit a base destructor as an alias to its primary base-class destructor.
llvm::Constant * getMemberPointerConstant(const UnaryOperator *e)
bool HasHiddenLTOVisibility(const CXXRecordDecl *RD)
Returns whether the given record has hidden LTO visibility and therefore may participate in (single-m...
const llvm::DataLayout & getDataLayout() const
llvm::Constant * getNSConcreteGlobalBlock()
CharUnits computeNonVirtualBaseClassOffset(const CXXRecordDecl *DerivedClass, CastExpr::path_const_iterator Start, CastExpr::path_const_iterator End)
ObjCEntrypoints & getObjCEntrypoints() const
void setLLVMFunctionFEnvAttributes(const FunctionDecl *D, llvm::Function *F)
Set the LLVM function attributes that represent floating point environment.
TBAAAccessInfo getTBAAVTablePtrAccessInfo(llvm::Type *VTablePtrType)
getTBAAVTablePtrAccessInfo - Get the TBAA information that describes an access to a virtual table poi...
CGCXXABI & getCXXABI() const
ConstantAddress GetWeakRefReference(const ValueDecl *VD)
Get a reference to the target of VD.
CharUnits getVBaseAlignment(CharUnits DerivedAlign, const CXXRecordDecl *Derived, const CXXRecordDecl *VBase)
Returns the assumed alignment of a virtual base of a class.
llvm::Constant * GetFunctionStart(const ValueDecl *Decl)
llvm::GlobalVariable * getAddrOfConstantCompoundLiteralIfEmitted(const CompoundLiteralExpr *E)
If it's been emitted already, returns the GlobalVariable corresponding to a compound literal.
llvm::GlobalVariable * GetOrCreateRTTIProxyGlobalVariable(llvm::Constant *Addr)
static llvm::GlobalValue::VisibilityTypes GetLLVMVisibility(Visibility V)
void EmitTentativeDefinition(const VarDecl *D)
bool ReturnTypeUsesFP2Ret(QualType ResultType)
Return true iff the given type uses 'fp2ret' when used as a return type.
void EmitDeferredUnusedCoverageMappings()
Emit all the deferred coverage mappings for the uninstrumented functions.
void addUsedOrCompilerUsedGlobal(llvm::GlobalValue *GV)
Add a global to a list to be added to the llvm.compiler.used metadata.
CGOpenMPRuntime & getOpenMPRuntime()
Return a reference to the configured OpenMP runtime.
bool imbueXRayAttrs(llvm::Function *Fn, SourceLocation Loc, StringRef Category=StringRef()) const
Imbue XRay attributes to a function, applying the always/never attribute lists in the process.
SanitizerMetadata * getSanitizerMetadata()
llvm::Metadata * CreateMetadataIdentifierGeneralized(QualType T)
Create a metadata identifier for the generalization of the given type.
void addDefaultFunctionDefinitionAttributes(llvm::Function &F)
Adds attributes to F according to our CodeGenOptions and LangOptions, as though we had emitted it our...
void EmitGlobalAnnotations()
Emit all the global annotations.
llvm::Constant * getAddrOfGlobalBlockIfEmitted(const BlockExpr *BE)
Returns the address of a block which requires no caputres, or null if we've yet to emit the block for...
llvm::Function * codegenCXXStructor(GlobalDecl GD)
CharUnits getClassPointerAlignment(const CXXRecordDecl *CD)
Returns the assumed alignment of an opaque pointer to the given class.
const llvm::Triple & getTriple() const
void setAtomicSetterHelperFnMap(QualType Ty, llvm::Constant *Fn)
llvm::Constant * getOrCreateStaticVarDecl(const VarDecl &D, llvm::GlobalValue::LinkageTypes Linkage)
void AddDeferredUnusedCoverageMapping(Decl *D)
Stored a deferred empty coverage mapping for an unused and thus uninstrumented top level declaration.
bool AlwaysHasLTOVisibilityPublic(const CXXRecordDecl *RD)
Returns whether the given record has public LTO visibility (regardless of -lto-whole-program-visibili...
void MaybeHandleStaticInExternC(const SomeDecl *D, llvm::GlobalValue *GV)
If the declaration has internal linkage but is inside an extern "C" linkage specification,...
void DecorateInstructionWithTBAA(llvm::Instruction *Inst, TBAAAccessInfo TBAAInfo)
DecorateInstructionWithTBAA - Decorate the instruction with a TBAA tag.
llvm::Constant * getAtomicSetterHelperFnMap(QualType Ty)
TBAAAccessInfo getTBAAInfoForSubobject(LValue Base, QualType AccessType)
getTBAAInfoForSubobject - Get TBAA information for an access with a given base lvalue.
bool shouldUseTBAA() const
llvm::GlobalVariable::LinkageTypes getFunctionLinkage(GlobalDecl GD)
bool ReturnSlotInterferesWithArgs(const CGFunctionInfo &FI)
Return true iff the given type uses an argument slot when 'sret' is used as a return type.
void EmitVTable(CXXRecordDecl *Class)
This is a callback from Sema to tell us that a particular vtable is required to be emitted in this tr...
llvm::Constant * CreateRuntimeVariable(llvm::Type *Ty, StringRef Name)
Create a new runtime global variable with the specified type and name.
void ConstructAttributeList(StringRef Name, const CGFunctionInfo &Info, CGCalleeInfo CalleeInfo, llvm::AttributeList &Attrs, unsigned &CallingConv, bool AttrOnCallSite, bool IsThunk)
Get the LLVM attributes and calling convention to use for a particular function type.
CharUnits getDynamicOffsetAlignment(CharUnits ActualAlign, const CXXRecordDecl *Class, CharUnits ExpectedTargetAlign)
Given a class pointer with an actual known alignment, and the expected alignment of an object at a dy...
TBAAAccessInfo getTBAAAccessInfo(QualType AccessType)
getTBAAAccessInfo - Get TBAA information that describes an access to an object of the given type.
void setFunctionLinkage(GlobalDecl GD, llvm::Function *F)
llvm::Constant * GetAddrOfGlobal(GlobalDecl GD, ForDefinition_t IsForDefinition=NotForDefinition)
ConstantAddress GetAddrOfConstantCFString(const StringLiteral *Literal)
Return a pointer to a constant CFString object for the given string.
InstrProfStats & getPGOStats()
ProfileList::ExclusionType isFunctionBlockedFromProfileInstr(llvm::Function *Fn, SourceLocation Loc) const
void AddGlobalAnnotations(const ValueDecl *D, llvm::GlobalValue *GV)
Add global annotations that are set on D, for the global GV.
void setTLSMode(llvm::GlobalValue *GV, const VarDecl &D) const
Set the TLS mode for the given LLVM GlobalValue for the thread-local variable declaration D.
ItaniumVTableContext & getItaniumVTableContext()
ConstantAddress GetAddrOfConstantStringFromLiteral(const StringLiteral *S, StringRef Name=".str")
Return a pointer to a constant array for the given string literal.
ASTContext & getContext() const
ConstantAddress GetAddrOfTemplateParamObject(const TemplateParamObjectDecl *TPO)
Get the address of a template parameter object.
void EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D)
Emit a code for threadprivate directive.
llvm::Constant * getNSConcreteStackBlock()
ConstantAddress GetAddrOfUnnamedGlobalConstantDecl(const UnnamedGlobalConstantDecl *GCD)
Get the address of a UnnamedGlobalConstant.
TBAAAccessInfo mergeTBAAInfoForCast(TBAAAccessInfo SourceInfo, TBAAAccessInfo TargetInfo)
mergeTBAAInfoForCast - Get merged TBAA information for the purposes of type casts.
llvm::Constant * GetAddrOfGlobalVar(const VarDecl *D, llvm::Type *Ty=nullptr, ForDefinition_t IsForDefinition=NotForDefinition)
Return the llvm::Constant for the address of the given global variable.
MicrosoftVTableContext & getMicrosoftVTableContext()
const HeaderSearchOptions & getHeaderSearchOpts() const
llvm::SanitizerStatReport & getSanStats()
llvm::Constant * EmitAnnotationString(StringRef Str)
Emit an annotation string.
llvm::Type * getVTableComponentType() const
void EmitOMPDeclareMapper(const OMPDeclareMapperDecl *D, CodeGenFunction *CGF=nullptr)
Emit a code for declare mapper construct.
llvm::Function * getLLVMLifetimeEndFn()
Lazily declare the @llvm.lifetime.end intrinsic.
void EmitExternalDeclaration(const VarDecl *D)
bool supportsCOMDAT() const
void RefreshTypeCacheForClass(const CXXRecordDecl *Class)
llvm::MDNode * getTBAATypeInfo(QualType QTy)
getTBAATypeInfo - Get metadata used to describe accesses to objects of the given type.
void setAddrOfConstantCompoundLiteral(const CompoundLiteralExpr *CLE, llvm::GlobalVariable *GV)
Notes that CLE's GlobalVariable is GV.
void EmitOMPRequiresDecl(const OMPRequiresDecl *D)
Emit a code for requires directive.
void HandleCXXStaticMemberVarInstantiation(VarDecl *VD)
Tell the consumer that this variable has been instantiated.
bool ReturnTypeUsesSRet(const CGFunctionInfo &FI)
Return true iff the given type uses 'sret' when used as a return type.
const TargetCodeGenInfo & getTargetCodeGenInfo()
const CodeGenOptions & getCodeGenOpts() const
StringRef getMangledName(GlobalDecl GD)
llvm::Constant * GetConstantArrayFromStringLiteral(const StringLiteral *E)
Return a constant array for the given string.
void SetCommonAttributes(GlobalDecl GD, llvm::GlobalValue *GV)
Set attributes which are common to any form of a global definition (alias, Objective-C method,...
std::optional< CharUnits > getOMPAllocateAlignment(const VarDecl *VD)
Return the alignment specified in an allocate directive, if present.
llvm::GlobalVariable * CreateOrReplaceCXXRuntimeVariable(StringRef Name, llvm::Type *Ty, llvm::GlobalValue::LinkageTypes Linkage, llvm::Align Alignment)
Will return a global variable of the given type.
llvm::FunctionCallee getTerminateFn()
Get the declaration of std::terminate for the platform.
CharUnits getNaturalPointeeTypeAlignment(QualType T, LValueBaseInfo *BaseInfo=nullptr, TBAAAccessInfo *TBAAInfo=nullptr)
llvm::FunctionCallee getBlockObjectDispose()
TBAAAccessInfo mergeTBAAInfoForConditionalOperator(TBAAAccessInfo InfoA, TBAAAccessInfo InfoB)
mergeTBAAInfoForConditionalOperator - Get merged TBAA information for the purposes of conditional ope...
llvm::LLVMContext & getLLVMContext()
llvm::GlobalValue * GetGlobalValue(StringRef Ref)
void GenKernelArgMetadata(llvm::Function *FN, const FunctionDecl *FD=nullptr, CodeGenFunction *CGF=nullptr)
OpenCL v1.2 s5.6.4.6 allows the compiler to store kernel argument information in the program executab...
void CreateFunctionTypeMetadataForIcall(const FunctionDecl *FD, llvm::Function *F)
Create and attach type metadata to the given function.
void setKCFIType(const FunctionDecl *FD, llvm::Function *F)
Set type metadata to the given function.
void setAtomicGetterHelperFnMap(QualType Ty, llvm::Constant *Fn)
void maybeSetTrivialComdat(const Decl &D, llvm::GlobalObject &GO)
void EmitOMPDeclareReduction(const OMPDeclareReductionDecl *D, CodeGenFunction *CGF=nullptr)
Emit a code for declare reduction construct.
const ItaniumVTableContext & getItaniumVTableContext() const
void AddDetectMismatch(StringRef Name, StringRef Value)
Appends a detect mismatch command to the linker options.
void setDLLImportDLLExport(llvm::GlobalValue *GV, GlobalDecl D) const
bool isTypeConstant(QualType QTy, bool ExcludeCtor, bool ExcludeDtor)
isTypeConstant - Determine whether an object of this type can be emitted as a constant.
CGObjCRuntime & getObjCRuntime()
Return a reference to the configured Objective-C runtime.
llvm::Value * createOpenCLIntToSamplerConversion(const Expr *E, CodeGenFunction &CGF)
ConstantAddress GetAddrOfGlobalTemporary(const MaterializeTemporaryExpr *E, const Expr *Inner)
Returns a pointer to a global variable representing a temporary with static or thread storage duratio...
llvm::Constant * EmitNullConstant(QualType T)
Return the result of value-initializing the given type, i.e.
LangAS GetGlobalConstantAddressSpace() const
Return the AST address space of constant literal, which is used to emit the constant literal as globa...
LangAS GetGlobalVarAddressSpace(const VarDecl *D)
Return the AST address space of the underlying global variable for D, as determined by its declaratio...
llvm::GlobalVariable::LinkageTypes getVTableLinkage(const CXXRecordDecl *RD)
Return the appropriate linkage for the vtable, VTT, and type information of the given class.
void SetLLVMFunctionAttributes(GlobalDecl GD, const CGFunctionInfo &Info, llvm::Function *F, bool IsThunk)
Set the LLVM function attributes (sext, zext, etc).
void addDeferredVTable(const CXXRecordDecl *RD)
llvm::Type * getGenericBlockLiteralType()
The type of a generic block literal.
CharUnits getMinimumObjectSize(QualType Ty)
Returns the minimum object size for an object of the given type.
void addReplacement(StringRef Name, llvm::Constant *C)
llvm::ConstantInt * CreateKCFITypeId(QualType T)
Generate a KCFI type identifier for T.
llvm::FunctionCallee IsPlatformVersionAtLeastFn
void SetLLVMFunctionAttributesForDefinition(const Decl *D, llvm::Function *F)
Set the LLVM function attributes which only apply to a function definition.
llvm::Metadata * CreateMetadataIdentifierForVirtualMemPtrType(QualType T)
Create a metadata identifier that is intended to be used to check virtual calls via a member function...
llvm::Constant * getStaticLocalDeclAddress(const VarDecl *D)
llvm::Function * getIntrinsic(unsigned IID, ArrayRef< llvm::Type * > Tys=std::nullopt)
bool MayDropFunctionReturn(const ASTContext &Context, QualType ReturnType) const
Whether this function's return type has no side effects, and thus may be trivially discarded if it is...
ConstantAddress GetAddrOfConstantStringFromObjCEncode(const ObjCEncodeExpr *)
Return a pointer to a constant array for the given ObjCEncodeExpr node.
const GlobalDecl getMangledNameDecl(StringRef)
void ClearUnusedCoverageMapping(const Decl *D)
Remove the deferred empty coverage mapping as this declaration is actually instrumented.
void EmitTopLevelDecl(Decl *D)
Emit code for a single top level declaration.
llvm::Function * CreateGlobalInitOrCleanUpFunction(llvm::FunctionType *ty, const Twine &name, const CGFunctionInfo &FI, SourceLocation Loc=SourceLocation(), bool TLS=false, llvm::GlobalVariable::LinkageTypes Linkage=llvm::GlobalVariable::InternalLinkage)
llvm::Constant * EmitAnnotationUnit(SourceLocation Loc)
Emit the annotation's translation unit.
ConstantAddress GetAddrOfConstantCString(const std::string &Str, const char *GlobalName=nullptr)
Returns a pointer to a character array containing the literal and a terminating '\0' character.
std::vector< Structor > CtorList
void printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const
Print the postfix for externalized static variable or kernels for single source offloading languages ...
llvm::Constant * GetAddrOfThunk(StringRef Name, llvm::Type *FnTy, GlobalDecl GD)
Get the address of the thunk for the given global decl.
void moveLazyEmissionStates(CodeGenModule *NewBuilder)
Move some lazily-emitted states to the NewBuilder.
llvm::ConstantInt * getSize(CharUnits numChars)
Emit the given number of characters as a value of type size_t.
void finalizeKCFITypes()
Emit KCFI type identifier constants and remove unused identifiers.
This class organizes the cross-module state that is used while lowering AST types to LLVM types.
ItaniumVTableContext & getItaniumVTableContext()
MicrosoftVTableContext & getMicrosoftVTableContext()
A specialization of Address that requires the address to be an LLVM Constant.
Organizes the cross-function state that is used while generating code coverage mapping data.
This class records statistics on instrumentation based profiling.
bool hasDiagnostics()
Whether or not the stats we've gathered indicate any potential problems.
void addMissing(bool MainFile)
Record that a function we've visited has no profile data.
void addMismatched(bool MainFile)
Record that a function we've visited has mismatched profile data.
void addVisited(bool MainFile)
Record that we've visited a function and whether or not that function was in the main source file.
void reportDiagnostics(DiagnosticsEngine &Diags, StringRef MainFile)
Report potential problems we've found to Diags.
LValue - This represents an lvalue references.
TargetCodeGenInfo - This class organizes various target-specific codegeneration issues,...
CompoundLiteralExpr - [C99 6.5.2.5].
Stores additional source code information like skipped ranges which is required by the coverage mappi...
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Decl - This represents one declaration (or definition), e.g.
Represents a ValueDecl that came out of a declarator.
Concrete class used by the front-end to report problems and issues.
ExplicitCastExpr - An explicit cast written in the source code.
This represents one expression.
Represents a function declaration or definition.
GlobalDecl - represents a global declaration.
const Decl * getDecl() const
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
bool hasDefaultVisibilityExportMapping() const
bool isExplicitDefaultVisibilityExportMapping() const
bool isAllDefaultVisibilityExportMapping() const
Visibility getVisibility() const
bool isVisibilityExplicit() const
Represents a linkage specification.
Represents a prvalue temporary that is written into memory so that a reference can bind to it.
Describes a module or submodule.
This represents a decl that may have a name.
LinkageInfo getLinkageAndVisibility() const
Determines the linkage and visibility of this entity.
This represents '#pragma omp allocate ...' directive.
This represents '#pragma omp declare mapper ...' directive.
This represents '#pragma omp declare reduction ...' directive.
This represents '#pragma omp requires...' directive.
This represents '#pragma omp threadprivate ...' directive.
ObjCEncodeExpr, used for @encode in Objective-C.
ObjCImplementationDecl - Represents a class definition - this is where method definitions are specifi...
The basic abstraction for the target Objective-C runtime.
PreprocessorOptions - This class is used for passing the various options used in preprocessor initial...
ExclusionType
Represents if an how something should be excluded from profiling.
A (possibly-)qualified type.
Encodes a location in the source.
Stmt - This represents one statement.
StringLiteral - This represents a string literal expression, e.g.
Represents the declaration of a struct/union/class/enum.
Exposes information about the current target.
A template parameter object.
A declaration that models statements at global scope.
The base class of the type hierarchy.
CXXRecordDecl * getAsCXXRecordDecl() const
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
An artificial decl, representing a global anonymous constant value which is uniquified by value withi...
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Represents a variable declaration or definition.
Defines the clang::TargetInfo interface.
@ Decl
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
GVALinkage
A more specific kind of linkage than enum Linkage.
Linkage
Describes the different kinds of linkage (C++ [basic.link], C99 6.2.2) that an entity may have.
@ C
Languages that the frontend can parse and compile.
@ Result
The result type of a method or function.
LangAS
Defines the address space values used by the address space qualifier of QualType.
CallingConv
CallingConv - Specifies the calling convention that a function uses.
Visibility
Describes the different kinds of visibility that a declaration may have.
@ HiddenVisibility
Objects with "hidden" visibility are not seen by the dynamic linker.
@ ProtectedVisibility
Objects with "protected" visibility are seen by the dynamic linker but always dynamically resolve to ...
@ DefaultVisibility
Objects with "default" visibility are seen by the dynamic linker and act like normal objects.
YAML serialization mapping.
llvm::Constant * Initializer
Structor(int Priority, unsigned LexOrder, llvm::Constant *Initializer, llvm::Constant *AssociatedData)
llvm::Constant * AssociatedData
This structure provides a set of types that are commonly used during IR emission.
llvm::Function * objc_retainAutoreleasedReturnValue
id objc_retainAutoreleasedReturnValue(id);
llvm::Function * objc_retainAutoreleaseReturnValue
id objc_retainAutoreleaseReturnValue(id);
llvm::FunctionCallee objc_alloc
void objc_alloc(id);
llvm::Function * objc_retain
id objc_retain(id);
llvm::FunctionCallee objc_alloc_init
void objc_alloc_init(id);
llvm::Function * objc_autorelease
id objc_autorelease(id);
llvm::Function * objc_moveWeak
void objc_moveWeak(id *dest, id *src);
llvm::FunctionCallee objc_autoreleasePoolPopInvoke
void objc_autoreleasePoolPop(void*); Note this method is used when we are using exception handling
llvm::InlineAsm * retainAutoreleasedReturnValueMarker
A void(void) inline asm to use to mark that the return value of a call will be immediately retain.
llvm::Function * clang_arc_use
void clang.arc.use(...);
llvm::Function * objc_initWeak
id objc_initWeak(id*, id);
llvm::FunctionCallee objc_retainRuntimeFunction
id objc_retain(id); Note this is the runtime method not the intrinsic.
llvm::Function * objc_copyWeak
void objc_copyWeak(id *dest, id *src);
llvm::Function * objc_destroyWeak
void objc_destroyWeak(id*);
llvm::Function * objc_retainAutorelease
id objc_retainAutorelease(id);
llvm::Function * objc_autoreleasePoolPush
void *objc_autoreleasePoolPush(void);
llvm::Function * objc_retainBlock
id objc_retainBlock(id);
llvm::Function * objc_storeStrong
void objc_storeStrong(id*, id);
llvm::Function * objc_loadWeak
id objc_loadWeak(id*);
llvm::Function * clang_arc_noop_use
void clang.arc.noop.use(...);
llvm::Function * objc_loadWeakRetained
id objc_loadWeakRetained(id*);
llvm::Function * objc_release
void objc_release(id);
llvm::FunctionCallee objc_autoreleaseRuntimeFunction
id objc_autorelease(id); Note this is the runtime method not the intrinsic.
llvm::Function * objc_autoreleaseReturnValue
id objc_autoreleaseReturnValue(id);
llvm::FunctionCallee objc_releaseRuntimeFunction
void objc_release(id); Note this is the runtime method not the intrinsic.
llvm::FunctionCallee objc_allocWithZone
void objc_allocWithZone(id);
llvm::FunctionCallee objc_autoreleasePoolPop
void objc_autoreleasePoolPop(void*);
llvm::Function * objc_storeWeak
id objc_storeWeak(id*, id);
llvm::Function * objc_unsafeClaimAutoreleasedReturnValue
id objc_unsafeClaimAutoreleasedReturnValue(id);
bool operator<(const OrderGlobalInitsOrStermFinalizers &RHS) const
bool operator==(const OrderGlobalInitsOrStermFinalizers &RHS) const
OrderGlobalInitsOrStermFinalizers(unsigned int p, unsigned int l)
static TBAAAccessInfo getMayAliasInfo()