14#ifndef LLVM_LIB_IR_LLVMCONTEXTIMPL_H
15#define LLVM_LIB_IR_LLVMCONTEXTIMPL_H
56class AttributeListImpl;
57class AttributeSetNode;
59struct DiagnosticHandler;
65class LLVMRemarkStreamer;
70template <
typename T>
class StringMapEntry;
72class TypedPointerType;
88 return LHS.bitwiseIsEqual(
RHS);
252 template <
class NodeTy>
256 template <
class NodeTy>
323 Metadata *InlinedAt,
bool ImplicitCode)
324 : Line(Line), Column(Column), Scope(Scope), InlinedAt(InlinedAt),
325 ImplicitCode(ImplicitCode) {}
327 : Line(L->getLine()), Column(L->getColumn()), Scope(L->getRawScope()),
328 InlinedAt(L->getRawInlinedAt()), ImplicitCode(L->isImplicitCode()) {}
331 return Line ==
RHS->getLine() && Column ==
RHS->getColumn() &&
332 Scope ==
RHS->getRawScope() && InlinedAt ==
RHS->getRawInlinedAt() &&
333 ImplicitCode ==
RHS->isImplicitCode();
337 return hash_combine(Line, Column, Scope, InlinedAt, ImplicitCode);
352 return Tag ==
RHS->getTag() && Header ==
RHS->getRawHeader() &&
371 : CountNode(CountNode), LowerBound(LowerBound), UpperBound(UpperBound),
374 : CountNode(
N->getRawCountNode()), LowerBound(
N->getRawLowerBound()),
375 UpperBound(
N->getRawUpperBound()), Stride(
N->getRawStride()) {}
393 return BoundsEqual(CountNode,
RHS->getRawCountNode()) &&
394 BoundsEqual(LowerBound,
RHS->getRawLowerBound()) &&
395 BoundsEqual(UpperBound,
RHS->getRawUpperBound()) &&
396 BoundsEqual(Stride,
RHS->getRawStride());
401 if (
auto *MD = dyn_cast<ConstantAsMetadata>(CountNode))
402 return hash_combine(cast<ConstantInt>(MD->getValue())->getSExtValue(),
403 LowerBound, UpperBound, Stride);
404 return hash_combine(CountNode, LowerBound, UpperBound, Stride);
416 : CountNode(CountNode), LowerBound(LowerBound), UpperBound(UpperBound),
419 : CountNode(
N->getRawCountNode()), LowerBound(
N->getRawLowerBound()),
420 UpperBound(
N->getRawUpperBound()), Stride(
N->getRawStride()) {}
423 return (CountNode ==
RHS->getRawCountNode()) &&
424 (LowerBound ==
RHS->getRawLowerBound()) &&
425 (UpperBound ==
RHS->getRawUpperBound()) &&
426 (Stride ==
RHS->getRawStride());
430 auto *MD = dyn_cast_or_null<ConstantAsMetadata>(CountNode);
432 return hash_combine(cast<ConstantInt>(MD->getValue())->getSExtValue(),
433 LowerBound, UpperBound, Stride);
434 return hash_combine(CountNode, LowerBound, UpperBound, Stride);
447 IsUnsigned(IsUnsigned) {}
450 IsUnsigned(
N->isUnsigned()) {}
453 return Value.getBitWidth() ==
RHS->getValue().getBitWidth() &&
454 Value ==
RHS->getValue() && IsUnsigned ==
RHS->isUnsigned() &&
470 uint32_t AlignInBits,
unsigned Encoding,
unsigned Flags)
471 :
Tag(
Tag),
Name(
Name), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
472 Encoding(Encoding), Flags(Flags) {}
475 AlignInBits(
N->getAlignInBits()), Encoding(
N->getEncoding()),
480 SizeInBits ==
RHS->getSizeInBits() &&
481 AlignInBits ==
RHS->getAlignInBits() &&
482 Encoding ==
RHS->getEncoding() && Flags ==
RHS->getFlags();
504 StringLengthExp(StringLengthExp), StringLocationExp(StringLocationExp),
505 SizeInBits(SizeInBits), AlignInBits(AlignInBits), Encoding(Encoding) {}
508 StringLength(
N->getRawStringLength()),
509 StringLengthExp(
N->getRawStringLengthExp()),
510 StringLocationExp(
N->getRawStringLocationExp()),
511 SizeInBits(
N->getSizeInBits()), AlignInBits(
N->getAlignInBits()),
512 Encoding(
N->getEncoding()) {}
516 StringLength ==
RHS->getRawStringLength() &&
517 StringLengthExp ==
RHS->getRawStringLengthExp() &&
518 StringLocationExp ==
RHS->getRawStringLocationExp() &&
519 SizeInBits ==
RHS->getSizeInBits() &&
520 AlignInBits ==
RHS->getAlignInBits() &&
521 Encoding ==
RHS->getEncoding();
550 std::optional<unsigned> DWARFAddressSpace,
unsigned Flags,
554 AlignInBits(AlignInBits), DWARFAddressSpace(DWARFAddressSpace),
558 Line(
N->getLine()), Scope(
N->getRawScope()),
559 BaseType(
N->getRawBaseType()), SizeInBits(
N->getSizeInBits()),
560 OffsetInBits(
N->getOffsetInBits()), AlignInBits(
N->getAlignInBits()),
561 DWARFAddressSpace(
N->getDWARFAddressSpace()), Flags(
N->
getFlags()),
562 ExtraData(
N->getRawExtraData()),
Annotations(
N->getRawAnnotations()) {}
566 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
567 Scope ==
RHS->getRawScope() &&
BaseType ==
RHS->getRawBaseType() &&
568 SizeInBits ==
RHS->getSizeInBits() &&
569 AlignInBits ==
RHS->getAlignInBits() &&
570 OffsetInBits ==
RHS->getOffsetInBits() &&
571 DWARFAddressSpace ==
RHS->getDWARFAddressSpace() &&
572 Flags ==
RHS->getFlags() && ExtraData ==
RHS->getRawExtraData() &&
580 if (
Tag == dwarf::DW_TAG_member &&
Name)
581 if (
auto *CT = dyn_cast_or_null<DICompositeType>(Scope))
582 if (CT->getRawIdentifier())
602 return isODRMember(
LHS->getTag(),
LHS->getRawScope(),
LHS->getRawName(),
611 if (
Tag != dwarf::DW_TAG_member || !
Name)
614 auto *CT = dyn_cast_or_null<DICompositeType>(Scope);
615 if (!CT || !CT->getRawIdentifier())
620 Scope ==
RHS->getRawScope();
650 Metadata *Elements,
unsigned RuntimeLang,
657 AlignInBits(AlignInBits), Flags(Flags), Elements(Elements),
658 RuntimeLang(RuntimeLang), VTableHolder(VTableHolder),
659 TemplateParams(TemplateParams), Identifier(Identifier),
660 Discriminator(Discriminator), DataLocation(DataLocation),
661 Associated(Associated), Allocated(Allocated), Rank(Rank),
665 Line(
N->getLine()), Scope(
N->getRawScope()),
666 BaseType(
N->getRawBaseType()), SizeInBits(
N->getSizeInBits()),
667 OffsetInBits(
N->getOffsetInBits()), AlignInBits(
N->getAlignInBits()),
668 Flags(
N->
getFlags()), Elements(
N->getRawElements()),
669 RuntimeLang(
N->getRuntimeLang()), VTableHolder(
N->getRawVTableHolder()),
670 TemplateParams(
N->getRawTemplateParams()),
671 Identifier(
N->getRawIdentifier()),
672 Discriminator(
N->getRawDiscriminator()),
673 DataLocation(
N->getRawDataLocation()),
674 Associated(
N->getRawAssociated()), Allocated(
N->getRawAllocated()),
675 Rank(
N->getRawRank()),
Annotations(
N->getRawAnnotations()) {}
679 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
680 Scope ==
RHS->getRawScope() &&
BaseType ==
RHS->getRawBaseType() &&
681 SizeInBits ==
RHS->getSizeInBits() &&
682 AlignInBits ==
RHS->getAlignInBits() &&
683 OffsetInBits ==
RHS->getOffsetInBits() && Flags ==
RHS->getFlags() &&
684 Elements ==
RHS->getRawElements() &&
685 RuntimeLang ==
RHS->getRuntimeLang() &&
686 VTableHolder ==
RHS->getRawVTableHolder() &&
687 TemplateParams ==
RHS->getRawTemplateParams() &&
688 Identifier ==
RHS->getRawIdentifier() &&
689 Discriminator ==
RHS->getRawDiscriminator() &&
690 DataLocation ==
RHS->getRawDataLocation() &&
691 Associated ==
RHS->getRawAssociated() &&
692 Allocated ==
RHS->getRawAllocated() && Rank ==
RHS->getRawRank() &&
712 : Flags(Flags),
CC(
CC), TypeArray(TypeArray) {}
714 : Flags(
N->
getFlags()),
CC(
N->getCC()), TypeArray(
N->getRawTypeArray()) {}
717 return Flags ==
RHS->getFlags() &&
CC ==
RHS->getCC() &&
718 TypeArray ==
RHS->getRawTypeArray();
727 std::optional<DIFile::ChecksumInfo<MDString *>>
Checksum;
733 : Filename(Filename), Directory(Directory), Checksum(Checksum),
736 : Filename(
N->getRawFilename()), Directory(
N->getRawDirectory()),
737 Checksum(
N->getRawChecksum()), Source(
N->getRawSource()) {}
740 return Filename ==
RHS->getRawFilename() &&
741 Directory ==
RHS->getRawDirectory() &&
742 Checksum ==
RHS->getRawChecksum() && Source ==
RHS->getRawSource();
746 return hash_combine(Filename, Directory, Checksum ? Checksum->Kind : 0,
747 Checksum ? Checksum->Value :
nullptr, Source);
774 unsigned ScopeLine,
Metadata *ContainingType,
775 unsigned VirtualIndex,
int ThisAdjustment,
unsigned Flags,
781 Line(Line),
Type(
Type), ScopeLine(ScopeLine),
782 ContainingType(ContainingType), VirtualIndex(VirtualIndex),
783 ThisAdjustment(ThisAdjustment), Flags(Flags), SPFlags(SPFlags),
784 Unit(Unit), TemplateParams(TemplateParams), Declaration(Declaration),
785 RetainedNodes(RetainedNodes), ThrownTypes(ThrownTypes),
788 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
790 Line(
N->getLine()),
Type(
N->getRawType()), ScopeLine(
N->getScopeLine()),
791 ContainingType(
N->getRawContainingType()),
792 VirtualIndex(
N->getVirtualIndex()),
793 ThisAdjustment(
N->getThisAdjustment()), Flags(
N->
getFlags()),
794 SPFlags(
N->getSPFlags()), Unit(
N->getRawUnit()),
795 TemplateParams(
N->getRawTemplateParams()),
796 Declaration(
N->getRawDeclaration()),
797 RetainedNodes(
N->getRawRetainedNodes()),
798 ThrownTypes(
N->getRawThrownTypes()),
800 TargetFuncName(
N->getRawTargetFuncName()) {}
803 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
805 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
806 Type ==
RHS->getRawType() && ScopeLine ==
RHS->getScopeLine() &&
807 ContainingType ==
RHS->getRawContainingType() &&
808 VirtualIndex ==
RHS->getVirtualIndex() &&
809 ThisAdjustment ==
RHS->getThisAdjustment() &&
810 Flags ==
RHS->getFlags() && SPFlags ==
RHS->getSPFlags() &&
811 Unit ==
RHS->getUnit() &&
812 TemplateParams ==
RHS->getRawTemplateParams() &&
813 Declaration ==
RHS->getRawDeclaration() &&
814 RetainedNodes ==
RHS->getRawRetainedNodes() &&
815 ThrownTypes ==
RHS->getRawThrownTypes() &&
817 TargetFuncName ==
RHS->getRawTargetFuncName();
820 bool isDefinition()
const {
return SPFlags & DISubprogram::SPFlagDefinition; }
827 if (
auto *CT = dyn_cast_or_null<DICompositeType>(Scope))
828 if (CT->getRawIdentifier())
843 return isDeclarationOfODRMember(
LHS.isDefinition(),
LHS.Scope,
844 LHS.LinkageName,
LHS.TemplateParams,
RHS);
848 return isDeclarationOfODRMember(
LHS->isDefinition(),
LHS->getRawScope(),
849 LHS->getRawLinkageName(),
850 LHS->getRawTemplateParams(),
RHS);
863 auto *CT = dyn_cast_or_null<DICompositeType>(Scope);
864 if (!CT || !CT->getRawIdentifier())
873 return IsDefinition ==
RHS->isDefinition() && Scope ==
RHS->getRawScope() &&
875 TemplateParams ==
RHS->getRawTemplateParams();
886 : Scope(Scope), File(File), Line(Line), Column(Column) {}
888 : Scope(
N->getRawScope()), File(
N->getRawFile()), Line(
N->getLine()),
889 Column(
N->getColumn()) {}
892 return Scope ==
RHS->getRawScope() && File ==
RHS->getRawFile() &&
893 Line ==
RHS->getLine() && Column ==
RHS->getColumn();
907 : Scope(Scope), File(File), Discriminator(Discriminator) {}
909 : Scope(
N->getRawScope()), File(
N->getRawFile()),
910 Discriminator(
N->getDiscriminator()) {}
913 return Scope ==
RHS->getRawScope() && File ==
RHS->getRawFile() &&
914 Discriminator ==
RHS->getDiscriminator();
928 : Scope(Scope),
Name(
Name), ExportSymbols(ExportSymbols) {}
930 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
931 ExportSymbols(
N->getExportSymbols()) {}
934 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
935 ExportSymbols ==
RHS->getExportSymbols();
950 : Scope(Scope), Decl(Decl),
Name(
Name), File(File), LineNo(LineNo) {}
952 : Scope(
N->getRawScope()), Decl(
N->getRawDecl()),
Name(
N->getRawName()),
953 File(
N->getRawFile()), LineNo(
N->getLineNo()) {}
956 return Scope ==
RHS->getRawScope() && Decl ==
RHS->getRawDecl() &&
957 Name ==
RHS->getRawName() && File ==
RHS->getRawFile() &&
958 LineNo ==
RHS->getLineNo();
978 MDString *APINotesFile,
unsigned LineNo,
bool IsDecl)
979 : File(File), Scope(Scope),
Name(
Name),
980 ConfigurationMacros(ConfigurationMacros), IncludePath(IncludePath),
981 APINotesFile(APINotesFile), LineNo(LineNo), IsDecl(IsDecl) {}
983 : File(
N->getRawFile()), Scope(
N->getRawScope()),
Name(
N->getRawName()),
984 ConfigurationMacros(
N->getRawConfigurationMacros()),
985 IncludePath(
N->getRawIncludePath()),
986 APINotesFile(
N->getRawAPINotesFile()), LineNo(
N->getLineNo()),
987 IsDecl(
N->getIsDecl()) {}
990 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
991 ConfigurationMacros ==
RHS->getRawConfigurationMacros() &&
992 IncludePath ==
RHS->getRawIncludePath() &&
993 APINotesFile ==
RHS->getRawAPINotesFile() &&
994 File ==
RHS->getRawFile() && LineNo ==
RHS->getLineNo() &&
995 IsDecl ==
RHS->getIsDecl();
1011 :
Name(
N->getRawName()),
Type(
N->getRawType()),
1012 IsDefault(
N->isDefault()) {}
1016 IsDefault ==
RHS->isDefault();
1034 IsDefault(
N->isDefault()),
Value(
N->getValue()) {}
1038 Type ==
RHS->getRawType() && IsDefault ==
RHS->isDefault() &&
1063 bool IsLocalToUnit,
bool IsDefinition,
1067 Line(Line),
Type(
Type), IsLocalToUnit(IsLocalToUnit),
1068 IsDefinition(IsDefinition),
1069 StaticDataMemberDeclaration(StaticDataMemberDeclaration),
1070 TemplateParams(TemplateParams), AlignInBits(AlignInBits),
1073 : Scope(
N->getRawScope()),
Name(
N->getRawName()),
1075 Line(
N->getLine()),
Type(
N->getRawType()),
1076 IsLocalToUnit(
N->isLocalToUnit()), IsDefinition(
N->isDefinition()),
1077 StaticDataMemberDeclaration(
N->getRawStaticDataMemberDeclaration()),
1078 TemplateParams(
N->getRawTemplateParams()),
1079 AlignInBits(
N->getAlignInBits()),
Annotations(
N->getRawAnnotations()) {}
1082 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1084 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
1085 Type ==
RHS->getRawType() && IsLocalToUnit ==
RHS->isLocalToUnit() &&
1086 IsDefinition ==
RHS->isDefinition() &&
1087 StaticDataMemberDeclaration ==
1088 RHS->getRawStaticDataMemberDeclaration() &&
1089 TemplateParams ==
RHS->getRawTemplateParams() &&
1090 AlignInBits ==
RHS->getAlignInBits() &&
1103 IsLocalToUnit, IsDefinition,
1125 : Scope(
N->getRawScope()),
Name(
N->getRawName()), File(
N->getRawFile()),
1126 Line(
N->getLine()),
Type(
N->getRawType()), Arg(
N->getArg()),
1127 Flags(
N->
getFlags()), AlignInBits(
N->getAlignInBits()),
1131 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1132 File ==
RHS->getRawFile() && Line ==
RHS->getLine() &&
1133 Type ==
RHS->getRawType() && Arg ==
RHS->getArg() &&
1134 Flags ==
RHS->getFlags() && AlignInBits ==
RHS->getAlignInBits() &&
1157 : Scope(Scope),
Name(
Name), File(File), Line(Line) {}
1159 : Scope(
N->getRawScope()),
Name(
N->getRawName()), File(
N->getRawFile()),
1160 Line(
N->getLine()) {}
1163 return Scope ==
RHS->getRawScope() &&
Name ==
RHS->getRawName() &&
1164 File ==
RHS->getRawFile() && Line ==
RHS->getLine();
1178 return Elements ==
RHS->getElements();
1193 : Variable(
N->getRawVariable()),
Expression(
N->getRawExpression()) {}
1196 return Variable ==
RHS->getRawVariable() &&
1215 :
Name(
Name), File(File), Line(Line), GetterName(GetterName),
1218 :
Name(
N->getRawName()), File(
N->getRawFile()), Line(
N->getLine()),
1219 GetterName(
N->getRawGetterName()), SetterName(
N->getRawSetterName()),
1223 return Name ==
RHS->getRawName() && File ==
RHS->getRawFile() &&
1224 Line ==
RHS->getLine() && GetterName ==
RHS->getRawGetterName() &&
1225 SetterName ==
RHS->getRawSetterName() &&
1246 :
Tag(
Tag), Scope(Scope), Entity(Entity), File(File), Line(Line),
1249 :
Tag(
N->
getTag()), Scope(
N->getRawScope()), Entity(
N->getRawEntity()),
1250 File(
N->getRawFile()), Line(
N->getLine()),
Name(
N->getRawName()),
1251 Elements(
N->getRawElements()) {}
1254 return Tag ==
RHS->getTag() && Scope ==
RHS->getRawScope() &&
1255 Entity ==
RHS->getRawEntity() && File ==
RHS->getFile() &&
1256 Line ==
RHS->getLine() &&
Name ==
RHS->getRawName() &&
1257 Elements ==
RHS->getRawElements();
1274 : MIType(
N->getMacinfoType()), Line(
N->getLine()),
Name(
N->getRawName()),
1275 Value(
N->getRawValue()) {}
1278 return MIType ==
RHS->getMacinfoType() && Line ==
RHS->getLine() &&
1295 : MIType(MIType), Line(Line), File(File), Elements(Elements) {}
1297 : MIType(
N->getMacinfoType()), Line(
N->getLine()), File(
N->getRawFile()),
1298 Elements(
N->getRawElements()) {}
1301 return MIType ==
RHS->getMacinfoType() && Line ==
RHS->getLine() &&
1302 File ==
RHS->getRawFile() && Elements ==
RHS->getRawElements();
1339 return KeyTy(
N).getHashValue();
1357#define HANDLE_MDNODE_LEAF(CLASS) using CLASS##Info = MDNodeInfo<CLASS>;
1358#include "llvm/IR/Metadata.def"
1406 template <
class PredTy>
void remove_if(PredTy shouldRemove) {
1474#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \
1475 DenseSet<CLASS *, CLASS##Info> CLASS##s;
1476#include "llvm/IR/Metadata.def"
1479 std::optional<DenseMap<const MDString *, DICompositeType *>>
DITypeMap;
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< 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)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
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.
The address of a basic block.
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)
Type array for a subprogram.
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
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< std::pair< const Function *, const BasicBlock * >, BlockAddress * > BlockAddresses
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 dropTriviallyDeadConstantArrays()
Destroy the ConstantArrays if they are not used.
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.
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
DenseMap< const Value *, MDAttachments > ValueMetadata
Collection of metadata used in this context.
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.
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
FoldingSet< AttributeSetNode > AttrsSetNodes
FoldingSet< AttributeListImpl > AttrsLists
DenseMap< TargetExtType *, std::unique_ptr< ConstantTargetNone > > CTNConstants
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
DenseMap< std::pair< Type *, unsigned >, PointerType * > LegacyPointerTypes
StringMap< SyncScope::ID > SSC
A set of interned synchronization scopes.
DenseMap< unsigned, PointerType * > PointerTypes
DenseMap< APFloat, std::unique_ptr< ConstantFP >, DenseMapAPFloatKeyInfo > FPConstants
LLVMContext::YieldCallbackTy YieldCallback
DenseMap< unsigned, IntegerType * > IntegerTypes
StringMap< StructType * > NamedStructTypes
PointerType * AS0PointerType
ValueHandlesTy ValueHandles
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...
DenseMap< APInt, std::unique_ptr< ConstantInt >, DenseMapAPIntKeyInfo > IntConstants
DenseMap< const GlobalValue *, DSOLocalEquivalent * > DSOLocalEquivalents
unsigned NamedStructTypesUniqueID
FunctionTypeSet FunctionTypes
std::optional< DenseMap< const MDString *, DICompositeType * > > DITypeMap
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.
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.
unsigned getTag(StringRef TagString)
@ 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)
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.
static 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)
A single checksum, represented by a Kind and a Value (a string).
static APFloat getEmptyKey()
static unsigned getHashValue(const APFloat &Key)
static APFloat getTombstoneKey()
static bool isEqual(const APFloat &LHS, const APFloat &RHS)
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()
ArrayRef< ValueAsMetadata * > Args
MDNodeKeyImpl(ArrayRef< ValueAsMetadata * > Args)
MDNodeKeyImpl(const DIArgList *N)
unsigned getHashValue() const
bool isKeyOf(const DIArgList *RHS) const
bool isKeyOf(const DIBasicType *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DIBasicType *N)
MDNodeKeyImpl(unsigned Tag, MDString *Name, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding, unsigned Flags)
unsigned getHashValue() const
bool isKeyOf(const DICommonBlock *RHS) const
MDNodeKeyImpl(const DICommonBlock *N)
MDNodeKeyImpl(Metadata *Scope, Metadata *Decl, MDString *Name, Metadata *File, unsigned LineNo)
unsigned getHashValue() const
Metadata * TemplateParams
MDNodeKeyImpl(const DICompositeType *N)
bool isKeyOf(const DICompositeType *RHS) const
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t 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)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, std::optional< unsigned > DWARFAddressSpace, unsigned Flags, Metadata *ExtraData, Metadata *Annotations)
MDNodeKeyImpl(const DIDerivedType *N)
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)
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
MDNodeKeyImpl(const DILabel *N)
MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File, unsigned Line)
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)
MDNodeKeyImpl(unsigned Line, unsigned Column, Metadata *Scope, Metadata *InlinedAt, bool ImplicitCode)
unsigned getHashValue() const
MDNodeKeyImpl(const DILocation *L)
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(const DIStringType *N)
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *StringLength, Metadata *StringLengthExp, Metadata *StringLocationExp, uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding)
bool isKeyOf(const DIStringType *RHS) const
Metadata * StringLocationExp
Metadata * StringLengthExp
unsigned getHashValue() const
Metadata * ContainingType
Metadata * TemplateParams
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 isDefinition() const
unsigned getHashValue() const
MDString * TargetFuncName
bool isKeyOf(const DISubprogram *RHS) const
MDNodeKeyImpl(const DISubprogram *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()