From: Torok Edwin Date: Sun, 24 May 2009 20:08:21 +0000 (+0000) Subject: Move Rewriter.clear() earlier, to avoid triggerring the AssertingVH by X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3d431384f05c9defc84f36eafe220415cc12ee93;p=oota-llvm.git 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 --- diff --git a/lib/Transforms/Scalar/IndVarSimplify.cpp b/lib/Transforms/Scalar/IndVarSimplify.cpp index f0f2d83b6e6..7300bf47fe7 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()) {