Fix the updating of LiveIntervals after splitting a critical edge. PHI operand
[oota-llvm.git] / lib / CodeGen / MachineBasicBlock.cpp
index 7351302cc3221aa1aab006224f55115c6cd4a3c8..71d59f0b4b38d53cf7ae02b842973ce335e960bd 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.");