Fix this code to correctly handle loops with multiple exits. Until

now, this hasn't mattered, because ScalarEvolution hasn't been able
to compute trip counts for loops with multiple exits. But it will
soon.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73864 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-06-22 00:15:15 +00:00
parent 5392dce881
commit 03ad6982c4

View File

@ -299,11 +299,11 @@ void IndVarSimplify::RewriteLoopExitValues(Loop *L,
// If this instruction is dead now, delete it. // If this instruction is dead now, delete it.
RecursivelyDeleteTriviallyDeadInstructions(Inst); RecursivelyDeleteTriviallyDeadInstructions(Inst);
// See if this is a single-entry LCSSA PHI node. If so, we can (and // If we're inserting code into the exit block rather than the
// have to) remove // preheader, we can (and have to) remove the PHI entirely.
// the PHI entirely. This is safe, because the NewVal won't be variant // This is safe, because the NewVal won't be variant
// in the loop, so we don't need an LCSSA phi node anymore. // in the loop, so we don't need an LCSSA phi node anymore.
if (NumPreds == 1) { if (ExitBlocks.size() == 1) {
PN->replaceAllUsesWith(ExitVal); PN->replaceAllUsesWith(ExitVal);
RecursivelyDeleteTriviallyDeadInstructions(PN); RecursivelyDeleteTriviallyDeadInstructions(PN);
break; break;