aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Utils/ValueMapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/Utils/ValueMapper.cpp')
-rw-r--r--lib/Transforms/Utils/ValueMapper.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/Transforms/Utils/ValueMapper.cpp b/lib/Transforms/Utils/ValueMapper.cpp
index 2cb6a9d221..abf9957eb1 100644
--- a/lib/Transforms/Utils/ValueMapper.cpp
+++ b/lib/Transforms/Utils/ValueMapper.cpp
@@ -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);
+ }
+}