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 scheduleMapGlobalAlias() - \a scheduleMapGlobalIFunc() - \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:143

Member Variables

private void* pImpl

Method Overview

  • public ValueMapper(llvm::ValueMapper &&)
  • public ValueMapper(const llvm::ValueMapper &)
  • public ValueMapper(llvm::ValueToValueMapTy & VM, llvm::RemapFlags Flags = RF_None, llvm::ValueMapTypeRemapper * TypeMapper = nullptr, llvm::ValueMaterializer * Materializer = nullptr)
  • 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 scheduleMapGlobalAlias(llvm::GlobalAlias & GA, llvm::Constant & Aliasee, unsigned int MappingContextID = 0)
  • public void scheduleMapGlobalIFunc(llvm::GlobalIFunc & GI, llvm::Constant & Resolver, 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::ValueMapper&&)

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

Parameters

llvm::ValueMapper&&

ValueMapper(const llvm::ValueMapper&)

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

Parameters

const llvm::ValueMapper&

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:147

Parameters

llvm::ValueToValueMapTy& VM
llvm::RemapFlags Flags = RF_None
llvm::ValueMapTypeRemapper* TypeMapper = nullptr
llvm::ValueMaterializer* Materializer = nullptr

void addFlags(llvm::RemapFlags Flags)

Description

Add to the current \a RemapFlags.

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

Parameters

llvm::RemapFlags Flags

llvm::Constant* mapConstant(
    const llvm::Constant& C)

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

Parameters

const llvm::Constant& C

llvm::MDNode* mapMDNode(const llvm::MDNode& N)

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

Parameters

const llvm::MDNode& N

llvm::Metadata* mapMetadata(
    const llvm::Metadata& MD)

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

Parameters

const llvm::Metadata& MD

llvm::Value* mapValue(const llvm::Value& V)

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

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:161

Parameters

llvm::ValueToValueMapTy& VM
llvm::ValueMaterializer* Materializer = nullptr

void remapFunction(llvm::Function& F)

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

Parameters

llvm::Function& F

void remapInstruction(llvm::Instruction& I)

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

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:181

Parameters

llvm::GlobalVariable& GV
llvm::Constant* InitPrefix
bool IsOldCtorDtor
ArrayRef<llvm::Constant*> NewMembers
unsigned int MappingContextID = 0

void scheduleMapGlobalAlias(
    llvm::GlobalAlias& GA,
    llvm::Constant& Aliasee,
    unsigned int MappingContextID = 0)

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

Parameters

llvm::GlobalAlias& GA
llvm::Constant& Aliasee
unsigned int MappingContextID = 0

void scheduleMapGlobalIFunc(
    llvm::GlobalIFunc& GI,
    llvm::Constant& Resolver,
    unsigned int MappingContextID = 0)

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

Parameters

llvm::GlobalIFunc& GI
llvm::Constant& Resolver
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:179

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:189

Parameters

llvm::Function& F
unsigned int MappingContextID = 0

~ValueMapper()

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