add isIdenticalTo method to machineinstr/operand.
authorChris Lattner <sabre@nondot.org>
Fri, 20 Oct 2006 22:39:36 +0000 (22:39 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 20 Oct 2006 22:39:36 +0000 (22:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31087 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h

index b3955b6c198d8ecd1d7e824c5f772f17f13d2948..ca38fe68f717063dd5eb396c0422aace8d350323 100644 (file)
@@ -118,6 +118,10 @@ public:
     assert(isImm() && "Wrong MachineOperand accessor");
     return contents.immedVal;
   }
+  MachineBasicBlock *getMBB() const {
+    assert(isMachineBasicBlock() && "Wrong MachineOperand accessor");
+    return contents.MBB;
+  }
   MachineBasicBlock *getMachineBasicBlock() const {
     assert(isMachineBasicBlock() && "Wrong MachineOperand accessor");
     return contents.MBB;
@@ -203,6 +207,9 @@ public:
     contents.immedVal = Idx;
   }
   
+  /// isIdenticalTo - Return true if this operand is identical to the specified
+  /// operand.
+  bool isIdenticalTo(const MachineOperand &Other) const;
   
   /// ChangeToImmediate - Replace this operand with a new immediate operand of
   /// the specified value.  If an operand is known to be an immediate already,
@@ -279,6 +286,18 @@ public:
     return Operands[i];
   }
 
+  
+  /// isIdenticalTo - Return true if this instruction is identical to (same
+  /// opcode and same operands as) the specified instruction.
+  bool isIdenticalTo(const MachineInstr *Other) const {
+    if (Other->getOpcode() != getOpcode() ||
+        getNumOperands() != getNumOperands())
+      return false;
+    for (unsigned i = 0, e = getNumOperands(); i != e; ++i)
+      if (!getOperand(i).isIdenticalTo(Other->getOperand(i)))
+        return false;
+    return true;
+  }
 
   /// clone - Create a copy of 'this' instruction that is identical in
   /// all ways except the the instruction has no parent, prev, or next.