llvm-project/llvm/test/Transforms/LoopUnroll
Sam Parker 718c8a6a2a [LoopUnroll] Enable option to peel remainder loop
On some targets, the penalty of executing runtime unrolling checks
and then not the unrolled loop can be significantly detrimental to
performance. This results in the need to be more conservative with
the unroll count, keeping a trip count of 2 reduces the overhead as
well as increasing the chance of the unrolled body being executed. But
being conservative leaves performance gains on the table.

This patch enables the unrolling of the remainder loop introduced by
runtime unrolling. This can help reduce the overhead of misunrolled
loops because the cost of non-taken branches is much less than the
cost of the backedge that would normally be executed in the remainder
loop. This allows larger unroll factors to be used without suffering
performance loses with smaller iteration counts.

Differential Revision: https://reviews.llvm.org/D36309

llvm-svn: 310824
2017-08-14 09:25:26 +00:00
..
AArch64 [AArch64][Falkor] Try to avoid exhausting HW prefetcher resources when unrolling. 2017-06-28 18:53:09 +00:00
AMDGPU AMDGPU: Mark all unspecified CC functions in tests as amdgpu_kernel 2017-03-21 21:39:51 +00:00
ARM [ARM] Enable partial and runtime unrolling 2017-07-25 08:51:30 +00:00
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 [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
convergent.ll
ephemeral.ll
epilog_const_phi.ll Add test missed in r296770. 2017-03-04 05:20:02 +00:00
full-unroll-bad-cost.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-crashers.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics-2.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics-cmp.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics-dce.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics-geps.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics-phi-prop.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
full-unroll-heuristics.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
full-unroll-keep-first-exit.ll [PM] Simplify the new PM interface to the loop unroller and expose two 2017-01-26 02:13:50 +00:00
high-cost-trip-count-computation.ll
ignore-annotation-intrinsic-cost.ll
loop-remarks-with-hotness.ll
loop-remarks.ll
not-rotated.ll [LoopUnroll] Fix a test. REQUIRE should be REQUIRES. 2017-05-12 15:30:58 +00:00
partial-unroll-const-bounds.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
peel-loop-irreducible.ll [LoopUnroll] Don't peel loops where the latch isn't the exiting block 2017-03-16 21:07:48 +00:00
peel-loop-negative.ll [LoopPeeling] Fix condition for phi-eliminating peeling 2017-04-17 05:38:28 +00:00
peel-loop-not-forced.ll [LoopPeeling] Get rid of Phis that become invariant after N steps 2017-04-17 09:52:02 +00:00
peel-loop-pgo.ll Use profile summary to disable peeling for huge working sets 2017-08-03 23:42:58 +00:00
peel-loop.ll [SimplifyCFG] Defer folding unconditional branches to LateSimplifyCFG if it can destroy canonical loop structure. 2017-07-19 08:53:34 +00:00
peel-loop2.ll [LoopUnroll] Remap references in peeled iteration 2017-03-26 16:46:53 +00:00
pr10813.ll
pr11361.ll
pr14167.ll
pr18861.ll
pr27157.ll
pr28132.ll
pr31718.ll [LoopUnroll] First form LCSSA, then loop-simplify 2017-01-23 23:45:42 +00:00
rebuild_lcssa.ll
revisit.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-li.ll [LoopUnroll] Properly update loopinfo for runtime unrolling by 2 2017-01-26 01:04:11 +00:00
runtime-loop-multiexit-dom-verify.ll [RuntimeUnrolling] Update DomTree correctly when exit blocks have successors 2017-07-13 13:21:23 +00:00
runtime-loop-multiple-exits.ll [LoopUnrollRuntime] Avoid multi-exit nested loop with epilog generation 2017-07-11 17:16:33 +00:00
runtime-loop.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-loop1.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-loop2.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-loop3.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-loop4.ll
runtime-loop5.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
runtime-unroll-remainder.ll [LoopUnroll] Enable option to peel remainder loop 2017-08-14 09:25:26 +00:00
scevunroll.ll
shifted-tripcount.ll
tripcount-overflow.ll
unloop.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00
unroll-cleanup.ll
unroll-cleanuppad.ll
unroll-count.ll
unroll-heuristics-pgo.ll The patch turns on epilogue unroll for loops with constant recurency start. 2017-03-02 17:38:46 +00:00
unroll-loop-invalidation.ll [PM] Relax the spelling of a pass name slightly in this test. 2017-08-08 02:27:49 +00:00
unroll-maxcount.ll [LoopUnroll] Fix bug in computeUnrollCount causing it to not honor MaxCount 2017-06-28 17:01:15 +00:00
unroll-opt-attribute.ll
unroll-pragmas-disabled.ll
unroll-pragmas.ll The patch turns on epilogue unroll for loops with constant recurency start. 2017-03-02 17:38:46 +00:00
update-loop-info-in-subloops.ll [PM] Split LoopUnrollPass and make partial unroller a function pass 2017-08-02 20:35:29 +00:00