Add method MachineInstr::substituteValue() which substitutes
authorVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 14 Aug 2002 16:52:58 +0000 (16:52 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Wed, 14 Aug 2002 16:52:58 +0000 (16:52 +0000)
one Value with another one in all operands and implicit references
of the machine instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3306 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MachineInstr.cpp

index 79034113fc115158d4a733763d1812ba76a7cf73..d3608c13208d785ac411233f35843d82b245ae7f 100644 (file)
@@ -77,6 +77,35 @@ MachineInstr::SetRegForOperand(unsigned i, int regNum)
 }
 
 
+// Subsitute all occurrences of Value* oldVal with newVal in all operands
+// and all implicit refs.  If defsOnly == true, substitute defs only.
+unsigned
+MachineInstr::substituteValue(const Value* oldVal, Value* newVal, bool defsOnly)
+{
+  unsigned numSubst = 0;
+
+  // Subsitute operands
+  for (MachineInstr::val_op_iterator O = begin(), E = end(); O != E; ++O)
+    if (*O == oldVal)
+      if (!defsOnly || O.isDef())
+        {
+          O.getMachineOperand().value = newVal;
+          ++numSubst;
+        }
+
+  // Subsitute implicit refs
+  for (unsigned i=0, N=implicitRefs.size(); i < N; ++i)
+    if (implicitRefs[i] == oldVal)
+      if (!defsOnly || implicitRefIsDefined(i))
+        {
+          implicitRefs[i] = newVal;
+          ++numSubst;
+        }
+
+  return numSubst;
+}
+
+
 void
 MachineInstr::dump() const 
 {