28 : M(m), VMContext(M.getContext()), CUNode(
CU),
29 AllowUnresolvedNodes(AllowUnresolvedNodes) {
31 if (
const auto &ETs = CUNode->getEnumTypes())
32 EnumTypes.assign(ETs.begin(), ETs.end());
33 if (
const auto &RTs = CUNode->getRetainedTypes())
34 AllRetainTypes.assign(RTs.begin(), RTs.end());
35 if (
const auto &GVs = CUNode->getGlobalVariables())
36 AllGVs.assign(GVs.begin(), GVs.end());
37 if (
const auto &IMs = CUNode->getImportedEntities())
38 ImportedModules.assign(IMs.begin(), IMs.end());
39 if (
const auto &MNs = CUNode->getMacros())
44void DIBuilder::trackIfUnresolved(
MDNode *
N) {
50 assert(AllowUnresolvedNodes &&
"Cannot handle unresolved nodes");
51 UnresolvedNodes.emplace_back(
N);
55 auto PN = SubprogramTrackedNodes.find(SP);
56 if (PN == SubprogramTrackedNodes.end())
66 if (!Scope || Scope->getSubprogram() != SP)
72 SP->replaceRetainedNodes(
MDTuple::get(VMContext, RetainedNodes));
77 assert(!AllowUnresolvedNodes &&
78 "creating type nodes without a CU is not supported");
82 if (!EnumTypes.empty())
83 CUNode->replaceEnumTypes(
97 if (!RetainValues.
empty())
98 CUNode->replaceRetainedTypes(
MDTuple::get(VMContext, RetainValues));
100 for (
auto *SP : AllSubprograms)
102 for (
auto *
N : RetainValues)
107 CUNode->replaceGlobalVariables(
MDTuple::get(VMContext, AllGVs));
109 if (!ImportedModules.empty())
112 ImportedModules.end())));
114 for (
const auto &
I : AllMacrosPerParent) {
117 CUNode->replaceMacros(
MDTuple::get(VMContext,
I.second.getArrayRef()));
123 TMF->getLine(), TMF->getFile(),
130 for (
const auto &
N : UnresolvedNodes)
131 if (
N && !
N->isResolved())
133 UnresolvedNodes.clear();
136 AllowUnresolvedNodes =
false;
150 bool SplitDebugInlining,
bool DebugInfoForProfiling,
154 assert(!CUNode &&
"Can only make one compile unit per DIBuilder instance");
156 VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer,
157 SplitName, Kind,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr, DWOId,
158 SplitDebugInlining, DebugInfoForProfiling, NameTableKind,
159 RangesBaseAddress, SysRoot, SDK);
162 NamedMDNode *NMD = M.getOrInsertNamedMetadata(
"llvm.dbg.cu");
164 trackIfUnresolved(CUNode);
171 DINodeArray Elements,
174 assert(File &&
"Source location has line number but no file");
175 unsigned EntitiesCount =
C.pImpl->DIImportedEntitys.size();
177 File, Line, Name, Elements);
178 if (EntitiesCount < C.pImpl->DIImportedEntitys.size())
188 DINodeArray Elements) {
189 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
190 Context, NS, File, Line,
StringRef(), Elements,
191 getImportTrackingVector(Context));
196 DIFile *File,
unsigned Line,
197 DINodeArray Elements) {
198 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
199 Context, NS, File, Line,
StringRef(), Elements,
200 getImportTrackingVector(Context));
204 DIFile *File,
unsigned Line,
205 DINodeArray Elements) {
206 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
207 Context, M, File, Line,
StringRef(), Elements,
208 getImportTrackingVector(Context));
213 DIFile *File,
unsigned Line,
217 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_declaration,
218 Context, Decl, File, Line, Name, Elements,
219 getImportTrackingVector(Context));
224 std::optional<StringRef> Source) {
231 assert(!Name.empty() &&
"Unable to create macro without name");
234 "Unexpected macro type");
236 AllMacrosPerParent[Parent].insert(M);
241 unsigned LineNumber,
DIFile *File) {
243 LineNumber, File, DIMacroNodeArray())
245 AllMacrosPerParent[Parent].insert(MF);
249 AllMacrosPerParent.insert({MF, {}});
255 assert(!Name.empty() &&
"Unable to create enumerator without name");
261 assert(!Name.empty() &&
"Unable to create enumerator without name");
266 assert(!Name.empty() &&
"Unable to create type without name");
279 return DIBasicType::get(VMContext, dwarf::DW_TAG_base_type, Name,
nullptr, 0,
280 nullptr, SizeInBits, 0, Encoding, NumExtraInhabitants,
281 DataSizeInBits, Flags);
285 unsigned LineNo,
DIScope *Context,
286 uint64_t SizeInBits,
unsigned Encoding,
291 LineNo, Context, SizeInBits, 0, Encoding,
292 NumExtraInhabitants, DataSizeInBits, Flags);
294 getSubprogramNodesTrackingVector(Context).emplace_back(R);
295 trackIfUnresolved(R);
304 VMContext, dwarf::DW_TAG_base_type, Name, File, LineNo, Context,
305 SizeInBits, AlignInBits, Encoding, Flags,
308 getSubprogramNodesTrackingVector(Context).emplace_back(R);
309 trackIfUnresolved(R);
318 VMContext, dwarf::DW_TAG_base_type, Name, File, LineNo, Context,
319 SizeInBits, AlignInBits, Encoding, Flags,
322 getSubprogramNodesTrackingVector(Context).emplace_back(R);
323 trackIfUnresolved(R);
332 VMContext, dwarf::DW_TAG_base_type, Name, File, LineNo, Context,
333 SizeInBits, AlignInBits, Encoding, Flags,
336 getSubprogramNodesTrackingVector(Context).emplace_back(R);
337 trackIfUnresolved(R);
342 assert(!Name.empty() &&
"Unable to create type without name");
350 assert(!Name.empty() &&
"Unable to create type without name");
352 StringLength,
nullptr, StrLocationExp, 0, 0, 0);
358 assert(!Name.empty() &&
"Unable to create type without name");
360 StringLengthExp, StrLocationExp, 0, 0, 0);
366 std::nullopt, DINode::FlagZero);
370 DIType *FromTy,
unsigned Key,
bool IsAddressDiscriminated,
371 unsigned ExtraDiscriminator,
bool IsaPointer,
372 bool AuthenticatesNullValues) {
374 VMContext, dwarf::DW_TAG_LLVM_ptrauth_type,
"",
nullptr, 0,
nullptr,
376 std::optional<DIDerivedType::PtrAuthData>(
377 std::in_place,
Key, IsAddressDiscriminated, ExtraDiscriminator,
378 IsaPointer, AuthenticatesNullValues),
385 std::optional<unsigned> DWARFAddressSpace,
389 nullptr, 0,
nullptr, PointeeTy, SizeInBits,
390 AlignInBits, 0, DWARFAddressSpace, std::nullopt,
400 nullptr, 0,
nullptr, PointeeTy, SizeInBits,
401 AlignInBits, 0, std::nullopt, std::nullopt, Flags,
408 std::optional<unsigned> DWARFAddressSpace) {
409 assert(RTy &&
"Unable to create reference type");
411 SizeInBits, AlignInBits, 0, DWARFAddressSpace, {},
416 DIFile *File,
unsigned LineNo,
421 VMContext, dwarf::DW_TAG_typedef, Name, File, LineNo,
425 getSubprogramNodesTrackingVector(Context).emplace_back(
T);
431 unsigned LineNo,
DIScope *Context,
432 DINodeArray TParams,
uint32_t AlignInBits,
440 getSubprogramNodesTrackingVector(Context).emplace_back(
T);
445 assert(Ty &&
"Invalid type!");
446 assert(FriendTy &&
"Invalid friend type!");
449 std::nullopt, DINode::FlagZero);
456 assert(Ty &&
"Unable to create inheritance");
460 0, Ty, BaseTy, 0, 0, BaseOffset, std::nullopt,
461 std::nullopt, Flags, ExtraData);
470 SizeInBits, AlignInBits, OffsetInBits, std::nullopt,
480 SizeInBits, AlignInBits, OffsetInBits, std::nullopt,
496 assert((Flags & DINode::FlagBitField) == 0);
498 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
504 DINodeArray Elements,
510 Elements, 0, {},
nullptr);
512 trackIfUnresolved(V);
514 DINode::FlagZero, V);
521 Flags |= DINode::FlagBitField;
523 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
525 OffsetInBits, std::nullopt, std::nullopt, Flags,
527 StorageOffsetInBits)),
535 Flags |= DINode::FlagBitField;
537 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
539 OffsetInBits, std::nullopt, std::nullopt, Flags,
541 StorageOffsetInBits)),
547 unsigned LineNumber,
DIType *Ty,
550 Flags |= DINode::FlagStaticMember;
553 AlignInBits, (
uint64_t)0, std::nullopt,
564 SizeInBits, AlignInBits, OffsetInBits, std::nullopt,
565 std::nullopt, Flags, PropertyNode);
571 unsigned PropertyAttributes,
DIType *Ty) {
573 SetterName, PropertyAttributes, Ty);
578 DIType *Ty,
bool isDefault) {
593 DIType *Ty,
bool isDefault,
596 VMContext, dwarf::DW_TAG_template_value_parameter, Context, Name, Ty,
605 VMContext, dwarf::DW_TAG_GNU_template_template_param, Context, Name, Ty,
611 DIType *Ty, DINodeArray Val) {
613 VMContext, dwarf::DW_TAG_GNU_template_parameter_pack, Context, Name, Ty,
621 unsigned RunTimeLang,
DIType *VTableHolder,
MDNode *TemplateParams,
624 "createClassType should be called with a valid Context");
627 VMContext, dwarf::DW_TAG_class_type, Name, File, LineNumber,
629 OffsetInBits, Flags, Elements, RunTimeLang, std::nullopt,
631 trackIfUnresolved(R);
633 getSubprogramNodesTrackingVector(Context).emplace_back(R);
640 DIType *DerivedFrom, DINodeArray Elements,
unsigned RunTimeLang,
644 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
646 Flags, Elements, RunTimeLang, std::nullopt, VTableHolder,
647 nullptr, UniqueIdentifier,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
648 nullptr, Specification, NumExtraInhabitants);
649 trackIfUnresolved(R);
651 getSubprogramNodesTrackingVector(Context).emplace_back(R);
658 DIType *DerivedFrom, DINodeArray Elements,
unsigned RunTimeLang,
662 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
664 Flags, Elements, RunTimeLang, std::nullopt, VTableHolder,
665 nullptr, UniqueIdentifier,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
666 nullptr, Specification, NumExtraInhabitants);
667 trackIfUnresolved(R);
669 getSubprogramNodesTrackingVector(Context).emplace_back(R);
676 DINodeArray Elements,
unsigned RunTimeLang,
StringRef UniqueIdentifier) {
678 VMContext, dwarf::DW_TAG_union_type, Name, File, LineNumber,
680 Elements, RunTimeLang, std::nullopt,
nullptr,
nullptr,
682 trackIfUnresolved(R);
684 getSubprogramNodesTrackingVector(Scope).emplace_back(R);
690 unsigned LineNumber,
uint64_t SizeInBits,
695 VMContext, dwarf::DW_TAG_variant_part, Name, File, LineNumber,
697 Elements, 0, std::nullopt,
nullptr,
nullptr,
698 UniqueIdentifier, Discriminator);
699 trackIfUnresolved(R);
712 DIType *UnderlyingType,
unsigned RunTimeLang,
StringRef UniqueIdentifier,
713 bool IsScoped, std::optional<uint32_t> EnumKind) {
715 VMContext, dwarf::DW_TAG_enumeration_type, Name, File, LineNumber,
717 IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements,
718 RunTimeLang, EnumKind,
nullptr,
nullptr, UniqueIdentifier);
720 getSubprogramNodesTrackingVector(Scope).emplace_back(CTy);
722 EnumTypes.emplace_back(CTy);
723 trackIfUnresolved(CTy);
728 DIFile *File,
unsigned LineNo,
733 SizeInBits, AlignInBits, 0, std::nullopt,
734 std::nullopt, DINode::FlagZero);
735 trackIfUnresolved(R);
737 getSubprogramNodesTrackingVector(Scope).emplace_back(R);
743 DINodeArray Subscripts,
749 Ty, Subscripts,
DL, AS, AL, RK);
760 VMContext, dwarf::DW_TAG_array_type, Name, File, LineNumber,
762 Subscripts, 0, std::nullopt,
nullptr,
nullptr,
"",
nullptr,
771 nullptr,
nullptr, 0, BitStride);
772 trackIfUnresolved(R);
774 getSubprogramNodesTrackingVector(Scope).emplace_back(R);
780 DINodeArray Subscripts,
783 VMContext, dwarf::DW_TAG_array_type,
"",
784 nullptr, 0,
nullptr, Ty,
785 Size, AlignInBits, 0,
786 DINode::FlagVector, Subscripts,
787 0, std::nullopt,
nullptr,
790 nullptr,
nullptr,
nullptr,
794 trackIfUnresolved(R);
799 auto NewSP = SP->cloneWithFlags(SP->getFlags() | DINode::FlagArtificial);
811 if (Ty->isArtificial())
818 if (Ty->isObjectPointer())
823 Flags |= DINode::FlagArtificial;
829 assert(
T &&
"Expected non-null type");
832 "Expected type or subprogram declaration");
834 AllRetainTypes.emplace_back(
T);
842 StringRef UniqueIdentifier, std::optional<uint32_t> EnumKind) {
847 SizeInBits, AlignInBits, 0, DINode::FlagFwdDecl,
nullptr, RuntimeLang,
848 EnumKind,
nullptr,
nullptr, UniqueIdentifier);
849 trackIfUnresolved(RetTy);
851 getSubprogramNodesTrackingVector(Scope).emplace_back(RetTy);
859 std::optional<uint32_t> EnumKind) {
863 SizeInBits, AlignInBits, 0, Flags,
nullptr, RuntimeLang, EnumKind,
864 nullptr,
nullptr, UniqueIdentifier,
nullptr,
nullptr,
nullptr,
867 trackIfUnresolved(RetTy);
869 getSubprogramNodesTrackingVector(Scope).emplace_back(RetTy);
920 ConvToMetadata(LB), ConvToMetadata(UB),
921 ConvToMetadata(Stride));
930 SizeInBits, AlignInBits, Flags, Ty, LowerBound,
931 UpperBound, Stride, Bias);
933 getSubprogramNodesTrackingVector(Scope).emplace_back(
T);
941 assert(CT->getIdentifier().empty() &&
942 "Context of a global variable should not be a type with identifier");
948 unsigned LineNumber,
DIType *Ty,
bool IsLocalToUnit,
bool isDefined,
955 LineNumber, Ty, IsLocalToUnit, isDefined,
967 unsigned LineNumber,
DIType *Ty,
bool IsLocalToUnit,
MDNode *Decl,
973 LineNumber, Ty, IsLocalToUnit,
false,
990 if (AlwaysPreserve) {
1000 DIFile *File,
unsigned LineNo,
1001 DIType *Ty,
bool AlwaysPreserve,
1005 "Unexpected scope for a local variable.");
1007 VMContext, getSubprogramNodesTrackingVector(Scope), Scope, Name,
1008 0, File, LineNo, Ty, AlwaysPreserve, Flags, AlignInBits);
1015 assert(ArgNo &&
"Expected non-zero argument number for parameter");
1017 "Unexpected scope for a local variable.");
1019 VMContext, getSubprogramNodesTrackingVector(Scope), Scope, Name, ArgNo,
1020 File, LineNo, Ty, AlwaysPreserve, Flags, 0,
Annotations);
1024 unsigned LineNo,
unsigned Column,
1026 std::optional<unsigned> CoroSuspendIdx,
1027 bool AlwaysPreserve) {
1030 IsArtificial, CoroSuspendIdx);
1032 if (AlwaysPreserve) {
1036 getSubprogramNodesTrackingVector(Scope).emplace_back(
Node);
1045template <
class... Ts>
1058 bool UseKeyInstructions) {
1059 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
1062 Name,
LinkageName, File, LineNo, Ty, ScopeLine,
nullptr, 0, 0, Flags,
1063 SPFlags, IsDefinition ? CUNode :
nullptr, TParams, Decl,
nullptr,
1064 ThrownTypes,
Annotations, TargetFuncName, UseKeyInstructions);
1066 AllSubprograms.push_back(
Node);
1067 trackIfUnresolved(
Node);
1076 DITypeArray ThrownTypes) {
1077 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
1080 ScopeLine,
nullptr, 0, 0, Flags, SPFlags,
1081 IsDefinition ? CUNode :
nullptr, TParams,
1082 Decl,
nullptr, ThrownTypes)
1088 unsigned LineNo,
DISubroutineType *Ty,
unsigned VIndex,
int ThisAdjustment,
1091 DITypeArray ThrownTypes,
bool UseKeyInstructions) {
1093 "Methods should have both a Context and a context that isn't "
1094 "the compile unit.");
1096 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
1099 LinkageName,
F, LineNo, Ty, LineNo, VTableHolder, VIndex, ThisAdjustment,
1100 Flags, SPFlags, IsDefinition ? CUNode :
nullptr, TParams,
nullptr,
1101 nullptr, ThrownTypes,
nullptr,
"", IsDefinition && UseKeyInstructions);
1103 AllSubprograms.push_back(SP);
1104 trackIfUnresolved(SP);
1116 bool ExportSymbols) {
1130 DIFile *File,
unsigned LineNo,
bool IsDecl) {
1132 ConfigurationMacros, IncludePath, APINotesFile, LineNo,
1138 unsigned Discriminator) {
1143 unsigned Line,
unsigned Col) {
1158 : InsertAtEnd->
end());
1167 LinkedInstr->
getMetadata(LLVMContext::MD_DIAssignID));
1168 assert(Link &&
"Linked instruction must have DIAssign metadata attached");
1171 Val, SrcVar, ValExpr, Link, Addr, AddrExpr,
DL);
1174 NextIt.setHeadBit(
true);
1175 insertDbgVariableRecord(DVR, NextIt);
1184 Builder.SetCurrentDebugLocation(
DL);
1188 assert(V &&
"no value passed to dbg intrinsic");
1199 insertDbgVariableRecord(DVR, InsertPt);
1206 assert(VarInfo &&
"empty or invalid DILocalVariable* passed to dbg.declare");
1207 assert(
DL &&
"Expected debug loc");
1208 assert(
DL->getScope()->getSubprogram() ==
1210 "Expected matching subprograms");
1214 insertDbgVariableRecord(DVR, InsertPt);
1224 "empty or invalid DILocalVariable* passed to dbg.declare_value");
1225 assert(
DL &&
"Expected debug loc");
1226 assert(
DL->getScope()->getSubprogram() ==
1228 "Expected matching subprograms");
1232 insertDbgVariableRecord(DVR, InsertPt);
1253 assert(IntrinsicFn &&
"must pass a non-null intrinsic function");
1254 assert(V &&
"must pass a value to a dbg intrinsic");
1256 "empty or invalid DILocalVariable* passed to debug intrinsic");
1257 assert(
DL &&
"Expected debug loc");
1258 assert(
DL->getScope()->getSubprogram() ==
1260 "Expected matching subprograms");
1262 trackIfUnresolved(VarInfo);
1263 trackIfUnresolved(Expr);
1270 return B.CreateCall(IntrinsicFn, Args);
1275 assert(LabelInfo &&
"empty or invalid DILabel* passed to dbg.label");
1276 assert(
DL &&
"Expected debug loc");
1277 assert(
DL->getScope()->getSubprogram() ==
1279 "Expected matching subprograms");
1281 trackIfUnresolved(LabelInfo);
1293 N->replaceVTableHolder(VTableHolder);
1298 if (
T != VTableHolder)
1303 if (
T->isResolved())
1306 trackIfUnresolved(
N);
1310 DINodeArray TParams) {
1314 N->replaceElements(Elements);
1316 N->replaceTemplateParams(DITemplateParameterArray(TParams));
1321 if (!
T->isResolved())
1328 trackIfUnresolved(Elements.get());
1330 trackIfUnresolved(TParams.get());
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements a class to represent arbitrary precision integral constant values and operations...
This file implements the APSInt class, which is a simple class that represents an arbitrary sized int...
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
static DILocalVariable * createLocalVariable(LLVMContext &VMContext, SmallVectorImpl< TrackingMDNodeRef > &PreservedNodes, DIScope *Context, StringRef Name, unsigned ArgNo, DIFile *File, unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags Flags, uint32_t AlignInBits, DINodeArray Annotations=nullptr)
static DIType * createTypeWithFlags(const DIType *Ty, DINode::DIFlags FlagsToSet)
static DIScope * getNonCompileUnitScope(DIScope *N)
If N is compile unit return NULL otherwise return N.
static void checkGlobalVariableScope(DIScope *Context)
static DISubprogram * getSubprogram(bool IsDistinct, Ts &&...Args)
static ConstantAsMetadata * getConstantOrNull(Constant *C)
static DITemplateValueParameter * createTemplateValueParameterHelper(LLVMContext &VMContext, unsigned Tag, DIScope *Context, StringRef Name, DIType *Ty, bool IsDefault, Metadata *MD)
static void initIRBuilder(IRBuilder<> &Builder, const DILocation *DL, InsertPosition InsertPt)
Initialize IRBuilder for inserting dbg.declare and dbg.value intrinsics.
static Value * getDbgIntrinsicValueImpl(LLVMContext &VMContext, Value *V)
static DIImportedEntity * createImportedModule(LLVMContext &C, dwarf::Tag Tag, DIScope *Context, Metadata *NS, DIFile *File, unsigned Line, StringRef Name, DINodeArray Elements, SmallVectorImpl< TrackingMDNodeRef > &ImportedModules)
This file contains constants used for implementing Dwarf debug support.
Module.h This file contains the declarations for the Module class.
static constexpr StringLiteral Filename
Class for arbitrary precision integers.
An arbitrary precision integer that knows its signedness.
Annotations lets you mark points and ranges inside source code, for tests:
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
LLVM Basic Block Representation.
LLVM_ABI void insertDbgRecordBefore(DbgRecord *DR, InstListType::iterator Here)
Insert a DbgRecord into a block at the position given by Here.
const Instruction * getTerminatorOrNull() const LLVM_READONLY
Returns the terminator instruction if the block is well formed or null if the block is not well forme...
InstListType::iterator iterator
Instruction iterators...
static ConstantInt * getSigned(IntegerType *Ty, int64_t V, bool ImplicitTrunc=false)
Return a ConstantInt with the specified value for the specified type.
This is an important base class in LLVM.
Basic type, like 'int' or 'float'.
static LLVM_ABI DIType * createObjectPointerType(DIType *Ty, bool Implicit)
Create a uniqued clone of Ty with FlagObjectPointer set.
LLVM_ABI DIBasicType * createUnspecifiedParameter()
Create unspecified parameter type for a subroutine type.
LLVM_ABI DIGlobalVariable * createTempGlobalVariableFwdDecl(DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File, unsigned LineNo, DIType *Ty, bool IsLocalToUnit, MDNode *Decl=nullptr, MDTuple *TemplateParams=nullptr, uint32_t AlignInBits=0)
Identical to createGlobalVariable except that the resulting DbgNode is temporary and meant to be RAUW...
LLVM_ABI DITemplateValueParameter * createTemplateTemplateParameter(DIScope *Scope, StringRef Name, DIType *Ty, StringRef Val, bool IsDefault=false)
Create debugging information for a template template parameter.
NodeTy * replaceTemporary(TempMDNode &&N, NodeTy *Replacement)
Replace a temporary node.
LLVM_ABI DIDerivedType * createTypedef(DIType *Ty, StringRef Name, DIFile *File, unsigned LineNo, DIScope *Context, uint32_t AlignInBits=0, DINode::DIFlags Flags=DINode::FlagZero, DINodeArray Annotations=nullptr)
Create debugging information entry for a typedef.
LLVM_ABI void finalize()
Construct any deferred debug info descriptors.
LLVM_ABI DIMacro * createMacro(DIMacroFile *Parent, unsigned Line, unsigned MacroType, StringRef Name, StringRef Value=StringRef())
Create debugging information entry for a macro.
LLVM_ABI DIDerivedType * createInheritance(DIType *Ty, DIType *BaseTy, uint64_t BaseOffset, uint32_t VBPtrOffset, DINode::DIFlags Flags)
Create debugging information entry to establish inheritance relationship between two types.
LLVM_ABI DICompositeType * createVectorType(uint64_t Size, uint32_t AlignInBits, DIType *Ty, DINodeArray Subscripts, Metadata *BitStride=nullptr)
Create debugging information entry for a vector type.
LLVM_ABI DIDerivedType * createStaticMemberType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, DIType *Ty, DINode::DIFlags Flags, Constant *Val, unsigned Tag, uint32_t AlignInBits=0)
Create debugging information entry for a C++ static data member.
LLVM_ABI DIDerivedType * createVariantMemberType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, Constant *Discriminant, DINode::DIFlags Flags, DIType *Ty)
Create debugging information entry for a variant.
LLVM_ABI DICompositeType * createClassType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements, unsigned RunTimeLang=0, DIType *VTableHolder=nullptr, MDNode *TemplateParms=nullptr, StringRef UniqueIdentifier="")
Create debugging information entry for a class.
LLVM_ABI DILexicalBlockFile * createLexicalBlockFile(DIScope *Scope, DIFile *File, unsigned Discriminator=0)
This creates a descriptor for a lexical block with a new file attached.
LLVM_ABI void finalizeSubprogram(DISubprogram *SP)
Finalize a specific subprogram - no new variables may be added to this subprogram afterwards.
LLVM_ABI DIDerivedType * createQualifiedType(unsigned Tag, DIType *FromTy)
Create debugging information entry for a qualified type, e.g.
LLVM_ABI DISubprogram * createTempFunctionFwdDecl(DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned LineNo, DISubroutineType *Ty, unsigned ScopeLine, DINode::DIFlags Flags=DINode::FlagZero, DISubprogram::DISPFlags SPFlags=DISubprogram::SPFlagZero, DITemplateParameterArray TParams=nullptr, DISubprogram *Decl=nullptr, DITypeArray ThrownTypes=nullptr)
Identical to createFunction, except that the resulting DbgNode is meant to be RAUWed.
LLVM_ABI DIDerivedType * createObjCIVar(StringRef Name, DIFile *File, unsigned LineNo, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, DINode::DIFlags Flags, DIType *Ty, MDNode *PropertyNode)
Create debugging information entry for Objective-C instance variable.
static LLVM_ABI DIType * createArtificialType(DIType *Ty)
Create a uniqued clone of Ty with FlagArtificial set.
LLVM_ABI DIDerivedType * createBitFieldMemberType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, Metadata *SizeInBits, Metadata *OffsetInBits, uint64_t StorageOffsetInBits, DINode::DIFlags Flags, DIType *Ty, DINodeArray Annotations=nullptr)
Create debugging information entry for a bit field member.
LLVM_ABI DISubroutineType * createSubroutineType(DITypeArray ParameterTypes, DINode::DIFlags Flags=DINode::FlagZero, unsigned CC=0)
Create subroutine type.
LLVM_ABI DISubprogram * createMethod(DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned LineNo, DISubroutineType *Ty, unsigned VTableIndex=0, int ThisAdjustment=0, DIType *VTableHolder=nullptr, DINode::DIFlags Flags=DINode::FlagZero, DISubprogram::DISPFlags SPFlags=DISubprogram::SPFlagZero, DITemplateParameterArray TParams=nullptr, DITypeArray ThrownTypes=nullptr, bool UseKeyInstructions=false)
Create a new descriptor for the specified C++ method.
LLVM_ABI DINamespace * createNameSpace(DIScope *Scope, StringRef Name, bool ExportSymbols)
This creates new descriptor for a namespace with the specified parent scope.
LLVM_ABI DIStringType * createStringType(StringRef Name, uint64_t SizeInBits)
Create debugging information entry for a string type.
LLVM_ABI DbgInstPtr insertDbgAssign(Instruction *LinkedInstr, Value *Val, DILocalVariable *SrcVar, DIExpression *ValExpr, Value *Addr, DIExpression *AddrExpr, const DILocation *DL)
Insert a new llvm.dbg.assign intrinsic call.
LLVM_ABI DbgInstPtr insertDeclareValue(llvm::Value *Storage, DILocalVariable *VarInfo, DIExpression *Expr, const DILocation *DL, InsertPosition InsertPt)
Insert a new llvm.dbg.declare_value intrinsic call.
LLVM_ABI DILexicalBlock * createLexicalBlock(DIScope *Scope, DIFile *File, unsigned Line, unsigned Col)
This creates a descriptor for a lexical block with the specified parent context.
LLVM_ABI DICompositeType * createUnionType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags, DINodeArray Elements, unsigned RunTimeLang=0, StringRef UniqueIdentifier="")
Create debugging information entry for an union.
LLVM_ABI DIMacroNodeArray getOrCreateMacroArray(ArrayRef< Metadata * > Elements)
Get a DIMacroNodeArray, create one if required.
LLVM_ABI DIDerivedType * createMemberType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, Metadata *SizeInBits, uint32_t AlignInBits, Metadata *OffsetInBits, DINode::DIFlags Flags, DIType *Ty, DINodeArray Annotations=nullptr)
Create debugging information entry for a member.
LLVM_ABI DIDerivedType * createSetType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, uint64_t SizeInBits, uint32_t AlignInBits, DIType *Ty)
Create debugging information entry for a set.
LLVM_ABI void replaceVTableHolder(DICompositeType *&T, DIType *VTableHolder)
Replace the vtable holder in the given type.
LLVM_ABI DIBasicType * createNullPtrType()
Create C++11 nullptr type.
LLVM_ABI DICommonBlock * createCommonBlock(DIScope *Scope, DIGlobalVariable *decl, StringRef Name, DIFile *File, unsigned LineNo)
Create common block entry for a Fortran common block.
LLVM_ABI DIDerivedType * createFriend(DIType *Ty, DIType *FriendTy)
Create debugging information entry for a 'friend'.
LLVM_ABI DILabel * createLabel(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, unsigned Column, bool IsArtificial, std::optional< unsigned > CoroSuspendIdx, bool AlwaysPreserve=false)
Create a new descriptor for an label.
LLVM_ABI void retainType(DIScope *T)
Retain DIScope* in a module even if it is not referenced through debug info anchors.
LLVM_ABI DIDerivedType * createTemplateAlias(DIType *Ty, StringRef Name, DIFile *File, unsigned LineNo, DIScope *Context, DINodeArray TParams, uint32_t AlignInBits=0, DINode::DIFlags Flags=DINode::FlagZero, DINodeArray Annotations=nullptr)
Create debugging information entry for a template alias.
LLVM_ABI DISubprogram * createFunction(DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned LineNo, DISubroutineType *Ty, unsigned ScopeLine, DINode::DIFlags Flags=DINode::FlagZero, DISubprogram::DISPFlags SPFlags=DISubprogram::SPFlagZero, DITemplateParameterArray TParams=nullptr, DISubprogram *Decl=nullptr, DITypeArray ThrownTypes=nullptr, DINodeArray Annotations=nullptr, StringRef TargetFuncName="", bool UseKeyInstructions=false)
Create a new descriptor for the specified subprogram.
LLVM_ABI DIDerivedType * createPointerType(DIType *PointeeTy, uint64_t SizeInBits, uint32_t AlignInBits=0, std::optional< unsigned > DWARFAddressSpace=std::nullopt, StringRef Name="", DINodeArray Annotations=nullptr)
Create debugging information entry for a pointer.
LLVM_ABI DbgInstPtr insertDeclare(llvm::Value *Storage, DILocalVariable *VarInfo, DIExpression *Expr, const DILocation *DL, BasicBlock *InsertAtEnd)
Insert a new llvm.dbg.declare intrinsic call.
LLVM_ABI DbgInstPtr insertDbgValueIntrinsic(llvm::Value *Val, DILocalVariable *VarInfo, DIExpression *Expr, const DILocation *DL, InsertPosition InsertPt)
Insert a new llvm.dbg.value intrinsic call.
LLVM_ABI DITemplateValueParameter * createTemplateParameterPack(DIScope *Scope, StringRef Name, DIType *Ty, DINodeArray Val)
Create debugging information for a template parameter pack.
LLVM_ABI DIGlobalVariableExpression * createGlobalVariableExpression(DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File, unsigned LineNo, DIType *Ty, bool IsLocalToUnit, bool isDefined=true, DIExpression *Expr=nullptr, MDNode *Decl=nullptr, MDTuple *TemplateParams=nullptr, uint32_t AlignInBits=0, DINodeArray Annotations=nullptr)
Create a new descriptor for the specified variable.
LLVM_ABI DIFixedPointType * createRationalFixedPointType(StringRef Name, DIFile *File, unsigned LineNo, DIScope *Context, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, DINode::DIFlags Flags, APInt Numerator, APInt Denominator)
Create debugging information entry for an arbitrary rational fixed-point type.
LLVM_ABI DICompositeType * createReplaceableCompositeType(unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F, unsigned Line, unsigned RuntimeLang=0, uint64_t SizeInBits=0, uint32_t AlignInBits=0, DINode::DIFlags Flags=DINode::FlagFwdDecl, StringRef UniqueIdentifier="", DINodeArray Annotations=nullptr, std::optional< uint32_t > EnumKind=std::nullopt)
Create a temporary forward-declared type.
LLVM_ABI DIFixedPointType * createDecimalFixedPointType(StringRef Name, DIFile *File, unsigned LineNo, DIScope *Context, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, DINode::DIFlags Flags, int Factor)
Create debugging information entry for a decimal fixed-point type.
LLVM_ABI DITypeArray getOrCreateTypeArray(ArrayRef< Metadata * > Elements)
Get a DITypeArray, create one if required.
LLVM_ABI DICompositeType * createEnumerationType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements, DIType *UnderlyingType, unsigned RunTimeLang=0, StringRef UniqueIdentifier="", bool IsScoped=false, std::optional< uint32_t > EnumKind=std::nullopt)
Create debugging information entry for an enumeration.
LLVM_ABI DIFixedPointType * createBinaryFixedPointType(StringRef Name, DIFile *File, unsigned LineNo, DIScope *Context, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, DINode::DIFlags Flags, int Factor)
Create debugging information entry for a binary fixed-point type.
LLVM_ABI DIBasicType * createBasicType(StringRef Name, uint64_t SizeInBits, unsigned Encoding, DINode::DIFlags Flags=DINode::FlagZero, uint32_t NumExtraInhabitants=0, uint32_t DataSizeInBits=0)
Create debugging information entry for a basic type.
LLVM_ABI DISubrange * getOrCreateSubrange(int64_t Lo, int64_t Count)
Create a descriptor for a value range.
LLVM_ABI DISubrangeType * createSubrangeType(StringRef Name, DIFile *File, unsigned LineNo, DIScope *Scope, uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags, DIType *Ty, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride, Metadata *Bias)
Create a type describing a subrange of another type.
LLVM_ABI DIDerivedType * createReferenceType(unsigned Tag, DIType *RTy, uint64_t SizeInBits=0, uint32_t AlignInBits=0, std::optional< unsigned > DWARFAddressSpace=std::nullopt)
Create debugging information entry for a c++ style reference or rvalue reference type.
LLVM_ABI DIMacroFile * createTempMacroFile(DIMacroFile *Parent, unsigned Line, DIFile *File)
Create debugging information temporary entry for a macro file.
LLVM_ABI DICompositeType * createArrayType(uint64_t Size, uint32_t AlignInBits, DIType *Ty, DINodeArray Subscripts, PointerUnion< DIExpression *, DIVariable * > DataLocation=nullptr, PointerUnion< DIExpression *, DIVariable * > Associated=nullptr, PointerUnion< DIExpression *, DIVariable * > Allocated=nullptr, PointerUnion< DIExpression *, DIVariable * > Rank=nullptr)
Create debugging information entry for an array.
LLVM_ABI DIDerivedType * createMemberPointerType(DIType *PointeeTy, DIType *Class, uint64_t SizeInBits, uint32_t AlignInBits=0, DINode::DIFlags Flags=DINode::FlagZero)
Create debugging information entry for a pointer to member.
LLVM_ABI DICompositeType * createStructType(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, Metadata *SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements, unsigned RunTimeLang=0, DIType *VTableHolder=nullptr, StringRef UniqueIdentifier="", DIType *Specification=nullptr, uint32_t NumExtraInhabitants=0)
Create debugging information entry for a struct.
LLVM_ABI DINodeArray getOrCreateArray(ArrayRef< Metadata * > Elements)
Get a DINodeArray, create one if required.
LLVM_ABI DICompileUnit * createCompileUnit(DISourceLanguageName Lang, DIFile *File, StringRef Producer, bool isOptimized, StringRef Flags, unsigned RV, StringRef SplitName=StringRef(), DICompileUnit::DebugEmissionKind Kind=DICompileUnit::DebugEmissionKind::FullDebug, uint64_t DWOId=0, bool SplitDebugInlining=true, bool DebugInfoForProfiling=false, DICompileUnit::DebugNameTableKind NameTableKind=DICompileUnit::DebugNameTableKind::Default, bool RangesBaseAddress=false, StringRef SysRoot={}, StringRef SDK={})
A CompileUnit provides an anchor for all debugging information generated during this instance of comp...
LLVM_ABI DIEnumerator * createEnumerator(StringRef Name, const APSInt &Value)
Create a single enumerator value.
LLVM_ABI DITemplateTypeParameter * createTemplateTypeParameter(DIScope *Scope, StringRef Name, DIType *Ty, bool IsDefault)
Create debugging information for template type parameter.
LLVM_ABI DIBuilder(Module &M, bool AllowUnresolved=true, DICompileUnit *CU=nullptr)
Construct a builder for a module.
LLVM_ABI DIExpression * createExpression(ArrayRef< uint64_t > Addr={})
Create a new descriptor for the specified variable which has a complex address expression for its add...
LLVM_ABI DIDerivedType * createPtrAuthQualifiedType(DIType *FromTy, unsigned Key, bool IsAddressDiscriminated, unsigned ExtraDiscriminator, bool IsaPointer, bool authenticatesNullValues)
Create a __ptrauth qualifier.
LLVM_ABI DICompositeType * createForwardDecl(unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F, unsigned Line, unsigned RuntimeLang=0, uint64_t SizeInBits=0, uint32_t AlignInBits=0, StringRef UniqueIdentifier="", std::optional< uint32_t > EnumKind=std::nullopt)
Create a permanent forward-declared type.
LLVM_ABI DICompositeType * createVariantPart(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags, DIDerivedType *Discriminator, DINodeArray Elements, StringRef UniqueIdentifier="")
Create debugging information entry for a variant part.
LLVM_ABI DIImportedEntity * createImportedModule(DIScope *Context, DINamespace *NS, DIFile *File, unsigned Line, DINodeArray Elements=nullptr)
Create a descriptor for an imported module.
LLVM_ABI DbgInstPtr insertLabel(DILabel *LabelInfo, const DILocation *DL, InsertPosition InsertPt)
Insert a new llvm.dbg.label intrinsic call.
LLVM_ABI DIImportedEntity * createImportedDeclaration(DIScope *Context, DINode *Decl, DIFile *File, unsigned Line, StringRef Name="", DINodeArray Elements=nullptr)
Create a descriptor for an imported function.
LLVM_ABI DILocalVariable * createAutoVariable(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo, DIType *Ty, bool AlwaysPreserve=false, DINode::DIFlags Flags=DINode::FlagZero, uint32_t AlignInBits=0)
Create a new descriptor for an auto variable.
static LLVM_ABI DISubprogram * createArtificialSubprogram(DISubprogram *SP)
Create a distinct clone of SP with FlagArtificial set.
LLVM_ABI DIGenericSubrange * getOrCreateGenericSubrange(DIGenericSubrange::BoundType Count, DIGenericSubrange::BoundType LowerBound, DIGenericSubrange::BoundType UpperBound, DIGenericSubrange::BoundType Stride)
LLVM_ABI DIBasicType * createUnspecifiedType(StringRef Name)
Create a DWARF unspecified type.
LLVM_ABI DIObjCProperty * createObjCProperty(StringRef Name, DIFile *File, unsigned LineNumber, StringRef GetterName, StringRef SetterName, unsigned PropertyAttributes, DIType *Ty)
Create debugging information entry for Objective-C property.
LLVM_ABI DITemplateValueParameter * createTemplateValueParameter(DIScope *Scope, StringRef Name, DIType *Ty, bool IsDefault, Constant *Val)
Create debugging information for template value parameter.
LLVM_ABI DILocalVariable * createParameterVariable(DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File, unsigned LineNo, DIType *Ty, bool AlwaysPreserve=false, DINode::DIFlags Flags=DINode::FlagZero, DINodeArray Annotations=nullptr)
Create a new descriptor for a parameter variable.
LLVM_ABI DIFile * createFile(StringRef Filename, StringRef Directory, std::optional< DIFile::ChecksumInfo< StringRef > > Checksum=std::nullopt, std::optional< StringRef > Source=std::nullopt)
Create a file descriptor to hold debugging information for a file.
LLVM_ABI void replaceArrays(DICompositeType *&T, DINodeArray Elements, DINodeArray TParams=DINodeArray())
Replace arrays on a composite type.
LLVM_ABI DIModule * createModule(DIScope *Scope, StringRef Name, StringRef ConfigurationMacros, StringRef IncludePath, StringRef APINotesFile={}, DIFile *File=nullptr, unsigned LineNo=0, bool IsDecl=false)
This creates new descriptor for a module with the specified parent scope.
@ FixedPointBinary
Scale factor 2^Factor.
@ FixedPointDecimal
Scale factor 10^Factor.
@ FixedPointRational
Arbitrary rational scale factor.
PointerUnion< DIVariable *, DIExpression * > BoundType
A pair of DIGlobalVariable and DIExpression.
An imported module (C++ using directive or similar).
DILocalScope * getScope() const
Get the local scope for this label.
LLVM_ABI DISubprogram * getSubprogram() const
Get the subprogram for this scope.
DILocalScope * getScope() const
Get the local scope for this variable.
Represents a module in the programming language, for example, a Clang module, or a Fortran module.
Tagged DWARF-like metadata node.
Base class for scope-like contexts.
Wrapper structure that holds a language name and its version.
String type, Fortran CHARACTER(n)
Subprogram description. Uses SubclassData1.
static const DIScope * getRawRetainedNodeScope(const MDNode *N)
DISPFlags
Debug info subprogram flags.
Type array for a subprogram.
TempDIType cloneWithFlags(DIFlags NewFlags) const
Returns a new temporary DIType with updated Flags.
Base class for variables.
Records a position in IR for a source label (DILabel).
Record of a variable value-assignment, aka a non instruction representation of the dbg....
static LLVM_ABI DbgVariableRecord * createDVRDeclareValue(Value *Address, DILocalVariable *DV, DIExpression *Expr, const DILocation *DI)
static LLVM_ABI DbgVariableRecord * createDVRAssign(Value *Val, DILocalVariable *Variable, DIExpression *Expression, DIAssignID *AssignID, Value *Address, DIExpression *AddressExpression, const DILocation *DI)
DIExpression * getExpression() const
static LLVM_ABI DbgVariableRecord * createDVRDeclare(Value *Address, DILocalVariable *DV, DIExpression *Expr, const DILocation *DI)
static LLVM_ABI DbgVariableRecord * createDbgVariableRecord(Value *Location, DILocalVariable *DV, DIExpression *Expr, const DILocation *DI)
DILocalVariable * getVariable() const
DIExpression * getAddressExpression() const
This provides a uniform API for creating instructions and inserting them into a basic block: either a...
BasicBlock * getBasicBlock()
MDNode * getMetadata(unsigned KindID) const
Get the metadata of given kind attached to this Instruction.
static LLVM_ABI IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
This is an important class for using LLVM in a threaded context.
static MDTuple * getDistinct(LLVMContext &Context, ArrayRef< Metadata * > MDs)
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata * > MDs)
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
static std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > replaceWithDistinct(std::unique_ptr< T, TempMDNodeDeleter > N)
Replace a temporary node with a distinct one.
static std::enable_if_t< std::is_base_of< MDNode, T >::value, T * > replaceWithUniqued(std::unique_ptr< T, TempMDNodeDeleter > N)
Replace a temporary node with a uniqued one.
Tracking metadata reference owned by Metadata.
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
A Module instance is used to store all the information related to an LLVM module.
LLVM_ABI void addOperand(MDNode *M)
A discriminated union of two or more pointer types, with the discriminator in the low bits of the poi...
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
reference emplace_back(ArgTypes &&... Args)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringRef - Represent a constant reference to a string, i.e.
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
LLVM Value Representation.
self_iterator getIterator()
@ C
The default llvm calling convention, compatible with C.
Calculates the starting offsets for various sections within the .debug_names section.
This is an optimization pass for GlobalISel generic memory operations.
TypedTrackingMDRef< MDNode > TrackingMDNodeRef
@ Implicit
Not emitted register (e.g. carry, or temporary result).
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
constexpr from_range_t from_range
auto cast_or_null(const Y &Val)
bool isa_and_nonnull(const Y &Val)
auto dyn_cast_or_null(const Y &Val)
FunctionAddr VTableAddr Count
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
IRBuilder(LLVMContext &, FolderTy, InserterTy, MDNode *, ArrayRef< OperandBundleDef >) -> IRBuilder< FolderTy, InserterTy >
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
PointerUnion< Instruction *, DbgRecord * > DbgInstPtr
A single checksum, represented by a Kind and a Value (a string).