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)

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

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:148

Parameters

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)

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)

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:172

Parameters

const llvm::Constant& C

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)

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:168

Parameters

const llvm::Metadata& MD

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)

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)

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:175

Parameters

llvm::Function& F

void remapInstruction(llvm::Instruction& I)

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:174

Parameters

llvm::Instruction& I

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)

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)

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)

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:186

Parameters

llvm::Function& F
unsigned int MappingContextID = 0

~ValueMapper()

Declared at: llvm/include/llvm/Transforms/Utils/ValueMapper.h:152