14#ifndef LLVM_LIB_IR_LLVMCONTEXTIMPL_H
15#define LLVM_LIB_IR_LLVMCONTEXTIMPL_H
56class AttributeListImpl;
57class AttributeSetNode;
59class ConstantRangeAttributeImpl;
60class ConstantRangeListAttributeImpl;
61struct DiagnosticHandler;
68class LLVMRemarkStreamer;
73template <
typename T>
class StringMapEntry;
75class TypedPointerType;
89 return LHS.bitwiseIsEqual(
RHS);
249 template <
class NodeTy>
253 template <
class NodeTy>
324 : Scope(Scope), InlinedAt(InlinedAt), AtomGroup(AtomGroup),
325 AtomRank(AtomRank), Line(Line), Column(Column),
326 ImplicitCode(ImplicitCode) {}
329 : Scope(L->getRawScope()), InlinedAt(L->getRawInlinedAt()),
330 AtomGroup(L->getAtomGroup()), AtomRank(L->getAtomRank()),
331 Line(L->getLine()), Column(L->getColumn()),
332 ImplicitCode(L->isImplicitCode()) {}
335 return Line ==
RHS->getLine() && Column ==
RHS->getColumn() &&
336 Scope ==
RHS->getRawScope() && InlinedAt ==
RHS->getRawInlinedAt() &&
337 ImplicitCode ==
RHS->isImplicitCode() &&
338 AtomGroup ==
RHS->getAtomGroup() && AtomRank ==
RHS->getAtomRank();
349 if (AtomGroup || AtomRank)
350 return hash_combine(Line, Column, Scope, InlinedAt, ImplicitCode,
352 return hash_combine(Line, Column, Scope, InlinedAt, ImplicitCode);
367 return Tag ==
RHS->getTag() && Header ==
RHS->getRawHeader() &&
386 : CountNode(CountNode), LowerBound(LowerBound), UpperBound(UpperBound),
389 : CountNode(
N->getRawCountNode()), LowerBound(
N->getRawLowerBound()),
390 UpperBound(
N->getRawUpperBound()), Stride(
N->getRawStride()) {}
408 return BoundsEqual(CountNode,
RHS->getRawCountNode()) &&
409 BoundsEqual(LowerBound,
RHS->getRawLowerBound()) &&
410 BoundsEqual(UpperBound,
RHS->getRawUpperBound()) &&
411 BoundsEqual(Stride,
RHS->getRawStride());
416 if (
auto *MD = dyn_cast<ConstantAsMetadata>(CountNode))
417 return hash_combine(cast<ConstantInt>(MD->getValue())->getSExtValue(),
418 LowerBound, UpperBound, Stride);
419 return hash_combine(CountNode, LowerBound, UpperBound, Stride);
431 : CountNode(CountNode), LowerBound(LowerBound), UpperBound(UpperBound),
434 : CountNode(
N->getRawCountNode()), LowerBound(
N->getRawLowerBound()),
435 UpperBound(
N->getRawUpperBound()), Stride(
N->getRawStride()) {}
438 return (CountNode ==
RHS->getRawCountNode()) &&
439 (LowerBound ==
RHS->getRawLowerBound()) &&
440 (UpperBound ==
RHS->getRawUpperBound()) &&
441 (Stride ==
RHS->getRawStride());
445 auto *MD = dyn_cast_or_null<ConstantAsMetadata>(CountNode);
447 return hash_combine(cast<ConstantInt>(MD->getValue())->getSExtValue(),
448 LowerBound, UpperBound, Stride);
449 return hash_combine(CountNode, LowerBound, UpperBound, Stride);
462 IsUnsigned(IsUnsigned) {}
465 IsUnsigned(
N->isUnsigned()) {}
468 return Value.getBitWidth() ==
RHS->getValue().getBitWidth() &&
469 Value ==
RHS->getValue() && IsUnsigned ==
RHS->isUnsigned() &&
486 uint32_t AlignInBits,
unsigned Encoding,
487 uint32_t NumExtraInhabitants,
unsigned Flags)
488 :
Tag(
Tag),
Name(
Name), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
489 Encoding(Encoding), NumExtraInhabitants(NumExtraInhabitants),
493 SizeInBits(
N->getRawSizeInBits()), AlignInBits(
N->getAlignInBits()),
494 Encoding(
N->getEncoding()),
495 NumExtraInhabitants(
N->getNumExtraInhabitants()), Flags(
N->
getFlags()) {
500 SizeInBits ==
RHS->getRawSizeInBits() &&
501 AlignInBits ==
RHS->getAlignInBits() &&
502 Encoding ==
RHS->getEncoding() &&
503 NumExtraInhabitants ==
RHS->getNumExtraInhabitants() &&
504 Flags ==
RHS->getFlags();
525 uint32_t AlignInBits,
unsigned Encoding,
unsigned Flags,
526 unsigned Kind,
int Factor,
APInt Numerator,
APInt Denominator)
527 :
Tag(
Tag),
Name(
Name), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
528 Encoding(Encoding), Flags(Flags), Kind(Kind), Factor(Factor),
529 Numerator(Numerator), Denominator(Denominator) {}
532 SizeInBits(
N->getRawSizeInBits()), AlignInBits(
N->getAlignInBits()),
533 Encoding(
N->getEncoding()), Flags(
N->
getFlags()), Kind(
N->getKind()),
534 Factor(
N->getFactorRaw()), Numerator(
N->getNumeratorRaw()),
535 Denominator(
N->getDenominatorRaw()) {}
538 return Name ==
RHS->getRawName() && SizeInBits ==
RHS->getRawSizeInBits() &&
539 AlignInBits ==
RHS->getAlignInBits() && Kind ==
RHS->getKind() &&
540 (
RHS->isRational() ? (Numerator ==
RHS->getNumerator() &&
541 Denominator ==
RHS->getDenominator())
542 : Factor ==
RHS->getFactor());
564 StringLengthExp(StringLengthExp), StringLocationExp(StringLocationExp),
565 SizeInBits(SizeInBits), AlignInBits(AlignInBits), Encoding(Encoding) {}
568 StringLength(
N->getRawStringLength()),
569 StringLengthExp(
N->getRawStringLengthExp()),
570 StringLocationExp(
N->getRawStringLocationExp()),
571 SizeInBits(
N->getRawSizeInBits()), AlignInBits(
N->getAlignInBits()),
572 Encoding(
N->getEncoding()) {}
576 StringLength ==
RHS->getRawStringLength() &&
577 StringLengthExp ==
RHS->getRawStringLengthExp() &&
578 StringLocationExp ==
RHS->getRawStringLocationExp() &&
579 SizeInBits ==
RHS->getRawSizeInBits() &&
580 AlignInBits ==
RHS->getAlignInBits() &&
581 Encoding ==
RHS->getEncoding();
611 std::optional<unsigned> DWARFAddressSpace,
612 std::optional<DIDerivedType::PtrAuthData> PtrAuthData,
616 AlignInBits(AlignInBits), DWARFAddressSpace(DWARFAddressSpace),
617 PtrAuthData(PtrAuthData), Flags(Flags), ExtraData(ExtraData),
621 Line(
N->getLine()), Scope(
N->getRawScope()),
622 BaseType(
N->getRawBaseType()), SizeInBits(
N->getRawSizeInBits()),
623 OffsetInBits(
N->getRawOffsetInBits()), AlignInBits(
N->getAlignInBits()),
624 DWARFAddressSpace(
N->getDWARFAddressSpace()),
625 PtrAuthData(
N->getPtrAuthData()), Flags(
N->
getFlags()),
626 ExtraData(
N->getRawExtraData()),
Annotations(
N->getRawAnnotations()) {}
630 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
631 Scope ==
RHS->getRawScope() &&
BaseType ==
RHS->getRawBaseType() &&
632 SizeInBits ==
RHS->getRawSizeInBits() &&
633 AlignInBits ==
RHS->getAlignInBits() &&
634 OffsetInBits ==
RHS->getRawOffsetInBits() &&
635 DWARFAddressSpace ==
RHS->getDWARFAddressSpace() &&
636 PtrAuthData ==
RHS->getPtrAuthData() && Flags ==
RHS->getFlags() &&
637 ExtraData ==
RHS->getRawExtraData() &&
645 if (
Tag == dwarf::DW_TAG_member &&
Name)
646 if (
auto *CT = dyn_cast_or_null<DICompositeType>(Scope))
647 if (CT->getRawIdentifier())
676 :
Name(
Name), File(File), Line(Line), Scope(Scope),
677 SizeInBits(SizeInBits), AlignInBits(AlignInBits), Flags(Flags),
679 Stride(Stride), Bias(Bias) {}
681 :
Name(
N->getRawName()), File(
N->getRawFile()), Line(
N->getLine()),
682 Scope(
N->getRawScope()), SizeInBits(
N->getRawSizeInBits()),
683 AlignInBits(
N->getAlignInBits()), Flags(
N->
getFlags()),
684 BaseType(
N->getRawBaseType()), LowerBound(
N->getRawLowerBound()),
685 UpperBound(
N->getRawUpperBound()), Stride(
N->getRawStride()),
686 Bias(
N->getRawBias()) {}
704 return Name ==
RHS->getRawName() && File ==
RHS->getRawFile() &&
705 Line ==
RHS->getLine() && Scope ==
RHS->getRawScope() &&
706 SizeInBits ==
RHS->getRawSizeInBits() &&
707 AlignInBits ==
RHS->getAlignInBits() && Flags ==
RHS->getFlags() &&
709 BoundsEqual(LowerBound,
RHS->getRawLowerBound()) &&
710 BoundsEqual(UpperBound,
RHS->getRawUpperBound()) &&
711 BoundsEqual(Stride,
RHS->getRawStride()) &&
712 BoundsEqual(Bias,
RHS->getRawBias());
727 HashBound(LowerBound);
728 HashBound(UpperBound);
745 return isODRMember(
LHS->getTag(),
LHS->getRawScope(),
LHS->getRawName(),
754 if (
Tag != dwarf::DW_TAG_member || !
Name)
757 auto *CT = dyn_cast_or_null<DICompositeType>(Scope);
758 if (!CT || !CT->getRawIdentifier())
763 Scope ==
RHS->getRawScope();
796 Metadata *Elements,
unsigned RuntimeLang,
805 AlignInBits(AlignInBits), Flags(Flags), Elements(Elements),
806 RuntimeLang(RuntimeLang), VTableHolder(VTableHolder),
807 TemplateParams(TemplateParams), Identifier(Identifier),
808 Discriminator(Discriminator), DataLocation(DataLocation),
809 Associated(Associated), Allocated(Allocated), Rank(Rank),
811 NumExtraInhabitants(NumExtraInhabitants), BitStride(BitStride) {}
814 Line(
N->getLine()), Scope(
N->getRawScope()),
815 BaseType(
N->getRawBaseType()), SizeInBits(
N->getRawSizeInBits()),
816 OffsetInBits(
N->getRawOffsetInBits()), AlignInBits(
N->getAlignInBits()),
817 Flags(
N->
getFlags()), Elements(
N->getRawElements()),
818 RuntimeLang(
N->getRuntimeLang()), VTableHolder(
N->getRawVTableHolder()),
819 TemplateParams(
N->getRawTemplateParams()),
820 Identifier(
N->getRawIdentifier()),
821 Discriminator(
N->getRawDiscriminator()),
822 DataLocation(
N->getRawDataLocation()),
823 Associated(
N->getRawAssociated()), Allocated(
N->getRawAllocated()),
825 Specification(
N->getSpecification()),
826 NumExtraInhabitants(
N->getNumExtraInhabitants()),
827 BitStride(
N->getRawBitStride()) {}
831 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
832 Scope ==
RHS->getRawScope() &&
BaseType ==
RHS->getRawBaseType() &&
833 SizeInBits ==
RHS->getRawSizeInBits() &&
834 AlignInBits ==
RHS->getAlignInBits() &&
835 OffsetInBits ==
RHS->getRawOffsetInBits() &&
836 Flags ==
RHS->getFlags() && Elements ==
RHS->getRawElements() &&
837 RuntimeLang ==
RHS->getRuntimeLang() &&
838 VTableHolder ==
RHS->getRawVTableHolder() &&
839 TemplateParams ==
RHS->getRawTemplateParams() &&
840 Identifier ==
RHS->getRawIdentifier() &&
841 Discriminator ==
RHS->getRawDiscriminator() &&
842 DataLocation ==
RHS->getRawDataLocation() &&
843 Associated ==
RHS->getRawAssociated() &&
844 Allocated ==
RHS->getRawAllocated() && Rank ==
RHS->getRawRank() &&
846 Specification ==
RHS->getSpecification() &&
847 NumExtraInhabitants ==
RHS->getNumExtraInhabitants() &&
848 BitStride ==
RHS->getRawBitStride();
867 : Flags(Flags), CC(CC), TypeArray(TypeArray) {}
869 : Flags(
N->
getFlags()), CC(
N->getCC()), TypeArray(
N->getRawTypeArray()) {}
872 return Flags ==
RHS->getFlags() && CC ==
RHS->getCC() &&
873 TypeArray ==
RHS->getRawTypeArray();
882 std::optional<DIFile::ChecksumInfo<MDString *>>
Checksum;
888 : Filename(Filename), Directory(Directory), Checksum(Checksum),
891 : Filename(
N->getRawFilename()), Directory(
N->getRawDirectory()),
892 Checksum(
N->getRawChecksum()), Source(
N->getRawSource()) {}
895 return Filename ==
RHS->getRawFilename() &&
896 Directory ==
RHS->getRawDirectory() &&
897 Checksum ==
RHS->getRawChecksum() && Source ==
RHS->getRawSource();
901 return hash_combine(Filename, Directory, Checksum ? Checksum->Kind : 0,
902 Checksum ? Checksum->Value :
nullptr, Source);
930 unsigned ScopeLine,
Metadata *ContainingType,
931 unsigned VirtualIndex,
int ThisAdjustment,
unsigned Flags,
935 MDString *TargetFuncName,
bool UsesKeyInstructions)
937 Line(Line), ScopeLine(ScopeLine),
Type(
Type),
938 ContainingType(ContainingType), VirtualIndex(VirtualIndex),
939 ThisAdjustment(ThisAdjustment), Flags(Flags), SPFlags(SPFlags),
940 Unit(Unit), TemplateParams(TemplateParams), Declaration(Declaration),
941 RetainedNodes(RetainedNodes), ThrownTypes(ThrownTypes),
943 UsesKeyInstructions(UsesKeyInstructions) {}
945 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
947 Line(
N->getLine()), ScopeLine(
N->getScopeLine()),
Type(
N->getRawType()),
948 ContainingType(
N->getRawContainingType()),
949 VirtualIndex(
N->getVirtualIndex()),
950 ThisAdjustment(
N->getThisAdjustment()), Flags(
N->
getFlags()),
951 SPFlags(
N->getSPFlags()), Unit(
N->getRawUnit()),
952 TemplateParams(
N->getRawTemplateParams()),
953 Declaration(
N->getRawDeclaration()),
954 RetainedNodes(
N->getRawRetainedNodes()),
955 ThrownTypes(
N->getRawThrownTypes()),
957 TargetFuncName(
N->getRawTargetFuncName()),
958 UsesKeyInstructions(
N->getKeyInstructionsEnabled()) {}
961 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
963 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
964 Type ==
RHS->getRawType() && ScopeLine ==
RHS->getScopeLine() &&
965 ContainingType ==
RHS->getRawContainingType() &&
966 VirtualIndex ==
RHS->getVirtualIndex() &&
967 ThisAdjustment ==
RHS->getThisAdjustment() &&
968 Flags ==
RHS->getFlags() && SPFlags ==
RHS->getSPFlags() &&
969 Unit ==
RHS->getUnit() &&
970 TemplateParams ==
RHS->getRawTemplateParams() &&
971 Declaration ==
RHS->getRawDeclaration() &&
972 RetainedNodes ==
RHS->getRawRetainedNodes() &&
973 ThrownTypes ==
RHS->getRawThrownTypes() &&
975 TargetFuncName ==
RHS->getRawTargetFuncName() &&
976 UsesKeyInstructions ==
RHS->getKeyInstructionsEnabled();
979 bool isDefinition()
const {
return SPFlags & DISubprogram::SPFlagDefinition; }
986 if (
auto *CT = dyn_cast_or_null<DICompositeType>(Scope))
987 if (
auto *
ID = CT->getRawIdentifier())
988 ScopeLinkageName =
ID->getString();
994 isa_and_nonnull<DICompositeType>(Scope))
1009 return isDeclarationOfODRMember(
LHS.isDefinition(),
LHS.Scope,
1010 LHS.LinkageName,
LHS.TemplateParams,
RHS);
1014 return isDeclarationOfODRMember(
LHS->isDefinition(),
LHS->getRawScope(),
1015 LHS->getRawLinkageName(),
1016 LHS->getRawTemplateParams(),
RHS);
1029 auto *CT = dyn_cast_or_null<DICompositeType>(Scope);
1030 if (!CT || !CT->getRawIdentifier())
1039 return IsDefinition ==
RHS->isDefinition() && Scope ==
RHS->getRawScope() &&
1041 TemplateParams ==
RHS->getRawTemplateParams();
1052 : Scope(Scope), File(File), Line(Line), Column(Column) {}
1054 : Scope(
N->getRawScope()), File(
N->getRawFile()), Line(
N->getLine()),
1055 Column(
N->getColumn()) {}
1058 return Scope ==
RHS->getRawScope() && File ==
RHS->getRawFile() &&
1059 Line ==
RHS->getLine() && Column ==
RHS->getColumn();
1073 : Scope(Scope), File(File), Discriminator(Discriminator) {}
1075 : Scope(
N->getRawScope()), File(
N->getRawFile()),
1076 Discriminator(
N->getDiscriminator()) {}
1079 return Scope ==
RHS->getRawScope() && File ==
RHS->getRawFile() &&
1080 Discriminator ==
RHS->getDiscriminator();
1094 : Scope(Scope),
Name(
Name), ExportSymbols(ExportSymbols) {}
1096 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
1097 ExportSymbols(
N->getExportSymbols()) {}
1100 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1101 ExportSymbols ==
RHS->getExportSymbols();
1116 : Scope(Scope), Decl(Decl),
Name(
Name), File(File), LineNo(LineNo) {}
1118 : Scope(
N->getRawScope()), Decl(
N->getRawDecl()),
Name(
N->getRawName()),
1119 File(
N->getRawFile()), LineNo(
N->getLineNo()) {}
1122 return Scope ==
RHS->getRawScope() && Decl ==
RHS->getRawDecl() &&
1123 Name ==
RHS->getRawName() && File ==
RHS->getRawFile() &&
1124 LineNo ==
RHS->getLineNo();
1144 MDString *APINotesFile,
unsigned LineNo,
bool IsDecl)
1145 : File(File), Scope(Scope),
Name(
Name),
1146 ConfigurationMacros(ConfigurationMacros), IncludePath(IncludePath),
1147 APINotesFile(APINotesFile), LineNo(LineNo), IsDecl(IsDecl) {}
1149 : File(
N->getRawFile()), Scope(
N->getRawScope()),
Name(
N->getRawName()),
1150 ConfigurationMacros(
N->getRawConfigurationMacros()),
1151 IncludePath(
N->getRawIncludePath()),
1152 APINotesFile(
N->getRawAPINotesFile()), LineNo(
N->getLineNo()),
1153 IsDecl(
N->getIsDecl()) {}
1156 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1157 ConfigurationMacros ==
RHS->getRawConfigurationMacros() &&
1158 IncludePath ==
RHS->getRawIncludePath() &&
1159 APINotesFile ==
RHS->getRawAPINotesFile() &&
1160 File ==
RHS->getRawFile() && LineNo ==
RHS->getLineNo() &&
1161 IsDecl ==
RHS->getIsDecl();
1177 :
Name(
N->getRawName()),
Type(
N->getRawType()),
1178 IsDefault(
N->isDefault()) {}
1182 IsDefault ==
RHS->isDefault();
1200 IsDefault(
N->isDefault()),
Value(
N->getValue()) {}
1204 Type ==
RHS->getRawType() && IsDefault ==
RHS->isDefault() &&
1229 bool IsLocalToUnit,
bool IsDefinition,
1233 Line(Line),
Type(
Type), IsLocalToUnit(IsLocalToUnit),
1234 IsDefinition(IsDefinition),
1235 StaticDataMemberDeclaration(StaticDataMemberDeclaration),
1236 TemplateParams(TemplateParams), AlignInBits(AlignInBits),
1239 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
1241 Line(
N->getLine()),
Type(
N->getRawType()),
1242 IsLocalToUnit(
N->isLocalToUnit()), IsDefinition(
N->isDefinition()),
1243 StaticDataMemberDeclaration(
N->getRawStaticDataMemberDeclaration()),
1244 TemplateParams(
N->getRawTemplateParams()),
1245 AlignInBits(
N->getAlignInBits()),
Annotations(
N->getRawAnnotations()) {}
1248 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1250 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
1251 Type ==
RHS->getRawType() && IsLocalToUnit ==
RHS->isLocalToUnit() &&
1252 IsDefinition ==
RHS->isDefinition() &&
1253 StaticDataMemberDeclaration ==
1254 RHS->getRawStaticDataMemberDeclaration() &&
1255 TemplateParams ==
RHS->getRawTemplateParams() &&
1256 AlignInBits ==
RHS->getAlignInBits() &&
1269 IsLocalToUnit, IsDefinition,
1291 : Scope(
N->getRawScope()),
Name(
N->getRawName()), File(
N->getRawFile()),
1292 Line(
N->getLine()),
Type(
N->getRawType()), Arg(
N->getArg()),
1293 Flags(
N->
getFlags()), AlignInBits(
N->getAlignInBits()),
1297 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1298 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
1299 Type ==
RHS->getRawType() && Arg ==
RHS->getArg() &&
1300 Flags ==
RHS->getFlags() && AlignInBits ==
RHS->getAlignInBits() &&
1326 unsigned Column,
bool IsArtificial,
1327 std::optional<unsigned> CoroSuspendIdx)
1328 : Scope(Scope),
Name(
Name), File(File), Line(Line), Column(Column),
1329 IsArtificial(IsArtificial), CoroSuspendIdx(CoroSuspendIdx) {}
1331 : Scope(
N->getRawScope()),
Name(
N->getRawName()), File(
N->getRawFile()),
1332 Line(
N->getLine()), Column(
N->getColumn()),
1333 IsArtificial(
N->isArtificial()),
1334 CoroSuspendIdx(
N->getCoroSuspendIdx()) {}
1337 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1338 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
1339 Column ==
RHS->getColumn() && IsArtificial ==
RHS->isArtificial() &&
1340 CoroSuspendIdx ==
RHS->getCoroSuspendIdx();
1357 return Elements ==
RHS->getElements();
1370 : Variable(
N->getRawVariable()),
Expression(
N->getRawExpression()) {}
1373 return Variable ==
RHS->getRawVariable() &&
1392 :
Name(
Name), File(File), Line(Line), GetterName(GetterName),
1395 :
Name(
N->getRawName()), File(
N->getRawFile()), Line(
N->getLine()),
1396 GetterName(
N->getRawGetterName()), SetterName(
N->getRawSetterName()),
1400 return Name ==
RHS->getRawName() && File ==
RHS->getRawFile() &&
1401 Line ==
RHS->getLine() && GetterName ==
RHS->getRawGetterName() &&
1402 SetterName ==
RHS->getRawSetterName() &&
1423 :
Tag(
Tag), Scope(Scope), Entity(Entity), File(File), Line(Line),
1426 :
Tag(
N->
getTag()), Scope(
N->getRawScope()), Entity(
N->getRawEntity()),
1427 File(
N->getRawFile()), Line(
N->getLine()),
Name(
N->getRawName()),
1428 Elements(
N->getRawElements()) {}
1431 return Tag ==
RHS->getTag() && Scope ==
RHS->getRawScope() &&
1432 Entity ==
RHS->getRawEntity() && File ==
RHS->getFile() &&
1433 Line ==
RHS->getLine() &&
Name ==
RHS->getRawName() &&
1434 Elements ==
RHS->getRawElements();
1451 : MIType(
N->getMacinfoType()), Line(
N->getLine()),
Name(
N->getRawName()),
1452 Value(
N->getRawValue()) {}
1455 return MIType ==
RHS->getMacinfoType() && Line ==
RHS->getLine() &&
1472 : MIType(MIType), Line(Line), File(File), Elements(Elements) {}
1474 : MIType(
N->getMacinfoType()), Line(
N->getLine()), File(
N->getRawFile()),
1475 Elements(
N->getRawElements()) {}
1478 return MIType ==
RHS->getMacinfoType() && Line ==
RHS->getLine() &&
1479 File ==
RHS->getRawFile() && Elements ==
RHS->getRawElements();
1545 return KeyTy(
N).getHashValue();
1563#define HANDLE_MDNODE_LEAF(CLASS) using CLASS##Info = MDNodeInfo<CLASS>;
1564#include "llvm/IR/Metadata.def"
1612 template <
class PredTy>
void remove_if(PredTy shouldRemove) {
1687#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \
1688 DenseSet<CLASS *, CLASS##Info> CLASS##s;
1689#include "llvm/IR/Metadata.def"
1692 std::optional<DenseMap<const MDString *, DICompositeType *>>
DITypeMap;
static std::optional< unsigned > getTag(const TargetRegisterInfo *TRI, const MachineInstr &MI, const LoadInfo &LI)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
This file declares a class to represent arbitrary precision floating point values and provide a varie...
This file implements a class to represent arbitrary precision integral constant values and operations...
This file defines the BumpPtrAllocator interface.
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file defines DenseMapInfo traits for DenseMap.
This file defines the DenseMap class.
This file defines the DenseSet and SmallDenseSet classes.
This file contains constants used for implementing Dwarf debug support.
This file defines a hash set that can be used to remove duplication of nodes in a graph.
Module.h This file contains the declarations for the Module class.
static StringRef getName(Value *V)
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
static uint32_t getFlags(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),...
size_t size() const
size - Get the array size.
bool empty() const
empty - Check if the array is empty.
Class to represent array types.
LLVM Basic Block Representation.
Allocate memory in an ever growing pool, as if by bump-pointer.
This is the shared class of boolean and integer constants.
int64_t getSExtValue() const
Return the constant as a 64-bit integer value after it has been sign extended as appropriate for the ...
List of ValueAsMetadata, to be used as an argument to a dbg.value intrinsic.
Basic type, like 'int' or 'float'.
A pair of DIGlobalVariable and DIExpression.
An imported module (C++ using directive or similar).
Represents a module in the programming language, for example, a Clang module, or a Fortran module.
String type, Fortran CHARACTER(n)
Subprogram description. Uses SubclassData1.
Type array for a subprogram.
Per-instruction record of debug-info.
Implements a dense probed hash-table based set.
Class representing an expression and its matching format.
FoldingSet - This template class is used to instantiate a specialized implementation of the folding s...
Class to represent function types.
Generic tagged DWARF-like metadata node.
Class to represent integer types.
DenseMap< const GlobalValue *, StringRef > GlobalValuePartitions
Collection of per-GlobalValue partitions used in this context.
DenseMap< const GlobalValue *, GlobalValue::SanitizerMetadata > GlobalValueSanitizerMetadata
DenseMap< unsigned, std::unique_ptr< ConstantInt > > IntOneConstants
bool DiagnosticsHotnessRequested
void getSyncScopeNames(SmallVectorImpl< StringRef > &SSNs) const
getSyncScopeNames - Populates client supplied SmallVector with synchronization scope names registered...
DenseMap< unsigned, std::unique_ptr< ConstantInt > > IntZeroConstants
DenseMap< Metadata *, MetadataAsValue * > MetadataAsValues
std::string DefaultTargetCPU
DenseMap< APFloat, std::unique_ptr< ConstantFP > > FPConstants
SmallPtrSet< Module *, 4 > OwnedModules
OwnedModules - The set of modules instantiated in this context, and which will be automatically delet...
DenseMap< PointerType *, std::unique_ptr< ConstantPointerNull > > CPNConstants
DenseMap< Type *, std::unique_ptr< ConstantAggregateZero > > CAZConstants
StringMap< MDString, BumpPtrAllocator > MDStringCache
ConstantInt * TheFalseVal
TargetExtTypeSet TargetExtTypes
DenseMap< DIAssignID *, SmallVector< Instruction *, 1 > > AssignmentIDToInstrs
Map DIAssignID -> Instructions with that attachment.
DenseMap< Type *, std::unique_ptr< PoisonValue > > PVConstants
DenseMap< APInt, std::unique_ptr< ConstantInt > > IntConstants
std::vector< MDNode * > DistinctMDNodes
std::optional< uint32_t > DiagnosticsMisExpectTolerance
The percentage of difference between profiling branch weights and llvm.expect branch weights to toler...
FoldingSet< AttributeImpl > AttrsSet
StructTypeSet AnonStructTypes
std::unique_ptr< ConstantTokenNone > TheNoneToken
DenseMap< const Value *, ValueName * > ValueNames
SyncScope::ID getOrInsertSyncScopeID(StringRef SSN)
getOrInsertSyncScopeID - Maps synchronization scope name to synchronization scope ID.
void setOptPassGate(OptPassGate &)
Set the object which can disable optional passes and individual optimizations at compile time.
VectorConstantsTy VectorConstants
std::unique_ptr< LLVMRemarkStreamer > LLVMRS
The specialized remark streamer used by LLVM's OptimizationRemarkEmitter.
bool DiscardValueNames
Flag to indicate if Value (other than GlobalValue) retains their name or not.
DenseMap< const GlobalValue *, NoCFIValue * > NoCFIValues
DenseMap< const Function *, std::string > GCNames
Maintain the GC name for each function.
DenseMap< const BasicBlock *, BlockAddress * > BlockAddresses
bool RespectDiagnosticFilters
DenseMap< Type *, std::unique_ptr< UndefValue > > UVConstants
OptPassGate & getOptPassGate() const
Access the object which can disable optional passes and individual optimizations at compile time.
DenseMap< std::pair< Type *, unsigned >, TypedPointerType * > ASTypedPointerTypes
DenseMap< std::pair< Type *, uint64_t >, ArrayType * > ArrayTypes
std::string DefaultTargetFeatures
DenseMap< const Value *, MDAttachments > ValueMetadata
Collection of metadata used in this context.
DenseMap< Module *, unsigned > MachineFunctionNums
MachineFunctionNums - Keep the next available unique number available for a MachineFunction in given ...
StringMap< unsigned > CustomMDKindNames
CustomMDKindNames - Map to hold the metadata string to ID mapping.
StringMapEntry< uint32_t > * getOrInsertBundleTag(StringRef Tag)
std::unique_ptr< DiagnosticHandler > DiagHandler
StringMap< uint32_t > BundleTagCache
A set of interned tags for operand bundles.
DbgMarker * getTrailingDbgRecords(BasicBlock *B)
DenseMap< const GlobalObject *, StringRef > GlobalObjectSections
Collection of per-GlobalObject sections used in this context.
StringMap< std::unique_ptr< ConstantDataSequential > > CDSConstants
StructConstantsTy StructConstants
DenseMap< std::pair< Type *, ElementCount >, VectorType * > VectorTypes
std::unique_ptr< remarks::RemarkStreamer > MainRemarkStreamer
The main remark streamer used by all the other streamers (e.g.
void getOperandBundleTags(SmallVectorImpl< StringRef > &Tags) const
void deleteTrailingDbgRecords(BasicBlock *B)
FoldingSet< AttributeSetNode > AttrsSetNodes
FoldingSet< AttributeListImpl > AttrsLists
ConstantUniqueMap< ConstantPtrAuth > ConstantPtrAuths
DenseMap< TargetExtType *, std::unique_ptr< ConstantTargetNone > > CTNConstants
SpecificBumpPtrAllocator< ConstantRangeAttributeImpl > ConstantRangeAttributeAlloc
std::optional< uint64_t > DiagnosticsHotnessThreshold
The minimum hotness value a diagnostic needs in order to be included in optimization diagnostics.
ConstantUniqueMap< ConstantExpr > ExprConstants
uint32_t getOperandBundleTagID(StringRef Tag) const
StringMap< SyncScope::ID > SSC
A set of interned synchronization scopes.
DenseMap< unsigned, PointerType * > PointerTypes
void setTrailingDbgRecords(BasicBlock *B, DbgMarker *M)
DenseMap< std::pair< ElementCount, APInt >, std::unique_ptr< ConstantInt > > IntSplatConstants
LLVMContext::YieldCallbackTy YieldCallback
DenseMap< unsigned, IntegerType * > IntegerTypes
StringMap< StructType * > NamedStructTypes
std::vector< ConstantRangeListAttributeImpl * > ConstantRangeListAttributes
PointerType * AS0PointerType
DenseSet< DIArgList *, DIArgListInfo > DIArgLists
ValueHandlesTy ValueHandles
std::optional< StringRef > getSyncScopeName(SyncScope::ID Id) const
getSyncScopeName - Returns the name of a SyncScope::ID registered with LLVMContext,...
ArrayConstantsTy ArrayConstants
DenseMap< Value *, ValueAsMetadata * > ValuesAsMetadata
bool MisExpectWarningRequested
ConstantUniqueMap< InlineAsm > InlineAsms
DenseMap< std::pair< const char *, unsigned >, unsigned > DiscriminatorTable
DiscriminatorTable - This table maps file:line locations to an integer representing the next DWARF pa...
uint64_t NextAtomGroup
The next available source atom group number.
DenseMap< const GlobalValue *, DSOLocalEquivalent * > DSOLocalEquivalents
unsigned NamedStructTypesUniqueID
SmallDenseMap< BasicBlock *, DbgMarker * > TrailingDbgRecords
Mapping of blocks to collections of "trailing" DbgVariableRecords.
FunctionTypeSet FunctionTypes
std::optional< DenseMap< const MDString *, DICompositeType * > > DITypeMap
DenseMap< std::pair< ElementCount, APFloat >, std::unique_ptr< ConstantFP > > FPSplatConstants
This is an important class for using LLVM in a threaded context.
void(*)(LLVMContext *Context, void *OpaqueHandle) YieldCallbackTy
Defines the type of a yield callback.
Multimap-like storage for metadata attachments.
void insert(unsigned ID, MDNode &MD)
Adds an attachment to a particular node.
void remove_if(PredTy shouldRemove)
Erase matching attachments.
void get(unsigned ID, SmallVectorImpl< MDNode * > &Result) const
Appends all attachments with the given ID to Result in insertion order.
void getAll(SmallVectorImpl< std::pair< unsigned, MDNode * > > &Result) const
Appends all attachments for the global to Result, sorting by attachment ID.
void set(unsigned ID, MDNode *MD)
Set an attachment to a particular node.
MDNode * lookup(unsigned ID) const
Returns the first attachment with the given ID or nullptr if no such attachment exists.
bool erase(unsigned ID)
Remove attachments with the given ID.
Structure for hashing arbitrary MDNode operands.
MDNodeOpsKey(const NodeTy *N, unsigned Offset=0)
bool compareOps(const NodeTy *RHS, unsigned Offset=0) const
MDNodeOpsKey(ArrayRef< Metadata * > Ops)
static unsigned calculateHash(MDNode *N, unsigned Offset=0)
Extensions to this class implement mechanisms to disable passes and individual optimizations at compi...
Class to represent pointers.
SmallPtrSet - This class implements a set which is optimized for holding SmallSize or less elements.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
A BumpPtrAllocator that allows only elements of a specific type to be allocated.
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
StringRef - Represent a constant reference to a string, i.e.
Class to represent struct types.
Class to represent target extensions types, which are generally unintrospectable from target-independ...
The instances of the Type class are immutable: once they are created, they are never changed.
A few GPU targets, such as DXIL and SPIR-V, have typed pointers.
Saves strings in the provided stable storage and returns a StringRef with a stable character pointer.
LLVM Value Representation.
Base class of all SIMD vector types.
@ C
The default llvm calling convention, compatible with C.
@ BasicBlock
Various leaf nodes.
This is an optimization pass for GlobalISel generic memory operations.
hash_code hash_value(const FixedPointSemantics &Val)
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
void erase_if(Container &C, UnaryPredicate P)
Provide a container algorithm similar to C++ Library Fundamentals v2's erase_if which is equivalent t...
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
hash_code hash_combine_range(InputIteratorT first, InputIteratorT last)
Compute a hash_code for a sequence of values.
Implement std::hash so that hash_code can be used in STL containers.
static LLVM_ABI const fltSemantics & Bogus() LLVM_READNONE
A Pseudo fltsemantic used to construct APFloats that cannot conflict with anything real.
KeyTy(const ArrayRef< Type * > &E, bool P)
KeyTy(const StructType *ST)
bool operator==(const KeyTy &that) const
ArrayRef< Type * > ETypes
bool operator!=(const KeyTy &that) const
static StructType * getEmptyKey()
static bool isEqual(const StructType *LHS, const StructType *RHS)
static unsigned getHashValue(const StructType *ST)
static unsigned getHashValue(const KeyTy &Key)
static StructType * getTombstoneKey()
static bool isEqual(const KeyTy &LHS, const StructType *RHS)
DenseMapInfo for DIArgList.
static unsigned getHashValue(const KeyTy &Key)
static DIArgList * getEmptyKey()
static unsigned getHashValue(const DIArgList *N)
static bool isEqual(const DIArgList *LHS, const DIArgList *RHS)
static DIArgList * getTombstoneKey()
static bool isEqual(const KeyTy &LHS, const DIArgList *RHS)
ArrayRef< ValueAsMetadata * > Args
DIArgListKeyInfo(const DIArgList *N)
DIArgListKeyInfo(ArrayRef< ValueAsMetadata * > Args)
unsigned getHashValue() const
bool isKeyOf(const DIArgList *RHS) const
A single checksum, represented by a Kind and a Value (a string).
static bool isEqual(const APFloat &LHS, const APFloat &RHS)
static APFloat getTombstoneKey()
static APFloat getEmptyKey()
static unsigned getHashValue(const APFloat &Key)
An information struct used to provide DenseMap with the various necessary components for a given valu...
ArrayRef< Type * > Params
bool operator==(const KeyTy &that) const
bool operator!=(const KeyTy &that) const
KeyTy(const Type *R, const ArrayRef< Type * > &P, bool V)
KeyTy(const FunctionType *FT)
static unsigned getHashValue(const FunctionType *FT)
static FunctionType * getTombstoneKey()
static bool isEqual(const KeyTy &LHS, const FunctionType *RHS)
static unsigned getHashValue(const KeyTy &Key)
static bool isEqual(const FunctionType *LHS, const FunctionType *RHS)
static FunctionType * getEmptyKey()
DenseMapInfo for MDNode subclasses.
static unsigned getHashValue(const KeyTy &Key)
static bool isEqual(const NodeTy *LHS, const NodeTy *RHS)
static bool isEqual(const KeyTy &LHS, const NodeTy *RHS)
static unsigned getHashValue(const NodeTy *N)
MDNodeKeyImpl< NodeTy > KeyTy
static NodeTy * getTombstoneKey()
static NodeTy * getEmptyKey()
bool isKeyOf(const DIBasicType *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DIBasicType *N)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, unsigned Flags)
uint32_t NumExtraInhabitants
unsigned getHashValue() const
bool isKeyOf(const DICommonBlock *RHS) const
MDNodeKeyImpl(const DICommonBlock *N)
MDNodeKeyImpl(Metadata *Scope, Metadata *Decl, MDString *Name, Metadata *File, unsigned LineNo)
uint32_t NumExtraInhabitants
unsigned getHashValue() const
Metadata * TemplateParams
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, Metadata *SizeInBits, uint32_t AlignInBits, Metadata *OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated, Metadata *Allocated, Metadata *Rank, Metadata *Annotations, Metadata *Specification, uint32_t NumExtraInhabitants, Metadata *BitStride)
MDNodeKeyImpl(const DICompositeType *N)
bool isKeyOf(const DICompositeType *RHS) const
std::optional< DIDerivedType::PtrAuthData > PtrAuthData
MDNodeKeyImpl(const DIDerivedType *N)
MDNodeKeyImpl(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< DIDerivedType::PtrAuthData > PtrAuthData, unsigned Flags, Metadata *ExtraData, Metadata *Annotations)
bool isKeyOf(const DIDerivedType *RHS) const
std::optional< unsigned > DWARFAddressSpace
unsigned getHashValue() const
MDNodeKeyImpl(APInt Value, bool IsUnsigned, MDString *Name)
unsigned getHashValue() const
MDNodeKeyImpl(int64_t Value, bool IsUnsigned, MDString *Name)
bool isKeyOf(const DIEnumerator *RHS) const
MDNodeKeyImpl(const DIEnumerator *N)
bool isKeyOf(const DIExpression *RHS) const
ArrayRef< uint64_t > Elements
MDNodeKeyImpl(const DIExpression *N)
MDNodeKeyImpl(ArrayRef< uint64_t > Elements)
unsigned getHashValue() const
std::optional< DIFile::ChecksumInfo< MDString * > > Checksum
MDNodeKeyImpl(const DIFile *N)
bool isKeyOf(const DIFile *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(MDString *Filename, MDString *Directory, std::optional< DIFile::ChecksumInfo< MDString * > > Checksum, MDString *Source)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Encoding, unsigned Flags, unsigned Kind, int Factor, APInt Numerator, APInt Denominator)
MDNodeKeyImpl(const DIFixedPointType *N)
unsigned getHashValue() const
bool isKeyOf(const DIFixedPointType *RHS) const
bool isKeyOf(const DIGenericSubrange *RHS) const
MDNodeKeyImpl(const DIGenericSubrange *N)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *CountNode, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride)
MDNodeKeyImpl(Metadata *Variable, Metadata *Expression)
unsigned getHashValue() const
bool isKeyOf(const DIGlobalVariableExpression *RHS) const
MDNodeKeyImpl(const DIGlobalVariableExpression *N)
Metadata * StaticDataMemberDeclaration
bool isKeyOf(const DIGlobalVariable *RHS) const
Metadata * TemplateParams
MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type, bool IsLocalToUnit, bool IsDefinition, Metadata *StaticDataMemberDeclaration, Metadata *TemplateParams, uint32_t AlignInBits, Metadata *Annotations)
MDNodeKeyImpl(const DIGlobalVariable *N)
unsigned getHashValue() const
bool isKeyOf(const DIImportedEntity *RHS) const
MDNodeKeyImpl(unsigned Tag, Metadata *Scope, Metadata *Entity, Metadata *File, unsigned Line, MDString *Name, Metadata *Elements)
MDNodeKeyImpl(const DIImportedEntity *N)
unsigned getHashValue() const
unsigned getHashValue() const
Using name and line to get hash value. It should already be mostly unique.
bool isKeyOf(const DILabel *RHS) const
std::optional< unsigned > CoroSuspendIdx
MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File, unsigned Line, unsigned Column, bool IsArtificial, std::optional< unsigned > CoroSuspendIdx)
MDNodeKeyImpl(const DILabel *N)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *Scope, Metadata *File, unsigned Discriminator)
MDNodeKeyImpl(const DILexicalBlockFile *N)
bool isKeyOf(const DILexicalBlockFile *RHS) const
bool isKeyOf(const DILexicalBlock *RHS) const
MDNodeKeyImpl(const DILexicalBlock *N)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *Scope, Metadata *File, unsigned Line, unsigned Column)
unsigned getHashValue() const
bool isKeyOf(const DILocalVariable *RHS) const
MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File, unsigned Line, Metadata *Type, unsigned Arg, unsigned Flags, uint32_t AlignInBits, Metadata *Annotations)
MDNodeKeyImpl(const DILocalVariable *N)
unsigned getHashValue() const
MDNodeKeyImpl(const DILocation *L)
MDNodeKeyImpl(unsigned Line, uint16_t Column, Metadata *Scope, Metadata *InlinedAt, bool ImplicitCode, uint64_t AtomGroup, uint8_t AtomRank)
bool isKeyOf(const DILocation *RHS) const
MDNodeKeyImpl(const DIMacroFile *N)
unsigned getHashValue() const
MDNodeKeyImpl(unsigned MIType, unsigned Line, Metadata *File, Metadata *Elements)
bool isKeyOf(const DIMacroFile *RHS) const
MDNodeKeyImpl(const DIMacro *N)
MDNodeKeyImpl(unsigned MIType, unsigned Line, MDString *Name, MDString *Value)
bool isKeyOf(const DIMacro *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DIModule *N)
MDNodeKeyImpl(Metadata *File, Metadata *Scope, MDString *Name, MDString *ConfigurationMacros, MDString *IncludePath, MDString *APINotesFile, unsigned LineNo, bool IsDecl)
bool isKeyOf(const DIModule *RHS) const
MDString * ConfigurationMacros
unsigned getHashValue() const
MDNodeKeyImpl(const DINamespace *N)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *Scope, MDString *Name, bool ExportSymbols)
bool isKeyOf(const DINamespace *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DIObjCProperty *N)
bool isKeyOf(const DIObjCProperty *RHS) const
MDNodeKeyImpl(MDString *Name, Metadata *File, unsigned Line, MDString *GetterName, MDString *SetterName, unsigned Attributes, Metadata *Type)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *StringLength, Metadata *StringLengthExp, Metadata *StringLocationExp, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Encoding)
MDNodeKeyImpl(const DIStringType *N)
bool isKeyOf(const DIStringType *RHS) const
Metadata * StringLocationExp
Metadata * StringLengthExp
unsigned getHashValue() const
Metadata * ContainingType
Metadata * TemplateParams
bool isDefinition() const
unsigned getHashValue() const
MDString * TargetFuncName
bool isKeyOf(const DISubprogram *RHS) const
MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type, unsigned ScopeLine, Metadata *ContainingType, unsigned VirtualIndex, int ThisAdjustment, unsigned Flags, unsigned SPFlags, Metadata *Unit, Metadata *TemplateParams, Metadata *Declaration, Metadata *RetainedNodes, Metadata *ThrownTypes, Metadata *Annotations, MDString *TargetFuncName, bool UsesKeyInstructions)
MDNodeKeyImpl(const DISubprogram *N)
MDNodeKeyImpl(MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Flags, Metadata *BaseType, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride, Metadata *Bias)
bool isKeyOf(const DISubrangeType *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DISubrangeType *N)
MDNodeKeyImpl(Metadata *CountNode, Metadata *LowerBound, Metadata *UpperBound, Metadata *Stride)
unsigned getHashValue() const
bool isKeyOf(const DISubrange *RHS) const
MDNodeKeyImpl(const DISubrange *N)
bool isKeyOf(const DISubroutineType *RHS) const
MDNodeKeyImpl(unsigned Flags, uint8_t CC, Metadata *TypeArray)
unsigned getHashValue() const
MDNodeKeyImpl(const DISubroutineType *N)
MDNodeKeyImpl(const DITemplateTypeParameter *N)
bool isKeyOf(const DITemplateTypeParameter *RHS) const
MDNodeKeyImpl(MDString *Name, Metadata *Type, bool IsDefault)
unsigned getHashValue() const
MDNodeKeyImpl(const DITemplateValueParameter *N)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *Type, bool IsDefault, Metadata *Value)
unsigned getHashValue() const
bool isKeyOf(const DITemplateValueParameter *RHS) const
static unsigned calculateHash(GenericDINode *N)
unsigned getHashValue() const
MDNodeKeyImpl(const GenericDINode *N)
MDNodeKeyImpl(unsigned Tag, MDString *Header, ArrayRef< Metadata * > DwarfOps)
bool isKeyOf(const GenericDINode *RHS) const
bool isKeyOf(const MDTuple *RHS) const
MDNodeKeyImpl(ArrayRef< Metadata * > Ops)
MDNodeKeyImpl(const MDTuple *N)
unsigned getHashValue() const
static unsigned calculateHash(MDTuple *N)
static bool isSubsetEqual(const DIDerivedType *LHS, const DIDerivedType *RHS)
static bool isSubsetEqual(const KeyTy &LHS, const DIDerivedType *RHS)
static bool isODRMember(unsigned Tag, const Metadata *Scope, const MDString *Name, const DIDerivedType *RHS)
Subprograms compare equal if they declare the same function in an ODR type.
static bool isSubsetEqual(const DISubprogram *LHS, const DISubprogram *RHS)
static bool isSubsetEqual(const KeyTy &LHS, const DISubprogram *RHS)
static bool isDeclarationOfODRMember(bool IsDefinition, const Metadata *Scope, const MDString *LinkageName, const Metadata *TemplateParams, const DISubprogram *RHS)
Subprograms compare equal if they declare the same function in an ODR type.
Configuration point for MDNodeInfo::isEqual().
static bool isSubsetEqual(const KeyTy &LHS, const NodeTy *RHS)
static bool isSubsetEqual(const NodeTy *LHS, const NodeTy *RHS)
KeyTy(StringRef N, const ArrayRef< Type * > &TP, const ArrayRef< unsigned > &IP)
ArrayRef< unsigned > IntParams
bool operator==(const KeyTy &that) const
KeyTy(const TargetExtType *TT)
ArrayRef< Type * > TypeParams
bool operator!=(const KeyTy &that) const
static unsigned getHashValue(const TargetExtType *FT)
static bool isEqual(const TargetExtType *LHS, const TargetExtType *RHS)
static bool isEqual(const KeyTy &LHS, const TargetExtType *RHS)
static unsigned getHashValue(const KeyTy &Key)
static TargetExtType * getTombstoneKey()
static TargetExtType * getEmptyKey()