diff options
author | Cameron Zwarich <zwarich@apple.com> | 2013-02-12 03:49:17 +0000 |
---|---|---|
committer | Cameron Zwarich <zwarich@apple.com> | 2013-02-12 03:49:17 +0000 |
commit | dbf10c4349bb746e6120ff1195c1ce7e21bebf93 (patch) | |
tree | bad9975161bf6b6a83de6b1028be3dd48ade8e56 | |
parent | b0fde6dc029a33945bfeea7082a03940f664943c (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174935 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/MachineBasicBlock.cpp | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 7351302cc3..71d59f0b4b 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -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."); |