Fix the updating of LiveIntervals after splitting a critical edge. PHI operand

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
This commit is contained in:
Cameron Zwarich 2013-02-12 03:49:17 +00:00
parent 10a3ae7039
commit af34931c63
1 changed files with 3 additions and 12 deletions

View 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.");