Fix the updating of LiveIntervals after splitting a critical edge. PHI operand
authorCameron Zwarich <zwarich@apple.com>
Tue, 12 Feb 2013 03:49:17 +0000 (03:49 +0000)
committerCameron Zwarich <zwarich@apple.com>
Tue, 12 Feb 2013 03:49:17 +0000 (03:49 +0000)
live ranges should always be extended, and the only successor that should be
considered for extension of other ranges is the target of the split edge.

llvm-svn: 174935

llvm/lib/CodeGen/MachineBasicBlock.cpp

index 7351302..71d59f0 100644 (file)
@@ -796,8 +796,8 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
           MachineOperand &MO = I->getOperand(ni);
           unsigned Reg = MO.getReg();
           PHISrcRegs.insert(Reg);
-          if (MO.isUndef() || !isLastMBB)
-            break;
+          if (MO.isUndef())
+            continue;
 
           LiveInterval &LI = LIS->getInterval(Reg);
           VNInfo *VNI = LI.getVNInfoAt(PrevIndex);
@@ -817,16 +817,7 @@ MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) {
       if (!LI.liveAt(PrevIndex))
         continue;
 
-      bool isLiveOut = false;
-      for (MachineBasicBlock::succ_iterator SI = succ_begin(),
-           SE = succ_end(); SI != SE; ++SI) {
-        MachineBasicBlock *SuccMBB = *SI == NMBB ? Succ : *SI;
-        if (LI.liveAt(LIS->getMBBStartIdx(SuccMBB))) {
-          isLiveOut = true;
-          break;
-        }
-      }
-
+      bool isLiveOut = LI.liveAt(LIS->getMBBStartIdx(Succ));
       if (isLiveOut && isLastMBB) {
         VNInfo *VNI = LI.getVNInfoAt(PrevIndex);
         assert(VNI && "LiveInterval should have VNInfo where it is live.");