llvm-project/llvm/test/Transforms/LoopUnroll
Haicheng Wu 1ef17e90b2 Reapply "[LoopUnroll] Use the upper bound of the loop trip count to fullly unroll a loop"
Reappy r284044 after revert in r284051. Krzysztof fixed the error in r284049.

The original summary:

This patch tries to fully unroll loops having break statement like this

for (int i = 0; i < 8; i++) {
    if (a[i] == value) {
        found = true;
        break;
    }
}

GCC can fully unroll such loops, but currently LLVM cannot because LLVM only
supports loops having exact constant trip counts.

The upper bound of the trip count can be obtained from calling
ScalarEvolution::getMaxBackedgeTakenCount(). Part of the patch is the
refactoring work in SCEV to prevent duplicating code.

The feature of using the upper bound is enabled under the same circumstance
when runtime unrolling is enabled since both are used to unroll loops without
knowing the exact constant trip count.

llvm-svn: 284053
2016-10-12 21:29:38 +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
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
full-unroll-heuristics.ll
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
pr10813.ll
pr11361.ll
pr14167.ll
pr18861.ll
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-loop.ll [LoopUnroll] Switch the default value of -unroll-runtime-epilog back to its original value. 2016-08-02 21:24:14 +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
scevunroll.ll
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-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