From: Nikita Popov Date: Thu, 27 Apr 2023 09:36:21 +0000 (+0200) Subject: [LCSSA] Don't invalidate entire loop in SCEV X-Git-Tag: upstream/17.0.6~10091 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0aed0dbec2434d9d1a41266be009e56cc964633b;p=platform%2Fupstream%2Fllvm.git [LCSSA] Don't invalidate entire loop in SCEV We already invalidate each individual instruction for which LCSSA is formed in formLCSSAForInstructions(), so I don't see a reason why we would need to invalidate the entire loop on top of that. I believe we also no longer need the instruction-level invalidation now that SCEV looks through LCSSA phis, but I'll leave that for a separate patch, as it's less obvious. Differential Revision: https://reviews.llvm.org/D149331 --- diff --git a/llvm/lib/Transforms/Utils/LCSSA.cpp b/llvm/lib/Transforms/Utils/LCSSA.cpp index af79dc4..4b006f5 100644 --- a/llvm/lib/Transforms/Utils/LCSSA.cpp +++ b/llvm/lib/Transforms/Utils/LCSSA.cpp @@ -395,12 +395,6 @@ bool llvm::formLCSSA(Loop &L, const DominatorTree &DT, const LoopInfo *LI, IRBuilder<> Builder(L.getHeader()->getContext()); Changed = formLCSSAForInstructions(Worklist, DT, *LI, SE, Builder); - // If we modified the code, remove any caches about the loop from SCEV to - // avoid dangling entries. - // FIXME: This is a big hammer, can we clear the cache more selectively? - if (SE && Changed) - SE->forgetLoop(&L); - assert(L.isLCSSAForm(DT)); return Changed;