forked from OSchip/llvm-project
4a9cde5a79
SCEV caches the exiting blocks when computing exit counts. In SimpleLoopUnswitch, we split the exit block of the loop to unswitch. Currently we only invalidate the loop containing that exit block, but if that block is the exiting block for a parent loop, we have stale cache entries. We have to invalidate the top-most loop that contains the exit block as exiting block. We might also be able to skip invalidating the loop containing the exit block, if the exit block is not an exiting block of that loop. There are also 2 more places in SimpleLoopUnswitch, that use a similar problematic approach to get the loop to invalidate. If the patch makes sense, I will also update those places to a similar approach (they deal with multiple exit blocks, so we cannot directly re-use getTopMostExitingLoop). Fixes PR43972. Reviewers: skatkov, reames, asbirlea, chandlerc Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D70786 |
||
---|---|---|
.. | ||
2006-06-13-SingleEntryPHI.ll | ||
2006-06-27-DeadSwitchCase.ll | ||
2007-05-09-Unreachable.ll | ||
2007-05-09-tl.ll | ||
2007-07-12-ExitDomInfo.ll | ||
2007-07-13-DomInfo.ll | ||
2007-07-18-DomInfo.ll | ||
2007-08-01-Dom.ll | ||
2007-08-01-LCSSA.ll | ||
2007-10-04-DomFrontier.ll | ||
2008-06-02-DomInfo.ll | ||
2008-06-17-DomFrontier.ll | ||
2010-11-18-LCSSA.ll | ||
2011-06-02-CritSwitch.ll | ||
2011-09-26-EHCrash.ll | ||
2012-04-02-IndirectBr.ll | ||
2012-04-30-LoopUnswitch-LPad-Crash.ll | ||
2012-05-20-Phi.ll | ||
2015-09-18-Addrspace.ll | ||
LIV-loop-condtion.ll | ||
basictest-profmd.ll | ||
basictest.ll | ||
cleanuppad.ll | ||
copy-metadata.ll | ||
crash.ll | ||
delete-dead-blocks.ll | ||
exponential-behavior.ll | ||
exponential-nontrivial-unswitch-nested.ll | ||
exponential-nontrivial-unswitch-nested2.ll | ||
exponential-nontrivial-unswitch.ll | ||
exponential-nontrivial-unswitch2.ll | ||
exponential-switch-unswitch.ll | ||
formDedicatedAfterTrivial1.ll | ||
formDedicatedAfterTrivial2.ll | ||
formDedicatedAfterTrivial3.ll | ||
guards.ll | ||
infinite-loop.ll | ||
msan.ll | ||
nontrivial-unswitch-cost.ll | ||
nontrivial-unswitch-redundant-switch.ll | ||
nontrivial-unswitch.ll | ||
pr37888.ll | ||
preserve-analyses.ll | ||
preserve-scev-exiting-multiple-loops.ll | ||
trivial-unswitch-iteration.ll | ||
trivial-unswitch-profmd.ll | ||
trivial-unswitch.ll | ||
update-scev.ll |