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

Also add method MachineOperand::getVRegValueOrNull().

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

include/llvm/CodeGen/MachineInstr.h

index 7e22ab3fc244789d9e6301eec8423e9f58b7c92c..935504894a00edb3dec8d6fc527e73a63ce15101 100644 (file)
@@ -106,6 +106,10 @@ public:
           opType == MO_PCRelativeDisp);
     return value;
   }
+  inline Value*                getVRegValueOrNull() const {
+    return (opType == MO_VirtualRegister || opType == MO_CCRegister || 
+            opType == MO_PCRelativeDisp)? value : NULL;
+  }
   inline int            getMachineRegNum() const {
     assert(opType == MO_MachineRegister);
     return regNum;
@@ -356,6 +360,10 @@ public:
                                           bool isDef=false,
                                           bool isDefAndUse=false);
 
+  unsigned              substituteValue  (const Value* oldVal,
+                                          Value* newVal,
+                                          bool defsOnly = true);
+
   void                  setOperandHi32   (unsigned i);
   void                  setOperandLo32   (unsigned i);
   void                  setOperandHi64   (unsigned i);
@@ -390,17 +398,18 @@ public:
   public:
     typedef ValOpIterator<MITy, VTy> _Self;
     
-    inline VTy operator*() const { return MI->getOperand(i).getVRegValue(); }
-
-    const MachineOperand &getMachineOperand() const {
-      return MI->getOperand(i);
+    inline VTy operator*() const {
+      return MI->getOperand(i).getVRegValue();
     }
 
+    const MachineOperand &getMachineOperand() const { return MI->getOperand(i);}
+          MachineOperand &getMachineOperand()       { return MI->getOperand(i);}
+
     inline VTy operator->() const { return operator*(); }
-    
-    inline bool isDef() const { return MI->getOperand(i).opIsDef(); } 
-    inline bool isDefAndUse() const { return MI->getOperand(i).opIsDefAndUse(); } 
-    
+
+    inline bool isDef()       const { return MI->getOperand(i).opIsDef(); } 
+    inline bool isDefAndUse() const { return MI->getOperand(i).opIsDefAndUse();}
+
     inline _Self& operator++() { i++; skipToNextVal(); return *this; }
     inline _Self  operator++(int) { _Self tmp = *this; ++*this; return tmp; }