mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 03:25:23 +00:00
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:
@@ -20,25 +20,6 @@
|
|||||||
#include "ValueMapper.h"
|
#include "ValueMapper.h"
|
||||||
using namespace llvm;
|
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
|
// CloneBasicBlock - See comments in Cloning.h
|
||||||
BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB,
|
BasicBlock *llvm::CloneBasicBlock(const BasicBlock *BB,
|
||||||
std::map<const Value*, Value*> &ValueMap,
|
std::map<const Value*, Value*> &ValueMap,
|
||||||
|
@@ -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?!");
|
assert(0 && "Unknown value type: why didn't it get resolved?!");
|
||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -12,14 +12,18 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#ifndef LIB_TRANSFORMS_UTILS_VALUE_MAPPER_H
|
#ifndef VALUEMAPPER_H
|
||||||
#define LIB_TRANSFORMS_UTILS_VALUE_MAPPER_H
|
#define VALUEMAPPER_H
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
class Value;
|
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
|
} // End llvm namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user