13#ifndef LLVM_IR_DEBUGINFOMETADATA_H
14#define LLVM_IR_DEBUGINFOMETADATA_H
40#define DEFINE_MDNODE_GET_UNPACK_IMPL(...) __VA_ARGS__
41#define DEFINE_MDNODE_GET_UNPACK(ARGS) DEFINE_MDNODE_GET_UNPACK_IMPL ARGS
42#define DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(CLASS, FORMAL, ARGS) \
43 static CLASS *getDistinct(LLVMContext &Context, \
44 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
45 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Distinct); \
47 static Temp##CLASS getTemporary(LLVMContext &Context, \
48 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
50 getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Temporary)); \
52#define DEFINE_MDNODE_GET(CLASS, FORMAL, ARGS) \
53 static CLASS *get(LLVMContext &Context, DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
54 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Uniqued); \
56 static CLASS *getIfExists(LLVMContext &Context, \
57 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
58 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Uniqued, \
61 DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(CLASS, FORMAL, ARGS)
69class DbgVariableRecord;
80 explicit operator bool()
const {
return get(); }
88 unsigned size()
const {
return N ?
N->getNumOperands() : 0u; }
90 return cast_or_null<DIType>(
N->getOperand(
I));
153 if (
auto *S = getOperandAs<MDString>(
I))
154 return S->getString();
175#define HANDLE_DI_FLAG(ID, NAME) Flag##NAME = ID,
176#define DI_FLAG_LARGEST_NEEDED
177#include "llvm/IR/DebugInfoFlags.def"
180 FlagVirtualInheritance,
198 case GenericDINodeKind:
200 case DIEnumeratorKind:
201 case DIBasicTypeKind:
202 case DIFixedPointTypeKind:
203 case DIStringTypeKind:
204 case DISubrangeTypeKind:
205 case DIDerivedTypeKind:
206 case DICompositeTypeKind:
207 case DISubroutineTypeKind:
209 case DICompileUnitKind:
210 case DISubprogramKind:
211 case DILexicalBlockKind:
212 case DILexicalBlockFileKind:
213 case DINamespaceKind:
214 case DICommonBlockKind:
215 case DITemplateTypeParameterKind:
216 case DITemplateValueParameterKind:
217 case DIGlobalVariableKind:
218 case DILocalVariableKind:
220 case DIObjCPropertyKind:
221 case DIImportedEntityKind:
223 case DIGenericSubrangeKind:
251 void recalculateHash();
253 static GenericDINode *getImpl(LLVMContext &Context,
unsigned Tag,
260 LLVM_ABI static GenericDINode *getImpl(LLVMContext &Context,
unsigned Tag,
264 bool ShouldCreate =
true);
266 TempGenericDINode cloneImpl()
const {
284 TempGenericDINode
clone()
const {
return cloneImpl(); }
323 bool ShouldCreate =
true);
332 return Context.getReplaceableUses()->getAllDbgVariableRecordUsers();
359 bool ShouldCreate =
true);
363 bool ShouldCreate =
true);
369 bool ShouldCreate =
true);
371 TempDISubrange cloneImpl()
const {
373 getRawUpperBound(), getRawStride());
388 TempDISubrange
clone()
const {
return cloneImpl(); }
398 typedef PointerUnion<ConstantInt *, DIVariable *, DIExpression *> BoundType;
425 bool ShouldCreate =
true);
427 TempDIGenericSubrange cloneImpl()
const {
436 (CountNode, LowerBound, UpperBound, Stride))
438 TempDIGenericSubrange
clone()
const {
return cloneImpl(); }
480 LLVM_ABI static DIEnumerator *getImpl(LLVMContext &Context,
483 bool ShouldCreate =
true);
485 TempDIEnumerator cloneImpl()
const {
503 TempDIEnumerator
clone()
const {
return cloneImpl(); }
534 inline std::optional<StringRef>
getSource()
const;
546 return isa<DIFile>(
this) ?
const_cast<DIScope *
>(
this)
554 case DIBasicTypeKind:
555 case DIFixedPointTypeKind:
556 case DIStringTypeKind:
557 case DISubrangeTypeKind:
558 case DIDerivedTypeKind:
559 case DICompositeTypeKind:
560 case DISubroutineTypeKind:
562 case DICompileUnitKind:
563 case DISubprogramKind:
564 case DILexicalBlockKind:
565 case DILexicalBlockFileKind:
566 case DINamespaceKind:
567 case DICommonBlockKind:
615 std::optional<ChecksumInfo<MDString *>> Checksum;
620 std::optional<ChecksumInfo<MDString *>>
CS,
MDString *Src,
626 std::optional<ChecksumInfo<StringRef>>
CS,
628 bool ShouldCreate =
true) {
629 std::optional<ChecksumInfo<MDString *>> MDChecksum;
639 std::optional<ChecksumInfo<MDString *>>
CS,
641 bool ShouldCreate =
true);
643 TempDIFile cloneImpl()
const {
652 std::optional<StringRef> Source = std::nullopt),
660 TempDIFile
clone()
const {
return cloneImpl(); }
664 std::optional<ChecksumInfo<StringRef>> getChecksum()
const {
665 std::optional<ChecksumInfo<StringRef>> StringRefChecksum;
667 StringRefChecksum.emplace(Checksum->Kind, Checksum->Value->getString());
668 return StringRefChecksum;
670 std::optional<StringRef>
getSource()
const {
671 return Source ? std::optional<StringRef>(
Source->getString())
675 MDString *getRawFilename()
const {
return getOperandAs<MDString>(0); }
676 MDString *getRawDirectory()
const {
return getOperandAs<MDString>(1); }
677 std::optional<ChecksumInfo<MDString *>> getRawChecksum()
const {
680 MDString *getRawSource()
const {
return Source; }
683 LLVM_ABI static std::optional<ChecksumKind>
693 return F->getFilename();
699 return F->getDirectory();
705 return F->getSource();
728 init(Line, AlignInBits, NumExtraInhabitants, Flags);
737 this->NumExtraInhabitants = NumExtraInhabitants;
745 init(Line, AlignInBits, NumExtraInhabitants, Flags);
768 if (
ConstantInt *CI = dyn_cast_or_null<ConstantInt>(MD->getValue()))
769 return CI->getZExtValue();
777 if (
ConstantInt *CI = dyn_cast_or_null<ConstantInt>(MD->getValue()))
778 return CI->getZExtValue();
785 auto NewTy =
clone();
786 NewTy->Flags = NewFlags;
805 return getFlags() & FlagObjcClassComplete;
814 return getFlags() & FlagTypePassByReference;
824 case DIBasicTypeKind:
825 case DIFixedPointTypeKind:
826 case DIStringTypeKind:
827 case DISubrangeTypeKind:
828 case DIDerivedTypeKind:
829 case DICompositeTypeKind:
830 case DISubroutineTypeKind:
853 Encoding(Encoding) {}
860 Encoding(Encoding) {}
887 bool ShouldCreate =
true);
897 (
Tag,
Name, 0, 0, 0, 0, FlagZero))
965 Kind(Kind), Factor(Factor) {
970 unsigned Kind,
APInt Numerator,
APInt Denominator,
974 Kind(Kind), Factor(0), Numerator(Numerator), Denominator(Denominator) {
979 unsigned Kind,
int Factor, APInt Numerator,
980 APInt Denominator, ArrayRef<Metadata *> Ops)
983 Kind(Kind), Factor(Factor), Numerator(Numerator),
984 Denominator(Denominator) {}
985 ~DIFixedPointType() =
default;
987 static DIFixedPointType *
988 getImpl(LLVMContext &Context,
unsigned Tag, StringRef
Name,
990 DIFlags Flags,
unsigned Kind,
int Factor, APInt Numerator,
996 Numerator, Denominator,
Storage, ShouldCreate);
998 static DIFixedPointType *
999 getImpl(LLVMContext &Context,
unsigned Tag, StringRef
Name,
1001 DIFlags Flags,
unsigned Kind,
int Factor, APInt Numerator,
1005 Numerator, Denominator,
Storage, ShouldCreate);
1007 static DIFixedPointType *
1008 getImpl(LLVMContext &Context,
unsigned Tag, MDString *
Name,
1010 DIFlags Flags,
unsigned Kind,
int Factor, APInt Numerator,
1019 getImpl(LLVMContext &Context,
unsigned Tag, MDString *
Name,
1021 DIFlags Flags,
unsigned Kind,
int Factor, APInt Numerator,
1024 TempDIFixedPointType cloneImpl()
const {
1027 getFlags(), Kind, Factor, Numerator, Denominator);
1041 LLVM_ABI static std::optional<FixedPointKind>
1048 unsigned Kind,
int Factor,
APInt Numerator,
1051 Factor, Numerator, Denominator))
1055 unsigned Kind,
int Factor,
APInt Numerator,
1058 Factor, Numerator, Denominator))
1062 unsigned Kind,
int Factor,
APInt Numerator,
1065 Factor, Numerator, Denominator))
1067 TempDIFixedPointType
clone()
const {
return cloneImpl(); }
1114 Encoding(Encoding) {}
1122 bool ShouldCreate =
true) {
1126 StringLength, StrLenExp, StrLocationExp, SizeInBitsNode,
1129 static DIStringType *getImpl(LLVMContext &Context,
unsigned Tag,
1134 bool ShouldCreate =
true) {
1142 getImpl(LLVMContext &Context,
unsigned Tag, MDString *
Name,
1147 TempDIStringType cloneImpl()
const {
1182 TempDIStringType
clone()
const {
return cloneImpl(); }
1233 bool IsaPointer,
bool AuthenticatesNullValues) {
1235 assert(Discriminator <= 0xffff);
1236 RawData = (Key << 0) | (IsDiscr ? (1 << 4) : 0) | (Discriminator << 5) |
1237 (IsaPointer ? (1 << 21) : 0) |
1238 (AuthenticatesNullValues ? (1 << 22) : 0);
1256 std::optional<unsigned> DWARFAddressSpace;
1260 std::optional<unsigned> DWARFAddressSpace,
1265 DWARFAddressSpace(DWARFAddressSpace) {
1274 std::optional<unsigned> DWARFAddressSpace,
1277 bool ShouldCreate =
true) {
1284 OffsetInBitsNode, DWARFAddressSpace, PtrAuthData,
Flags,
1287 static DIDerivedType *
1288 getImpl(LLVMContext &Context,
unsigned Tag, MDString *
Name, DIFile *
File,
1291 std::optional<unsigned> DWARFAddressSpace,
1294 bool ShouldCreate =
true) {
1304 static DIDerivedType *
1305 getImpl(LLVMContext &Context,
unsigned Tag, StringRef
Name, DIFile *
File,
1308 std::optional<unsigned> DWARFAddressSpace,
1311 bool ShouldCreate =
true) {
1321 std::optional<unsigned> DWARFAddressSpace,
1324 bool ShouldCreate =
true);
1326 TempDIDerivedType cloneImpl()
const {
1340 std::optional<unsigned> DWARFAddressSpace,
1351 std::optional<unsigned> DWARFAddressSpace,
1362 std::optional<unsigned> DWARFAddressSpace,
1373 std::optional<unsigned> DWARFAddressSpace,
1381 TempDIDerivedType
clone()
const {
return cloneImpl(); }
1389 std::optional<unsigned> getDWARFAddressSpace()
const {
1390 return DWARFAddressSpace;
1393 LLVM_ABI std::optional<PtrAuthData> getPtrAuthData()
const;
1425 return dyn_cast_or_null<DIObjCProperty>(
getExtraData());
1449 return !(Lhs == Rhs);
1489 TempDISubrangeType cloneImpl()
const {
1515 TempDISubrangeType
clone()
const {
return cloneImpl(); }
1564 unsigned RuntimeLang;
1565 std::optional<uint32_t> EnumKind;
1574 RuntimeLang(RuntimeLang), EnumKind(EnumKind) {}
1578 void mutate(
unsigned Tag,
unsigned Line,
unsigned RuntimeLang,
1583 this->RuntimeLang = RuntimeLang;
1584 this->EnumKind = EnumKind;
1588 static DICompositeType *
1593 unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1612 static DICompositeType *
1634 static DICompositeType *
1639 unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1665 TempDICompositeType cloneImpl()
const {
1683 DINodeArray
Elements,
unsigned RuntimeLang,
1719 DINodeArray
Elements,
unsigned RuntimeLang,
1751 TempDICompositeType
clone()
const {
return cloneImpl(); }
1766 unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1789 unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1820 return getOperandAs<MDString>(MY_FIRST_OPERAND + 4);
1826 return getOperandAs<DIDerivedType>(MY_FIRST_OPERAND + 5);
1855 if (
auto *MD = dyn_cast_or_null<ConstantAsMetadata>(
getRawRank()))
1856 return dyn_cast_or_null<ConstantInt>(MD->getValue());
1860 return dyn_cast_or_null<DIExpression>(
getRawRank());
1881 if (
auto *MD = dyn_cast_or_null<ConstantAsMetadata>(
getRawBitStride()))
1882 return dyn_cast_or_null<ConstantInt>(MD->getValue());
1896 "Lost a member during member list replacement");
1935 bool ShouldCreate =
true) {
1941 bool ShouldCreate =
true);
1943 TempDISubroutineType cloneImpl()
const {
1955 TempDISubroutineType
clone()
const {
return cloneImpl(); }
1958 auto NewTy =
clone();
1998 LLVM_ABI static std::optional<DebugEmissionKind>
2001 LLVM_ABI static std::optional<DebugNameTableKind>
2007 unsigned RuntimeVersion;
2009 unsigned EmissionKind;
2010 unsigned NameTableKind;
2012 bool SplitDebugInlining;
2013 bool DebugInfoForProfiling;
2014 bool RangesBaseAddress;
2017 bool IsOptimized,
unsigned RuntimeVersion,
2018 unsigned EmissionKind,
uint64_t DWOId,
bool SplitDebugInlining,
2019 bool DebugInfoForProfiling,
unsigned NameTableKind,
2027 unsigned EmissionKind, DICompositeTypeArray
EnumTypes,
2031 uint64_t DWOId,
bool SplitDebugInlining,
bool DebugInfoForProfiling,
2040 DebugInfoForProfiling, NameTableKind, RangesBaseAddress,
2051 bool DebugInfoForProfiling,
unsigned NameTableKind,
2052 bool RangesBaseAddress, MDString *
SysRoot, MDString *
SDK,
2055 TempDICompileUnit cloneImpl()
const {
2077 uint64_t DWOId,
bool SplitDebugInlining,
bool DebugInfoForProfiling,
2083 DebugInfoForProfiling, (
unsigned)NameTableKind, RangesBaseAddress,
2092 bool SplitDebugInlining,
bool DebugInfoForProfiling,
2098 DebugInfoForProfiling, NameTableKind, RangesBaseAddress,
SysRoot,
SDK))
2100 TempDICompileUnit
clone()
const {
return cloneImpl(); }
2138 this->SplitDebugInlining = SplitDebugInlining;
2146 return getOperandAs<MDString>(3);
2226 unsigned VirtualIndex;
2236#define HANDLE_DISP_FLAG(ID, NAME) SPFlag##NAME = ID,
2237#define DISP_FLAG_LARGEST_NEEDED
2238#include "llvm/IR/DebugInfoFlags.def"
2258 bool IsMainSubprogram =
false);
2265 unsigned ScopeLine,
unsigned VirtualIndex,
int ThisAdjustment,
2274 unsigned VirtualIndex,
int ThisAdjustment,
DIFlags Flags,
2280 bool ShouldCreate =
true) {
2300 TempDISubprogram cloneImpl()
const {
2303 getContainingType(), getVirtualIndex(),
2304 getThisAdjustment(),
getFlags(), getSPFlags(),
2305 getUnit(), getTemplateParams(), getDeclaration(),
2306 getRetainedNodes(), getThrownTypes(), getAnnotations(),
2307 getTargetFuncName(), getKeyInstructionsEnabled());
2341 TempDISubprogram
clone()
const {
return cloneImpl(); }
2344 TempDISubprogram cloneWithFlags(
DIFlags NewFlags)
const {
2345 auto NewSP =
clone();
2346 NewSP->Flags = NewFlags;
2350 bool getKeyInstructionsEnabled()
const {
return SubclassData1; }
2353 unsigned getLine()
const {
return Line; }
2355 unsigned getVirtualIndex()
const {
return VirtualIndex; }
2356 int getThisAdjustment()
const {
return ThisAdjustment; }
2357 unsigned getScopeLine()
const {
return ScopeLine; }
2358 void setScopeLine(
unsigned L) {
2363 DISPFlags getSPFlags()
const {
return SPFlags; }
2364 bool isLocalToUnit()
const {
return getSPFlags() & SPFlagLocalToUnit; }
2365 bool isDefinition()
const {
return getSPFlags() & SPFlagDefinition; }
2366 bool isOptimized()
const {
return getSPFlags() & SPFlagOptimized; }
2367 bool isMainSubprogram()
const {
return getSPFlags() & SPFlagMainSubprogram; }
2369 bool isArtificial()
const {
return getFlags() & FlagArtificial; }
2370 bool isPrivate()
const {
2373 bool isProtected()
const {
2376 bool isPublic()
const {
2379 bool isExplicit()
const {
return getFlags() & FlagExplicit; }
2380 bool isPrototyped()
const {
return getFlags() & FlagPrototyped; }
2381 bool areAllCallsDescribed()
const {
2382 return getFlags() & FlagAllCallsDescribed;
2384 bool isPure()
const {
return getSPFlags() & SPFlagPure; }
2385 bool isElemental()
const {
return getSPFlags() & SPFlagElemental; }
2386 bool isRecursive()
const {
return getSPFlags() & SPFlagRecursive; }
2387 bool isObjCDirect()
const {
return getSPFlags() & SPFlagObjCDirect; }
2393 bool isDeleted()
const {
return getSPFlags() & SPFlagDeleted; }
2399 bool isLValueReference()
const {
return getFlags() & FlagLValueReference; }
2405 bool isRValueReference()
const {
return getFlags() & FlagRValueReference; }
2410 bool isNoReturn()
const {
return getFlags() & FlagNoReturn; }
2415 bool isThunk()
const {
return getFlags() & FlagThunk; }
2417 DIScope *
getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
2424 DISubroutineType *
getType()
const {
2425 return cast_or_null<DISubroutineType>(getRawType());
2427 DIType *getContainingType()
const {
2428 return cast_or_null<DIType>(getRawContainingType());
2430 void replaceType(DISubroutineType *Ty) {
2435 DICompileUnit *getUnit()
const {
2436 return cast_or_null<DICompileUnit>(getRawUnit());
2439 DITemplateParameterArray getTemplateParams()
const {
2440 return cast_or_null<MDTuple>(getRawTemplateParams());
2442 DISubprogram *getDeclaration()
const {
2443 return cast_or_null<DISubprogram>(getRawDeclaration());
2446 DINodeArray getRetainedNodes()
const {
2447 return cast_or_null<MDTuple>(getRawRetainedNodes());
2449 DITypeArray getThrownTypes()
const {
2450 return cast_or_null<MDTuple>(getRawThrownTypes());
2452 DINodeArray getAnnotations()
const {
2453 return cast_or_null<MDTuple>(getRawAnnotations());
2455 StringRef getTargetFuncName()
const {
2460 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
2461 MDString *getRawLinkageName()
const {
return getOperandAs<MDString>(3); }
2466 Metadata *getRawContainingType()
const {
2467 return getNumOperands() > 8 ? getOperandAs<Metadata>(8) : nullptr;
2469 Metadata *getRawTemplateParams()
const {
2470 return getNumOperands() > 9 ? getOperandAs<Metadata>(9) : nullptr;
2472 Metadata *getRawThrownTypes()
const {
2473 return getNumOperands() > 10 ? getOperandAs<Metadata>(10) : nullptr;
2475 Metadata *getRawAnnotations()
const {
2476 return getNumOperands() > 11 ? getOperandAs<Metadata>(11) : nullptr;
2478 MDString *getRawTargetFuncName()
const {
2479 return getNumOperands() > 12 ? getOperandAs<MDString>(12) : nullptr;
2482 void replaceRawLinkageName(MDString *
LinkageName) {
2485 void replaceRetainedNodes(DINodeArray
N) {
2492 LLVM_ABI bool describes(
const Function *
F)
const;
2528 AtomRank,
Storage, ShouldCreate);
2531 TempDILocation cloneImpl()
const {
2546 return get(
getContext(), getLine(), getColumn(), getScope(), getInlinedAt(),
2567 TempDILocation
clone()
const {
return cloneImpl(); }
2571 DILocalScope *getScope()
const {
return cast<DILocalScope>(
getRawScope()); }
2575 StringRef getSubprogramLinkageName()
const {
2576 DISubprogram *
SP = getScope()->getSubprogram();
2579 auto Name =
SP->getLinkageName();
2582 return SP->getName();
2585 DILocation *getInlinedAt()
const {
2598 DIFile *getFile()
const {
return getScope()->getFile(); }
2599 StringRef
getFilename()
const {
return getScope()->getFilename(); }
2600 StringRef getDirectory()
const {
return getScope()->getDirectory(); }
2601 std::optional<StringRef> getSource()
const {
return getScope()->getSource(); }
2607 DILocalScope *getInlinedAtScope()
const {
2608 if (
auto *IA = getInlinedAt())
2609 return IA->getInlinedAtScope();
2647 inline unsigned getDiscriminator()
const;
2658 return ((Discriminator & 0x7) == 0x7) && (Discriminator & 0xFFFFFFF8);
2668 inline std::optional<const DILocation *>
2685 inline std::optional<const DILocation *>
2720 bool IsFSDiscriminator =
false) {
2724 auto DwarfBaseDiscriminator =
2726 if (DwarfBaseDiscriminator)
2727 return *DwarfBaseDiscriminator;
2736 if (IsFSDiscriminator)
2754 LLVM_ABI static std::optional<unsigned>
2759 unsigned &
DF,
unsigned &CI);
2827 assert(Column < (1u << 16) &&
"Expected 16-bit column");
2834 bool ShouldCreate =
true) {
2843 bool ShouldCreate =
true);
2845 TempDILexicalBlock cloneImpl()
const {
2860 TempDILexicalBlock
clone()
const {
return cloneImpl(); }
2884 bool ShouldCreate =
true) {
2890 LLVM_ABI static DILexicalBlockFile *getImpl(LLVMContext &Context,
2894 bool ShouldCreate =
true);
2896 TempDILexicalBlockFile cloneImpl()
const {
2910 TempDILexicalBlockFile
clone()
const {
return cloneImpl(); }
2918unsigned DILocation::getDiscriminator()
const {
2919 if (
auto *
F = dyn_cast<DILexicalBlockFile>(getScope()))
2920 return F->getDiscriminator();
2931 for (
auto *LBF = dyn_cast<DILexicalBlockFile>(
Scope);
2932 LBF && LBF->getDiscriminator() != 0;
2933 LBF = dyn_cast<DILexicalBlockFile>(
Scope))
2934 Scope = LBF->getScope();
2955std::optional<const DILocation *>
2957 unsigned BD,
DF, CI;
2971 return std::nullopt;
2974std::optional<const DILocation *>
2992 return std::nullopt;
3015 bool ShouldCreate =
true);
3017 TempDINamespace cloneImpl()
const {
3030 TempDINamespace
clone()
const {
return cloneImpl(); }
3060 bool ShouldCreate =
true) {
3073 TempDIModule cloneImpl()
const {
3075 getConfigurationMacros(), getIncludePath(),
3076 getAPINotesFile(), getLineNo(), getIsDecl());
3084 bool IsDecl =
false),
3091 bool IsDecl =
false),
3095 TempDIModule
clone()
const {
return cloneImpl(); }
3097 DIScope *
getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
3106 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
3107 MDString *getRawConfigurationMacros()
const {
3108 return getOperandAs<MDString>(3);
3110 MDString *getRawIncludePath()
const {
return getOperandAs<MDString>(4); }
3111 MDString *getRawAPINotesFile()
const {
return getOperandAs<MDString>(5); }
3114 return MD->getMetadataID() == DIModuleKind;
3139 return MD->
getMetadataID() == DITemplateTypeParameterKind ||
3155 bool ShouldCreate =
true) {
3163 TempDITemplateTypeParameter cloneImpl()
const {
3175 TempDITemplateTypeParameter
clone()
const {
return cloneImpl(); }
3197 bool ShouldCreate =
true) {
3201 LLVM_ABI static DITemplateValueParameter *
3204 bool ShouldCreate =
true);
3206 TempDITemplateValueParameter cloneImpl()
const {
3221 TempDITemplateValueParameter
clone()
const {
return cloneImpl(); }
3256 if (
auto *
BT = dyn_cast<DIBasicType>(
getType()))
3257 return BT->getSignedness();
3258 return std::nullopt;
3263 return F->getFilename();
3269 return F->getDirectory();
3275 return F->getSource();
3276 return std::nullopt;
3303 std::vector<uint64_t> Elements;
3307 Elements(Elements.begin(), Elements.end()) {}
3308 ~DIExpression() =
default;
3310 LLVM_ABI static DIExpression *getImpl(LLVMContext &Context,
3311 ArrayRef<uint64_t> Elements,
3313 bool ShouldCreate =
true);
3315 TempDIExpression cloneImpl()
const {
3322 TempDIExpression
clone()
const {
return cloneImpl(); }
3329 assert(
I < Elements.size() &&
"Index out of range");
3473 LLVM_ABI static std::optional<FragmentInfo>
3501 LLVM_ABI std::optional<ArrayRef<uint64_t>>
3526 LLVM_ABI static std::optional<const DIExpression *>
3552 bool SecondIndirect);
3647 LLVM_ABI static std::optional<DIExpression *>
3649 unsigned SizeInBits);
3699 uint64_t SliceSizeInBits,
const Value *DbgPtr, int64_t DbgPtrOffsetInBits,
3701 std::optional<DIExpression::FragmentInfo> &Result,
3702 int64_t &OffsetFromLocationInBits);
3713 unsigned FromSize,
unsigned ToSize,
3725 auto Fragment2 = *
Other->getFragmentInfo();
3743 LLVM_ABI std::pair<DIExpression *, const ConstantInt *>
3754 return std::tie(
A.SizeInBits,
A.OffsetInBits) ==
3755 std::tie(
B.SizeInBits,
B.OffsetInBits);
3760 return std::tie(
A.SizeInBits,
A.OffsetInBits) <
3761 std::tie(
B.SizeInBits,
B.OffsetInBits);
3766 static const uint64_t MaxVal = std::numeric_limits<uint64_t>::max();
3800 std::optional<DIExpression::ExprOperand>
take() {
3802 return std::nullopt;
3810 std::optional<DIExpression::ExprOperand>
peek()
const {
3812 return std::nullopt;
3817 std::optional<DIExpression::ExprOperand>
peekNext()
const {
3819 return std::nullopt;
3821 auto Next = Start.getNext();
3823 return std::nullopt;
3828 std::optional<DIExpression::ExprOperand>
peekNextN(
unsigned N)
const {
3830 return std::nullopt;
3832 for (
unsigned I = 0;
I <
N;
I++) {
3835 return std::nullopt;
3871 IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
3877 bool IsLocalToUnit,
bool IsDefinition,
3880 bool ShouldCreate =
true) {
3890 bool IsLocalToUnit,
bool IsDefinition,
3893 bool ShouldCreate =
true);
3895 TempDIGlobalVariable cloneImpl()
const {
3907 unsigned Line,
DIType *
Type,
bool IsLocalToUnit,
bool IsDefinition,
3921 TempDIGlobalVariable
clone()
const {
return cloneImpl(); }
3966 bool ShouldCreate =
true);
3968 TempDICommonBlock cloneImpl()
const {
3983 TempDICommonBlock
clone()
const {
return cloneImpl(); }
3987 return cast_or_null<DIGlobalVariable>(
getRawDecl());
4017 Arg(Arg), Flags(Flags) {
4018 assert(Arg < (1 << 16) &&
"DILocalVariable: Arg out of range");
4027 bool ShouldCreate =
true) {
4036 bool ShouldCreate =
true);
4038 TempDILocalVariable cloneImpl()
const {
4058 TempDILocalVariable
clone()
const {
return cloneImpl(); }
4101 std::optional<unsigned> CoroSuspendIdx;
4105 bool IsArtificial, std::optional<unsigned> CoroSuspendIdx,
4112 std::optional<unsigned> CoroSuspendIdx,
4115 Line, Column, IsArtificial, CoroSuspendIdx,
Storage,
4120 unsigned Line,
unsigned Column,
bool IsArtificial,
4122 bool ShouldCreate =
true);
4124 TempDILabel cloneImpl()
const {
4133 unsigned Line,
unsigned Column,
bool IsArtificial,
4134 std::optional<unsigned> CoroSuspendIdx),
4139 unsigned Line,
unsigned Column,
bool IsArtificial,
4140 std::optional<unsigned> CoroSuspendIdx),
4144 TempDILabel
clone()
const {
return cloneImpl(); }
4182 unsigned Attributes;
4202 TempDIObjCProperty cloneImpl()
const {
4222 TempDIObjCProperty
clone()
const {
return cloneImpl(); }
4234 return F->getFilename();
4240 return F->getDirectory();
4273 bool ShouldCreate =
true) {
4283 TempDIImportedEntity cloneImpl()
const {
4285 getFile(), getLine(),
getName(), getElements());
4292 DINodeArray Elements =
nullptr),
4300 TempDIImportedEntity
clone()
const {
return cloneImpl(); }
4303 DIScope *getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
4304 DINode *getEntity()
const {
return cast_or_null<DINode>(getRawEntity()); }
4306 DIFile *getFile()
const {
return cast_or_null<DIFile>(getRawFile()); }
4307 DINodeArray getElements()
const {
4308 return cast_or_null<MDTuple>(getRawElements());
4313 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
4318 return MD->getMetadataID() == DIImportedEntityKind;
4336 TempDIGlobalVariableExpression cloneImpl()
const {
4345 TempDIGlobalVariableExpression
clone()
const {
return cloneImpl(); }
4360 return MD->
getMetadataID() == DIGlobalVariableExpressionKind;
4380 assert(MIType < 1u << 16);
4390 if (
auto *S = getOperandAs<MDString>(
I))
4391 return S->getString();
4409 case DIMacroFileKind:
4431 bool ShouldCreate =
true) {
4435 LLVM_ABI static DIMacro *getImpl(LLVMContext &Context,
unsigned MIType,
4438 bool ShouldCreate =
true);
4440 TempDIMacro cloneImpl()
const {
4455 TempDIMacro
clone()
const {
return cloneImpl(); }
4487 bool ShouldCreate =
true) {
4492 LLVM_ABI static DIMacroFile *getImpl(LLVMContext &Context,
unsigned MIType,
4495 bool ShouldCreate =
true);
4497 TempDIMacroFile cloneImpl()
const {
4512 TempDIMacroFile
clone()
const {
return cloneImpl(); }
4518 "Lost a macro node during macro node list replacement");
4556 void dropAllReferences(
bool Untrack);
4559 LLVM_ABI static DIArgList *
get(LLVMContext &Context,
4560 ArrayRef<ValueAsMetadata *> Args);
4593 std::optional<FragmentInfo> Fragment;
4606 : Variable(Var), Fragment(
FragmentInfo), InlinedAt(InlinedAt) {}
4611 Fragment(DIExpr ? DIExpr->getFragmentInfo() :
std::nullopt),
4612 InlinedAt(InlinedAt) {}
4619 return Fragment.value_or(DefaultFragment);
4623 return F == DefaultFragment;
4627 return std::tie(Variable, Fragment, InlinedAt) ==
4632 return std::tie(Variable, Fragment, InlinedAt) <
4652 const std::optional<FragmentInfo> Fragment =
D.getFragment();
4677#undef DEFINE_MDNODE_GET_UNPACK_IMPL
4678#undef DEFINE_MDNODE_GET_UNPACK
4679#undef DEFINE_MDNODE_GET
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static std::string getLinkageName(GlobalValue::LinkageTypes LT)
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
static RegisterPass< DebugifyFunctionPass > DF("debugify-function", "Attach debug info to a function")
static unsigned getNextComponentInDiscriminator(unsigned D)
Returns the next component stored in discriminator.
static unsigned getUnsignedFromPrefixEncoding(unsigned U)
Reverse transformation as getPrefixEncodingFromUnsigned.
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
static SmallString< 128 > getFilename(const DIScope *SP)
Extract a filename for a DIScope.
This file defines the PointerUnion class, which is a discriminated union of pointer types.
static StringRef getName(Value *V)
static void r2(uint32_t &A, uint32_t &B, uint32_t &C, uint32_t &D, uint32_t &E, int I, uint32_t *Buf)
static void r1(uint32_t &A, uint32_t &B, uint32_t &C, uint32_t &D, uint32_t &E, int I, uint32_t *Buf)
static enum BaseType getBaseType(const Value *Val)
Return the baseType for Val which states whether Val is exclusively derived from constant/null,...
This file defines the SmallVector class.
static uint32_t getFlags(const Symbol *Sym)
static SymbolRef::Type getType(const Symbol *Sym)
Class for arbitrary precision integers.
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),...
This is the shared class of boolean and integer constants.
This is an important base class in LLVM.
List of ValueAsMetadata, to be used as an argument to a dbg.value intrinsic.
ArrayRef< ValueAsMetadata * > getArgs() const
LLVM_ABI void handleChangedOperand(void *Ref, Metadata *New)
static bool classof(const Metadata *MD)
static LLVM_ABI DIArgList * get(LLVMContext &Context, ArrayRef< ValueAsMetadata * > Args)
SmallVector< DbgVariableRecord * > getAllDbgVariableRecordUsers()
static bool classof(const Metadata *MD)
SmallVector< DbgVariableRecord * > getAllDbgVariableRecordUsers()
static TempDIAssignID getTemporary(LLVMContext &Context)
static DIAssignID * getDistinct(LLVMContext &Context)
void replaceOperandWith(unsigned I, Metadata *New)=delete
Basic type, like 'int' or 'float'.
unsigned StringRef uint64_t FlagZero unsigned StringRef uint64_t uint32_t unsigned DIFlags Flags
DIBasicType(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, DIFlags Flags, ArrayRef< Metadata * > Ops)
TempDIBasicType cloneImpl() const
unsigned StringRef uint64_t FlagZero unsigned StringRef uint64_t uint32_t unsigned DIFlags Flags unsigned StringRef uint64_t uint32_t unsigned uint32_t DIFlags Flags unsigned MDString Metadata uint32_t unsigned uint32_t DIFlags Flags TempDIBasicType clone() const
static bool classof(const Metadata *MD)
DIBasicType(LLVMContext &C, StorageType Storage, unsigned Tag, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, DIFlags Flags, ArrayRef< Metadata * > Ops)
static DIBasicType * getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, DIFlags Flags, StorageType Storage, bool ShouldCreate=true)
static DIBasicType * getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, DIFlags Flags, StorageType Storage, bool ShouldCreate=true)
unsigned StringRef uint64_t SizeInBits
LLVM_ABI std::optional< Signedness > getSignedness() const
Return the signedness of this type, or std::nullopt if this type is neither signed nor unsigned.
unsigned getEncoding() const
unsigned StringRef uint64_t FlagZero unsigned StringRef uint64_t uint32_t unsigned DIFlags Flags unsigned StringRef uint64_t uint32_t unsigned uint32_t NumExtraInhabitants
unsigned StringRef uint64_t FlagZero unsigned StringRef uint64_t uint32_t AlignInBits
DEFINE_MDNODE_GET(DIBasicType,(unsigned Tag, StringRef Name),(Tag, Name, 0, 0, 0, 0, FlagZero)) DEFINE_MDNODE_GET(DIBasicType
Metadata * getRawScope() const
Metadata Metadata MDString Metadata unsigned LineNo TempDICommonBlock clone() const
Metadata * getRawDecl() const
Metadata * getRawFile() const
Metadata Metadata MDString Metadata unsigned LineNo
Metadata Metadata MDString * Name
MDString * getRawName() const
static bool classof(const Metadata *MD)
unsigned getLineNo() const
Metadata Metadata MDString Metadata * File
StringRef getName() const
DIScope * getScope() const
DEFINE_MDNODE_GET(DICommonBlock,(DIScope *Scope, DIGlobalVariable *Decl, StringRef Name, DIFile *File, unsigned LineNo),(Scope, Decl, Name, File, LineNo)) DEFINE_MDNODE_GET(DICommonBlock
DIGlobalVariable * getDecl() const
MDString * getRawSplitDebugFilename() const
bool getDebugInfoForProfiling() const
Metadata * getRawRetainedTypes() const
static LLVM_ABI const char * nameTableKindString(DebugNameTableKind PK)
static LLVM_ABI const char * emissionKindString(DebugEmissionKind EK)
void setSplitDebugInlining(bool SplitDebugInlining)
DICompositeTypeArray getEnumTypes() const
DebugEmissionKind getEmissionKind() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata Metadata Metadata * Macros
unsigned Metadata MDString bool MDString * Flags
bool isDebugDirectivesOnly() const
StringRef getFlags() const
MDString * getRawProducer() const
void replaceEnumTypes(DICompositeTypeArray N)
Replace arrays.
MDString * getRawSysRoot() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata * EnumTypes
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata * RetainedTypes
static void getIfExists()=delete
bool getRangesBaseAddress() const
DIMacroNodeArray getMacros() const
unsigned getRuntimeVersion() const
Metadata * getRawMacros() const
void replaceRetainedTypes(DITypeArray N)
static bool classof(const Metadata *MD)
void replaceGlobalVariables(DIGlobalVariableExpressionArray N)
void replaceMacros(DIMacroNodeArray N)
bool getSplitDebugInlining() const
StringRef getSysRoot() const
DebugNameTableKind getNameTableKind() const
MDString * getRawSDK() const
MDString * getRawFlags() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata * GlobalVariables
DIImportedEntityArray getImportedEntities() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata Metadata Metadata uint64_t bool bool unsigned bool MDString MDString * SDK
unsigned Metadata MDString * Producer
Metadata * getRawEnumTypes() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata Metadata Metadata uint64_t bool bool unsigned bool MDString * SysRoot
StringRef getProducer() const
unsigned Metadata MDString bool MDString unsigned MDString * SplitDebugFilename
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata Metadata * ImportedEntities
void setDWOId(uint64_t DwoId)
DIScopeArray getRetainedTypes() const
void replaceImportedEntities(DIImportedEntityArray N)
Metadata * getRawGlobalVariables() const
DIGlobalVariableExpressionArray getGlobalVariables() const
unsigned Metadata MDString bool MDString unsigned MDString unsigned Metadata Metadata Metadata Metadata Metadata uint64_t bool bool unsigned bool MDString MDString SDK TempDICompileUnit clone() const
unsigned getSourceLanguage() const
Metadata * getRawImportedEntities() const
uint64_t getDWOId() const
StringRef getSplitDebugFilename() const
DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(DICompileUnit,(unsigned SourceLanguage, DIFile *File, StringRef Producer, bool IsOptimized, StringRef Flags, unsigned RuntimeVersion, StringRef SplitDebugFilename, DebugEmissionKind EmissionKind, DICompositeTypeArray EnumTypes, DIScopeArray RetainedTypes, DIGlobalVariableExpressionArray GlobalVariables, DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, DebugNameTableKind NameTableKind, bool RangesBaseAddress, StringRef SysRoot, StringRef SDK),(SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining, DebugInfoForProfiling,(unsigned) NameTableKind, RangesBaseAddress, SysRoot, SDK)) DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(DICompileUnit
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t AlignInBits
Metadata * getRawVTableHolder() const
DIExpression * getRankExp() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata * DataLocation
static LLVM_ABI DICompositeType * buildODRType(LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, Metadata *SizeInBits, uint32_t AlignInBits, Metadata *OffsetInBits, Metadata *Specification, uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements, unsigned RuntimeLang, std::optional< uint32_t > EnumKind, Metadata *VTableHolder, Metadata *TemplateParams, Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated, Metadata *Allocated, Metadata *Rank, Metadata *Annotations, Metadata *BitStride)
Build a DICompositeType with the given ODR identifier.
unsigned MDString Metadata unsigned Line
Metadata * getRawRank() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata * Elements
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata Metadata Metadata * Annotations
Metadata * getRawSpecification() const
DIExpression * getAssociatedExp() const
DIVariable * getAllocated() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString * Identifier
DIExpression * getDataLocationExp() const
Metadata * getRawDiscriminator() const
static LLVM_ABI DICompositeType * getODRTypeIfExists(LLVMContext &Context, MDString &Identifier)
DIVariable * getAssociated() const
DIDerivedType * getDiscriminator() const
DIVariable * getDataLocation() const
unsigned getRuntimeLang() const
DIType * getSpecification() const
Metadata * getRawElements() const
void replaceVTableHolder(DIType *VTableHolder)
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata * Discriminator
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata * TemplateParams
StringRef getIdentifier() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t OffsetInBits
unsigned MDString Metadata unsigned Metadata * Scope
unsigned MDString Metadata * File
Metadata * getRawDataLocation() const
Metadata * getRawTemplateParams() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Flags
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata * Allocated
DINodeArray getElements() const
DITemplateParameterArray getTemplateParams() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata Metadata Metadata Metadata * Specification
Metadata * getRawAnnotations() const
Metadata * getRawAllocated() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata * VTableHolder
DIExpression * getAllocatedExp() const
void replaceElements(DINodeArray Elements)
Replace operands.
ConstantInt * getBitStrideConst() const
std::optional< uint32_t > getEnumKind() const
unsigned MDString Metadata unsigned Metadata Metadata uint64_t SizeInBits
DIType * getVTableHolder() const
DINodeArray getAnnotations() const
Metadata * getRawAssociated() const
ConstantInt * getRankConst() const
void replaceTemplateParams(DITemplateParameterArray TemplateParams)
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata * Associated
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata Metadata Metadata Metadata uint32_t NumExtraInhabitants
Metadata * getRawBitStride() const
Metadata * getRawBaseType() const
DEFINE_MDNODE_GET(DICompositeType,(unsigned Tag, StringRef Name, DIFile *File, unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, DINodeArray Elements, unsigned RuntimeLang, std::optional< uint32_t > EnumKind, DIType *VTableHolder, DITemplateParameterArray TemplateParams=nullptr, StringRef Identifier="", DIDerivedType *Discriminator=nullptr, Metadata *DataLocation=nullptr, Metadata *Associated=nullptr, Metadata *Allocated=nullptr, Metadata *Rank=nullptr, DINodeArray Annotations=nullptr, DIType *Specification=nullptr, uint32_t NumExtraInhabitants=0, Metadata *BitStride=nullptr),(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, Specification, NumExtraInhabitants, Flags, Elements, RuntimeLang, EnumKind, VTableHolder, TemplateParams, Identifier, Discriminator, DataLocation, Associated, Allocated, Rank, Annotations, BitStride)) DEFINE_MDNODE_GET(DICompositeType
MDString * getRawIdentifier() const
static bool classof(const Metadata *MD)
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata Metadata * Rank
unsigned MDString Metadata unsigned Metadata Metadata uint64_t uint32_t uint64_t DIFlags Metadata unsigned std::optional< uint32_t > Metadata Metadata MDString Metadata Metadata Metadata Metadata Metadata Metadata Metadata uint32_t Metadata * BitStride
DIType * getBaseType() const
Metadata * getRawExtraData() const
unsigned StringRef DIFile unsigned DIScope DIType Metadata uint32_t Metadata * OffsetInBits
unsigned StringRef DIFile unsigned DIScope DIType Metadata uint32_t Metadata std::optional< unsigned > std::optional< PtrAuthData > DIFlags Flags
unsigned StringRef DIFile unsigned DIScope DIType Metadata uint32_t AlignInBits
DINodeArray getAnnotations() const
Get annotations associated with this derived type.
DEFINE_MDNODE_GET(DIDerivedType,(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, Metadata *SizeInBits, uint32_t AlignInBits, Metadata *OffsetInBits, std::optional< unsigned > DWARFAddressSpace, std::optional< PtrAuthData > PtrAuthData, DIFlags Flags, Metadata *ExtraData=nullptr, Metadata *Annotations=nullptr),(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, DWARFAddressSpace, PtrAuthData, Flags, ExtraData, Annotations)) DEFINE_MDNODE_GET(DIDerivedType
Metadata * getExtraData() const
Get extra data associated with this derived type.
DITemplateParameterArray getTemplateParams() const
Get the template parameters from a template alias.
unsigned StringRef DIFile * File
unsigned StringRef DIFile unsigned DIScope DIType Metadata uint32_t Metadata std::optional< unsigned > std::optional< PtrAuthData > DIFlags Metadata DINodeArray Annotations
DIObjCProperty * getObjCProperty() const
unsigned StringRef DIFile unsigned DIScope * Scope
Metadata * getRawAnnotations() const
LLVM_ABI DIType * getClassType() const
Get casted version of extra data.
static bool classof(const Metadata *MD)
LLVM_ABI Constant * getConstant() const
unsigned StringRef DIFile unsigned DIScope DIType Metadata * SizeInBits
LLVM_ABI Constant * getStorageOffsetInBits() const
LLVM_ABI Constant * getDiscriminantValue() const
LLVM_ABI uint32_t getVBPtrOffset() const
unsigned StringRef DIFile unsigned DIScope DIType Metadata uint32_t Metadata std::optional< unsigned > std::optional< PtrAuthData > DIFlags Metadata * ExtraData
unsigned StringRef DIFile unsigned Line
int64_t bool MDString APInt(64, Value, !IsUnsigned)
const APInt & getValue() const
int64_t bool MDString Name APInt bool MDString Name TempDIEnumerator clone() const
MDString * getRawName() const
StringRef getName() const
DEFINE_MDNODE_GET(DIEnumerator,(int64_t Value, bool IsUnsigned, StringRef Name),(APInt(64, Value, !IsUnsigned), IsUnsigned, Name)) DEFINE_MDNODE_GET(DIEnumerator
static bool classof(const Metadata *MD)
int64_t bool MDString * Name
Holds a DIExpression and keeps track of how many operands have been consumed so far.
std::optional< DIExpression::ExprOperand > peekNext() const
Return the next operation.
std::optional< DIExpression::FragmentInfo > getFragmentInfo() const
Retrieve the fragment information, if any.
DIExpressionCursor(const DIExpressionCursor &)=default
DIExpressionCursor(const DIExpression *Expr)
DIExpression::expr_op_iterator end() const
std::optional< DIExpression::ExprOperand > peekNextN(unsigned N) const
std::optional< DIExpression::ExprOperand > peek() const
Return the current operation.
void consume(unsigned N)
Consume N operations.
std::optional< DIExpression::ExprOperand > take()
Consume one operation.
DIExpressionCursor(ArrayRef< uint64_t > Expr)
DIExpression::expr_op_iterator begin() const
void assignNewExpr(ArrayRef< uint64_t > Expr)
A lightweight wrapper around an expression operand.
LLVM_ABI unsigned getSize() const
Return the size of the operand.
ExprOperand(const uint64_t *Op)
uint64_t getArg(unsigned I) const
Get an argument to the operand.
unsigned getNumArgs() const
uint64_t getOp() const
Get the operand code.
const uint64_t * get() const
void appendToVector(SmallVectorImpl< uint64_t > &V) const
Append the elements of this operand to V.
An iterator for expression operands.
bool operator==(const expr_op_iterator &X) const
std::input_iterator_tag iterator_category
expr_op_iterator & operator++()
const ExprOperand * operator->() const
bool operator!=(const expr_op_iterator &X) const
expr_op_iterator(element_iterator I)
std::ptrdiff_t difference_type
element_iterator getBase() const
const ExprOperand & operator*() const
expr_op_iterator getNext() const
Get the next iterator.
expr_op_iterator operator++(int)
expr_op_iterator()=default
element_iterator elements_end() const
LLVM_ABI bool isEntryValue() const
Check if the expression consists of exactly one entry value operand.
iterator_range< expr_op_iterator > expr_ops() const
bool isFragment() const
Return whether this is a piece of an aggregate variable.
static LLVM_ABI DIExpression * append(const DIExpression *Expr, ArrayRef< uint64_t > Ops)
Append the opcodes Ops to DIExpr.
std::array< uint64_t, 6 > ExtOps
unsigned getNumElements() const
ArrayRef< uint64_t >::iterator element_iterator
static LLVM_ABI ExtOps getExtOps(unsigned FromSize, unsigned ToSize, bool Signed)
Returns the ops for a zero- or sign-extension in a DIExpression.
expr_op_iterator expr_op_begin() const
Visit the elements via ExprOperand wrappers.
LLVM_ABI bool extractIfOffset(int64_t &Offset) const
If this is a constant offset, extract it.
static LLVM_ABI void appendOffset(SmallVectorImpl< uint64_t > &Ops, int64_t Offset)
Append Ops with operations to apply the Offset.
DbgVariableFragmentInfo FragmentInfo
int fragmentCmp(const DIExpression *Other) const
Determine the relative position of the fragments described by this DIExpression and Other.
LLVM_ABI bool startsWithDeref() const
Return whether the first element a DW_OP_deref.
static LLVM_ABI bool isEqualExpression(const DIExpression *FirstExpr, bool FirstIndirect, const DIExpression *SecondExpr, bool SecondIndirect)
Determines whether two debug values should produce equivalent DWARF expressions, using their DIExpres...
expr_op_iterator expr_op_end() const
LLVM_ABI bool isImplicit() const
Return whether this is an implicit location description.
DEFINE_MDNODE_GET(DIExpression,(ArrayRef< uint64_t > Elements),(Elements)) TempDIExpression clone() const
static bool fragmentsOverlap(const FragmentInfo &A, const FragmentInfo &B)
Check if fragments overlap between a pair of FragmentInfos.
static LLVM_ABI bool calculateFragmentIntersect(const DataLayout &DL, const Value *SliceStart, uint64_t SliceOffsetInBits, uint64_t SliceSizeInBits, const Value *DbgPtr, int64_t DbgPtrOffsetInBits, int64_t DbgExtractOffsetInBits, DIExpression::FragmentInfo VarFrag, std::optional< DIExpression::FragmentInfo > &Result, int64_t &OffsetFromLocationInBits)
Computes a fragment, bit-extract operation if needed, and new constant offset to describe a part of a...
element_iterator elements_begin() const
LLVM_ABI bool hasAllLocationOps(unsigned N) const
Returns true iff this DIExpression contains at least one instance of DW_OP_LLVM_arg,...
std::optional< FragmentInfo > getFragmentInfo() const
Retrieve the details of this fragment expression.
static LLVM_ABI DIExpression * appendOpsToArg(const DIExpression *Expr, ArrayRef< uint64_t > Ops, unsigned ArgNo, bool StackValue=false)
Create a copy of Expr by appending the given list of Ops to each instance of the operand DW_OP_LLVM_a...
PrependOps
Used for DIExpression::prepend.
static int fragmentCmp(const FragmentInfo &A, const FragmentInfo &B)
Determine the relative position of the fragments passed in.
LLVM_ABI bool isComplex() const
Return whether the location is computed on the expression stack, meaning it cannot be a simple regist...
bool fragmentsOverlap(const DIExpression *Other) const
Check if fragments overlap between this DIExpression and Other.
LLVM_ABI DIExpression * foldConstantMath()
Try to shorten an expression with constant math operations that can be evaluated at compile time.
static LLVM_ABI std::optional< const DIExpression * > convertToNonVariadicExpression(const DIExpression *Expr)
If Expr is a valid single-location expression, i.e.
LLVM_ABI std::pair< DIExpression *, const ConstantInt * > constantFold(const ConstantInt *CI)
Try to shorten an expression with an initial constant operand.
LLVM_ABI bool isDeref() const
Return whether there is exactly one operator and it is a DW_OP_deref;.
static LLVM_ABI const DIExpression * convertToVariadicExpression(const DIExpression *Expr)
If Expr is a non-variadic expression (i.e.
LLVM_ABI uint64_t getNumLocationOperands() const
Return the number of unique location operands referred to (via DW_OP_LLVM_arg) in this expression; th...
ArrayRef< uint64_t > getElements() const
static LLVM_ABI DIExpression * replaceArg(const DIExpression *Expr, uint64_t OldArg, uint64_t NewArg)
Create a copy of Expr with each instance of DW_OP_LLVM_arg, \p OldArg replaced with DW_OP_LLVM_arg,...
static bool classof(const Metadata *MD)
LLVM_ABI std::optional< uint64_t > getActiveBits(DIVariable *Var)
Return the number of bits that have an active value, i.e.
static LLVM_ABI void canonicalizeExpressionOps(SmallVectorImpl< uint64_t > &Ops, const DIExpression *Expr, bool IsIndirect)
Inserts the elements of Expr into Ops modified to a canonical form, which uses DW_OP_LLVM_arg (i....
uint64_t getElement(unsigned I) const
static LLVM_ABI std::optional< DIExpression * > createFragmentExpression(const DIExpression *Expr, unsigned OffsetInBits, unsigned SizeInBits)
Create a DIExpression to describe one part of an aggregate variable that is fragmented across multipl...
static LLVM_ABI const DIExpression * convertToUndefExpression(const DIExpression *Expr)
Removes all elements from Expr that do not apply to an undef debug value, which includes every operat...
static LLVM_ABI DIExpression * prepend(const DIExpression *Expr, uint8_t Flags, int64_t Offset=0)
Prepend DIExpr with a deref and offset operation and optionally turn it into a stack value or/and an ...
static LLVM_ABI DIExpression * appendToStack(const DIExpression *Expr, ArrayRef< uint64_t > Ops)
Convert DIExpr into a stack value if it isn't one already by appending DW_OP_deref if needed,...
static LLVM_ABI DIExpression * appendExt(const DIExpression *Expr, unsigned FromSize, unsigned ToSize, bool Signed)
Append a zero- or sign-extension to Expr.
LLVM_ABI std::optional< ArrayRef< uint64_t > > getSingleLocationExpressionElements() const
Returns a reference to the elements contained in this expression, skipping past the leading DW_OP_LLV...
LLVM_ABI bool isSingleLocationExpression() const
Return whether the evaluated expression makes use of a single location at the start of the expression...
LLVM_ABI bool extractLeadingOffset(int64_t &OffsetInBytes, SmallVectorImpl< uint64_t > &RemainingOps) const
Assuming that the expression operates on an address, extract a constant offset and the successive ops...
LLVM_ABI std::optional< SignedOrUnsignedConstant > isConstant() const
Determine whether this represents a constant value, if so.
LLVM_ABI bool isValid() const
static LLVM_ABI const DIExpression * extractAddressClass(const DIExpression *Expr, unsigned &AddrClass)
Checks if the last 4 elements of the expression are DW_OP_constu <DWARF Address Space> DW_OP_swap DW_...
static LLVM_ABI DIExpression * prependOpcodes(const DIExpression *Expr, SmallVectorImpl< uint64_t > &Ops, bool StackValue=false, bool EntryValue=false)
Prepend DIExpr with the given opcodes and optionally turn it into a stack value.
static bool classof(const Metadata *MD)
MDString MDString * Directory
DEFINE_MDNODE_GET(DIFile,(StringRef Filename, StringRef Directory, std::optional< ChecksumInfo< StringRef > > CS=std::nullopt, std::optional< StringRef > Source=std::nullopt),(Filename, Directory, CS, Source)) DEFINE_MDNODE_GET(DIFile
static LLVM_ABI std::optional< ChecksumKind > getChecksumKind(StringRef CSKindStr)
ChecksumKind
Which algorithm (e.g.
MDString MDString std::optional< ChecksumInfo< MDString * > > CS
static LLVM_ABI std::optional< FixedPointKind > getFixedPointKind(StringRef Str)
static LLVM_ABI const char * fixedPointKindString(FixedPointKind)
const APInt & getNumeratorRaw() const
unsigned StringRef uint64_t uint32_t unsigned Encoding
static bool classof(const Metadata *MD)
const APInt & getDenominator() const
unsigned StringRef uint64_t uint32_t AlignInBits
LLVM_ABI bool isSigned() const
@ FixedPointBinary
Scale factor 2^Factor.
@ FixedPointDecimal
Scale factor 10^Factor.
@ FixedPointRational
Arbitrary rational scale factor.
FixedPointKind getKind() const
const APInt & getNumerator() const
DEFINE_MDNODE_GET(DIFixedPointType,(unsigned Tag, MDString *Name, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, DIFlags Flags, unsigned Kind, int Factor, APInt Numerator, APInt Denominator),(Tag, Name, SizeInBits, AlignInBits, Encoding, Flags, Kind, Factor, Numerator, Denominator)) DEFINE_MDNODE_GET(DIFixedPointType
unsigned StringRef uint64_t uint32_t unsigned DIFlags Flags
unsigned StringRef uint64_t SizeInBits
const APInt & getDenominatorRaw() const
Metadata * getRawLowerBound() const
Metadata * getRawCountNode() const
Metadata * getRawStride() const
LLVM_ABI BoundType getLowerBound() const
DEFINE_MDNODE_GET(DIGenericSubrange,(Metadata *CountNode, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride),(CountNode, LowerBound, UpperBound, Stride)) TempDIGenericSubrange clone() const
Metadata * getRawUpperBound() const
static bool classof(const Metadata *MD)
LLVM_ABI BoundType getCount() const
LLVM_ABI BoundType getUpperBound() const
LLVM_ABI BoundType getStride() const
A pair of DIGlobalVariable and DIExpression.
DEFINE_MDNODE_GET(DIGlobalVariableExpression,(Metadata *Variable, Metadata *Expression),(Variable, Expression)) TempDIGlobalVariableExpression clone() const
Metadata * getRawExpression() const
DIGlobalVariable * getVariable() const
static bool classof(const Metadata *MD)
Metadata * getRawVariable() const
DIExpression * getExpression() const
Metadata * getRawAnnotations() const
Metadata MDString MDString Metadata unsigned Metadata bool bool Metadata Metadata * TemplateParams
Metadata MDString MDString Metadata unsigned Line
Metadata MDString MDString Metadata unsigned Metadata * Type
Metadata MDString MDString Metadata unsigned Metadata bool bool Metadata Metadata uint32_t Metadata * Annotations
DIDerivedType * getStaticDataMemberDeclaration() const
DEFINE_MDNODE_GET(DIGlobalVariable,(DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned Line, DIType *Type, bool IsLocalToUnit, bool IsDefinition, DIDerivedType *StaticDataMemberDeclaration, MDTuple *TemplateParams, uint32_t AlignInBits, DINodeArray Annotations),(Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition, StaticDataMemberDeclaration, TemplateParams, AlignInBits, Annotations)) DEFINE_MDNODE_GET(DIGlobalVariable
Metadata MDString MDString Metadata unsigned Metadata bool bool Metadata Metadata uint32_t Metadata Annotations TempDIGlobalVariable clone() const
MDTuple * getTemplateParams() const
Metadata MDString MDString Metadata unsigned Metadata bool bool Metadata * StaticDataMemberDeclaration
bool isLocalToUnit() const
Metadata * getRawStaticDataMemberDeclaration() const
Metadata MDString MDString * LinkageName
MDString * getRawLinkageName() const
StringRef getLinkageName() const
static bool classof(const Metadata *MD)
StringRef getDisplayName() const
bool isDefinition() const
Metadata MDString MDString Metadata * File
DINodeArray getAnnotations() const
Metadata * getRawTemplateParams() const
Metadata MDString MDString Metadata unsigned Metadata bool bool Metadata Metadata uint32_t AlignInBits
An imported module (C++ using directive or similar).
unsigned Metadata Metadata * Entity
DEFINE_MDNODE_GET(DIImportedEntity,(unsigned Tag, DIScope *Scope, DINode *Entity, DIFile *File, unsigned Line, StringRef Name="", DINodeArray Elements=nullptr),(Tag, Scope, Entity, File, Line, Name, Elements)) DEFINE_MDNODE_GET(DIImportedEntity
unsigned Metadata Metadata Metadata unsigned Line
unsigned Metadata Metadata Metadata unsigned MDString * Name
unsigned Metadata Metadata Metadata * File
unsigned Metadata * Scope
Metadata MDString Metadata unsigned unsigned bool std::optional< unsigned > CoroSuspendIdx TempDILabel clone() const
StringRef getName() const
static bool classof(const Metadata *MD)
bool isArtificial() const
Metadata * getRawFile() const
unsigned getColumn() const
DILocalScope * getScope() const
Get the local scope for this label.
MDString * getRawName() const
std::optional< unsigned > getCoroSuspendIdx() const
Metadata MDString Metadata unsigned Line
DEFINE_MDNODE_GET(DILabel,(DILocalScope *Scope, StringRef Name, DIFile *File, unsigned Line, unsigned Column, bool IsArtificial, std::optional< unsigned > CoroSuspendIdx),(Scope, Name, File, Line, Column, IsArtificial, CoroSuspendIdx)) DEFINE_MDNODE_GET(DILabel
bool isValidLocationForIntrinsic(const DILocation *DL) const
Check that a location is valid for this label.
Metadata * getRawScope() const
Metadata MDString Metadata * File
static bool classof(const Metadata *MD)
void replaceScope(DIScope *Scope)
~DILexicalBlockBase()=default
Metadata * getRawScope() const
DILocalScope * getScope() const
Metadata Metadata unsigned Discriminator
static bool classof(const Metadata *MD)
unsigned getDiscriminator() const
Metadata Metadata unsigned Discriminator TempDILexicalBlockFile clone() const
DEFINE_MDNODE_GET(DILexicalBlockFile,(DILocalScope *Scope, DIFile *File, unsigned Discriminator),(Scope, File, Discriminator)) DEFINE_MDNODE_GET(DILexicalBlockFile
Metadata Metadata unsigned Line
DEFINE_MDNODE_GET(DILexicalBlock,(DILocalScope *Scope, DIFile *File, unsigned Line, unsigned Column),(Scope, File, Line, Column)) DEFINE_MDNODE_GET(DILexicalBlock
static bool classof(const Metadata *MD)
unsigned getColumn() const
Metadata Metadata unsigned unsigned Column TempDILexicalBlock clone() const
LLVM_ABI DISubprogram * getSubprogram() const
Get the subprogram for this scope.
LLVM_ABI DILocalScope * getNonLexicalBlockFileScope() const
Get the first non DILexicalBlockFile scope of this scope.
DILocalScope(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops)
static bool classof(const Metadata *MD)
static LLVM_ABI DILocalScope * cloneScopeForSubprogram(DILocalScope &RootScope, DISubprogram &NewSP, LLVMContext &Ctx, DenseMap< const MDNode *, MDNode * > &Cache)
Traverses the scope chain rooted at RootScope until it hits a Subprogram, recreating the chain with "...
Metadata MDString Metadata unsigned Metadata * Type
Metadata MDString Metadata * File
static bool classof(const Metadata *MD)
Metadata MDString Metadata unsigned Metadata unsigned DIFlags uint32_t Metadata Annotations TempDILocalVariable clone() const
DILocalScope * getScope() const
Get the local scope for this variable.
bool isObjectPointer() const
DINodeArray getAnnotations() const
DEFINE_MDNODE_GET(DILocalVariable,(DILocalScope *Scope, StringRef Name, DIFile *File, unsigned Line, DIType *Type, unsigned Arg, DIFlags Flags, uint32_t AlignInBits, DINodeArray Annotations),(Scope, Name, File, Line, Type, Arg, Flags, AlignInBits, Annotations)) DEFINE_MDNODE_GET(DILocalVariable
Metadata MDString Metadata unsigned Line
Metadata MDString Metadata unsigned Metadata unsigned DIFlags uint32_t Metadata * Annotations
Metadata MDString Metadata unsigned Metadata unsigned DIFlags uint32_t AlignInBits
bool isValidLocationForIntrinsic(const DILocation *DL) const
Check that a location is valid for this variable.
Metadata * getRawAnnotations() const
bool isArtificial() const
unsigned unsigned DILocalScope * Scope
const DILocation * getWithoutAtom() const
static unsigned getDuplicationFactorFromDiscriminator(unsigned D)
Returns the duplication factor for a given encoded discriminator D, or 1 if no value or 0 is encoded.
static bool isPseudoProbeDiscriminator(unsigned Discriminator)
unsigned getDuplicationFactor() const
Returns the duplication factor stored in the discriminator, or 1 if no duplication factor (or 0) is e...
uint64_t getAtomGroup() const
static LLVM_ABI DILocation * getMergedLocations(ArrayRef< DILocation * > Locs)
Try to combine the vector of locations passed as input in a single one.
static unsigned getBaseDiscriminatorBits()
Return the bits used for base discriminators.
static LLVM_ABI std::optional< unsigned > encodeDiscriminator(unsigned BD, unsigned DF, unsigned CI)
Raw encoding of the discriminator.
unsigned unsigned DILocalScope DILocation bool ImplicitCode
Metadata * getRawScope() const
static LLVM_ABI void decodeDiscriminator(unsigned D, unsigned &BD, unsigned &DF, unsigned &CI)
Raw decoder for values in an encoded discriminator D.
static LLVM_ABI DILocation * getMergedLocation(DILocation *LocA, DILocation *LocB)
Attempts to merge LocA and LocB into a single location; see DebugLoc::getMergedLocation for more deta...
std::optional< const DILocation * > cloneWithBaseDiscriminator(unsigned BD) const
Returns a new DILocation with updated base discriminator BD.
unsigned getBaseDiscriminator() const
Returns the base discriminator stored in the discriminator.
static unsigned getBaseDiscriminatorFromDiscriminator(unsigned D, bool IsFSDiscriminator=false)
Returns the base discriminator for a given encoded discriminator D.
Metadata * getRawInlinedAt() const
unsigned unsigned DILocalScope DILocation * InlinedAt
static unsigned getMaskedDiscriminator(unsigned D, unsigned B)
Return the masked discriminator value for an input discrimnator value D (i.e.
const DILocation * cloneWithDiscriminator(unsigned Discriminator) const
Returns a new DILocation with updated Discriminator.
static unsigned getCopyIdentifierFromDiscriminator(unsigned D)
Returns the copy identifier for a given encoded discriminator D.
uint8_t getAtomRank() const
DEFINE_MDNODE_GET(DILocation,(unsigned Line, unsigned Column, Metadata *Scope, Metadata *InlinedAt=nullptr, bool ImplicitCode=false, uint64_t AtomGroup=0, uint8_t AtomRank=0),(Line, Column, Scope, InlinedAt, ImplicitCode, AtomGroup, AtomRank)) DEFINE_MDNODE_GET(DILocation
void replaceOperandWith(unsigned I, Metadata *New)=delete
std::optional< const DILocation * > cloneByMultiplyingDuplicationFactor(unsigned DF) const
Returns a new DILocation with duplication factor DF * current duplication factor encoded in the discr...
static bool classof(const Metadata *MD)
unsigned getCopyIdentifier() const
Returns the copy identifier stored in the discriminator.
unsigned unsigned Metadata * File
Metadata * getRawElements() const
DEFINE_MDNODE_GET(DIMacroFile,(unsigned MIType, unsigned Line, DIFile *File, DIMacroNodeArray Elements),(MIType, Line, File, Elements)) DEFINE_MDNODE_GET(DIMacroFile
unsigned unsigned Metadata Metadata * Elements
Metadata * getRawFile() const
static bool classof(const Metadata *MD)
void replaceElements(DIMacroNodeArray Elements)
unsigned unsigned Metadata Metadata Elements TempDIMacroFile clone() const
DIMacroNodeArray getElements() const
Macro Info DWARF-like metadata node.
DIMacroNode(LLVMContext &C, unsigned ID, StorageType Storage, unsigned MIType, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2={})
unsigned getMacinfoType() const
StringRef getStringOperand(unsigned I) const
static bool classof(const Metadata *MD)
static MDString * getCanonicalMDString(LLVMContext &Context, StringRef S)
Ty * getOperandAs(unsigned I) const
MDString * getRawName() const
unsigned unsigned MDString MDString Value TempDIMacro clone() const
unsigned unsigned MDString MDString * Value
unsigned unsigned MDString * Name
StringRef getName() const
MDString * getRawValue() const
DEFINE_MDNODE_GET(DIMacro,(unsigned MIType, unsigned Line, StringRef Name, StringRef Value=""),(MIType, Line, Name, Value)) DEFINE_MDNODE_GET(DIMacro
StringRef getValue() const
static bool classof(const Metadata *MD)
Represents a module in the programming language, for example, a Clang module, or a Fortran module.
Metadata Metadata * Scope
Metadata Metadata MDString * Name
Metadata Metadata MDString MDString MDString MDString * APINotesFile
Metadata Metadata MDString MDString MDString * IncludePath
Metadata Metadata MDString MDString * ConfigurationMacros
DEFINE_MDNODE_GET(DIModule,(DIFile *File, DIScope *Scope, StringRef Name, StringRef ConfigurationMacros, StringRef IncludePath, StringRef APINotesFile, unsigned LineNo, bool IsDecl=false),(File, Scope, Name, ConfigurationMacros, IncludePath, APINotesFile, LineNo, IsDecl)) DEFINE_MDNODE_GET(DIModule
Metadata Metadata MDString MDString MDString MDString unsigned LineNo
Metadata MDString bool ExportSymbols TempDINamespace clone() const
static bool classof(const Metadata *MD)
DEFINE_MDNODE_GET(DINamespace,(DIScope *Scope, StringRef Name, bool ExportSymbols),(Scope, Name, ExportSymbols)) DEFINE_MDNODE_GET(DINamespace
DIScope * getScope() const
Metadata MDString bool ExportSymbols
StringRef getName() const
MDString * getRawName() const
bool getExportSymbols() const
Metadata * getRawScope() const
Tagged DWARF-like metadata node.
LLVM_ABI dwarf::Tag getTag() const
static MDString * getCanonicalMDString(LLVMContext &Context, StringRef S)
static LLVM_ABI DIFlags getFlag(StringRef Flag)
static LLVM_ABI DIFlags splitFlags(DIFlags Flags, SmallVectorImpl< DIFlags > &SplitFlags)
Split up a flags bitfield.
void setTag(unsigned Tag)
Allow subclasses to mutate the tag.
DINode(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops1, ArrayRef< Metadata * > Ops2={})
StringRef getStringOperand(unsigned I) const
Ty * getOperandAs(unsigned I) const
static bool classof(const Metadata *MD)
static LLVM_ABI StringRef getFlagString(DIFlags Flag)
MDString Metadata unsigned MDString MDString unsigned Metadata Type TempDIObjCProperty clone() const
unsigned getAttributes() const
StringRef getFilename() const
MDString * getRawName() const
StringRef getDirectory() const
MDString * getRawSetterName() const
Metadata * getRawType() const
StringRef getGetterName() const
static bool classof(const Metadata *MD)
MDString * getRawGetterName() const
Metadata * getRawFile() const
MDString Metadata unsigned MDString * GetterName
MDString Metadata unsigned MDString MDString * SetterName
StringRef getName() const
DEFINE_MDNODE_GET(DIObjCProperty,(StringRef Name, DIFile *File, unsigned Line, StringRef GetterName, StringRef SetterName, unsigned Attributes, DIType *Type),(Name, File, Line, GetterName, SetterName, Attributes, Type)) DEFINE_MDNODE_GET(DIObjCProperty
StringRef getSetterName() const
Base class for scope-like contexts.
StringRef getFilename() const
LLVM_ABI StringRef getName() const
static bool classof(const Metadata *MD)
StringRef getDirectory() const
std::optional< StringRef > getSource() const
LLVM_ABI DIScope * getScope() const
Metadata * getRawFile() const
Return the raw underlying file.
DIScope(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, ArrayRef< Metadata * > Ops)
String type, Fortran CHARACTER(n)
unsigned MDString Metadata Metadata Metadata uint64_t SizeInBits
unsigned getEncoding() const
unsigned MDString Metadata Metadata Metadata uint64_t uint32_t AlignInBits
static bool classof(const Metadata *MD)
unsigned MDString Metadata Metadata Metadata * StringLocationExp
unsigned MDString Metadata Metadata Metadata uint64_t uint32_t unsigned Encoding unsigned MDString Metadata Metadata Metadata Metadata uint32_t unsigned Encoding TempDIStringType clone() const
DIExpression * getStringLengthExp() const
unsigned MDString Metadata Metadata * StringLengthExp
Metadata * getRawStringLengthExp() const
Metadata * getRawStringLength() const
DIVariable * getStringLength() const
DIExpression * getStringLocationExp() const
unsigned MDString Metadata * StringLength
Metadata * getRawStringLocationExp() const
DEFINE_MDNODE_GET(DIStringType,(unsigned Tag, StringRef Name, uint64_t SizeInBits, uint32_t AlignInBits),(Tag, Name, nullptr, nullptr, nullptr, SizeInBits, AlignInBits, 0)) DEFINE_MDNODE_GET(DIStringType
Subprogram description. Uses SubclassData1.
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata * Unit
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata MDString bool UsesKeyInstructions
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata * Annotations
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata * ContainingType
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata * TemplateParams
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata * Declaration
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata Metadata MDString * TargetFuncName
static LLVM_ABI DISPFlags toSPFlags(bool IsLocalToUnit, bool IsDefinition, bool IsOptimized, unsigned Virtuality=SPFlagNonvirtual, bool IsMainSubprogram=false)
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata Metadata * ThrownTypes
DEFINE_MDNODE_GET(DISubprogram,(DIScope *Scope, StringRef Name, StringRef LinkageName, DIFile *File, unsigned Line, DISubroutineType *Type, unsigned ScopeLine, DIType *ContainingType, unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags, DISPFlags SPFlags, DICompileUnit *Unit, DITemplateParameterArray TemplateParams=nullptr, DISubprogram *Declaration=nullptr, DINodeArray RetainedNodes=nullptr, DITypeArray ThrownTypes=nullptr, DINodeArray Annotations=nullptr, StringRef TargetFuncName="", bool UsesKeyInstructions=false),(Scope, Name, LinkageName, File, Line, Type, ScopeLine, ContainingType, VirtualIndex, ThisAdjustment, Flags, SPFlags, Unit, TemplateParams, Declaration, RetainedNodes, ThrownTypes, Annotations, TargetFuncName, UsesKeyInstructions)) DEFINE_MDNODE_GET(DISubprogram
static LLVM_ABI DISPFlags getFlag(StringRef Flag)
Metadata MDString MDString Metadata * File
static LLVM_ABI DISPFlags splitFlags(DISPFlags Flags, SmallVectorImpl< DISPFlags > &SplitFlags)
Split up a flags bitfield for easier printing.
static bool classof(const Metadata *MD)
Metadata MDString MDString * LinkageName
static LLVM_ABI StringRef getFlagString(DISPFlags Flag)
Metadata MDString MDString Metadata unsigned Metadata * Type
Metadata MDString MDString Metadata unsigned Metadata unsigned Metadata unsigned int DIFlags DISPFlags Metadata Metadata Metadata Metadata * RetainedNodes
DISPFlags
Debug info subprogram flags.
StringRef DIFile unsigned Line
Metadata * getRawUpperBound() const
BoundType getLowerBound() const
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags DIType Metadata Metadata * UpperBound
PointerUnion< ConstantInt *, DIVariable *, DIExpression * > BoundType
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags DIType Metadata Metadata Metadata Metadata * Bias
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags DIType Metadata Metadata Metadata * Stride
StringRef DIFile unsigned DIScope uint64_t SizeInBits
static bool classof(const Metadata *MD)
BoundType getBias() const
DEFINE_MDNODE_GET(DISubrangeType,(MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *SizeInBits, uint32_t AlignInBits, DIFlags Flags, Metadata *BaseType, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride, Metadata *Bias),(Name, File, Line, Scope, SizeInBits, AlignInBits, Flags, BaseType, LowerBound, UpperBound, Stride, Bias)) DEFINE_MDNODE_GET(DISubrangeType
Metadata * getRawBias() const
Metadata * getRawBaseType() const
StringRef DIFile unsigned DIScope * Scope
BoundType getUpperBound() const
DIType * getBaseType() const
Get the base type this is derived from.
BoundType getStride() const
Metadata * getRawLowerBound() const
StringRef DIFile unsigned DIScope uint64_t uint32_t AlignInBits
Metadata * getRawStride() const
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags DIType Metadata * LowerBound
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags Flags
StringRef DIFile unsigned DIScope uint64_t uint32_t DIFlags DIType Metadata Metadata Metadata Metadata Bias TempDISubrangeType clone() const
static bool classof(const Metadata *MD)
LLVM_ABI BoundType getUpperBound() const
LLVM_ABI BoundType getStride() const
LLVM_ABI BoundType getLowerBound() const
DEFINE_MDNODE_GET(DISubrange,(int64_t Count, int64_t LowerBound=0),(Count, LowerBound)) DEFINE_MDNODE_GET(DISubrange
LLVM_ABI BoundType getCount() const
Metadata int64_t LowerBound
Type array for a subprogram.
TempDISubroutineType cloneWithCC(uint8_t CC) const
DEFINE_MDNODE_GET(DISubroutineType,(DIFlags Flags, uint8_t CC, DITypeRefArray TypeArray),(Flags, CC, TypeArray)) DEFINE_MDNODE_GET(DISubroutineType
DIFlags uint8_t Metadata * TypeArray
static bool classof(const Metadata *MD)
Metadata * getRawTypeArray() const
DITypeRefArray getTypeArray() const
DIFlags uint8_t Metadata TypeArray TempDISubroutineType clone() const
Base class for template parameters.
Metadata * getRawType() const
static bool classof(const Metadata *MD)
DITemplateParameter(LLVMContext &Context, unsigned ID, StorageType Storage, unsigned Tag, bool IsDefault, ArrayRef< Metadata * > Ops)
StringRef getName() const
MDString * getRawName() const
~DITemplateParameter()=default
MDString Metadata bool IsDefault
DEFINE_MDNODE_GET(DITemplateTypeParameter,(StringRef Name, DIType *Type, bool IsDefault),(Name, Type, IsDefault)) DEFINE_MDNODE_GET(DITemplateTypeParameter
MDString Metadata bool IsDefault TempDITemplateTypeParameter clone() const
static bool classof(const Metadata *MD)
unsigned MDString Metadata bool Metadata Value TempDITemplateValueParameter clone() const
unsigned MDString Metadata * Type
static bool classof(const Metadata *MD)
DEFINE_MDNODE_GET(DITemplateValueParameter,(unsigned Tag, StringRef Name, DIType *Type, bool IsDefault, Metadata *Value),(Tag, Name, Type, IsDefault, Value)) DEFINE_MDNODE_GET(DITemplateValueParameter
Metadata * getValue() const
unsigned MDString Metadata bool IsDefault
unsigned MDString Metadata bool Metadata * Value
bool operator!=(const iterator &X) const
DIType * operator*() const
bool operator==(const iterator &X) const
std::input_iterator_tag iterator_category
std::ptrdiff_t difference_type
iterator(MDNode::op_iterator I)
DIType * operator[](unsigned I) const
MDTuple & operator*() const
MDTuple * operator->() const
DITypeRefArray(const MDTuple *N)
bool isLittleEndian() const
static constexpr unsigned N_OPERANDS
uint32_t getNumExtraInhabitants() const
bool isLValueReference() const
bool isStaticMember() const
TempDIType cloneWithFlags(DIFlags NewFlags) const
Returns a new temporary DIType with updated Flags.
bool isObjcClassComplete() const
MDString * getRawName() const
bool isAppleBlockExtension() const
uint64_t getOffsetInBits() const
bool isObjectPointer() const
Metadata * getRawScope() const
StringRef getName() const
bool isForwardDecl() const
bool isTypePassByValue() const
uint64_t getSizeInBits() const
static bool classof(const Metadata *MD)
DIType(LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag, unsigned Line, uint32_t AlignInBits, uint32_t NumExtraInhabitants, DIFlags Flags, ArrayRef< Metadata * > Ops)
uint32_t getAlignInBytes() const
void mutate(unsigned Tag, unsigned Line, uint32_t AlignInBits, uint32_t NumExtraInhabitants, DIFlags Flags)
Change fields in place.
void init(unsigned Line, uint32_t AlignInBits, uint32_t NumExtraInhabitants, DIFlags Flags)
LLVM_ABI uint32_t getAlignInBits() const
Metadata * getRawSizeInBits() const
bool isRValueReference() const
bool isArtificial() const
bool getExportSymbols() const
DIScope * getScope() const
bool isTypePassByReference() const
Metadata * getRawOffsetInBits() const
Base class for variables.
std::optional< DIBasicType::Signedness > getSignedness() const
Return the signedness of this variable's type, or std::nullopt if this type is neither signed nor uns...
uint32_t getAlignInBits() const
MDString * getRawName() const
uint32_t getAlignInBytes() const
DIScope * getScope() const
StringRef getDirectory() const
LLVM_ABI std::optional< uint64_t > getSizeInBits() const
Determines the size of the variable's type.
Metadata * getRawFile() const
std::optional< StringRef > getSource() const
StringRef getFilename() const
Metadata * getRawType() const
static bool classof(const Metadata *MD)
StringRef getName() const
Metadata * getRawScope() const
This class represents an Operation in the Expression.
A parsed version of the target data layout string in and methods for querying it.
Record of a variable value-assignment, aka a non instruction representation of the dbg....
Identifies a unique instance of a whole variable (discards/ignores fragment information).
DebugVariableAggregate(const DebugVariable &V)
Identifies a unique instance of a variable.
static bool isDefaultFragment(const FragmentInfo F)
DebugVariable(const DILocalVariable *Var, const DIExpression *DIExpr, const DILocation *InlinedAt)
const DILocation * getInlinedAt() const
bool operator<(const DebugVariable &Other) const
DebugVariable(const DILocalVariable *Var, std::optional< FragmentInfo > FragmentInfo, const DILocation *InlinedAt)
bool operator==(const DebugVariable &Other) const
FragmentInfo getFragmentOrDefault() const
std::optional< FragmentInfo > getFragment() const
const DILocalVariable * getVariable() const
Class representing an expression and its matching format.
Generic tagged DWARF-like metadata node.
static bool classof(const Metadata *MD)
unsigned MDString ArrayRef< Metadata * > DwarfOps TempGenericDINode clone() const
Return a (temporary) clone of this.
LLVM_ABI dwarf::Tag getTag() const
StringRef getHeader() const
MDString * getRawHeader() const
const MDOperand & getDwarfOperand(unsigned I) const
unsigned getNumDwarfOperands() const
op_iterator dwarf_op_end() const
op_iterator dwarf_op_begin() const
unsigned MDString * Header
op_range dwarf_operands() const
DEFINE_MDNODE_GET(GenericDINode,(unsigned Tag, StringRef Header, ArrayRef< Metadata * > DwarfOps),(Tag, Header, DwarfOps)) DEFINE_MDNODE_GET(GenericDINode
void replaceDwarfOperandWith(unsigned I, Metadata *New)
unsigned MDString ArrayRef< Metadata * > DwarfOps
This is an important class for using LLVM in a threaded context.
LLVM_ABI void replaceOperandWith(unsigned I, Metadata *New)
Replace a specific operand.
const MDOperand & getOperand(unsigned I) const
static TempMDTuple getTemporary(LLVMContext &Context, ArrayRef< Metadata * > MDs)
op_iterator op_end() const
static MDTuple * get(LLVMContext &Context, ArrayRef< Metadata * > MDs)
unsigned getNumOperands() const
Return number of MDNode operands.
iterator_range< op_iterator > op_range
LLVM_ABI TempMDNode clone() const
Create a (temporary) clone of this.
LLVM_ABI void setOperand(unsigned I, Metadata *New)
Set an operand.
op_iterator op_begin() const
LLVMContext & getContext() const
LLVM_ABI void dropAllReferences()
Tracking metadata reference owned by Metadata.
static LLVM_ABI MDString * get(LLVMContext &Context, StringRef Str)
A discriminated union of two or more pointer types, with the discriminator in the low bit of the poin...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
typename SuperClass::iterator iterator
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.
constexpr bool empty() const
empty - Check if the string is empty.
The instances of the Type class are immutable: once they are created, they are never changed.
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
LLVM Value Representation.
A range adaptor for a pair of iterators.
LLVM_ABI unsigned getVirtuality(StringRef VirtualityString)
This provides a very simple, boring adaptor for a begin and end iterator into a range type.
@ C
The default llvm calling convention, compatible with C.
template class LLVM_TEMPLATE_ABI opt< bool >
This is an optimization pass for GlobalISel generic memory operations.
bool operator<(int64_t V1, const APSInt &V2)
bool operator!=(uint64_t V1, const APInt &V2)
bool operator==(const AddressRangeValuePair &LHS, const AddressRangeValuePair &RHS)
LLVM_ABI cl::opt< bool > EnableFSDiscriminator
static unsigned getBaseFSBitEnd()
@ Ref
The access may reference the value stored in memory.
@ LLVM_MARK_AS_BITMASK_ENUM
static unsigned getN1Bits(int N)
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
Implement std::hash so that hash_code can be used in STL containers.
Pointer authentication (__ptrauth) metadata.
bool authenticatesNullValues()
PtrAuthData(unsigned FromRawData)
bool isAddressDiscriminated()
PtrAuthData(unsigned Key, bool IsDiscr, unsigned Discriminator, bool IsaPointer, bool AuthenticatesNullValues)
unsigned extraDiscriminator()
A single checksum, represented by a Kind and a Value (a string).
bool operator==(const ChecksumInfo< T > &X) const
T Value
The string value of the checksum.
ChecksumKind Kind
The kind of checksum which Value encodes.
ChecksumInfo(ChecksumKind Kind, T Value)
bool operator!=(const ChecksumInfo< T > &X) const
StringRef getKindAsString() const
static bool isEqual(const FragInfo &A, const FragInfo &B)
static FragInfo getTombstoneKey()
static unsigned getHashValue(const FragInfo &Frag)
static FragInfo getEmptyKey()
static unsigned getHashValue(const DebugVariable &D)
static DebugVariable getEmptyKey()
Empty key: no key should be generated that has no DILocalVariable.
static DebugVariable getTombstoneKey()
Difference in tombstone is that the Optional is meaningful.
static bool isEqual(const DebugVariable &A, const DebugVariable &B)
An information struct used to provide DenseMap with the various necessary components for a given valu...
static uint32_t extractProbeIndex(uint32_t Value)
static std::optional< uint32_t > extractDwarfBaseDiscriminator(uint32_t Value)