[llvm-commits] [llvm] r40925 - in /llvm/trunk: include/llvm/CodeGen/LiveInterval.h lib/CodeGen/LiveIntervalAnalysis.cpp

Evan Cheng evan.cheng at apple.com
Wed Aug 8 00:03:29 PDT 2007


Author: evancheng
Date: Wed Aug  8 02:03:29 2007
New Revision: 40925

URL: http://llvm.org/viewvc/llvm-project?rev=40925&view=rev
Log:
Adding kill info to val#.

Modified:
    llvm/trunk/include/llvm/CodeGen/LiveInterval.h
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Modified: llvm/trunk/include/llvm/CodeGen/LiveInterval.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveInterval.h?rev=40925&r1=40924&r2=40925&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/LiveInterval.h (original)
+++ llvm/trunk/include/llvm/CodeGen/LiveInterval.h Wed Aug  8 02:03:29 2007
@@ -166,8 +166,23 @@
     /// addKillForValNum - Add a kill instruction index to the specified value
     /// number.
     void addKillForValNum(unsigned ValNo, unsigned KillIdx) {
+      assert(ValNo < ValueNumberInfo.size());
       ValueNumberInfo[ValNo].kills.push_back(KillIdx);
     }
+
+    /// replaceKillForValNum - Replace a kill index of the specified value with
+    /// a new kill index.
+    bool replaceKillForValNum(unsigned ValNo, unsigned OldKill,
+                              unsigned NewKill) {
+      SmallVector<unsigned, 4> kills = ValueNumberInfo[ValNo].kills;
+      SmallVector<unsigned, 4>::iterator I =
+        std::find(kills.begin(), kills.end(), OldKill);
+      if (I == kills.end())
+        return false;
+      kills.erase(I);
+      kills.push_back(NewKill);
+      return true;
+    }
     
     VNInfo getValNumInfo(unsigned ValNo) const {
       assert(ValNo < ValueNumberInfo.size());

Modified: llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp?rev=40925&r1=40924&r2=40925&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Wed Aug  8 02:03:29 2007
@@ -457,6 +457,7 @@
       LiveRange LR(DefIndex, RedefIndex, ValNo);
       DOUT << " replace range with " << LR;
       interval.addRange(LR);
+      interval.addKillForValNum(ValNo, RedefIndex);
 
       // If this redefinition is dead, we need to add a dummy unit live
       // range covering the def slot.
@@ -481,6 +482,8 @@
         DOUT << " Removing [" << Start << "," << End << "] from: ";
         interval.print(DOUT, mri_); DOUT << "\n";
         interval.removeRange(Start, End);
+        bool replaced = interval.replaceKillForValNum(0, End, Start);
+        assert(replaced && "Incorrect kill info?");
         DOUT << " RESULT: "; interval.print(DOUT, mri_);
 
         // Replace the interval with one of a NEW value number.  Note that this
@@ -488,6 +491,7 @@
         LiveRange LR(Start, End, interval.getNextValue(~0, 0));
         DOUT << " replace range with " << LR;
         interval.addRange(LR);
+        interval.addKillForValNum(LR.ValId, End);
         DOUT << " RESULT: "; interval.print(DOUT, mri_);
       }
 
@@ -503,9 +507,10 @@
       else
         ValNum = interval.getNextValue(defIndex, SrcReg);
       
-      LiveRange LR(defIndex,
-                   getInstructionIndex(&mbb->back()) + InstrSlots::NUM, ValNum);
+      unsigned killIndex = getInstructionIndex(&mbb->back()) + InstrSlots::NUM;
+      LiveRange LR(defIndex, killIndex, ValNum);
       interval.addRange(LR);
+      interval.addKillForValNum(ValNum, killIndex);
       DOUT << " +" << LR;
     }
   }
@@ -570,6 +575,7 @@
     ? OldLR->ValId : interval.getNextValue(start, SrcReg);
   LiveRange LR(start, end, Id);
   interval.addRange(LR);
+  interval.addKillForValNum(LR.ValId, end);
   DOUT << " +" << LR << '\n';
 }
 
@@ -635,8 +641,9 @@
   }
 
   LiveRange LR(start, end, interval.getNextValue(start, 0));
-  DOUT << " +" << LR << '\n';
   interval.addRange(LR);
+  interval.addKillForValNum(LR.ValId, end);
+  DOUT << " +" << LR << '\n';
 }
 
 /// computeIntervals - computes the live intervals for virtual





More information about the llvm-commits mailing list