class ValueEnumerator
Declaration
class ValueEnumerator { /* full declaration omitted */ };
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:43
Member Variables
- public llvm::UseListOrderStack UseListOrders
- private llvm::ValueEnumerator::TypeMapType TypeMap
- private llvm::ValueEnumerator::TypeList Types
- private llvm::ValueEnumerator::ValueMapType ValueMap
- private llvm::ValueEnumerator::ValueList Values
- private llvm::ValueEnumerator::ComdatSetType Comdats
- private std::vector<const Metadata*> MDs
- private std::vector<const Metadata*> FunctionMDs
- private llvm::ValueEnumerator::MetadataMapType MetadataMap
- private SmallDenseMap<unsigned int, llvm::ValueEnumerator::MDRange, 1> FunctionMDInfo
- private bool ShouldPreserveUseListOrder
- private llvm::ValueEnumerator::AttributeGroupMapType AttributeGroupMap
- private std::vector<IndexAndAttrSet> AttributeGroups
- private llvm::ValueEnumerator::AttributeListMapType AttributeListMap
- private std::vector<AttributeList> AttributeLists
- private DenseMap<const llvm::BasicBlock*, unsigned int> GlobalBasicBlockIDs
- GlobalBasicBlockIDs - This map memoizes the basic block ID's referenced by the "getGlobalBasicBlockID" method.
- private llvm::ValueEnumerator::InstructionMapType InstructionMap
- private unsigned int InstructionCount
- private std::vector<const BasicBlock*> BasicBlocks
- BasicBlocks - This contains all the basic blocks for the currently incorporated function. Their reverse mapping is stored in ValueMap.
- private unsigned int NumModuleValues
- When a function is incorporated, this is the size of the Values list before incorporation.
- private unsigned int NumModuleMDs = 0
- When a function is incorporated, this is the size of the Metadatas list before incorporation.
- private unsigned int NumMDStrings = 0
- private unsigned int FirstFuncConstantID
- private unsigned int FirstInstID
Method Overview
- private void EnumerateAttributes(llvm::AttributeList PAL)
- private void EnumerateFunctionLocalListMetadata(unsigned int F, const llvm::DIArgList * Arglist)
- private void EnumerateFunctionLocalListMetadata(const llvm::Function & F, const llvm::DIArgList * ArgList)
- private void EnumerateFunctionLocalMetadata(unsigned int F, const llvm::LocalAsMetadata * Local)
- private void EnumerateFunctionLocalMetadata(const llvm::Function & F, const llvm::LocalAsMetadata * Local)
- private void EnumerateMetadata(unsigned int F, const llvm::Metadata * MD)
- private void EnumerateMetadata(const llvm::Function * F, const llvm::Metadata * MD)
- private void EnumerateNamedMDNode(const llvm::NamedMDNode * NMD)
- private void EnumerateNamedMetadata(const llvm::Module & M)
- private void EnumerateOperandType(const llvm::Value * V)
- private void EnumerateType(llvm::Type * T)
- private void EnumerateValue(const llvm::Value * V)
- private void EnumerateValueSymbolTable(const llvm::ValueSymbolTable & ST)
- private void OptimizeConstants(unsigned int CstStart, unsigned int CstEnd)
- public ValueEnumerator(const llvm::ValueEnumerator &)
- public ValueEnumerator(const llvm::Module & M, bool ShouldPreserveUseListOrder)
- public uint64_t computeBitsRequiredForTypeIndicies() const
- private void dropFunctionFromMetadata(MetadataMapType::value_type & FirstMD)
- public void dump() const
- private const llvm::MDNode * enumerateMetadataImpl(unsigned int F, const llvm::Metadata * MD)
- public unsigned int getAttributeGroupID(llvm::ValueEnumerator::IndexAndAttrSet Group) const
- public const std::vector<IndexAndAttrSet> & getAttributeGroups() const
- public unsigned int getAttributeListID(llvm::AttributeList PAL) const
- public const std::vector<AttributeList> & getAttributeLists() const
- public const std::vector<const BasicBlock *> & getBasicBlocks() const
- public unsigned int getComdatID(const llvm::Comdat * C) const
- public const llvm::ValueEnumerator::ComdatSetType & getComdats() const
- public void getFunctionConstantRange(unsigned int & Start, unsigned int & End) const
- public unsigned int getGlobalBasicBlockID(const llvm::BasicBlock * BB) const
- public unsigned int getInstructionID(const llvm::Instruction * I) const
- public ArrayRef<const llvm::Metadata *> getMDStrings() const
- private unsigned int getMetadataFunctionID(const llvm::Function * F) const
- public unsigned int getMetadataID(const llvm::Metadata * MD) const
- public unsigned int getMetadataOrNullID(const llvm::Metadata * MD) const
- public ArrayRef<const llvm::Metadata *> getNonMDStrings() const
- public unsigned int getTypeID(llvm::Type * T) const
- public const llvm::ValueEnumerator::TypeList & getTypes() const
- public unsigned int getValueID(const llvm::Value * V) const
- public const llvm::ValueEnumerator::ValueList & getValues() const
- public bool hasMDs() const
- public void incorporateFunction(const llvm::Function & F)
- private void incorporateFunctionMetadata(const llvm::Function & F)
- public unsigned int numMDs() const
- private void organizeMetadata()
- public void print(llvm::raw_ostream & OS, const llvm::ValueEnumerator::MetadataMapType & Map, const char * Name) const
- public void print(llvm::raw_ostream & OS, const llvm::ValueEnumerator::ValueMapType & Map, const char * Name) const
- public void purgeFunction()
- public void setInstructionID(const llvm::Instruction * I)
- public bool shouldPreserveUseListOrder() const
Methods
¶void EnumerateAttributes(llvm::AttributeList PAL)
void EnumerateAttributes(llvm::AttributeList PAL)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:297
Parameters
¶void EnumerateFunctionLocalListMetadata(
unsigned int F,
const llvm::DIArgList* Arglist)
void EnumerateFunctionLocalListMetadata(
unsigned int F,
const llvm::DIArgList* Arglist)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:292
Parameters
- unsigned int F
- const llvm::DIArgList* Arglist
¶void EnumerateFunctionLocalListMetadata(
const llvm::Function& F,
const llvm::DIArgList* ArgList)
void EnumerateFunctionLocalListMetadata(
const llvm::Function& F,
const llvm::DIArgList* ArgList)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:290
Parameters
- const llvm::Function& F
- const llvm::DIArgList* ArgList
¶void EnumerateFunctionLocalMetadata(
unsigned int F,
const llvm::LocalAsMetadata* Local)
void EnumerateFunctionLocalMetadata(
unsigned int F,
const llvm::LocalAsMetadata* Local)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:289
Parameters
- unsigned int F
- const llvm::LocalAsMetadata* Local
¶void EnumerateFunctionLocalMetadata(
const llvm::Function& F,
const llvm::LocalAsMetadata* Local)
void EnumerateFunctionLocalMetadata(
const llvm::Function& F,
const llvm::LocalAsMetadata* Local)
Description
}
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:287
Parameters
- const llvm::Function& F
- const llvm::LocalAsMetadata* Local
¶void EnumerateMetadata(unsigned int F,
const llvm::Metadata* MD)
void EnumerateMetadata(unsigned int F,
const llvm::Metadata* MD)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:284
Parameters
- unsigned int F
- const llvm::Metadata* MD
¶void EnumerateMetadata(const llvm::Function* F,
const llvm::Metadata* MD)
void EnumerateMetadata(const llvm::Function* F,
const llvm::Metadata* MD)
Description
Enumerate reachable metadata in (almost) post-order. Enumerate all the metadata reachable from MD. We want to minimize the cost of reading bitcode records, and so the primary consideration is that operands of uniqued nodes are resolved before the nodes are read. This avoids re-uniquing them on the context and factors away RAUW support. This algorithm guarantees that subgraphs of uniqued nodes are in post-order. Distinct subgraphs reachable only from a single uniqued node will be in post-order.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:283
Parameters
- const llvm::Function* F
- const llvm::Metadata* MD
¶void EnumerateNamedMDNode(
const llvm::NamedMDNode* NMD)
void EnumerateNamedMDNode(
const llvm::NamedMDNode* NMD)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:293
Parameters
- const llvm::NamedMDNode* NMD
¶void EnumerateNamedMetadata(const llvm::Module& M)
void EnumerateNamedMetadata(const llvm::Module& M)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:300
Parameters
- const llvm::Module& M
¶void EnumerateOperandType(const llvm::Value* V)
void EnumerateOperandType(const llvm::Value* V)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:296
Parameters
- const llvm::Value* V
¶void EnumerateType(llvm::Type* T)
void EnumerateType(llvm::Type* T)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:295
Parameters
- llvm::Type* T
¶void EnumerateValue(const llvm::Value* V)
void EnumerateValue(const llvm::Value* V)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:294
Parameters
- const llvm::Value* V
¶void EnumerateValueSymbolTable(
const llvm::ValueSymbolTable& ST)
void EnumerateValueSymbolTable(
const llvm::ValueSymbolTable& ST)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:299
Parameters
- const llvm::ValueSymbolTable& ST
¶void OptimizeConstants(unsigned int CstStart,
unsigned int CstEnd)
void OptimizeConstants(unsigned int CstStart,
unsigned int CstEnd)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:240
Parameters
- unsigned int CstStart
- unsigned int CstEnd
¶ValueEnumerator(const llvm::ValueEnumerator&)
ValueEnumerator(const llvm::ValueEnumerator&)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:142
Parameters
- const llvm::ValueEnumerator&
¶ValueEnumerator(const llvm::Module& M,
bool ShouldPreserveUseListOrder)
ValueEnumerator(const llvm::Module& M,
bool ShouldPreserveUseListOrder)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:141
Parameters
- const llvm::Module& M
- bool ShouldPreserveUseListOrder
¶uint64_t computeBitsRequiredForTypeIndicies()
const
uint64_t computeBitsRequiredForTypeIndicies()
const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:237
¶void dropFunctionFromMetadata(
MetadataMapType::value_type& FirstMD)
void dropFunctionFromMetadata(
MetadataMapType::value_type& FirstMD)
Description
Drop the function tag from the transitive operands of the given node.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:249
Parameters
- MetadataMapType::value_type& FirstMD
¶void dump() const
void dump() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:145
¶const llvm::MDNode* enumerateMetadataImpl(
unsigned int F,
const llvm::Metadata* MD)
const llvm::MDNode* enumerateMetadataImpl(
unsigned int F,
const llvm::Metadata* MD)
Description
Enumerate a single instance of metadata with the given function tag. If \c MD has already been enumerated, check that \c F matches its function tag. If not, call \a dropFunctionFromMetadata(). Otherwise, mark \c MD as visited. Assign it an ID, or just return it if it's an \a MDNode.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:264
Parameters
- unsigned int F
- const llvm::Metadata* MD
¶unsigned int getAttributeGroupID(
llvm::ValueEnumerator::IndexAndAttrSet Group)
const
unsigned int getAttributeGroupID(
llvm::ValueEnumerator::IndexAndAttrSet Group)
const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:182
Parameters
- llvm::ValueEnumerator::IndexAndAttrSet Group
¶const std::vector<IndexAndAttrSet>&
getAttributeGroups() const
const std::vector<IndexAndAttrSet>&
getAttributeGroups() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:220
¶unsigned int getAttributeListID(
llvm::AttributeList PAL) const
unsigned int getAttributeListID(
llvm::AttributeList PAL) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:175
Parameters
¶const std::vector<AttributeList>&
getAttributeLists() const
const std::vector<AttributeList>&
getAttributeLists() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:218
¶const std::vector<const BasicBlock*>&
getBasicBlocks() const
const std::vector<const BasicBlock*>&
getBasicBlocks() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:214
¶unsigned int getComdatID(
const llvm::Comdat* C) const
unsigned int getComdatID(
const llvm::Comdat* C) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:225
Parameters
- const llvm::Comdat* C
¶const llvm::ValueEnumerator::ComdatSetType&
getComdats() const
const llvm::ValueEnumerator::ComdatSetType&
getComdats() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:224
¶void getFunctionConstantRange(
unsigned int& Start,
unsigned int& End) const
void getFunctionConstantRange(
unsigned int& Start,
unsigned int& End) const
Description
getFunctionConstantRange - Return the range of values that corresponds to function-local constants.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:192
Parameters
- unsigned int& Start
- unsigned int& End
¶unsigned int getGlobalBasicBlockID(
const llvm::BasicBlock* BB) const
unsigned int getGlobalBasicBlockID(
const llvm::BasicBlock* BB) const
Description
getGlobalBasicBlockID - This returns the function-specific ID for the specified basic block. This is relatively expensive information, so it should only be used by rare constructs such as address-of-label.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:230
Parameters
- const llvm::BasicBlock* BB
¶unsigned int getInstructionID(
const llvm::Instruction* I) const
unsigned int getInstructionID(
const llvm::Instruction* I) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:172
Parameters
- const llvm::Instruction* I
¶ArrayRef<const llvm::Metadata*> getMDStrings()
const
ArrayRef<const llvm::Metadata*> getMDStrings()
const
Description
Get the MDString metadata for this block.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:203
¶unsigned int getMetadataFunctionID(
const llvm::Function* F) const
unsigned int getMetadataFunctionID(
const llvm::Function* F) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:266
Parameters
- const llvm::Function* F
¶unsigned int getMetadataID(
const llvm::Metadata* MD) const
unsigned int getMetadataID(
const llvm::Metadata* MD) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:152
Parameters
- const llvm::Metadata* MD
¶unsigned int getMetadataOrNullID(
const llvm::Metadata* MD) const
unsigned int getMetadataOrNullID(
const llvm::Metadata* MD) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:158
Parameters
- const llvm::Metadata* MD
¶ArrayRef<const llvm::Metadata*> getNonMDStrings()
const
ArrayRef<const llvm::Metadata*> getNonMDStrings()
const
Description
Get the non-MDString metadata for this block.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:208
¶unsigned int getTypeID(llvm::Type* T) const
unsigned int getTypeID(llvm::Type* T) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:166
Parameters
- llvm::Type* T
¶const llvm::ValueEnumerator::TypeList& getTypes()
const
const llvm::ValueEnumerator::TypeList& getTypes()
const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:212
¶unsigned int getValueID(
const llvm::Value* V) const
unsigned int getValueID(
const llvm::Value* V) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:150
Parameters
- const llvm::Value* V
¶const llvm::ValueEnumerator::ValueList&
getValues() const
const llvm::ValueEnumerator::ValueList&
getValues() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:197
¶bool hasMDs() const
bool hasMDs() const
Description
Check whether the current block has any metadata to emit.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:200
¶void incorporateFunction(const llvm::Function& F)
void incorporateFunction(const llvm::Function& F)
Description
incorporateFunction/purgeFunction - If you'd like to deal with a function, use these two methods to get its data into the ValueEnumerator!
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:234
Parameters
- const llvm::Function& F
¶void incorporateFunctionMetadata(
const llvm::Function& F)
void incorporateFunctionMetadata(
const llvm::Function& F)
Description
Incorporate the function metadata. This should be called before enumerating LocalAsMetadata for the function.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:255
Parameters
- const llvm::Function& F
¶unsigned int numMDs() const
unsigned int numMDs() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:162
¶void organizeMetadata()
void organizeMetadata()
Description
Reorder the reachable metadata. This is not just an optimization, but is mandatory for emitting MDString correctly.
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:246
¶void print(
llvm::raw_ostream& OS,
const llvm::ValueEnumerator::MetadataMapType&
Map,
const char* Name) const
void print(
llvm::raw_ostream& OS,
const llvm::ValueEnumerator::MetadataMapType&
Map,
const char* Name) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:147
Parameters
- llvm::raw_ostream& OS
- const llvm::ValueEnumerator::MetadataMapType& Map
- const char* Name
¶void print(
llvm::raw_ostream& OS,
const llvm::ValueEnumerator::ValueMapType&
Map,
const char* Name) const
void print(
llvm::raw_ostream& OS,
const llvm::ValueEnumerator::ValueMapType&
Map,
const char* Name) const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:146
Parameters
- llvm::raw_ostream& OS
- const llvm::ValueEnumerator::ValueMapType& Map
- const char* Name
¶void purgeFunction()
void purgeFunction()
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:236
¶void setInstructionID(const llvm::Instruction* I)
void setInstructionID(const llvm::Instruction* I)
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:173
Parameters
- const llvm::Instruction* I
¶bool shouldPreserveUseListOrder() const
bool shouldPreserveUseListOrder() const
Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:164