LLVM 19.0.0git
Public Member Functions | List of all members
llvm::ValueMapper Class Reference

Context for (re-)mapping values (and metadata). More...

#include "llvm/Transforms/Utils/ValueMapper.h"

Public Member Functions

 ValueMapper (ValueToValueMapTy &VM, RemapFlags Flags=RF_None, ValueMapTypeRemapper *TypeMapper=nullptr, ValueMaterializer *Materializer=nullptr)
 
 ValueMapper (ValueMapper &&)=delete
 
 ValueMapper (const ValueMapper &)=delete
 
ValueMapperoperator= (ValueMapper &&)=delete
 
ValueMapperoperator= (const ValueMapper &)=delete
 
 ~ValueMapper ()
 
unsigned registerAlternateMappingContext (ValueToValueMapTy &VM, ValueMaterializer *Materializer=nullptr)
 Register an alternate mapping context.
 
void addFlags (RemapFlags Flags)
 Add to the current RemapFlags.
 
MetadatamapMetadata (const Metadata &MD)
 
MDNodemapMDNode (const MDNode &N)
 
ValuemapValue (const Value &V)
 
ConstantmapConstant (const Constant &C)
 
void remapInstruction (Instruction &I)
 
void remapDbgRecord (Module *M, DbgRecord &V)
 
void remapDbgRecordRange (Module *M, iterator_range< DbgRecordIterator > Range)
 
void remapFunction (Function &F)
 
void remapGlobalObjectMetadata (GlobalObject &GO)
 
void scheduleMapGlobalInitializer (GlobalVariable &GV, Constant &Init, unsigned MappingContextID=0)
 
void scheduleMapAppendingVariable (GlobalVariable &GV, Constant *InitPrefix, bool IsOldCtorDtor, ArrayRef< Constant * > NewMembers, unsigned MappingContextID=0)
 
void scheduleMapGlobalAlias (GlobalAlias &GA, Constant &Aliasee, unsigned MappingContextID=0)
 
void scheduleMapGlobalIFunc (GlobalIFunc &GI, Constant &Resolver, unsigned MappingContextID=0)
 
void scheduleRemapFunction (Function &F, unsigned MappingContextID=0)
 

Detailed Description

Context for (re-)mapping values (and metadata).

A shared context used for mapping and remapping of Value and Metadata instances using ValueToValueMapTy, RemapFlags, ValueMapTypeRemapper, and ValueMaterializer.

There are a number of top-level entry points:

The 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 ValueMapper instance:

Sometimes a callback needs a different mapping context. Such a context can be registered using registerAlternateMappingContext(), which takes an alternate ValueToValueMapTy and ValueMaterializer and returns a ID to pass into the schedule*() functions.

TODO: lib/Linker really doesn't need the ValueHandle in the ValueToValueMapTy. We should template ValueMapper (and its implementation classes), and explicitly instantiate on two concrete instances of ValueMap (one as ValueToValueMap, and one with raw Value pointers). It may be viable to do away with TrackingMDRef in the Metadata side map for the lib/Linker case as well, in which case we'll need a new template parameter on ValueMap.

TODO: Update callers of RemapInstruction() and MapValue() (etc.) to use ValueMapper directly.

Definition at line 149 of file ValueMapper.h.

Constructor & Destructor Documentation

◆ ValueMapper() [1/3]

ValueMapper::ValueMapper ( ValueToValueMapTy VM,
RemapFlags  Flags = RF_None,
ValueMapTypeRemapper TypeMapper = nullptr,
ValueMaterializer Materializer = nullptr 
)

Definition at line 1202 of file ValueMapper.cpp.

◆ ValueMapper() [2/3]

llvm::ValueMapper::ValueMapper ( ValueMapper &&  )
delete

◆ ValueMapper() [3/3]

llvm::ValueMapper::ValueMapper ( const ValueMapper )
delete

◆ ~ValueMapper()

ValueMapper::~ValueMapper ( )

Definition at line 1207 of file ValueMapper.cpp.

References getAsMapper().

Member Function Documentation

◆ addFlags()

void ValueMapper::addFlags ( RemapFlags  Flags)

Add to the current RemapFlags.

Note
Like the top-level mapping functions, addFlags() must be called at the top level, not during a callback in a ValueMaterializer.

Definition at line 1215 of file ValueMapper.cpp.

◆ mapConstant()

Constant * ValueMapper::mapConstant ( const Constant C)

Definition at line 1223 of file ValueMapper.cpp.

References llvm::CallingConv::C, and mapValue().

Referenced by llvm::MapValue().

◆ mapMDNode()

MDNode * ValueMapper::mapMDNode ( const MDNode N)

Definition at line 1231 of file ValueMapper.cpp.

References mapMetadata(), and N.

Referenced by llvm::MapMetadata().

◆ mapMetadata()

Metadata * ValueMapper::mapMetadata ( const Metadata MD)

Definition at line 1227 of file ValueMapper.cpp.

Referenced by mapMDNode(), and llvm::MapMetadata().

◆ mapValue()

Value * ValueMapper::mapValue ( const Value V)

Definition at line 1219 of file ValueMapper.cpp.

Referenced by mapConstant(), and llvm::MapValue().

◆ operator=() [1/2]

ValueMapper & llvm::ValueMapper::operator= ( const ValueMapper )
delete

◆ operator=() [2/2]

ValueMapper & llvm::ValueMapper::operator= ( ValueMapper &&  )
delete

◆ registerAlternateMappingContext()

unsigned ValueMapper::registerAlternateMappingContext ( ValueToValueMapTy VM,
ValueMaterializer Materializer = nullptr 
)

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.

Definition at line 1210 of file ValueMapper.cpp.

References getAsMapper().

◆ remapDbgRecord()

void ValueMapper::remapDbgRecord ( Module M,
DbgRecord V 
)

Definition at line 1239 of file ValueMapper.cpp.

Referenced by llvm::RemapDbgRecord(), and remapDbgRecordRange().

◆ remapDbgRecordRange()

void ValueMapper::remapDbgRecordRange ( Module M,
iterator_range< DbgRecordIterator Range 
)

Definition at line 1243 of file ValueMapper.cpp.

References remapDbgRecord().

Referenced by llvm::RemapDbgRecordRange().

◆ remapFunction()

void ValueMapper::remapFunction ( Function F)

Definition at line 1250 of file ValueMapper.cpp.

References F.

Referenced by llvm::RemapFunction().

◆ remapGlobalObjectMetadata()

void ValueMapper::remapGlobalObjectMetadata ( GlobalObject GO)

Definition at line 1254 of file ValueMapper.cpp.

◆ remapInstruction()

void ValueMapper::remapInstruction ( Instruction I)

Definition at line 1235 of file ValueMapper.cpp.

References I.

Referenced by llvm::RemapInstruction().

◆ scheduleMapAppendingVariable()

void ValueMapper::scheduleMapAppendingVariable ( GlobalVariable GV,
Constant InitPrefix,
bool  IsOldCtorDtor,
ArrayRef< Constant * >  NewMembers,
unsigned  MappingContextID = 0 
)

Definition at line 1264 of file ValueMapper.cpp.

References getAsMapper().

◆ scheduleMapGlobalAlias()

void ValueMapper::scheduleMapGlobalAlias ( GlobalAlias GA,
Constant Aliasee,
unsigned  MappingContextID = 0 
)

Definition at line 1273 of file ValueMapper.cpp.

References getAsMapper().

◆ scheduleMapGlobalIFunc()

void ValueMapper::scheduleMapGlobalIFunc ( GlobalIFunc GI,
Constant Resolver,
unsigned  MappingContextID = 0 
)

Definition at line 1278 of file ValueMapper.cpp.

References getAsMapper().

◆ scheduleMapGlobalInitializer()

void ValueMapper::scheduleMapGlobalInitializer ( GlobalVariable GV,
Constant Init,
unsigned  MappingContextID = 0 
)

Definition at line 1258 of file ValueMapper.cpp.

References getAsMapper().

◆ scheduleRemapFunction()

void ValueMapper::scheduleRemapFunction ( Function F,
unsigned  MappingContextID = 0 
)

Definition at line 1283 of file ValueMapper.cpp.

References F, and getAsMapper().


The documentation for this class was generated from the following files: