[llvm-commits] [llvm] r54186 - /llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

Owen Anderson resistor at mac.com
Tue Jul 29 17:22:56 PDT 2008


Author: resistor
Date: Tue Jul 29 19:22:56 2008
New Revision: 54186

URL: http://llvm.org/viewvc/llvm-project?rev=54186&view=rev
Log:
More fixes for corner cases when remapping live range indices.

Modified:
    llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp

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

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Tue Jul 29 19:22:56 2008
@@ -156,14 +156,13 @@
         // following instruction.
         index = (LI->end - 1) / InstrSlots::NUM;
         offset  = LI->end % InstrSlots::NUM;
-        if (offset == InstrSlots::USE) {
+        if (offset == InstrSlots::LOAD) {
+          // VReg dies at end of block.
           std::vector<IdxMBBPair>::const_iterator I =
                   std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), LI->end);
-          // Take the pair containing the index
-          std::vector<IdxMBBPair>::const_iterator J =
-                    (I == OldI2MBB.end() && OldI2MBB.size()>0) ? (I-1): I;
+          --I;
           
-          LI->end = getMBBEndIdx(J->second) + 1;
+          LI->end = getMBBEndIdx(I->second) + 1;
         } else {
           unsigned idx = index;
           while (index < OldI2MI.size() && !OldI2MI[index]) ++index;
@@ -195,16 +194,17 @@
         // Remap the VNInfo kill indices, which works the same as
         // the end indices above.
         for (size_t i = 0; i < vni->kills.size(); ++i) {
+          // PHI kills don't need to be remapped.
+          if (!vni->kills[i]) continue;
+          
           index = (vni->kills[i]-1) / InstrSlots::NUM;
           offset = vni->kills[i] % InstrSlots::NUM;
-          if (offset == InstrSlots::USE) {
+          if (offset == InstrSlots::LOAD) {
             std::vector<IdxMBBPair>::const_iterator I =
              std::lower_bound(OldI2MBB.begin(), OldI2MBB.end(), vni->kills[i]);
-            // Take the pair containing the index
-            std::vector<IdxMBBPair>::const_iterator J =
-                      (I == OldI2MBB.end() && OldI2MBB.size()>0) ? (I-1): I;
+            --I;
 
-            vni->kills[i] = getMBBEndIdx(J->second) + 1;
+            vni->kills[i] = getMBBEndIdx(I->second) + 1;
           } else {
             unsigned idx = index;
             while (!OldI2MI[index]) ++index;





More information about the llvm-commits mailing list