mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
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:
parent
223060498a
commit
98da22672b
@ -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.");
|
||||
|
Loading…
Reference in New Issue
Block a user