From 9a936502fa7ffa8d8dd4f61354b9247908ab63b5 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Sat, 2 May 2009 17:29:26 +0000 Subject: [PATCH] Tell ScalarEvolution that the loop is being deleted before actually deleting it. This will let ScalarEvolution be more complete about updating its records. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70632 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/LoopDeletion.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Scalar/LoopDeletion.cpp b/lib/Transforms/Scalar/LoopDeletion.cpp index d7be820e74f..83c25619bfc 100644 --- a/lib/Transforms/Scalar/LoopDeletion.cpp +++ b/lib/Transforms/Scalar/LoopDeletion.cpp @@ -258,6 +258,11 @@ bool LoopDeletion::runOnLoop(Loop* L, LPPassManager& LPM) { (*LI)->dropAllReferences(); } + // Tell ScalarEvolution that the loop is deleted. Do this before + // deleting the loop so that ScalarEvolution can look at the loop + // to determine what it needs to clean up. + SE.forgetLoopBackedgeTakenCount(L); + // Erase the instructions and the blocks without having to worry // about ordering because we already dropped the references. // NOTE: This iteration is safe because erasing the block does not remove its @@ -266,9 +271,6 @@ bool LoopDeletion::runOnLoop(Loop* L, LPPassManager& LPM) { LI != LE; ++LI) (*LI)->eraseFromParent(); - // Tell ScalarEvolution that the loop is deleted. - SE.forgetLoopBackedgeTakenCount(L); - // Finally, the blocks from loopinfo. This has to happen late because // otherwise our loop iterators won't work. LoopInfo& loopInfo = getAnalysis();