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
diff --git a/lib/Transforms/Utils/ValueMapper.cpp b/lib/Transforms/Utils/ValueMapper.cpp
index 2cb6a9d..abf9957 100644
--- a/lib/Transforms/Utils/ValueMapper.cpp
+++ b/lib/Transforms/Utils/ValueMapper.cpp
@@ -99,3 +99,22 @@
   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);
+  }
+}