14#ifndef LLVM_LIB_IR_LLVMCONTEXTIMPL_H
15#define LLVM_LIB_IR_LLVMCONTEXTIMPL_H
81 return LHS.bitwiseIsEqual(
RHS);
211 template <
class NodeTy>
215 template <
class NodeTy>
220 assert((RawOps.empty() || Ops.empty()) &&
"Two sets of operands?");
306 uint64_t LineColumnAndImplicitCode =
420 return BoundsEqual(
CountNode,
RHS->getRawCountNode()) &&
423 BoundsEqual(
Stride,
RHS->getRawStride());
480 return Value.getBitWidth() ==
RHS->getValue().getBitWidth() &&
627template <>
struct MDNodeKeyImpl<DIDerivedType> {
637 std::optional<unsigned> DWARFAddressSpace;
638 std::optional<DIDerivedType::PtrAuthData> PtrAuthData;
643 MDNodeKeyImpl(
unsigned Tag, MDString *Name,
Metadata *File,
unsigned Line,
646 std::optional<unsigned> DWARFAddressSpace,
647 std::optional<DIDerivedType::PtrAuthData> PtrAuthData,
649 : Tag(Tag), Name(Name), File(File), Line(Line), Scope(Scope),
651 AlignInBits(AlignInBits), DWARFAddressSpace(DWARFAddressSpace),
653 Annotations(Annotations) {}
654 MDNodeKeyImpl(
const DIDerivedType *
N)
657 BaseType(
N->getRawBaseType()), SizeInBits(
N->getRawSizeInBits()),
658 OffsetInBits(
N->getRawOffsetInBits()), AlignInBits(
N->getAlignInBits()),
659 DWARFAddressSpace(
N->getDWARFAddressSpace()),
661 ExtraData(
N->getRawExtraData()), Annotations(
N->getRawAnnotations()) {}
663 bool isKeyOf(
const DIDerivedType *
RHS)
const {
667 SizeInBits ==
RHS->getRawSizeInBits() &&
668 AlignInBits ==
RHS->getAlignInBits() &&
669 OffsetInBits ==
RHS->getRawOffsetInBits() &&
670 DWARFAddressSpace ==
RHS->getDWARFAddressSpace() &&
671 PtrAuthData ==
RHS->getPtrAuthData() &&
Flags ==
RHS->getFlags() &&
672 ExtraData ==
RHS->getRawExtraData() &&
673 Annotations ==
RHS->getRawAnnotations();
676 unsigned getHashValue()
const {
680 if (
Tag == dwarf::DW_TAG_member && Name)
682 if (CT->getRawIdentifier())
721 Bias(
N->getRawBias()) {}
746 BoundsEqual(
Stride,
RHS->getRawStride()) &&
747 BoundsEqual(
Bias,
RHS->getRawBias());
789 if (
Tag != dwarf::DW_TAG_member || !Name)
793 if (!CT || !CT->getRawIdentifier())
797 return Tag ==
RHS->getTag() && Name ==
RHS->getRawName() &&
798 Scope ==
RHS->getRawScope();
917 std::optional<DIFile::ChecksumInfo<MDString *>>
Checksum;
941template <>
struct MDNodeKeyImpl<DISubprogram> {
950 unsigned VirtualIndex;
960 MDString *TargetFuncName;
961 bool UsesKeyInstructions;
965 unsigned ScopeLine,
Metadata *ContainingType,
966 unsigned VirtualIndex,
int ThisAdjustment,
unsigned Flags,
970 MDString *TargetFuncName,
bool UsesKeyInstructions)
972 Line(Line), ScopeLine(ScopeLine), Type(Type),
973 ContainingType(ContainingType), VirtualIndex(VirtualIndex),
974 ThisAdjustment(ThisAdjustment), Flags(Flags), SPFlags(SPFlags),
975 Unit(Unit), TemplateParams(TemplateParams), Declaration(Declaration),
976 RetainedNodes(RetainedNodes), ThrownTypes(ThrownTypes),
977 Annotations(Annotations), TargetFuncName(TargetFuncName),
978 UsesKeyInstructions(UsesKeyInstructions) {}
979 MDNodeKeyImpl(
const DISubprogram *
N)
982 Line(
N->getLine()), ScopeLine(
N->getScopeLine()),
Type(
N->getRawType()),
983 ContainingType(
N->getRawContainingType()),
984 VirtualIndex(
N->getVirtualIndex()),
986 SPFlags(
N->getSPFlags()),
Unit(
N->getRawUnit()),
987 TemplateParams(
N->getRawTemplateParams()),
988 Declaration(
N->getRawDeclaration()),
989 RetainedNodes(
N->getRawRetainedNodes()),
990 ThrownTypes(
N->getRawThrownTypes()),
991 Annotations(
N->getRawAnnotations()),
992 TargetFuncName(
N->getRawTargetFuncName()),
993 UsesKeyInstructions(
N->getKeyInstructionsEnabled()) {}
995 bool isKeyOf(
const DISubprogram *
RHS)
const {
999 Type ==
RHS->getRawType() && ScopeLine ==
RHS->getScopeLine() &&
1000 ContainingType ==
RHS->getRawContainingType() &&
1001 VirtualIndex ==
RHS->getVirtualIndex() &&
1002 ThisAdjustment ==
RHS->getThisAdjustment() &&
1003 Flags ==
RHS->getFlags() && SPFlags ==
RHS->getSPFlags() &&
1005 TemplateParams ==
RHS->getRawTemplateParams() &&
1006 Declaration ==
RHS->getRawDeclaration() &&
1007 RetainedNodes ==
RHS->getRawRetainedNodes() &&
1008 ThrownTypes ==
RHS->getRawThrownTypes() &&
1009 Annotations ==
RHS->getRawAnnotations() &&
1010 TargetFuncName ==
RHS->getRawTargetFuncName() &&
1011 UsesKeyInstructions ==
RHS->getKeyInstructionsEnabled();
1014 bool isDefinition()
const {
return SPFlags & DISubprogram::SPFlagDefinition; }
1016 unsigned getHashValue()
const {
1020 llvm::StringRef ScopeLinkageName;
1022 if (
auto *ID = CT->getRawIdentifier())
1023 ScopeLinkageName =
ID->getString();
1045 LHS.LinkageName,
LHS.TemplateParams,
RHS);
1050 LHS->getRawLinkageName(),
1051 LHS->getRawTemplateParams(),
RHS);
1065 if (!CT || !CT->getRawIdentifier())
1074 return IsDefinition ==
RHS->isDefinition() && Scope ==
RHS->getRawScope() &&
1076 TemplateParams ==
RHS->getRawTemplateParams();
1212 :
Name(
N->getRawName()),
Type(
N->getRawType()),
1289 RHS->getRawStaticDataMemberDeclaration() &&
1513 Value(
N->getRawValue()) {}
1588 return KeyTy(
N).getHashValue();
1602#define HANDLE_MDNODE_LEAF(CLASS) using CLASS##Info = MDNodeInfo<CLASS>;
1603#include "llvm/IR/Metadata.def"
1622 static_cast<ValueHandleBase *
>(TaggedPtr(
nullptr,
true).getOpaqueValue());
1635 TaggedPtr Updated = Old;
1735 return N->getHeader().MetadataPrintID;
1739 N->getHeader().MetadataPrintID = ID;
1742#define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \
1743 DenseSet<CLASS *, CLASS##Info> CLASS##s;
1744#include "llvm/IR/Metadata.def"
1747 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.
This file defines various helper methods and classes used by LLVMContextImpl for creating and managin...
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
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 constexpr Value * getValue(Ty &ValueOrUse)
const AbstractManglingParser< Derived, Alloc >::OperatorInfo AbstractManglingParser< Derived, Alloc >::Ops[]
static StringRef getName(Value *V)
BaseType
A given derived pointer can have multiple base pointers through phi/selects.
This file defines the SmallPtrSet class.
This file defines the SmallVector class.
static uint32_t getFlags(const Symbol *Sym)
Class for arbitrary precision integers.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Class to represent array types.
static const unsigned NumEnumAttrKinds
LLVM Basic Block Representation.
Class to represent byte types.
Class for constant bytes.
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).
A sequence of DILayerLoc entries.
A single intermediate-IR layer location.
Represents a module in the programming language, for example, a Clang module, or a Fortran module.
A property of a class or structure.
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.
A set of classes that contain the value of the attribute object.
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
UniquingSet< TypeAttributeImpl > TypeAttrs
DenseMap< Metadata *, MetadataAsValue * > MetadataAsValues
DenseMap< unsigned, ByteType * > ByteTypes
ConstantUniqueMap< ConstantArray > ArrayConstantsTy
std::string DefaultTargetCPU
EnumAttributeImpl * EnumAttrs[Attribute::NumEnumAttrKinds]
SmallVector< MDAttachment, 0 > Metadatas
Collection of metadata attachments in this context.
DenseMap< Type *, std::unique_ptr< ConstantPointerNull > > CPNConstants
DenseMap< std::pair< ElementCount, APInt >, std::unique_ptr< ConstantByte > > ByteSplatConstants
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< Type *, std::unique_ptr< ConstantAggregateZero > > CAZConstants
StringMap< MDString, BumpPtrAllocator > MDStringCache
DenseSet< FunctionType *, FunctionTypeKeyInfo > FunctionTypeSet
ConstantInt * TheFalseVal
TargetExtTypeSet TargetExtTypes
void setMetadataPrintID(MDNode *N, uint32_t ID)
DenseMap< Type *, std::unique_ptr< PoisonValue > > PVConstants
DenseMap< APInt, std::unique_ptr< ConstantInt > > IntConstants
ConstantByte * TheFalseByteVal
std::vector< MDNode * > DistinctMDNodes
UniquingSet< IntAttributeImpl > IntAttrs
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
ConstantByte * TheTrueByteVal
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< 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.
ConstantUniqueMap< ConstantStruct > StructConstantsTy
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
UniquingSet< AttributeSetNode > AttrsSetNodes
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
DenseSet< TargetExtType *, TargetExtTypeKeyInfo > TargetExtTypeSet
void getAllMetadataNodes(SmallVectorImpl< MDNode * > &Nodes) const
cl::LibraryOptionsContext LibraryOptions
void deleteTrailingDbgRecords(BasicBlock *B)
ConstantUniqueMap< ConstantPtrAuth > ConstantPtrAuths
DenseMap< TargetExtType *, std::unique_ptr< ConstantTargetNone > > CTNConstants
SpecificBumpPtrAllocator< ConstantRangeAttributeImpl > ConstantRangeAttributeAlloc
uint32_t NextMetadataPrintID
std::optional< uint64_t > DiagnosticsHotnessThreshold
The minimum hotness value a diagnostic needs in order to be included in optimization diagnostics.
ConstantUniqueMap< ConstantVector > VectorConstantsTy
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)
DenseSet< StructType *, AnonStructTypeKeyInfo > StructTypeSet
DenseMap< std::pair< ElementCount, APInt >, std::unique_ptr< ConstantInt > > IntSplatConstants
unsigned MetadataRecycleHead
Index of first free Metadatas entry, linked list via MDAttachment::Next.
LLVMContext::YieldCallbackTy YieldCallback
DenseMap< unsigned, std::unique_ptr< ConstantByte > > ByteOneConstants
DenseMap< unsigned, IntegerType * > IntegerTypes
uint32_t getMetadataPrintID(const MDNode *N) const
StringMap< StructType * > NamedStructTypes
UniquingSet< StringAttributeImpl > StringAttrs
DenseMap< Value *, ValueHandleHead > ValueHandlesTy
ValueHandles - This map keeps track of all of the value handles that are watching a Value*.
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...
DenseSet< MDNode * > TemporaryMDNodes
uint64_t NextAtomGroup
The next available source atom group number.
LLVMContextImpl(LLVMContext &C)
DenseMap< const GlobalValue *, DSOLocalEquivalent * > DSOLocalEquivalents
UniquingSet< AttributeListImpl > AttrsLists
DenseMap< unsigned, std::unique_ptr< ConstantByte > > ByteZeroConstants
DenseMap< APInt, std::unique_ptr< ConstantByte > > ByteConstants
uint32_t allocateMetadataPrintID()
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
unsigned MetadataRecycleSize
Number of currently unused metadata entries.
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.
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...
PointerIntPair - This class implements a pair of a pointer and small integer.
void setPointer(PointerTy PtrVal) &
void * getOpaqueValue() const
static PointerIntPair getFromOpaqueValue(void *V)
PointerTy getPointer() const
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",...
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.
A uniquing set that compares nodes against a typed key rather than a serialized FoldingSetNodeID.
This is the common base class of value handles.
ValueHandleBase ** getAddress()
ValueHandleHead & operator=(const ValueHandleHead &)=delete
static TaggedPtr exchange(ValueHandleBase **Slot, ValueHandleBase *NewPtr)
ValueHandleHead()=default
ValueHandleBase * get() const
ValueHandleHead(const ValueHandleHead &)=delete
ValueHandleHead & operator=(ValueHandleHead &&)=delete
Base class of all SIMD vector types.
Scope
Defines the scope in which this symbol should be visible: Default – Visible in the public interface o...
This is an optimization pass for GlobalISel generic memory operations.
TypedTrackingMDRef< MDNode > TrackingMDNodeRef
hash_code hash_value(const FixedPointSemantics &Val)
decltype(auto) dyn_cast(const From &Val)
dyn_cast<X> - Return the argument parameter cast to the specified type.
bool isa_and_nonnull(const Y &Val)
auto dyn_cast_or_null(const Y &Val)
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
ArrayRef(const T &OneElt) -> ArrayRef< T >
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
decltype(auto) cast(const From &Val)
cast<X> - Return the argument parameter cast to the specified type.
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
hash_code hash_combine_range(InputIteratorT first, InputIteratorT last)
Compute a hash_code for a sequence of values.
FoldingSetImpl< T, Trait > FoldingSet
This template class is used to instantiate a specialized implementation of the folding set to the nod...
Implement std::hash so that hash_code can be used in STL containers.
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 bool isEqual(const StructType *LHS, const StructType *RHS)
static unsigned getHashValue(const StructType *ST)
static unsigned getHashValue(const KeyTy &Key)
static bool isEqual(const KeyTy &LHS, const StructType *RHS)
DenseMapInfo for DIArgList.
static unsigned getHashValue(const KeyTy &Key)
static unsigned getHashValue(const DIArgList *N)
static bool isEqual(const DIArgList *LHS, const DIArgList *RHS)
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 unsigned getHashValue(const APFloat &Key)
An information struct used to provide DenseMap with the various necessary components for a given valu...
This is the base class for diagnostic handling in LLVM.
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 bool isEqual(const KeyTy &LHS, const FunctionType *RHS)
static unsigned getHashValue(const KeyTy &Key)
static bool isEqual(const FunctionType *LHS, const FunctionType *RHS)
Single metadata attachment, forms linked list ended by index 0.
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)
MDNodeSubsetEqualImpl< NodeTy > SubsetEqualTy
MDNodeKeyImpl< NodeTy > KeyTy
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *File, unsigned LineNo, Metadata *Scope, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Encoding, uint32_t NumExtraInhabitants, uint32_t DataSizeInBits, unsigned Flags)
bool isKeyOf(const DIBasicType *RHS) const
unsigned getHashValue() const
MDNodeKeyImpl(const DIBasicType *N)
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
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 *File, unsigned LineNo, Metadata *Scope, 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)
static unsigned calculateHash(DILayerLocList *N)
MDNodeKeyImpl(ArrayRef< Metadata * > Ops)
unsigned getHashValue() const
MDNodeKeyImpl(const DILayerLocList *N)
bool isKeyOf(const DILayerLocList *RHS) const
bool isKeyOf(const DILayerLoc *RHS) const
MDNodeKeyImpl(const DILayerLoc *N)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *Kind, Metadata *File, unsigned Line, uint16_t Column)
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(unsigned Line, uint16_t Column, Metadata *Scope, Metadata *InlinedAt, bool ImplicitCode, uint64_t AtomGroup, uint8_t AtomRank, Metadata *IRLayers)
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)
unsigned getHashValue() const
MDNodeKeyImpl(const DIProperty *N)
Metadata * BackingStorage
MDNodeKeyImpl(MDString *Name, Metadata *File, unsigned Line, Metadata *Type, Metadata *BackingStorage)
bool isKeyOf(const DIProperty *RHS) const
MDNodeKeyImpl(const DIStringType *N)
bool isKeyOf(const DIStringType *RHS) const
Metadata * StringLocationExp
MDNodeKeyImpl(unsigned Tag, MDString *Name, Metadata *StringLength, Metadata *StringLengthExp, Metadata *StringLocationExp, Metadata *SizeInBits, uint32_t AlignInBits, unsigned Encoding, Metadata *CharType)
Metadata * StringLengthExp
unsigned getHashValue() const
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)
MDNodeKeyImpl< DIDerivedType > KeyTy
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.
MDNodeKeyImpl< DISubprogram > KeyTy
Configuration point for MDNodeInfo::isEqual().
static bool isSubsetEqual(const KeyTy &LHS, const NodeTy *RHS)
MDNodeKeyImpl< NodeTy > KeyTy
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)