diff options
author | Owen Anderson <resistor@mac.com> | 2008-04-02 02:12:45 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2008-04-02 02:12:45 +0000 |
commit | 59df878391b5a10d184636fed608f6a9cb29761f (patch) | |
tree | 1e099527cf32c22f71bf4fcad02f1e1442df1c3d /lib/CodeGen/StrongPHIElimination.cpp | |
parent | 4316dec10e7cbe3b283f6ece1fb3d0881938c843 (diff) | |
download | external_llvm-59df878391b5a10d184636fed608f6a9cb29761f.zip external_llvm-59df878391b5a10d184636fed608f6a9cb29761f.tar.gz external_llvm-59df878391b5a10d184636fed608f6a9cb29761f.tar.bz2 |
Correctly mark a valno that was previous defined by a PHI node as having an
unknown defining inst after PHI elimination.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49069 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StrongPHIElimination.cpp')
-rw-r--r-- | lib/CodeGen/StrongPHIElimination.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/CodeGen/StrongPHIElimination.cpp b/lib/CodeGen/StrongPHIElimination.cpp index f89d9f2..6416690 100644 --- a/lib/CodeGen/StrongPHIElimination.cpp +++ b/lib/CodeGen/StrongPHIElimination.cpp @@ -845,7 +845,6 @@ void StrongPHIElimination::mergeLiveIntervals(unsigned primary, } bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) { - LiveIntervals& LI = getAnalysis<LiveIntervals>(); // Compute DFS numbers of each block @@ -889,17 +888,21 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) { // 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)) { - LiveInterval& PI = LI.getInterval(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)); + PI.getLiveRangeContaining(idx)->valno->def = ~0U; } - + LI.RemoveMachineInstrFromMaps(PInstr); PInstr->eraseFromParent(); } |