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

Owen Anderson resistor at mac.com
Mon Sep 15 15:00:39 PDT 2008


Author: resistor
Date: Mon Sep 15 17:00:38 2008
New Revision: 56231

URL: http://llvm.org/viewvc/llvm-project?rev=56231&view=rev
Log:
Live intervals for live-in registers should begin at the beginning of a basic block, not at the first
instruction.  Also, their valno's should have an unknown def.  This has no effect currently, but was
causing issues when StrongPHIElimination was enabled.

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=56231&r1=56230&r2=56231&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp (original)
+++ llvm/trunk/lib/CodeGen/LiveIntervalAnalysis.cpp Mon Sep 15 17:00:38 2008
@@ -624,7 +624,11 @@
   MachineBasicBlock::iterator mi = MBB->begin();
   unsigned baseIndex = MIIdx;
   unsigned start = baseIndex;
-  unsigned end = start;
+  while (baseIndex / InstrSlots::NUM < i2miMap_.size() && 
+         getInstructionFromIndex(baseIndex) == 0)
+    baseIndex += InstrSlots::NUM;
+  unsigned end = baseIndex;
+  
   while (mi != MBB->end()) {
     if (mi->killsRegister(interval.reg, tri_)) {
       DOUT << " killed";
@@ -659,7 +663,7 @@
     }
   }
 
-  LiveRange LR(start, end, interval.getNextValue(start, 0, VNInfoAllocator));
+  LiveRange LR(start, end, interval.getNextValue(~0U, 0, VNInfoAllocator));
   interval.addRange(LR);
   interval.addKill(LR.valno, end);
   DOUT << " +" << LR << '\n';
@@ -676,11 +680,6 @@
   // Track the index of the current machine instr.
   unsigned MIIndex = 0;
   
-  // Skip over empty initial indices.
-  while (MIIndex / InstrSlots::NUM < i2miMap_.size() &&
-         getInstructionFromIndex(MIIndex) == 0)
-    MIIndex += InstrSlots::NUM;
-  
   for (MachineFunction::iterator MBBI = mf_->begin(), E = mf_->end();
        MBBI != E; ++MBBI) {
     MachineBasicBlock *MBB = MBBI;
@@ -699,6 +698,11 @@
                                true);
     }
     
+    // Skip over empty initial indices.
+    while (MIIndex / InstrSlots::NUM < i2miMap_.size() &&
+           getInstructionFromIndex(MIIndex) == 0)
+      MIIndex += InstrSlots::NUM;
+    
     for (; MI != miEnd; ++MI) {
       DOUT << MIIndex << "\t" << *MI;
 





More information about the llvm-commits mailing list