From 4ad3d981b91ac1293b8f2be29e6452d5206107b8 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Wed, 31 Oct 2012 10:01:29 +0000 Subject: LCSSA: Add a workaround for another nasty SCEV cache invalidation issue. I'm not entirely happy with this solution, but I don't see a smarter way currently. Fixes PR14214. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167112 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/LCSSA.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'lib/Transforms/Utils/LCSSA.cpp') diff --git a/lib/Transforms/Utils/LCSSA.cpp b/lib/Transforms/Utils/LCSSA.cpp index 833dea5471..38c1495fac 100644 --- a/lib/Transforms/Utils/LCSSA.cpp +++ b/lib/Transforms/Utils/LCSSA.cpp @@ -255,6 +255,11 @@ bool LCSSA::ProcessInstruction(Instruction *Inst, if (Loop *L = LI->getLoopFor(ExitBB)) SE->forgetLoop(L); } + + // If we added a PHI, drop the cache to avoid invalidating SCEV caches. + // FIXME: This is a big hammer, can we clear the cache more selectively? + if (SE && !AddedPHIs.empty()) + SE->forgetLoop(L); // Rewrite all uses outside the loop in terms of the new PHIs we just // inserted. -- cgit v1.2.3-70-g09d2