13#ifndef LLVM_IR_DEBUGINFOMETADATA_H
14#define LLVM_IR_DEBUGINFOMETADATA_H
37#define DEFINE_MDNODE_GET_UNPACK_IMPL(...) __VA_ARGS__
38#define DEFINE_MDNODE_GET_UNPACK(ARGS) DEFINE_MDNODE_GET_UNPACK_IMPL ARGS
39#define DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(CLASS, FORMAL, ARGS) \
40 static CLASS *getDistinct(LLVMContext &Context, \
41 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
42 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Distinct); \
44 static Temp##CLASS getTemporary(LLVMContext &Context, \
45 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
47 getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Temporary)); \
49#define DEFINE_MDNODE_GET(CLASS, FORMAL, ARGS) \
50 static CLASS *get(LLVMContext &Context, DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
51 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Uniqued); \
53 static CLASS *getIfExists(LLVMContext &Context, \
54 DEFINE_MDNODE_GET_UNPACK(FORMAL)) { \
55 return getImpl(Context, DEFINE_MDNODE_GET_UNPACK(ARGS), Uniqued, \
58 DEFINE_MDNODE_GET_DISTINCT_TEMPORARY(CLASS, FORMAL, ARGS)
66class DbgVariableIntrinsic;
77 explicit operator bool()
const {
return get(); }
85 unsigned size()
const {
return N ?
N->getNumOperands() : 0u; }
87 return cast_or_null<DIType>(
N->getOperand(
I));
148 if (
auto *S = getOperandAs<MDString>(
I))
149 return S->getString();
170#define HANDLE_DI_FLAG(ID, NAME) Flag##NAME = ID,
171#define DI_FLAG_LARGEST_NEEDED
172#include "llvm/IR/DebugInfoFlags.def"
175 FlagVirtualInheritance,
193 case GenericDINodeKind:
195 case DIEnumeratorKind:
196 case DIBasicTypeKind:
197 case DIStringTypeKind:
198 case DIDerivedTypeKind:
199 case DICompositeTypeKind:
200 case DISubroutineTypeKind:
202 case DICompileUnitKind:
203 case DISubprogramKind:
204 case DILexicalBlockKind:
205 case DILexicalBlockFileKind:
206 case DINamespaceKind:
207 case DICommonBlockKind:
208 case DITemplateTypeParameterKind:
209 case DITemplateValueParameterKind:
210 case DIGlobalVariableKind:
211 case DILocalVariableKind:
213 case DIObjCPropertyKind:
214 case DIImportedEntityKind:
216 case DIGenericSubrangeKind:
242 void recalculateHash();
244 static GenericDINode *
getImpl(LLVMContext &Context,
unsigned Tag,
251 static GenericDINode *
getImpl(LLVMContext &Context,
unsigned Tag,
255 TempGenericDINode cloneImpl()
const {
273 TempGenericDINode
clone()
const {
return cloneImpl(); }
312 bool ShouldCreate =
true);
347 bool ShouldCreate =
true);
351 bool ShouldCreate =
true);
356 bool ShouldCreate =
true);
358 TempDISubrange cloneImpl()
const {
360 getRawUpperBound(), getRawStride());
375 TempDISubrange
clone()
const {
return cloneImpl(); }
385 typedef PointerUnion<ConstantInt *, DIVariable *, DIExpression *> BoundType;
412 bool ShouldCreate =
true);
414 TempDIGenericSubrange cloneImpl()
const {
423 (CountNode, LowerBound, UpperBound, Stride))
425 TempDIGenericSubrange
clone()
const {
return cloneImpl(); }
467 static DIEnumerator *
getImpl(LLVMContext &Context,
const APInt &Value,
471 TempDIEnumerator cloneImpl()
const {
489 TempDIEnumerator
clone()
const {
return cloneImpl(); }
520 inline std::optional<StringRef>
getSource()
const;
532 return isa<DIFile>(
this) ?
const_cast<DIScope *
>(
this)
540 case DIBasicTypeKind:
541 case DIStringTypeKind:
542 case DIDerivedTypeKind:
543 case DICompositeTypeKind:
544 case DISubroutineTypeKind:
546 case DICompileUnitKind:
547 case DISubprogramKind:
548 case DILexicalBlockKind:
549 case DILexicalBlockFileKind:
550 case DINamespaceKind:
551 case DICommonBlockKind:
599 std::optional<ChecksumInfo<MDString *>> Checksum;
604 std::optional<ChecksumInfo<MDString *>>
CS,
MDString *Src,
610 std::optional<ChecksumInfo<StringRef>>
CS,
612 bool ShouldCreate =
true) {
613 std::optional<ChecksumInfo<MDString *>> MDChecksum;
621 static DIFile *getImpl(LLVMContext &Context, MDString *
Filename,
623 std::optional<ChecksumInfo<MDString *>>
CS,
625 bool ShouldCreate =
true);
627 TempDIFile cloneImpl()
const {
636 std::optional<StringRef> Source = std::nullopt),
644 TempDIFile
clone()
const {
return cloneImpl(); }
648 std::optional<ChecksumInfo<StringRef>> getChecksum()
const {
649 std::optional<ChecksumInfo<StringRef>> StringRefChecksum;
651 StringRefChecksum.emplace(Checksum->Kind, Checksum->Value->getString());
652 return StringRefChecksum;
654 std::optional<StringRef>
getSource()
const {
655 return Source ? std::optional<StringRef>(
Source->getString())
659 MDString *getRawFilename()
const {
return getOperandAs<MDString>(0); }
660 MDString *getRawDirectory()
const {
return getOperandAs<MDString>(1); }
661 std::optional<ChecksumInfo<MDString *>> getRawChecksum()
const {
664 MDString *getRawSource()
const {
return Source; }
666 static StringRef getChecksumKindAsString(
ChecksumKind CSKind);
667 static std::optional<ChecksumKind>
getChecksumKind(StringRef CSKindStr);
676 return F->getFilename();
682 return F->getDirectory();
688 return F->getSource();
709 init(Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
717 this->SizeInBits = SizeInBits;
718 this->AlignInBits = AlignInBits;
719 this->OffsetInBits = OffsetInBits;
727 init(Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
750 auto NewTy =
clone();
751 NewTy->Flags = NewFlags;
770 return getFlags() & FlagObjcClassComplete;
779 return getFlags() & FlagTypePassByReference;
789 case DIBasicTypeKind:
790 case DIStringTypeKind:
791 case DIDerivedTypeKind:
792 case DICompositeTypeKind:
793 case DISubroutineTypeKind:
814 Encoding(Encoding) {}
821 bool ShouldCreate =
true) {
826 static DIBasicType *
getImpl(LLVMContext &Context,
unsigned Tag,
830 bool ShouldCreate =
true);
832 TempDIBasicType cloneImpl()
const {
839 (
Tag,
Name, 0, 0, 0, FlagZero))
855 TempDIBasicType
clone()
const {
return cloneImpl(); }
882 Encoding(Encoding) {}
890 bool ShouldCreate =
true) {
895 static DIStringType *
getImpl(LLVMContext &Context,
unsigned Tag,
900 bool ShouldCreate =
true);
902 TempDIStringType cloneImpl()
const {
930 TempDIStringType
clone()
const {
return cloneImpl(); }
969 std::optional<unsigned> DWARFAddressSpace;
974 std::optional<unsigned> DWARFAddressSpace,
DIFlags Flags,
978 DWARFAddressSpace(DWARFAddressSpace) {}
984 std::optional<unsigned> DWARFAddressSpace,
DIFlags Flags,
986 bool ShouldCreate =
true) {
992 static DIDerivedType *
996 std::optional<unsigned> DWARFAddressSpace,
DIFlags Flags,
998 bool ShouldCreate =
true);
1000 TempDIDerivedType cloneImpl()
const {
1004 getDWARFAddressSpace(),
getFlags(), getExtraData(), getAnnotations());
1013 std::optional<unsigned> DWARFAddressSpace,
DIFlags Flags,
1028 TempDIDerivedType
clone()
const {
return cloneImpl(); }
1036 std::optional<unsigned> getDWARFAddressSpace()
const {
1037 return DWARFAddressSpace;
1048 Metadata *getExtraData()
const {
return getRawExtraData(); }
1052 DINodeArray getAnnotations()
const {
1053 return cast_or_null<MDTuple>(getRawAnnotations());
1059 DIType *getClassType()
const;
1062 return dyn_cast_or_null<DIObjCProperty>(getExtraData());
1087 unsigned RuntimeLang;
1095 RuntimeLang(RuntimeLang) {}
1099 void mutate(
unsigned Tag,
unsigned Line,
unsigned RuntimeLang,
1104 this->RuntimeLang = RuntimeLang;
1108 static DICompositeType *
1117 bool ShouldCreate =
true) {
1125 static DICompositeType *
1135 TempDICompositeType cloneImpl()
const {
1176 TempDICompositeType
clone()
const {
return cloneImpl(); }
1236 return getOperandAs<DIDerivedType>(8);
1261 if (
auto *MD = dyn_cast_or_null<ConstantAsMetadata>(
getRawRank()))
1262 return dyn_cast_or_null<ConstantInt>(MD->getValue());
1266 return dyn_cast_or_null<DIExpression>(
getRawRank());
1284 "Lost a member during member list replacement");
1321 bool ShouldCreate =
true) {
1327 bool ShouldCreate =
true);
1329 TempDISubroutineType cloneImpl()
const {
1341 TempDISubroutineType
clone()
const {
return cloneImpl(); }
1344 auto NewTy =
clone();
1391 unsigned RuntimeVersion;
1392 unsigned EmissionKind;
1394 bool SplitDebugInlining;
1395 bool DebugInfoForProfiling;
1396 unsigned NameTableKind;
1397 bool RangesBaseAddress;
1400 bool IsOptimized,
unsigned RuntimeVersion,
1401 unsigned EmissionKind,
uint64_t DWOId,
bool SplitDebugInlining,
1402 bool DebugInfoForProfiling,
unsigned NameTableKind,
1410 unsigned EmissionKind, DICompositeTypeArray
EnumTypes,
1414 uint64_t DWOId,
bool SplitDebugInlining,
bool DebugInfoForProfiling,
1423 DebugInfoForProfiling, NameTableKind, RangesBaseAddress,
1427 static DICompileUnit *
1434 bool DebugInfoForProfiling,
unsigned NameTableKind,
1435 bool RangesBaseAddress, MDString *
SysRoot, MDString *
SDK,
1438 TempDICompileUnit cloneImpl()
const {
1460 uint64_t DWOId,
bool SplitDebugInlining,
bool DebugInfoForProfiling,
1466 DebugInfoForProfiling, (
unsigned)NameTableKind, RangesBaseAddress,
1475 bool SplitDebugInlining,
bool DebugInfoForProfiling,
1481 DebugInfoForProfiling, NameTableKind, RangesBaseAddress,
SysRoot,
SDK))
1483 TempDICompileUnit
clone()
const {
return cloneImpl(); }
1521 this->SplitDebugInlining = SplitDebugInlining;
1529 return getOperandAs<MDString>(3);
1626 TempDILocation cloneImpl()
const {
1648 TempDILocation
clone()
const {
return cloneImpl(); }
1654 DILocation *getInlinedAt()
const {
1667 DIFile *getFile()
const {
return getScope()->getFile(); }
1669 StringRef getDirectory()
const {
return getScope()->getDirectory(); }
1670 std::optional<StringRef> getSource()
const {
return getScope()->getSource(); }
1676 DILocalScope *getInlinedAtScope()
const {
1677 if (
auto *IA = getInlinedAt())
1678 return IA->getInlinedAtScope();
1716 inline unsigned getDiscriminator()
const;
1727 return ((Discriminator & 0x7) == 0x7) && (Discriminator & 0xFFFFFFF8);
1737 inline std::optional<const DILocation *>
1754 inline std::optional<const DILocation *>
1794 bool IsFSDiscriminator =
false) {
1795 if (IsFSDiscriminator)
1857 unsigned VirtualIndex;
1867#define HANDLE_DISP_FLAG(ID, NAME) SPFlag##NAME = ID,
1868#define DISP_FLAG_LARGEST_NEEDED
1869#include "llvm/IR/DebugInfoFlags.def"
1889 bool IsMainSubprogram =
false);
1896 unsigned ScopeLine,
unsigned VirtualIndex,
int ThisAdjustment,
1904 unsigned VirtualIndex,
int ThisAdjustment,
DIFlags Flags,
1918 static DISubprogram *
1926 bool ShouldCreate =
true);
1928 TempDISubprogram cloneImpl()
const {
1931 getContainingType(), getVirtualIndex(),
1932 getThisAdjustment(),
getFlags(), getSPFlags(),
1933 getUnit(), getTemplateParams(), getDeclaration(),
1934 getRetainedNodes(), getThrownTypes(), getAnnotations(),
1935 getTargetFuncName());
1966 TempDISubprogram
clone()
const {
return cloneImpl(); }
1969 TempDISubprogram cloneWithFlags(
DIFlags NewFlags)
const {
1970 auto NewSP =
clone();
1971 NewSP->Flags = NewFlags;
1976 unsigned getLine()
const {
return Line; }
1978 unsigned getVirtualIndex()
const {
return VirtualIndex; }
1979 int getThisAdjustment()
const {
return ThisAdjustment; }
1980 unsigned getScopeLine()
const {
return ScopeLine; }
1981 void setScopeLine(
unsigned L) {
1986 DISPFlags getSPFlags()
const {
return SPFlags; }
1987 bool isLocalToUnit()
const {
return getSPFlags() & SPFlagLocalToUnit; }
1988 bool isDefinition()
const {
return getSPFlags() & SPFlagDefinition; }
1989 bool isOptimized()
const {
return getSPFlags() & SPFlagOptimized; }
1990 bool isMainSubprogram()
const {
return getSPFlags() & SPFlagMainSubprogram; }
1992 bool isArtificial()
const {
return getFlags() & FlagArtificial; }
1993 bool isPrivate()
const {
1996 bool isProtected()
const {
1999 bool isPublic()
const {
2002 bool isExplicit()
const {
return getFlags() & FlagExplicit; }
2003 bool isPrototyped()
const {
return getFlags() & FlagPrototyped; }
2004 bool areAllCallsDescribed()
const {
2005 return getFlags() & FlagAllCallsDescribed;
2007 bool isPure()
const {
return getSPFlags() & SPFlagPure; }
2008 bool isElemental()
const {
return getSPFlags() & SPFlagElemental; }
2009 bool isRecursive()
const {
return getSPFlags() & SPFlagRecursive; }
2010 bool isObjCDirect()
const {
return getSPFlags() & SPFlagObjCDirect; }
2016 bool isDeleted()
const {
return getSPFlags() & SPFlagDeleted; }
2022 bool isLValueReference()
const {
return getFlags() & FlagLValueReference; }
2028 bool isRValueReference()
const {
return getFlags() & FlagRValueReference; }
2033 bool isNoReturn()
const {
return getFlags() & FlagNoReturn; }
2038 bool isThunk()
const {
return getFlags() & FlagThunk; }
2040 DIScope *
getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
2047 DISubroutineType *
getType()
const {
2048 return cast_or_null<DISubroutineType>(getRawType());
2050 DIType *getContainingType()
const {
2051 return cast_or_null<DIType>(getRawContainingType());
2053 void replaceType(DISubroutineType *Ty) {
2058 DICompileUnit *getUnit()
const {
2059 return cast_or_null<DICompileUnit>(getRawUnit());
2062 DITemplateParameterArray getTemplateParams()
const {
2063 return cast_or_null<MDTuple>(getRawTemplateParams());
2066 return cast_or_null<DISubprogram>(getRawDeclaration());
2068 DINodeArray getRetainedNodes()
const {
2069 return cast_or_null<MDTuple>(getRawRetainedNodes());
2071 DITypeArray getThrownTypes()
const {
2072 return cast_or_null<MDTuple>(getRawThrownTypes());
2074 DINodeArray getAnnotations()
const {
2075 return cast_or_null<MDTuple>(getRawAnnotations());
2077 StringRef getTargetFuncName()
const {
2082 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
2083 MDString *getRawLinkageName()
const {
return getOperandAs<MDString>(3); }
2088 Metadata *getRawContainingType()
const {
2089 return getNumOperands() > 8 ? getOperandAs<Metadata>(8) : nullptr;
2091 Metadata *getRawTemplateParams()
const {
2092 return getNumOperands() > 9 ? getOperandAs<Metadata>(9) : nullptr;
2094 Metadata *getRawThrownTypes()
const {
2095 return getNumOperands() > 10 ? getOperandAs<Metadata>(10) : nullptr;
2097 Metadata *getRawAnnotations()
const {
2098 return getNumOperands() > 11 ? getOperandAs<Metadata>(11) : nullptr;
2100 MDString *getRawTargetFuncName()
const {
2101 return getNumOperands() > 12 ? getOperandAs<MDString>(12) : nullptr;
2104 void replaceRawLinkageName(MDString *
LinkageName) {
2111 bool describes(
const Function *
F)
const;
2151 assert(Column < (1u << 16) &&
"Expected 16-bit column");
2156 DIFile *
File,
unsigned Line,
unsigned Column,
2158 bool ShouldCreate =
true) {
2168 TempDILexicalBlock cloneImpl()
const {
2183 TempDILexicalBlock
clone()
const {
return cloneImpl(); }
2197 unsigned Discriminator;
2202 Discriminator(Discriminator) {}
2208 bool ShouldCreate =
true) {
2217 bool ShouldCreate =
true);
2219 TempDILexicalBlockFile cloneImpl()
const {
2227 unsigned Discriminator),
2233 TempDILexicalBlockFile
clone()
const {
return cloneImpl(); }
2241unsigned DILocation::getDiscriminator()
const {
2242 if (
auto *
F = dyn_cast<DILexicalBlockFile>(
getScope()))
2243 return F->getDiscriminator();
2254 for (
auto *LBF = dyn_cast<DILexicalBlockFile>(
Scope);
2255 LBF && LBF->getDiscriminator() != 0;
2256 LBF = dyn_cast<DILexicalBlockFile>(
Scope))
2257 Scope = LBF->getScope();
2277std::optional<const DILocation *>
2279 unsigned BD,
DF, CI;
2293 return std::nullopt;
2296std::optional<const DILocation *>
2308 return std::nullopt;
2315 unsigned ExportSymbols : 1;
2325 ExportSymbols,
Storage, ShouldCreate);
2331 TempDINamespace cloneImpl()
const {
2344 TempDINamespace
clone()
const {
return cloneImpl(); }
2374 bool ShouldCreate =
true) {
2387 TempDIModule cloneImpl()
const {
2389 getConfigurationMacros(), getIncludePath(),
2390 getAPINotesFile(), getLineNo(), getIsDecl());
2398 bool IsDecl =
false),
2405 bool IsDecl =
false),
2409 TempDIModule
clone()
const {
return cloneImpl(); }
2411 DIScope *
getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
2416 unsigned getLineNo()
const {
return LineNo; }
2417 bool getIsDecl()
const {
return IsDecl; }
2420 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
2421 MDString *getRawConfigurationMacros()
const {
2422 return getOperandAs<MDString>(3);
2424 MDString *getRawIncludePath()
const {
return getOperandAs<MDString>(4); }
2425 MDString *getRawAPINotesFile()
const {
return getOperandAs<MDString>(5); }
2428 return MD->getMetadataID() == DIModuleKind;
2451 return MD->
getMetadataID() == DITemplateTypeParameterKind ||
2467 bool ShouldCreate =
true) {
2474 bool ShouldCreate =
true);
2476 TempDITemplateTypeParameter cloneImpl()
const {
2488 TempDITemplateTypeParameter
clone()
const {
return cloneImpl(); }
2510 bool ShouldCreate =
true) {
2514 static DITemplateValueParameter *
getImpl(LLVMContext &Context,
unsigned Tag,
2518 bool ShouldCreate =
true);
2520 TempDITemplateValueParameter cloneImpl()
const {
2535 TempDITemplateValueParameter
clone()
const {
return cloneImpl(); }
2568 if (
auto *
BT = dyn_cast<DIBasicType>(
getType()))
2569 return BT->getSignedness();
2570 return std::nullopt;
2575 return F->getFilename();
2581 return F->getDirectory();
2587 return F->getSource();
2588 return std::nullopt;
2615 std::vector<uint64_t> Elements;
2619 Elements(Elements.begin(), Elements.end()) {}
2624 bool ShouldCreate =
true);
2626 TempDIExpression cloneImpl()
const {
2633 TempDIExpression
clone()
const {
return cloneImpl(); }
2640 assert(
I < Elements.size() &&
"Index out of range");
2647 std::optional<SignedOrUnsignedConstant>
isConstant()
const;
2823 static std::optional<const DIExpression *>
2849 bool SecondIndirect);
2866 unsigned &AddrClass);
2930 static std::optional<DIExpression *>
2932 unsigned SizeInBits);
2958 unsigned ToSize,
bool Signed);
2969 auto Fragment2 = *
Other->getFragmentInfo();
2987 std::pair<DIExpression *, const ConstantInt *>
2993 return std::tie(
A.SizeInBits,
A.OffsetInBits) ==
2994 std::tie(
B.SizeInBits,
B.OffsetInBits);
2999 return std::tie(
A.SizeInBits,
A.OffsetInBits) <
3000 std::tie(
B.SizeInBits,
B.OffsetInBits);
3005 static const uint64_t MaxVal = std::numeric_limits<uint64_t>::max();
3032 IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
3038 bool IsLocalToUnit,
bool IsDefinition,
3041 bool ShouldCreate =
true) {
3048 static DIGlobalVariable *
3051 bool IsLocalToUnit,
bool IsDefinition,
3054 bool ShouldCreate =
true);
3056 TempDIGlobalVariable cloneImpl()
const {
3068 unsigned Line,
DIType *
Type,
bool IsLocalToUnit,
bool IsDefinition,
3082 TempDIGlobalVariable
clone()
const {
return cloneImpl(); }
3125 bool ShouldCreate =
true);
3127 TempDICommonBlock cloneImpl()
const {
3142 TempDICommonBlock
clone()
const {
return cloneImpl(); }
3146 return cast_or_null<DIGlobalVariable>(
getRawDecl());
3177 assert(
Arg < (1 << 16) &&
"DILocalVariable: Arg out of range");
3186 bool ShouldCreate =
true) {
3196 bool ShouldCreate =
true);
3198 TempDILocalVariable cloneImpl()
const {
3218 TempDILocalVariable
clone()
const {
return cloneImpl(); }
3267 bool ShouldCreate =
true) {
3273 bool ShouldCreate =
true);
3275 TempDILabel cloneImpl()
const {
3290 TempDILabel
clone()
const {
return cloneImpl(); }
3325 unsigned Attributes;
3346 TempDIObjCProperty cloneImpl()
const {
3366 TempDIObjCProperty
clone()
const {
return cloneImpl(); }
3378 return F->getFilename();
3384 return F->getDirectory();
3415 bool ShouldCreate =
true) {
3420 static DIImportedEntity *
3425 TempDIImportedEntity cloneImpl()
const {
3427 getFile(), getLine(),
getName(), getElements());
3434 DINodeArray Elements =
nullptr),
3442 TempDIImportedEntity
clone()
const {
return cloneImpl(); }
3444 unsigned getLine()
const {
return Line; }
3445 DIScope *
getScope()
const {
return cast_or_null<DIScope>(getRawScope()); }
3446 DINode *getEntity()
const {
return cast_or_null<DINode>(getRawEntity()); }
3448 DIFile *getFile()
const {
return cast_or_null<DIFile>(getRawFile()); }
3449 DINodeArray getElements()
const {
3450 return cast_or_null<MDTuple>(getRawElements());
3455 MDString *getRawName()
const {
return getOperandAs<MDString>(2); }
3460 return MD->getMetadataID() == DIImportedEntityKind;
3478 TempDIGlobalVariableExpression cloneImpl()
const {
3487 TempDIGlobalVariableExpression
clone()
const {
return cloneImpl(); }
3502 return MD->
getMetadataID() == DIGlobalVariableExpressionKind;
3521 assert(MIType < 1u << 16);
3531 if (
auto *S = getOperandAs<MDString>(
I))
3532 return S->getString();
3550 case DIMacroFileKind:
3569 bool ShouldCreate =
true) {
3573 static DIMacro *
getImpl(LLVMContext &Context,
unsigned MIType,
unsigned Line,
3575 bool ShouldCreate =
true);
3577 TempDIMacro cloneImpl()
const {