summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorCameron Zwarich <zwarich@apple.com>2013-02-12 03:49:17 +0000
committerCameron Zwarich <zwarich@apple.com>2013-02-12 03:49:17 +0000
commitdbf10c4349bb746e6120ff1195c1ce7e21bebf93 (patch)
treebad9975161bf6b6a83de6b1028be3dd48ade8e56 /lib
parentb0fde6dc029a33945bfeea7082a03940f664943c (diff)
downloadexternal_llvm-dbf10c4349bb746e6120ff1195c1ce7e21bebf93.zip
external_llvm-dbf10c4349bb746e6120ff1195c1ce7e21bebf93.tar.gz
external_llvm-dbf10c4349bb746e6120ff1195c1ce7e21bebf93.tar.bz2
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
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/MachineBasicBlock.cpp15
1 files changed, 3 insertions, 12 deletions
diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp
index 7351302..71d59f0 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.");