15 #ifndef LLVM_LIB_IR_LLVMCONTEXTIMPL_H
16 #define LLVM_LIB_IR_LLVMCONTEXTIMPL_H
41 class DiagnosticInfoOptimizationRemark;
42 class DiagnosticInfoOptimizationRemarkMissed;
43 class DiagnosticInfoOptimizationRemarkAnalysis;
115 return LHS ==
KeyTy(RHS);
163 return LHS ==
KeyTy(RHS);
181 template <
class NodeTy>
183 : Ops(N->op_begin() + Offset, N->op_end()), Hash(N->
getHash()) {}
185 template <
class NodeTy>
186 bool compareOps(
const NodeTy *RHS,
unsigned Offset = 0)
const {
187 if (
getHash() != RHS->getHash())
190 assert((RawOps.empty() || Ops.empty()) &&
"Two sets of operands?");
191 return RawOps.empty() ?
compareOps(Ops, RHS, Offset)
240 : Line(Line), Column(Column), Scope(Scope), InlinedAt(InlinedAt) {}
243 : Line(L->getLine()), Column(L->getColumn()), Scope(L->getRawScope()),
244 InlinedAt(L->getRawInlinedAt()) {}
247 return Line == RHS->getLine() && Column == RHS->getColumn() &&
281 : Count(Count), LowerBound(LowerBound) {}
283 : Count(N->getCount()), LowerBound(N->getLowerBound()) {}
313 uint64_t AlignInBits,
unsigned Encoding)
314 : Tag(Tag), Name(Name), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
315 Encoding(Encoding) {}
318 AlignInBits(N->getAlignInBits()), Encoding(N->getEncoding()) {}
346 uint64_t AlignInBits, uint64_t OffsetInBits,
unsigned Flags,
348 : Tag(Tag), Name(Name), File(File), Line(Line), Scope(Scope),
349 BaseType(BaseType), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
350 OffsetInBits(OffsetInBits), Flags(Flags), ExtraData(ExtraData) {}
353 Line(N->getLine()), Scope(N->getRawScope()),
354 BaseType(N->getRawBaseType()), SizeInBits(N->getSizeInBits()),
355 AlignInBits(N->getAlignInBits()), OffsetInBits(N->getOffsetInBits()),
356 Flags(N->getFlags()), ExtraData(N->getRawExtraData()) {}
365 ExtraData == RHS->getRawExtraData();
369 AlignInBits, OffsetInBits,
Flags, ExtraData);
392 uint64_t AlignInBits, uint64_t OffsetInBits,
unsigned Flags,
393 Metadata *Elements,
unsigned RuntimeLang,
396 : Tag(Tag), Name(Name), File(File), Line(Line), Scope(Scope),
397 BaseType(BaseType), SizeInBits(SizeInBits), AlignInBits(AlignInBits),
398 OffsetInBits(OffsetInBits), Flags(Flags), Elements(Elements),
399 RuntimeLang(RuntimeLang), VTableHolder(VTableHolder),
400 TemplateParams(TemplateParams), Identifier(Identifier) {}
403 Line(N->getLine()), Scope(N->getRawScope()),
404 BaseType(N->getRawBaseType()), SizeInBits(N->getSizeInBits()),
405 AlignInBits(N->getAlignInBits()), OffsetInBits(N->getOffsetInBits()),
406 Flags(N->getFlags()), Elements(N->getRawElements()),
407 RuntimeLang(N->getRuntimeLang()), VTableHolder(N->getRawVTableHolder()),
408 TemplateParams(N->getRawTemplateParams()),
409 Identifier(N->getIdentifier()) {}
426 AlignInBits, OffsetInBits,
Flags, Elements, RuntimeLang,
427 VTableHolder, TemplateParams, Identifier);
436 : Flags(Flags), TypeArray(TypeArray) {}
438 :
Flags(N->getFlags()), TypeArray(N->getRawTypeArray()) {}
451 : Filename(Filename), Directory(Directory) {}
453 : Filename(N->getFilename()), Directory(N->getDirectory()) {}
479 StringRef SplitDebugFilename,
unsigned EmissionKind,
482 Metadata *ImportedEntities, uint64_t DWOId)
483 : SourceLanguage(SourceLanguage), File(File), Producer(Producer),
484 IsOptimized(IsOptimized), Flags(Flags), RuntimeVersion(RuntimeVersion),
485 SplitDebugFilename(SplitDebugFilename), EmissionKind(EmissionKind),
486 EnumTypes(EnumTypes), RetainedTypes(RetainedTypes),
487 Subprograms(Subprograms), GlobalVariables(GlobalVariables),
488 ImportedEntities(ImportedEntities), DWOId(DWOId) {}
491 Producer(N->getProducer()), IsOptimized(N->isOptimized()),
492 Flags(N->getFlags()), RuntimeVersion(N->getRuntimeVersion()),
493 SplitDebugFilename(N->getSplitDebugFilename()),
494 EmissionKind(N->getEmissionKind()), EnumTypes(N->getRawEnumTypes()),
495 RetainedTypes(N->getRawRetainedTypes()),
496 Subprograms(N->getRawSubprograms()),
497 GlobalVariables(N->getRawGlobalVariables()),
498 ImportedEntities(N->getRawImportedEntities()), DWOId(N->getDWOId()) {}
516 RuntimeVersion, SplitDebugFilename, EmissionKind,
517 EnumTypes, RetainedTypes, Subprograms, GlobalVariables,
518 ImportedEntities, DWOId);
544 bool IsLocalToUnit,
bool IsDefinition,
unsigned ScopeLine,
545 Metadata *ContainingType,
unsigned Virtuality,
546 unsigned VirtualIndex,
unsigned Flags,
bool IsOptimized,
549 : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
550 Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
551 IsDefinition(IsDefinition), ScopeLine(ScopeLine),
552 ContainingType(ContainingType), Virtuality(Virtuality),
553 VirtualIndex(VirtualIndex), Flags(Flags), IsOptimized(IsOptimized),
554 Function(Function), TemplateParams(TemplateParams),
555 Declaration(Declaration), Variables(Variables) {}
559 Line(N->getLine()),
Type(N->getRawType()),
560 IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()),
561 ScopeLine(N->getScopeLine()), ContainingType(N->getRawContainingType()),
562 Virtuality(N->
getVirtuality()), VirtualIndex(N->getVirtualIndex()),
563 Flags(N->getFlags()), IsOptimized(N->isOptimized()),
565 TemplateParams(N->getRawTemplateParams()),
566 Declaration(N->getRawDeclaration()), Variables(N->getRawVariables()) {}
569 return Scope == RHS->getRawScope() &&
Name == RHS->
getName() &&
571 Line == RHS->getLine() &&
Type == RHS->getRawType() &&
572 IsLocalToUnit == RHS->isLocalToUnit() &&
573 IsDefinition == RHS->isDefinition() &&
574 ScopeLine == RHS->getScopeLine() &&
575 ContainingType == RHS->getRawContainingType() &&
576 Virtuality == RHS->getVirtuality() &&
577 VirtualIndex == RHS->getVirtualIndex() &&
Flags == RHS->getFlags() &&
578 IsOptimized == RHS->isOptimized() &&
579 Function == RHS->getRawFunction() &&
580 TemplateParams == RHS->getRawTemplateParams() &&
581 Declaration == RHS->getRawDeclaration() &&
582 Variables == RHS->getRawVariables();
586 IsLocalToUnit, IsDefinition, ScopeLine, ContainingType,
588 TemplateParams, Declaration, Variables);
599 : Scope(Scope), File(File), Line(Line), Column(Column) {}
601 : Scope(N->getRawScope()),
File(N->getRawFile()), Line(N->getLine()),
602 Column(N->getColumn()) {}
619 : Scope(Scope), File(File), Discriminator(Discriminator) {}
621 : Scope(N->getRawScope()),
File(N->getRawFile()),
622 Discriminator(N->getDiscriminator()) {}
640 : Scope(Scope), File(File), Name(Name), Line(Line) {}
643 Line(N->getLine()) {}
664 : Scope(Scope), Name(Name), ConfigurationMacros(ConfigurationMacros),
665 IncludePath(IncludePath), ISysRoot(ISysRoot) {}
668 ConfigurationMacros(N->getConfigurationMacros()),
669 IncludePath(N->getIncludePath()), ISysRoot(N->getISysRoot()) {}
679 ConfigurationMacros, IncludePath, ISysRoot);
704 : Tag(Tag), Name(Name), Type(Type), Value(Value) {}
707 Value(N->getValue()) {}
730 bool IsLocalToUnit,
bool IsDefinition,
Metadata *Variable,
731 Metadata *StaticDataMemberDeclaration)
732 : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
733 Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
734 IsDefinition(IsDefinition), Variable(Variable),
735 StaticDataMemberDeclaration(StaticDataMemberDeclaration) {}
739 Line(N->getLine()),
Type(N->getRawType()),
740 IsLocalToUnit(N->isLocalToUnit()), IsDefinition(N->isDefinition()),
741 Variable(N->getRawVariable()),
742 StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration()) {}
751 StaticDataMemberDeclaration ==
756 IsLocalToUnit, IsDefinition, Variable,
757 StaticDataMemberDeclaration);
773 : Tag(Tag), Scope(Scope), Name(Name), File(File), Line(Line), Type(Type),
774 Arg(Arg), Flags(Flags) {}
777 File(N->getRawFile()), Line(N->getLine()),
Type(N->getRawType()),
778 Arg(N->getArg()),
Flags(N->getFlags()) {}
817 : Name(Name), File(File), Line(Line), GetterName(GetterName),
818 SetterName(SetterName), Attributes(Attributes), Type(Type) {}
821 GetterName(N->getGetterName()), SetterName(N->getSetterName()),
845 : Tag(Tag), Scope(Scope), Entity(Entity), Line(Line), Name(Name) {}
847 :
Tag(N->
getTag()), Scope(N->getRawScope()), Entity(N->getRawEntity()),
861 template <
class NodeTy>
struct MDNodeInfo {
871 return KeyTy(N).getHashValue();
876 return LHS.isKeyOf(RHS);
878 static bool isEqual(
const NodeTy *LHS,
const NodeTy *RHS) {
883 #define HANDLE_MDNODE_LEAF(CLASS) typedef MDNodeInfo<CLASS> CLASS##Info;
884 #include "llvm/IR/Metadata.def"
891 bool empty()
const {
return Attachments.empty(); }
892 size_t size()
const {
return Attachments.size(); }
917 template <
class PredTy>
void remove_if(PredTy shouldRemove) {
919 std::remove_if(Attachments.begin(), Attachments.end(), shouldRemove),
956 #define HANDLE_MDNODE_LEAF(CLASS) DenseSet<CLASS *, CLASS##Info> CLASS##s;
957 #include "llvm/IR/Metadata.def"
static unsigned calculateHash(MDNode *N, unsigned Offset=0)
Metadata * getRawScope() const
bool operator!=(const KeyTy &that) const
StringRef getName() const
static APInt getTombstoneKey()
MDNodeKeyImpl(StringRef Name, Metadata *Type)
static bool isEqual(const KeyTy &LHS, const FunctionType *RHS)
static APFloat getTombstoneKey()
bool isKeyOf(const GenericDINode *RHS) const
DenseMap< unsigned, IntegerType * > IntegerTypes
DenseMap< const Function *, MDAttachmentMap > FunctionMetadata
Collection of per-function metadata used in this context.
static bool isEqual(const NodeTy *LHS, const NodeTy *RHS)
bool isKeyOf(const DILexicalBlock *RHS) const
StringRef getName() const
StringRef getIdentifier() const
unsigned getHashValue() const
static unsigned getHashValue(const KeyTy &Key)
FoldingSet< AttributeImpl > AttrsSet
KeyTy(const Type *R, const ArrayRef< Type * > &P, bool V)
StringRef getName() const
StringRef getDirectory() const
static unsigned getHashValue(const KeyTy &Key)
unsigned getHashValue() const
bool isKeyOf(const MDTuple *RHS) const
Metadata * getRawBaseType() const
Structure for hashing arbitrary MDNode operands.
MDNodeOpsKey(ArrayRef< Metadata * > Ops)
MDNodeKeyImpl(unsigned Tag, StringRef Name, uint64_t SizeInBits, uint64_t AlignInBits, unsigned Encoding)
DenseMap< std::pair< const Function *, const BasicBlock * >, BlockAddress * > BlockAddresses
KeyTy(const ArrayRef< Type * > &E, bool P)
StringRef getFlags() const
PrefixDataMapTy PrefixDataMap
bool compareOps(const NodeTy *RHS, unsigned Offset=0) const
Metadata * getRawSubprograms() const
void(* DiagnosticHandlerTy)(const DiagnosticInfo &DI, void *Context)
Defines the type of a diagnostic handler.
static StructType * getTombstoneKey()
unsigned getHashValue() const
unsigned getNumOperands() const
Return number of MDNode operands.
DenseMap< Value *, ValueAsMetadata * > ValuesAsMetadata
uint64_t getAlignInBits() const
unsigned getHashValue() const
MDNodeKeyImpl(const GenericDINode *N)
Metadata * getRawFile() const
Return the raw underlying file.
bool operator==(const KeyTy &that) const
static bool isEqual(const KeyTy &LHS, const StructType *RHS)
Metadata * getRawType() const
static unsigned getHashValue(const StructType *ST)
MDNodeKeyImpl(unsigned Tag, Metadata *Scope, StringRef Name, Metadata *File, unsigned Line, Metadata *Type, unsigned Arg, unsigned Flags)
bool RespectDiagnosticFilters
ConstantInt * TheFalseVal
unsigned getEmissionKind() const
unsigned getHashValue() const
op_iterator op_begin() const
MDNodeKeyImpl(const DICompileUnit *N)
StringRef getName() const
unsigned getHashValue() const
MDNodeOpsKey(const NodeTy *N, unsigned Offset=0)
bool isKeyOf(const DINamespace *RHS) const
MDNodeKeyImpl(unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *ExtraData)
DenseMap< std::pair< Type *, unsigned >, PointerType * > ASPointerTypes
MDNodeKeyImpl(const DISubrange *N)
LLVMContext::InlineAsmDiagHandlerTy InlineAsmDiagHandler
MDNodeKeyImpl(const DITemplateTypeParameter *N)
unsigned getVirtuality(StringRef VirtualityString)
Metadata * getRawScope() const
static const fltSemantics Bogus
A Pseudo fltsemantic used to construct APFloats that cannot conflict with anything real...
void dropTriviallyDeadConstantArrays()
Destroy the ConstantArrays if they are not used.
MDNodeKeyImpl(ArrayRef< uint64_t > Elements)
MDNodeKeyImpl(Metadata *Scope, Metadata *File, unsigned Line, unsigned Column)
static unsigned calculateHash(GenericDINode *N)
bool bitwiseIsEqual(const APFloat &) const
Bitwise comparison for equality (QNaNs compare equal, 0!=-0).
unsigned getColumn() const
unsigned getHashValue() const
unsigned getHashValue() const
MDNodeKeyImpl(const DIEnumerator *N)
bool isKeyOf(const DIBasicType *RHS) const
Metadata * getRawType() const
MDNodeKeyImpl(int64_t Flags, Metadata *TypeArray)
ConstantUniqueMap< ConstantVector > VectorConstantsTy
static NodeTy * getEmptyKey()
void set(unsigned ID, MDNode &MD)
Set an attachment to a particular node.
BlockAddress - The address of a basic block.
DenseMap< APInt, ConstantInt *, DenseMapAPIntKeyInfo > IntMapTy
DenseMap< const Instruction *, MDAttachmentMap > InstructionMetadata
Collection of per-instruction metadata used in this context.
MDNodeKeyImpl(const DIGlobalVariable *N)
StringRef getName() const
static unsigned getHashValue(const APFloat &Key)
static bool isEqual(const APInt &LHS, const APInt &RHS)
static APInt getEmptyKey()
unsigned getHashValue() const
StructType - Class to represent struct types.
KeyTy(const FunctionType *FT)
FoldingSet< AttributeSetImpl > AttrsLists
uint64_t VAL
Used to store the <= 64 bits integer value.
MDNodeKeyImpl(int64_t Value, StringRef Name)
StringRef ConfigurationMacros
MDNodeKeyImpl(const DIBasicType *N)
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
MDNodeKeyImpl(const DIFile *N)
Metadata * getRawRetainedTypes() const
StringRef getName() const
MDNodeKeyImpl(Metadata *Scope, StringRef Name, StringRef ConfigurationMacros, StringRef IncludePath, StringRef ISysRoot)
ConstantUniqueMap< ConstantArray > ArrayConstantsTy
DenseMap< std::pair< Type *, uint64_t >, ArrayType * > ArrayTypes
static StringRef getName(Value *V)
unsigned getHashValue() const
DenseMap< const Value *, ValueName * > ValueNames
StringRef getName() const
BumpPtrAllocator TypeAllocator
TypeAllocator - All dynamically allocated types are allocated from this.
unsigned getHashValue() const
MDNodeKeyImpl(const MDTuple *N)
This file implements a class to represent arbitrary precision integral constant values and operations...
static unsigned getHashValue(const FunctionType *FT)
static StructType * getEmptyKey()
ConstantUniqueMap< InlineAsm > InlineAsms
Metadata * getRawFile() const
MDNodeKeyImpl(const DISubprogram *N)
Metadata * getRawStaticDataMemberDeclaration() const
PrologueDataMapTy PrologueDataMap
FunctionType - Class to represent function types.
int getOrAddScopeInlinedAtIdxEntry(MDNode *Scope, MDNode *IA, int ExistingIdx)
MDNodeKeyImpl(unsigned Tag, Metadata *Scope, Metadata *Entity, unsigned Line, StringRef Name)
unsigned NamedStructTypesUniqueID
bool isKeyOf(const DIObjCProperty *RHS) const
ArrayRef< Type * > ETypes
LLVMContextImpl(LLVMContext &C)
unsigned getHashValue() const
ArrayType - Class to represent array types.
MDNodeKeyImpl(StringRef Filename, StringRef Directory)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
hash_code hash_value(const APFloat &Arg)
See friend declarations above.
ArrayConstantsTy ArrayConstants
DenseMap< PointerType *, ConstantPointerNull * > CPNConstants
Metadata * getRawVTableHolder() const
StringRef getConfigurationMacros() const
Metadata * getRawEnumTypes() const
MDNodeKeyImpl(Metadata *Scope, StringRef Name, StringRef LinkageName, Metadata *File, unsigned Line, Metadata *Type, bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine, Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex, unsigned Flags, bool IsOptimized, Metadata *Function, Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables)
DenseMap< std::pair< Type *, unsigned >, VectorType * > VectorTypes
size_t size() const
size - Get the array size.
Metadata * GlobalVariables
DenseSet< FunctionType *, FunctionTypeKeyInfo > FunctionTypeSet
PointerType - Class to represent pointers.
MDNodeKeyImpl(ArrayRef< Metadata * > Ops)
void getAll(SmallVectorImpl< std::pair< unsigned, MDNode * >> &Result) const
Copy out all the attachments.
LLVMContext::YieldCallbackTy YieldCallback
Metadata * getRawScope() const
unsigned getRuntimeVersion() const
DenseMap< Type *, ConstantAggregateZero * > CAZConstants
A self-contained host- and target-independent arbitrary-precision floating-point software implementat...
KeyTy(const StructType *ST)
StringRef getIncludePath() const
Metadata * getRawElements() const
StringMap< unsigned > CustomMDKindNames
CustomMDKindNames - Map to hold the metadata string to ID mapping.
Metadata * getRawFile() const
MDNodeKeyImpl< NodeTy > KeyTy
unsigned getHashValue() const
StringRef getName() const
The instances of the Type class are immutable: once they are created, they are never changed...
This is an important class for using LLVM in a threaded context.
Allocate memory in an ever growing pool, as if by bump-pointer.
unsigned getHashValue() const
ConstantUniqueMap< ConstantStruct > StructConstantsTy
bool isKeyOf(const DIExpression *RHS) const
Metadata * getRawType() const
unsigned getHashValue() const
This file contains the declarations for the subclasses of Constant, which represent the different fla...
bool isLocalToUnit() const
bool isKeyOf(const DILocalVariable *RHS) const
MDNodeKeyImpl(const DIExpression *N)
static unsigned calculateHash(MDTuple *N)
static bool isEqual(const FunctionType *LHS, const FunctionType *RHS)
unsigned getSourceLanguage() const
MDNodeKeyImpl(const DIObjCProperty *N)
StringRef getFilename() const
Metadata * getRawTemplateParams() const
MDNodeKeyImpl(const DISubroutineType *N)
This file declares a class to represent arbitrary precision floating point values and provide a varie...
MDNodeKeyImpl(unsigned Tag, StringRef Header, ArrayRef< Metadata * > DwarfOps)
unsigned getHashValue() const
MDNodeKeyImpl(Metadata *Scope, Metadata *File, StringRef Name, unsigned Line)
bool operator!=(const KeyTy &that) const
unsigned getBitWidth() const
Return the number of bits in the APInt.
This file defines various helper methods and classes used by LLVMContextImpl for creating and managin...
ValueHandlesTy ValueHandles
ArrayRef< uint64_t > Elements
MDNodeKeyImpl(const DILexicalBlockFile *N)
MDNodeKeyImpl(const DICompositeType *N)
Metadata * getValue() const
unsigned getDWOId() const
unsigned getEncoding() const
Class to represent integer types.
uint64_t getOffsetInBits() const
unsigned getHashValue() const
static FunctionType * getEmptyKey()
MDNodeKeyImpl(const DIDerivedType *N)
unsigned getAttributes() const
StringRef getGetterName() const
bool isKeyOf(const DICompileUnit *RHS) const
static unsigned getHashValue(const NodeTy *N)
bool isKeyOf(const DIImportedEntity *RHS) const
DenseSet< StructType *, AnonStructTypeKeyInfo > StructTypeSet
static bool isEqual(const APFloat &LHS, const APFloat &RHS)
SmallPtrSet< MDNode *, 1 > DistinctMDNodes
DenseMap< const Function *, ReturnInst * > PrefixDataMapTy
Mapping from a function to its prefix data, which is stored as the operand of an unparented ReturnIns...
FoldingSet - This template class is used to instantiate a specialized implementation of the folding s...
void * InlineAsmDiagContext
VectorConstantsTy VectorConstants
bool isKeyOf(const DIModule *RHS) const
An imported module (C++ using directive or similar).
unsigned getTag(StringRef TagString)
static bool isEqual(const KeyTy &LHS, const NodeTy *RHS)
bool isKeyOf(const DISubprogram *RHS) const
Metadata * getRawScope() const
DenseMap< Metadata *, MetadataAsValue * > MetadataAsValues
ArrayRef< uint64_t > getElements() const
StringRef getISysRoot() const
unsigned getHashValue() const
This is the shared class of boolean and integer constants.
static NodeTy * getTombstoneKey()
Metadata * getRawInlinedAt() const
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small...
unsigned getHashValue() const
MDNode * lookup(unsigned ID) const
Get a particular attachment (if any).
unsigned getHashValue() const
FunctionTypeSet FunctionTypes
int getOrAddScopeRecordIdxEntry(MDNode *N, int ExistingIdx)
Metadata * TemplateParams
bool isKeyOf(const DILocation *RHS) const
Metadata * getRawEntity() const
SmallPtrSet< Module *, 4 > OwnedModules
OwnedModules - The set of modules instantiated in this context, and which will be automatically delet...
MDNodeKeyImpl(const DITemplateValueParameter *N)
void(* InlineAsmDiagHandlerTy)(const SMDiagnostic &, void *Context, unsigned LocCookie)
bool isKeyOf(const DITemplateTypeParameter *RHS) const
StringMap - This is an unconventional map that is specialized for handling keys that are "strings"...
MDNodeKeyImpl(const DINamespace *N)
VectorType - Class to represent vector types.
static bool isEqual(const StructType *LHS, const StructType *RHS)
Class for arbitrary precision integers.
unsigned getDiscriminator() const
void erase(unsigned ID)
Remove an attachment.
hash_code hash_combine(const Ts &...args)
Combine values into a single hash_code.
A (clang) module that has been imported by the compile unit.
StringRef getHeader() const
Metadata * ContainingType
StringRef SplitDebugFilename
MDNodeKeyImpl(int64_t Count, int64_t LowerBound)
DenseMapInfo for MDNode subclasses.
hash_code hash_combine_range(InputIteratorT first, InputIteratorT last)
Compute a hash_code for a sequence of values.
static APFloat getEmptyKey()
Generic tagged DWARF-like metadata node.
MDNodeKeyImpl(const DILocalVariable *N)
bool isKeyOf(const DIDerivedType *RHS) const
DenseMap< Type *, UndefValue * > UVConstants
MDNodeKeyImpl(const DIModule *N)
bool isKeyOf(const DIEnumerator *RHS) const
MDNodeKeyImpl(const DIImportedEntity *N)
Metadata * getRawVariable() const
static FunctionType * getTombstoneKey()
MDNodeKeyImpl(const DILocation *L)
Type array for a subprogram.
Metadata * getRawImportedEntities() const
StructTypeSet AnonStructTypes
DenseMap< APFloat, ConstantFP *, DenseMapAPFloatKeyInfo > FPMapTy
Metadata * getRawScope() const
unsigned getRuntimeLang() const
DenseMap< Value *, ValueHandleBase * > ValueHandlesTy
ValueHandles - This map keeps track of all of the value handles that are watching a Value*...
Metadata * getRawScope() const
StringMap< MDString > MDStringCache
MDNodeKeyImpl(Metadata *Scope, StringRef Name, StringRef LinkageName, Metadata *File, unsigned Line, Metadata *Type, bool IsLocalToUnit, bool IsDefinition, Metadata *Variable, Metadata *StaticDataMemberDeclaration)
static unsigned getHashValue(const APInt &Key)
DenseMap< std::pair< const char *, unsigned >, unsigned > DiscriminatorTable
DiscriminatorTable - This table maps file:line locations to an integer representing the next DWARF pa...
StringMap< StructType * > NamedStructTypes
MDNodeKeyImpl(StringRef Name, Metadata *File, unsigned Line, StringRef GetterName, StringRef SetterName, unsigned Attributes, Metadata *Type)
bool isKeyOf(const DICompositeType *RHS) const
bool isKeyOf(const DIGlobalVariable *RHS) const
uint64_t getSizeInBits() const
bool operator==(const KeyTy &that) const
bool isKeyOf(const DITemplateValueParameter *RHS) const
MDNodeKeyImpl(unsigned Line, unsigned Column, Metadata *Scope, Metadata *InlinedAt)
ConstantUniqueMap< ConstantExpr > ExprConstants
AttributeSet getAttributes(LLVMContext &C, ID id)
Return the attributes for an intrinsic.
ArrayRef< Type * > Params
StringRef getSetterName() const
Metadata * getRawScope() const
unsigned getHashValue() const
bool isKeyOf(const DIFile *RHS) const
Metadata * ImportedEntities
unsigned getFlags() const
unsigned getHashValue() const
unsigned getHashValue() const
StructConstantsTy StructConstants
StringRef getName() const
LLVM Value Representation.
DenseMap< const Function *, ReturnInst * > PrologueDataMapTy
Mapping from a function to its prologue data, which is stored as the operand of an unparented ReturnI...
void remove_if(PredTy shouldRemove)
Erase matching attachments.
MDNodeKeyImpl(const DILexicalBlock *N)
MDNodeKeyImpl(unsigned Tag, StringRef Name, Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, uint64_t AlignInBits, uint64_t OffsetInBits, unsigned Flags, Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams, StringRef Identifier)
bool isKeyOf(const DILexicalBlockFile *RHS) const
FoldingSet< AttributeSetNode > AttrsSetNodes
bool isDefinition() const
LLVMContext::DiagnosticHandlerTy DiagnosticHandler
Metadata * StaticDataMemberDeclaration
void(* YieldCallbackTy)(LLVMContext *Context, void *OpaqueHandle)
Defines the type of a yield callback.
StringRef - Represent a constant reference to a string, i.e.
int64_t getLowerBound() const
DenseMap< Type *, PointerType * > PointerTypes
unsigned getFlags() const
bool isKeyOf(const DISubrange *RHS) const
Map-like storage for metadata attachments.
StringMap< ConstantDataSequential * > CDSConstants
StringRef getProducer() const
Metadata * TemplateParams
MDNodeKeyImpl(unsigned Tag, StringRef Name, Metadata *Type, Metadata *Value)
MDNodeKeyImpl(Metadata *Scope, Metadata *File, unsigned Discriminator)
bool isKeyOf(const DISubroutineType *RHS) const
StringRef getLinkageName() const
static unsigned getHashValue(const KeyTy &Key)
MDNodeKeyImpl(unsigned SourceLanguage, Metadata *File, StringRef Producer, bool IsOptimized, StringRef Flags, unsigned RuntimeVersion, StringRef SplitDebugFilename, unsigned EmissionKind, Metadata *EnumTypes, Metadata *RetainedTypes, Metadata *Subprograms, Metadata *GlobalVariables, Metadata *ImportedEntities, uint64_t DWOId)
Metadata * getRawGlobalVariables() const
Basic type, like 'int' or 'float'.
Metadata * getRawTypeArray() const
StringRef getSplitDebugFilename() const