summaryrefslogtreecommitdiff
path: root/lib/CodeGen/StrongPHIElimination.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2008-08-05 21:18:51 +0000
committerOwen Anderson <resistor@mac.com>2008-08-05 21:18:51 +0000
commit71ac0be6bb8ef79b79b3b9874cb2886fbb04d2d5 (patch)
treed037a6a83a2591de7a9b3bf6c40e73c571941842 /lib/CodeGen/StrongPHIElimination.cpp
parente7b8205e6ec63502c6375077faf0887ddf776ba0 (diff)
downloadllvm-71ac0be6bb8ef79b79b3b9874cb2886fbb04d2d5.tar.gz
llvm-71ac0be6bb8ef79b79b3b9874cb2886fbb04d2d5.tar.bz2
llvm-71ac0be6bb8ef79b79b3b9874cb2886fbb04d2d5.tar.xz
Oops, we were already checking for dead phis. Handle this the proper way, then.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54371 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StrongPHIElimination.cpp')
-rw-r--r--lib/CodeGen/StrongPHIElimination.cpp41
1 files changed, 19 insertions, 22 deletions
diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp
index fb625fd086..545544a3bd 100644
--- a/lib/CodeGen/StrongPHIElimination.cpp
+++ b/lib/CodeGen/StrongPHIElimination.cpp
@@ -884,8 +884,17 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
I != E; ) {
MachineInstr* PInstr = *(I++);
- // Don't do live interval updating for dead PHIs.
- if (!PInstr->registerDefIsDead(PInstr->getOperand(0).getReg())) {
+ // If this is a dead PHI node, then remove it from LiveIntervals.
+ unsigned DestReg = PInstr->getOperand(0).getReg();
+ LiveInterval& PI = LI.getInterval(DestReg);
+ if (PInstr->registerDefIsDead(DestReg)) {
+ if (PI.containsOneValue()) {
+ LI.removeInterval(DestReg);
+ } else {
+ unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
+ PI.removeRange(*PI.getLiveRangeContaining(idx), true);
+ }
+ } else {
// Trim live intervals of input registers. They are no longer live into
// this block.
for (unsigned i = 1; i < PInstr->getNumOperands(); i += 2) {
@@ -899,26 +908,14 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
true);
}
- // If this is a dead PHI node, then remove it from LiveIntervals.
- unsigned DestReg = PInstr->getOperand(0).getReg();
- LiveInterval& PI = LI.getInterval(DestReg);
- if (PInstr->registerDefIsDead(DestReg)) {
- if (PI.containsOneValue()) {
- LI.removeInterval(DestReg);
- } else {
- unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
- PI.removeRange(*PI.getLiveRangeContaining(idx), true);
- }
- } else {
- // If the PHI is not dead, then the valno defined by the PHI
- // now has an unknown def.
- unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
- const LiveRange* PLR = PI.getLiveRangeContaining(idx);
- PLR->valno->def = ~0U;
- LiveRange R (LI.getMBBStartIdx(PInstr->getParent()),
- PLR->start, PLR->valno);
- PI.addRange(R);
- }
+ // If the PHI is not dead, then the valno defined by the PHI
+ // now has an unknown def.
+ unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
+ const LiveRange* PLR = PI.getLiveRangeContaining(idx);
+ PLR->valno->def = ~0U;
+ LiveRange R (LI.getMBBStartIdx(PInstr->getParent()),
+ PLR->start, PLR->valno);
+ PI.addRange(R);
}
LI.RemoveMachineInstrFromMaps(PInstr);