[llvm-commits] CVS: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp LiveVariables.cpp MachineInstr.cpp RegAllocLocal.cpp

Evan Cheng evan.cheng at apple.com
Fri Nov 10 00:38:36 PST 2006



Changes in directory llvm/lib/CodeGen:

LiveIntervalAnalysis.cpp updated: 1.193 -> 1.194
LiveVariables.cpp updated: 1.61 -> 1.62
MachineInstr.cpp updated: 1.127 -> 1.128
RegAllocLocal.cpp updated: 1.93 -> 1.94
---
Log message:

Add implicit def / use operands to MachineInstr.

---
Diffs of the changes:  (+11 -29)

 LiveIntervalAnalysis.cpp |    9 +--------
 LiveVariables.cpp        |   19 ++-----------------
 MachineInstr.cpp         |    8 ++++++--
 RegAllocLocal.cpp        |    4 ++--
 4 files changed, 11 insertions(+), 29 deletions(-)


Index: llvm/lib/CodeGen/LiveIntervalAnalysis.cpp
diff -u llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.193 llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.194
--- llvm/lib/CodeGen/LiveIntervalAnalysis.cpp:1.193	Wed Nov  8 13:16:43 2006
+++ llvm/lib/CodeGen/LiveIntervalAnalysis.cpp	Fri Nov 10 02:38:19 2006
@@ -658,16 +658,9 @@
     }
     
     for (; MI != miEnd; ++MI) {
-      const TargetInstrDescriptor &TID = tii_->get(MI->getOpcode());
       DEBUG(std::cerr << MIIndex << "\t" << *MI);
-      
-      // Handle implicit defs.
-      if (TID.ImplicitDefs) {
-        for (const unsigned *ImpDef = TID.ImplicitDefs; *ImpDef; ++ImpDef)
-          handleRegisterDef(MBB, MI, MIIndex, *ImpDef);
-      }
 
-      // Handle explicit defs.
+      // Handle defs.
       for (int i = MI->getNumOperands() - 1; i >= 0; --i) {
         MachineOperand &MO = MI->getOperand(i);
         // handle register defs - build intervals


Index: llvm/lib/CodeGen/LiveVariables.cpp
diff -u llvm/lib/CodeGen/LiveVariables.cpp:1.61 llvm/lib/CodeGen/LiveVariables.cpp:1.62
--- llvm/lib/CodeGen/LiveVariables.cpp:1.61	Thu Nov  2 14:25:49 2006
+++ llvm/lib/CodeGen/LiveVariables.cpp	Fri Nov 10 02:38:19 2006
@@ -228,7 +228,6 @@
     for (MachineBasicBlock::iterator I = MBB->begin(), E = MBB->end();
          I != E; ++I) {
       MachineInstr *MI = I;
-      const TargetInstrDescriptor &MID = TII.get(MI->getOpcode());
 
       // Process all of the operands of the instruction...
       unsigned NumOperandsToProcess = MI->getNumOperands();
@@ -238,14 +237,7 @@
       if (MI->getOpcode() == TargetInstrInfo::PHI)
         NumOperandsToProcess = 1;
 
-      // Loop over implicit uses, using them.
-      if (MID.ImplicitUses) {
-        for (const unsigned *ImplicitUses = MID.ImplicitUses;
-             *ImplicitUses; ++ImplicitUses)
-          HandlePhysRegUse(*ImplicitUses, MI);
-      }
-
-      // Process all explicit uses...
+      // Process all uses...
       for (unsigned i = 0; i != NumOperandsToProcess; ++i) {
         MachineOperand &MO = MI->getOperand(i);
         if (MO.isRegister() && MO.isUse() && MO.getReg()) {
@@ -258,14 +250,7 @@
         }
       }
 
-      // Loop over implicit defs, defining them.
-      if (MID.ImplicitDefs) {
-        for (const unsigned *ImplicitDefs = MID.ImplicitDefs;
-             *ImplicitDefs; ++ImplicitDefs)
-          HandlePhysRegDef(*ImplicitDefs, MI);
-      }
-
-      // Process all explicit defs...
+      // Process all defs...
       for (unsigned i = 0; i != NumOperandsToProcess; ++i) {
         MachineOperand &MO = MI->getOperand(i);
         if (MO.isRegister() && MO.isDef() && MO.getReg()) {


Index: llvm/lib/CodeGen/MachineInstr.cpp
diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.127 llvm/lib/CodeGen/MachineInstr.cpp:1.128
--- llvm/lib/CodeGen/MachineInstr.cpp:1.127	Wed Oct 25 13:08:14 2006
+++ llvm/lib/CodeGen/MachineInstr.cpp	Fri Nov 10 02:38:19 2006
@@ -205,8 +205,12 @@
     OS << " ";
     ::print(mop, OS, TM);
 
-    if (mop.isReg() && mop.isDef())
-      OS << "<def>";
+    if (mop.isReg()) {
+      if (mop.isImplicit())
+        OS << (mop.isDef() ? "<imp-def>" : "<imp-use>");
+      else if (mop.isDef())
+        OS << "<def>";
+    }
   }
 
   OS << "\n";


Index: llvm/lib/CodeGen/RegAllocLocal.cpp
diff -u llvm/lib/CodeGen/RegAllocLocal.cpp:1.93 llvm/lib/CodeGen/RegAllocLocal.cpp:1.94
--- llvm/lib/CodeGen/RegAllocLocal.cpp:1.93	Tue Sep 19 13:02:01 2006
+++ llvm/lib/CodeGen/RegAllocLocal.cpp	Fri Nov 10 02:38:19 2006
@@ -561,7 +561,7 @@
     for (unsigned i = 0; i != MI->getNumOperands(); ++i) {
       MachineOperand& MO = MI->getOperand(i);
       // here we are looking for only used operands (never def&use)
-      if (MO.isRegister() && !MO.isDef() && MO.getReg() &&
+      if (MO.isRegister() && !MO.isDef() && !MO.isImplicit() && MO.getReg() &&
           MRegisterInfo::isVirtualRegister(MO.getReg()))
         MI = reloadVirtReg(MBB, MI, i);
     }
@@ -596,7 +596,7 @@
     // are defined, and marking explicit destinations in the PhysRegsUsed map.
     for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
       MachineOperand& MO = MI->getOperand(i);
-      if (MO.isRegister() && MO.isDef() && MO.getReg() &&
+      if (MO.isRegister() && MO.isDef() && !MO.isImplicit() && MO.getReg() &&
           MRegisterInfo::isPhysicalRegister(MO.getReg())) {
         unsigned Reg = MO.getReg();
         if (PhysRegsUsed[Reg] == -2) continue;  // Something like ESP.






More information about the llvm-commits mailing list