diff options
author | Torok Edwin <edwintorok@gmail.com> | 2009-05-24 20:08:21 +0000 |
---|---|---|
committer | Torok Edwin <edwintorok@gmail.com> | 2009-05-24 20:08:21 +0000 |
commit | 3d431384f05c9defc84f36eafe220415cc12ee93 (patch) | |
tree | b2862e5ab05168bc4962026d14765715ac8b60e5 /lib/Transforms | |
parent | 3790fb0c036acaa4db50aff83dd8b3bf51f8af6a (diff) |
Move Rewriter.clear() earlier, to avoid triggerring the AssertingVH by
one of the RecursivelyDeleteTriviallyDeadInstructions.
Add a comment explaining why the cache needs to be cleared.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72372 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/IndVarSimplify.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index f0f2d83b6e..7300bf47fe 100644 --- a/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -414,9 +414,12 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) { Rewriter.setInsertionPoint(Header->getFirstNonPHI()); - // Rewrite IV-derived expressions. + // Rewrite IV-derived expressions. Clears the rewriter cache. RewriteIVExpressions(L, LargestType, Rewriter); + // The Rewriter may only be used for isInsertedInstruction queries from this + // point on. + // Loop-invariant instructions in the preheader that aren't used in the // loop may be sunk below the loop to reduce register pressure. SinkUnusedInvariants(L, Rewriter); @@ -424,7 +427,6 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) { // Reorder instructions to avoid use-before-def conditions. FixUsesBeforeDefs(L, Rewriter); - Rewriter.clear(); // For completeness, inform IVUsers of the IV use in the newly-created // loop exit test instruction. if (NewICmp) @@ -574,6 +576,10 @@ void IndVarSimplify::RewriteIVExpressions(Loop *L, const Type *LargestType, } } + // Clear the rewriter cache, because values that are in the rewriter's cache + // can be deleted in the loop below, causing the AssertingVH in the cache to + // trigger. + Rewriter.clear(); // Now that we're done iterating through lists, clean up any instructions // which are now dead. while (!DeadInsts.empty()) { |