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

Methods

void EnumerateAttributes(llvm::AttributeList PAL)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:297

Parameters

llvm::AttributeList PAL

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)

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)

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)

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)

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)

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)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:293

Parameters

const llvm::NamedMDNode* NMD

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)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:296

Parameters

const llvm::Value* V

void EnumerateType(llvm::Type* T)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:295

Parameters

llvm::Type* T

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)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:299

Parameters

const llvm::ValueSymbolTable& ST

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&)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:142

Parameters

const llvm::ValueEnumerator&

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:237

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:145

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:182

Parameters

llvm::ValueEnumerator::IndexAndAttrSet Group

const std::vector<IndexAndAttrSet>&
getAttributeGroups() const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:220

unsigned int getAttributeListID(
    llvm::AttributeList PAL) const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:175

Parameters

llvm::AttributeList PAL

const std::vector<AttributeList>&
getAttributeLists() const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:218

const std::vector<const BasicBlock*>&
getBasicBlocks() const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:214

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:224

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

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:172

Parameters

const llvm::Instruction* I

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:266

Parameters

const llvm::Function* F

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:158

Parameters

const llvm::Metadata* MD

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:166

Parameters

llvm::Type* T

const llvm::ValueEnumerator::TypeList& getTypes()
    const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:212

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:197

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)

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)

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:162

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

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

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:146

Parameters

llvm::raw_ostream& OS
const llvm::ValueEnumerator::ValueMapType& Map
const char* Name

void purgeFunction()

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:236

void setInstructionID(const llvm::Instruction* I)

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:173

Parameters

const llvm::Instruction* I

bool shouldPreserveUseListOrder() const

Declared at: llvm/lib/Bitcode/Writer/ValueEnumerator.h:164