Add methods to add implicit def use operands to a MI.
authorEvan Cheng <evan.cheng@apple.com>
Sat, 11 Nov 2006 10:20:02 +0000 (10:20 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Sat, 11 Nov 2006 10:20:02 +0000 (10:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31675 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h
include/llvm/CodeGen/MachineInstrBuilder.h
lib/CodeGen/MachineInstr.cpp
lib/CodeGen/SelectionDAG/ScheduleDAG.cpp

index 06d8f3acbf05308dbe172a3a41798df8eb62f791..d3769a26514954090e5bf7db8955fe7f95250b42 100644 (file)
@@ -413,6 +413,10 @@ public:
     Op.offset = 0;
   }
 
+  /// addImplicitDefUseOperands - Add all implicit def and use operands to
+  /// this instruction.
+  void addImplicitDefUseOperands();
+
   //===--------------------------------------------------------------------===//
   // Accessors used to modify instructions in place.
   //
index 4da557cbb3ce6533fa6a2e35b06ba70a4ebe1e3a..a9e7ffd4d5d37c21e416bf4420d5c15f12896340 100644 (file)
@@ -77,6 +77,11 @@ public:
     MI->addExternalSymbolOperand(FnName);
     return *this;
   }
+
+  const MachineInstrBuilder &addImplicitDefsUses() const {
+    MI->addImplicitDefUseOperands();
+    return *this;
+  }
 };
 
 /// BuildMI - Builder interface.  Specify how to create the initial instruction
index ba75e736239fa25b816a656c261df72b73d4605e..65c164a4eecd2c1605a302ca56309ed9dcdbcbcd 100644 (file)
@@ -125,6 +125,18 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
   }
 }
 
+/// addImplicitDefUseOperands - Add all implicit def and use operands to
+/// this instruction.
+void MachineInstr::addImplicitDefUseOperands() {
+  const TargetInstrDescriptor &TID = TargetInstrDescriptors[Opcode];
+  if (TID.ImplicitDefs)
+    for (const unsigned *ImpDefs = TID.ImplicitDefs; *ImpDefs; ++ImpDefs)
+      addRegOperand(*ImpDefs, true, true);
+  if (TID.ImplicitUses)
+    for (const unsigned *ImpUses = TID.ImplicitUses; *ImpUses; ++ImpUses)
+      addRegOperand(*ImpUses, false, true);
+}
+
 
 void MachineInstr::dump() const {
   std::cerr << "  " << *this;
index 307b2b9b70c664e8d5c374db68e8fa134c5379d7..cafe3b6ffee8dbb2db9af41fe5b5be34efe6e338 100644 (file)
@@ -442,16 +442,7 @@ void ScheduleDAG::EmitNode(SDNode *Node,
     }
 
     // Emit implicit def / use operands.
-    if (II.ImplicitDefs) {
-      for (const unsigned *ImplicitDefs = II.ImplicitDefs;
-           *ImplicitDefs; ++ImplicitDefs)
-        MI->addRegOperand(*ImplicitDefs, true, true);
-    }
-    if (II.ImplicitUses) {
-      for (const unsigned *ImplicitUses = II.ImplicitUses;
-           *ImplicitUses; ++ImplicitUses)
-        MI->addRegOperand(*ImplicitUses, false, true);
-    }
+    MI->addImplicitDefUseOperands();
 
     // Now that we have emitted all operands, emit this instruction itself.
     if ((II.Flags & M_USES_CUSTOM_DAG_SCHED_INSERTION) == 0) {