class ValueMapper
Declaration
class ValueMapper { /* full declaration omitted */ };
Description
Context for (re-)mapping values (and metadata). A shared context used for mapping and remapping of Value and Metadata instances using \a ValueToValueMapTy, \a RemapFlags, \a ValueMapTypeRemapper, and \a ValueMaterializer. There are a number of top-level entry points: - \a mapValue() (and \a mapConstant()); - \a mapMetadata() (and \a mapMDNode()); - \a remapInstruction(); and - \a remapFunction(). The \a ValueMaterializer can be used as a callback, but cannot invoke any of these top-level functions recursively. Instead, callbacks should use one of the following to schedule work lazily in the \a ValueMapper instance: - \a scheduleMapGlobalInitializer() - \a scheduleMapAppendingVariable() - \a scheduleMapGlobalIndirectSymbol() - \a scheduleRemapFunction() Sometimes a callback needs a different mapping context. Such a context can be registered using \a registerAlternateMappingContext(), which takes an alternate \a ValueToValueMapTy and \a ValueMaterializer and returns a ID to pass into the schedule*() functions. TODO: lib/Linker really doesn't need the \a ValueHandle in the \a ValueToValueMapTy. We should template \a ValueMapper (and its implementation classes), and explicitly instantiate on two concrete instances of \a ValueMap (one as \a ValueToValueMap, and one with raw \a Value pointers). It may be viable to do away with \a TrackingMDRef in the\a Metadata side map for the lib/Linker case as well, in which case we'll need a new template parameter on \a ValueMap. TODO: Update callers of \a RemapInstruction() and \a MapValue() (etc.) to use \a ValueMapper directly.
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:141
Method Overview
- public ValueMapper(llvm::ValueToValueMapTy & VM, llvm::RemapFlags Flags = RF_None, llvm::ValueMapTypeRemapper * TypeMapper = nullptr, llvm::ValueMaterializer * Materializer = nullptr)
- public ValueMapper(llvm::ValueMapper &&)
- public ValueMapper(const llvm::ValueMapper &)
- public void addFlags(llvm::RemapFlags Flags)
- public llvm::Constant * mapConstant(const llvm::Constant & C)
- public llvm::MDNode * mapMDNode(const llvm::MDNode & N)
- public llvm::Metadata * mapMetadata(const llvm::Metadata & MD)
- public llvm::Value * mapValue(const llvm::Value & V)
- public unsigned int registerAlternateMappingContext(llvm::ValueToValueMapTy & VM, llvm::ValueMaterializer * Materializer = nullptr)
- public void remapFunction(llvm::Function & F)
- public void remapInstruction(llvm::Instruction & I)
- public void scheduleMapAppendingVariable(llvm::GlobalVariable & GV, llvm::Constant * InitPrefix, bool IsOldCtorDtor, ArrayRef<llvm::Constant *> NewMembers, unsigned int MappingContextID = 0)
- public void scheduleMapGlobalIndirectSymbol(llvm::GlobalIndirectSymbol & GIS, llvm::Constant & Target, unsigned int MappingContextID = 0)
- public void scheduleMapGlobalInitializer(llvm::GlobalVariable & GV, llvm::Constant & Init, unsigned int MappingContextID = 0)
- public void scheduleRemapFunction(llvm::Function & F, unsigned int MappingContextID = 0)
- public ~ValueMapper()
Methods
¶ValueMapper(
llvm::ValueToValueMapTy& VM,
llvm::RemapFlags Flags = RF_None,
llvm::ValueMapTypeRemapper* TypeMapper =
nullptr,
llvm::ValueMaterializer* Materializer =
nullptr)
ValueMapper(
llvm::ValueToValueMapTy& VM,
llvm::RemapFlags Flags = RF_None,
llvm::ValueMapTypeRemapper* TypeMapper =
nullptr,
llvm::ValueMaterializer* Materializer =
nullptr)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:145
Parameters
- llvm::ValueToValueMapTy& VM
- llvm::RemapFlags Flags = RF_None
- llvm::ValueMapTypeRemapper* TypeMapper = nullptr
- llvm::ValueMaterializer* Materializer = nullptr
¶ValueMapper(llvm::ValueMapper&&)
ValueMapper(llvm::ValueMapper&&)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:148
Parameters
¶ValueMapper(const llvm::ValueMapper&)
ValueMapper(const llvm::ValueMapper&)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:149
Parameters
- const llvm::ValueMapper&
¶void addFlags(llvm::RemapFlags Flags)
void addFlags(llvm::RemapFlags Flags)
Description
Add to the current \a RemapFlags.
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:166
Parameters
- llvm::RemapFlags Flags
¶llvm::Constant* mapConstant(
const llvm::Constant& C)
llvm::Constant* mapConstant(
const llvm::Constant& C)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:172
Parameters
- const llvm::Constant& C
¶llvm::MDNode* mapMDNode(const llvm::MDNode& N)
llvm::MDNode* mapMDNode(const llvm::MDNode& N)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:169
Parameters
- const llvm::MDNode& N
¶llvm::Metadata* mapMetadata(
const llvm::Metadata& MD)
llvm::Metadata* mapMetadata(
const llvm::Metadata& MD)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:168
Parameters
- const llvm::Metadata& MD
¶llvm::Value* mapValue(const llvm::Value& V)
llvm::Value* mapValue(const llvm::Value& V)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:171
Parameters
- const llvm::Value& V
¶unsigned int registerAlternateMappingContext(
llvm::ValueToValueMapTy& VM,
llvm::ValueMaterializer* Materializer =
nullptr)
unsigned int registerAlternateMappingContext(
llvm::ValueToValueMapTy& VM,
llvm::ValueMaterializer* Materializer =
nullptr)
Description
Register an alternate mapping context. Returns a MappingContextID that can be used with the various schedule*() API to switch in a different value map on-the-fly.
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:159
Parameters
- llvm::ValueToValueMapTy& VM
- llvm::ValueMaterializer* Materializer = nullptr
¶void remapFunction(llvm::Function& F)
void remapFunction(llvm::Function& F)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:175
Parameters
¶void remapInstruction(llvm::Instruction& I)
void remapInstruction(llvm::Instruction& I)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:174
Parameters
¶void scheduleMapAppendingVariable(
llvm::GlobalVariable& GV,
llvm::Constant* InitPrefix,
bool IsOldCtorDtor,
ArrayRef<llvm::Constant*> NewMembers,
unsigned int MappingContextID = 0)
void scheduleMapAppendingVariable(
llvm::GlobalVariable& GV,
llvm::Constant* InitPrefix,
bool IsOldCtorDtor,
ArrayRef<llvm::Constant*> NewMembers,
unsigned int MappingContextID = 0)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:179
Parameters
- llvm::GlobalVariable& GV
- llvm::Constant* InitPrefix
- bool IsOldCtorDtor
- ArrayRef<llvm::Constant*> NewMembers
- unsigned int MappingContextID = 0
¶void scheduleMapGlobalIndirectSymbol(
llvm::GlobalIndirectSymbol& GIS,
llvm::Constant& Target,
unsigned int MappingContextID = 0)
void scheduleMapGlobalIndirectSymbol(
llvm::GlobalIndirectSymbol& GIS,
llvm::Constant& Target,
unsigned int MappingContextID = 0)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:183
Parameters
- llvm::GlobalIndirectSymbol& GIS
- llvm::Constant& Target
- unsigned int MappingContextID = 0
¶void scheduleMapGlobalInitializer(
llvm::GlobalVariable& GV,
llvm::Constant& Init,
unsigned int MappingContextID = 0)
void scheduleMapGlobalInitializer(
llvm::GlobalVariable& GV,
llvm::Constant& Init,
unsigned int MappingContextID = 0)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:177
Parameters
- llvm::GlobalVariable& GV
- llvm::Constant& Init
- unsigned int MappingContextID = 0
¶void scheduleRemapFunction(
llvm::Function& F,
unsigned int MappingContextID = 0)
void scheduleRemapFunction(
llvm::Function& F,
unsigned int MappingContextID = 0)
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:186
Parameters
- llvm::Function& F
- unsigned int MappingContextID = 0
¶~ValueMapper()
~ValueMapper()
Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:152