Move RemapInstruction() to ValueMapper, so that it can be shared with

CloneTrace, and because it is primarily an operation on ValueMaps.  It
is now a global (non-static) function which can be pulled in using
ValueMapper.h.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13600 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Brian Gaeke 2004-05-19 09:08:12 +00:00
parent a4c6c522ee
commit 6129af3fb1
3 changed files with 26 additions and 22 deletions

View File

@ -20,25 +20,6 @@
#include "ValueMapper.h"
using namespace llvm;
// RemapInstruction - Convert the instruction operands from referencing the
// current values into those specified by ValueMap.
//
static inline void RemapInstruction(Instruction *I,
std::map<const Value *, Value*> &ValueMap) {
for (unsigned op = 0, E = I->getNumOperands(); op != E; ++op) {
const Value *Op = I->getOperand(op);
Value *V = MapValue(Op, ValueMap);
#ifndef NDEBUG
if (!V) {
std::cerr << "Val = \n" << Op << "Addr = " << (void*)Op;
std::cerr << "\nInst = " << I;
}
#endif
assert(V && "Referenced value not in value map!");
I->setOperand(op, V);
}
}
// CloneBasicBlock - See comments in Cloning.h
BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB,
std::map<const Value*, Value*> &ValueMap,

View File

@ -99,3 +99,22 @@ Value *llvm::MapValue(const Value *V, std::map<const Value*, Value*> &VM) {
assert(0 && "Unknown value type: why didn't it get resolved?!");
return 0;
}
/// RemapInstruction - Convert the instruction operands from referencing the
/// current values into those specified by ValueMap.
///
void llvm::RemapInstruction(Instruction *I,
std::map<const Value *, Value*> &ValueMap) {
for (unsigned op = 0, E = I->getNumOperands(); op != E; ++op) {
const Value *Op = I->getOperand(op);
Value *V = MapValue(Op, ValueMap);
#ifndef NDEBUG
if (!V) {
std::cerr << "Val = \n" << Op << "Addr = " << (void*)Op;
std::cerr << "\nInst = " << I;
}
#endif
assert(V && "Referenced value not in value map!");
I->setOperand(op, V);
}
}

View File

@ -12,14 +12,18 @@
//
//===----------------------------------------------------------------------===//
#ifndef LIB_TRANSFORMS_UTILS_VALUE_MAPPER_H
#define LIB_TRANSFORMS_UTILS_VALUE_MAPPER_H
#ifndef VALUEMAPPER_H
#define VALUEMAPPER_H
#include <map>
namespace llvm {
class Value;
Value *MapValue(const Value *V, std::map<const Value*, Value*> &VM);
class Instruction;
typedef std::map<const Value *, Value *> ValueMapTy;
Value *MapValue(const Value *V, ValueMapTy &VM);
void RemapInstruction(Instruction *I, ValueMapTy &VM);
} // End llvm namespace
#endif