forked from OSchip/llvm-project
87adb7a2e2
through PHI nodes across iterations. This patch teaches the new advanced loop unrolling heuristics to propagate constants into the loop from the preheader and around the backedge after simulating each iteration. This lets us brute force solve simple recurrances that aren't modeled effectively by SCEV. It also makes it more clear why we need to process the loop in-order rather than bottom-up which might otherwise make much more sense (for example, for DCE). This came out of an attempt I'm making to develop a principled way to account for dead code in the unroll estimation. When I implemented a forward-propagating version of that it produced incorrect results due to failing to propagate *cost* between loop iterations through the PHI nodes, and it occured to me we really should at least propagate simplifications across those edges, and it is quite easy thanks to the loop being in canonical and LCSSA form. Differential Revision: http://reviews.llvm.org/D11706 llvm-svn: 243900 |
||
---|---|---|
.. | ||
AArch64 | ||
PowerPC | ||
X86 | ||
2004-05-13-DontUnrollTooMuch.ll | ||
2005-03-06-BadLoopInfoUpdate.ll | ||
2006-08-24-MultiBlockLoop.ll | ||
2007-04-16-PhiUpdate.ll | ||
2007-05-05-UnrollMiscomp.ll | ||
2007-05-09-UnknownTripCount.ll | ||
2007-11-05-Crash.ll | ||
2011-08-08-PhiUpdate.ll | ||
2011-08-09-IVSimplify.ll | ||
2011-08-09-PhiUpdate.ll | ||
2011-10-01-NoopTrunc.ll | ||
2012-04-09-unroll-indirectbr.ll | ||
basic.ll | ||
ephemeral.ll | ||
full-unroll-bad-cost.ll | ||
full-unroll-crashers.ll | ||
full-unroll-heuristics-cast.ll | ||
full-unroll-heuristics-cmp.ll | ||
full-unroll-heuristics-phi-prop.ll | ||
full-unroll-heuristics.ll | ||
high-cost-trip-count-computation.ll | ||
ignore-annotation-intrinsic-cost.ll | ||
loop-remarks.ll | ||
nsw-tripcount.ll | ||
partial-unroll-optsize.ll | ||
pr10813.ll | ||
pr11361.ll | ||
pr14167.ll | ||
pr18861.ll | ||
runtime-loop.ll | ||
runtime-loop1.ll | ||
runtime-loop2.ll | ||
runtime-loop3.ll | ||
runtime-loop4.ll | ||
runtime-loop5.ll | ||
scevunroll.ll | ||
shifted-tripcount.ll | ||
tripcount-overflow.ll | ||
unloop.ll | ||
unroll-cleanup.ll | ||
unroll-pragmas-disabled.ll | ||
unroll-pragmas.ll | ||
update-loop-info-in-subloops.ll |