Added getTiedToSrcOperand() to check for two-address'ness.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 1 Nov 2006 23:00:31 +0000 (23:00 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 1 Nov 2006 23:00:31 +0000 (23:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31360 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetInstrInfo.h
lib/Target/TargetInstrInfo.cpp

index 0098870e66e97d8a0f56e07740869d51506030b0..ead631578cadf3070424b76828df342c9598f631 100644 (file)
@@ -230,7 +230,7 @@ public:
   /// getOperandConstraint - Returns the value of the specific constraint if
   /// it is set. Returns -1 if it is not set.
   int getOperandConstraint(MachineOpCode Opcode, unsigned OpNum,
-                           OperandConstraint Constraint) {
+                           OperandConstraint Constraint) const {
     assert(OpNum < get(Opcode).numOperands &&
            "Invalid operand # of TargetInstrInfo");
     if (get(Opcode).OpInfo[OpNum].Constraints & (1 << Constraint)) {
@@ -240,6 +240,10 @@ public:
     return -1;
   }
 
+  /// getTiedToSrcOperand - Returns the operand that is tied to the specified
+  /// dest operand. Returns -1 if there isn't one.
+  int getTiedToSrcOperand(MachineOpCode Opcode, unsigned OpNum) const;
+
   /// getDWARF_LABELOpcode - Return the opcode of the target's DWARF_LABEL
   /// instruction if it has one.  This is used by codegen passes that update
   /// DWARF line number info as they modify the code.
index 4346203d91767061ef085f9a642019cdfccf5f2f..81759098ed85f6cb6da040ba78f86e1249e97d04 100644 (file)
@@ -38,6 +38,18 @@ TargetInstrInfo::~TargetInstrInfo() {
   TargetInstrDescriptors = NULL; // reset global variable
 }
 
+int
+TargetInstrInfo::getTiedToSrcOperand(MachineOpCode Opc, unsigned OpNum) const {
+  for (unsigned i = 0, e = getNumOperands(Opc); i != e; ++i) {
+    if (i == OpNum)
+      continue;
+    int ti = getOperandConstraint(Opc, i, TIED_TO);
+    if (ti == (int)OpNum)
+      return i;
+  }
+  return -1;
+}
+
 
 // commuteInstruction - The default implementation of this method just exchanges
 // operand 1 and 2.