[LCSSA] Don't invalidate entire loop in SCEV
authorNikita Popov <npopov@redhat.com>
Thu, 27 Apr 2023 09:36:21 +0000 (11:36 +0200)
committerNikita Popov <npopov@redhat.com>
Fri, 28 Apr 2023 10:17:26 +0000 (12:17 +0200)
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

llvm/lib/Transforms/Utils/LCSSA.cpp

index af79dc4..4b006f5 100644 (file)
@@ -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;