llvm/test/Transforms/LoopUnroll
Michael Kuperstein 39c1e3d2d7 [LoopUnroll] Implement profile-based loop peeling
This implements PGO-driven loop peeling.

The basic idea is that when the average dynamic trip-count of a loop is known,
based on PGO, to be low, we can expect a performance win by peeling off the
first several iterations of that loop.
Unlike unrolling based on a known trip count, or a trip count multiple, this
doesn't save us the conditional check and branch on each iteration. However,
it does allow us to simplify the straight-line code we get (constant-folding,
etc.). This is important given that we know that we will usually only hit this
code, and not the actual loop.

This is currently disabled by default.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288274 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-30 21:13:57 +00:00
..
AArch64 Reapply "[LoopUnroll] Use the upper bound of the loop trip count to fullly unroll a loop" 2016-10-12 21:29:38 +00:00
AMDGPU AMDGPU: Remove some old intrinsic uses from tests 2016-02-11 06:02:01 +00:00
PowerPC [LoopUnroll] Fix a PowerPC test broken by r277524. 2016-08-02 21:43:25 +00:00
X86 Adds the ability to use an epilog remainder loop during loop unrolling and makes 2016-04-05 12:19:35 +00:00
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
convergent.ll [LoopUnroll] Respect the convergent attribute. 2016-03-14 23:15:34 +00:00
ephemeral.ll
full-unroll-bad-cost.ll
full-unroll-crashers.ll [LoopUnrollAnalyzer] Fix a bug in UnrolledInstAnalyzer::visitLoad. 2016-06-23 14:31:31 +00:00
full-unroll-heuristics-2.ll [LoopUnrollAnalyzer] Take into account cost of instructions controlling branches, along with their operands. 2016-05-18 21:20:12 +00:00
full-unroll-heuristics-cmp.ll [LoopUnrollAnalyzer] Don't treat gep-instructions with simplified offset as simplified. 2016-05-13 01:42:34 +00:00
full-unroll-heuristics-dce.ll Revert "Revert "[Unroll] Implement a conservative and monotonically increasing cost tracking system during the full unroll heuristic analysis that avoids counting any instruction cost until that instruction becomes "live" through a side-effect or use outside the..."" 2016-05-13 21:23:25 +00:00
full-unroll-heuristics-geps.ll Revert "Revert "[Unroll] Implement a conservative and monotonically increasing cost tracking system during the full unroll heuristic analysis that avoids counting any instruction cost until that instruction becomes "live" through a side-effect or use outside the..."" 2016-05-13 21:23:25 +00:00
full-unroll-heuristics-phi-prop.ll [Unroll] Improve the brute force loop unroll estimate by propagating 2015-08-03 20:32:27 +00:00
full-unroll-heuristics.ll
full-unroll-keep-first-exit.ll [LoopUnroll] Keep the loop test only on the first iteration of max-or-zero loops 2016-10-21 11:08:48 +00:00
high-cost-trip-count-computation.ll Adds the ability to use an epilog remainder loop during loop unrolling and makes 2016-04-05 12:19:35 +00:00
ignore-annotation-intrinsic-cost.ll
loop-remarks-with-hotness.ll [LoopUnroll] Include hotness of region in opt remark 2016-07-29 19:29:47 +00:00
loop-remarks.ll
partial-unroll-const-bounds.ll The patch refactors unroll pass. 2016-05-27 23:15:06 +00:00
peel-loop-pgo.ll [LoopUnroll] Implement profile-based loop peeling 2016-11-30 21:13:57 +00:00
peel-loop.ll [LoopUnroll] Implement profile-based loop peeling 2016-11-30 21:13:57 +00:00
pr10813.ll
pr11361.ll
pr14167.ll
pr18861.ll [Tests] Add one more case to LoopUnroll/pr18861.ll for better coverage. 2015-10-02 19:21:52 +00:00
pr27157.ll [LoopUnroll] Fix the way we update DT after complete unrolling. 2016-04-06 21:47:12 +00:00
pr28132.ll [LoopUnroll] Don't crash trying to unroll loop with EH pad exit 2016-06-15 00:19:56 +00:00
rebuild_lcssa.ll [LoopSimplify] When simplifying phis in loop-simplify, do it only if it preserves LCSSA form. 2016-09-27 21:03:45 +00:00
runtime-loop1.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
runtime-loop2.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
runtime-loop3.ll
runtime-loop4.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
runtime-loop5.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
runtime-loop.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
scevunroll.ll Revert "[IndVarSimplify] Rewrite loop exit values with their initial values from loop preheader" 2015-11-03 07:14:39 +00:00
shifted-tripcount.ll
tripcount-overflow.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
unloop.ll [LoopUnroll] Include hotness of region in opt remark 2016-07-29 19:29:47 +00:00
unroll-cleanup.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +00:00
unroll-cleanuppad.ll [LoopUnroll] Unroll loops which have exit blocks to EH pads 2016-05-03 03:57:40 +00:00
unroll-count.ll The patch set unroll disable pragma when unroll 2016-06-08 20:21:24 +00:00
unroll-heuristics-pgo.ll Use profile info to adjust loop unroll threshold. 2016-11-17 01:17:02 +00:00
unroll-opt-attribute.ll Loop unroller: set thresholds for optsize and minsize functions to zero 2016-05-10 21:45:55 +00:00
unroll-pragmas-disabled.ll
unroll-pragmas.ll Revert test change in r282894 as it's broken in some platforms. 2016-09-30 19:25:23 +00:00
update-loop-info-in-subloops.ll