llvm/test/Transforms/LoopUnroll
Michael Zolotukhin 09dcb16d13 Don't recompute LCSSA after loop-unrolling when possible.
Summary:
Currently we always recompute LCSSA for outer loops after unrolling an
inner loop. That leads to compile time problem when we have big loop
nests, and we can solve it by avoiding unnecessary work. For instance,
if w eonly do partial unrolling, we don't break LCSSA, so we don't need
to rebuild it. Also, if all exits from the inner loop are inside the
enclosing loop, then complete unrolling won't break LCSSA either.

I replaced unconditional LCSSA recomputation with conditional recomputation +
unconditional assert and added several tests, which were failing when I
experimented with it.

Soon I plan to follow up with a similar patch for recalculation of dominators
tree.

Reviewers: hfinkel, dexonsmith, bogner, joker.eph, chandlerc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D14526

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@253126 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-14 05:51:41 +00:00
..
AArch64 [AArch64] Enable partial & runtime unrolling on cortex-a57 2015-03-09 06:14:28 +00:00
PowerPC [PPC/LoopUnrollRuntime] Don't avoid high-cost trip count computation on the PPC/A2 2015-05-21 20:30:23 +00:00
X86 Roll forward r243250 2015-07-26 19:10:03 +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 [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
2007-05-09-UnknownTripCount.ll
2007-11-05-Crash.ll
2011-08-08-PhiUpdate.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2011-08-09-IVSimplify.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2011-08-09-PhiUpdate.ll Fixup to r186268 and r186269: don't append -LABEL to CHECK-NOT. No functionality change. 2013-07-14 02:10:57 +00:00
2011-10-01-NoopTrunc.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2012-04-09-unroll-indirectbr.ll
basic.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
ephemeral.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
full-unroll-bad-cost.ll [LoopUnroll] Fix truncation bug in canUnrollCompletely. 2015-06-06 05:24:10 +00:00
full-unroll-crashers.ll [Unroll] Do not crash trying to propagate a value to vector load. 2015-09-22 22:27:12 +00:00
full-unroll-heuristics-2.ll [Unroll] Follow-up for r247769: fix a bug in UnrolledInstAnalyzer::visitLoad. 2015-09-22 21:41:29 +00:00
full-unroll-heuristics-cast.ll Tidy-up test case from r242257. 2015-07-15 01:51:51 +00:00
full-unroll-heuristics-cmp.ll Handle resolvable branches in complete loop unroll heuristic. 2015-07-24 01:53:04 +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 [Unroll] Rework the naming and structure of the new unroll heuristics. 2015-06-05 17:01:43 +00:00
high-cost-trip-count-computation.ll [LoopUnrollRuntime] Avoid high-cost trip count computation. 2015-04-14 03:20:38 +00:00
ignore-annotation-intrinsic-cost.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
loop-remarks.ll Fix vectorization remarks. 2014-04-29 20:06:10 +00:00
nsw-tripcount.ll [SCEV] Improve Scalar Evolution's use of no {un,}signed wrap flags 2014-10-31 11:40:32 +00:00
partial-unroll-optsize.ll [LoopUnroll] Fix the partial unrolling threshold for small loop sizes 2015-01-10 00:30:55 +00:00
pr10813.ll
pr11361.ll
pr14167.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
pr18861.ll [Tests] Add one more case to LoopUnroll/pr18861.ll for better coverage. 2015-10-02 19:21:52 +00:00
rebuild_lcssa.ll Don't recompute LCSSA after loop-unrolling when possible. 2015-11-14 05:51:41 +00:00
runtime-loop1.ll DI: Reverse direction of subprogram -> function edge. 2015-11-05 22:03:56 +00:00
runtime-loop2.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
runtime-loop3.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
runtime-loop4.ll [LoopUnrollRuntime] Avoid high-cost trip count computation. 2015-04-14 03:20:38 +00:00
runtime-loop5.ll [LoopUnrollRuntime] Clean up a predicate. 2015-04-12 01:24:01 +00:00
runtime-loop.ll [LoopUnrollRuntime] Avoid high-cost trip count computation. 2015-04-14 03:20:38 +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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
tripcount-overflow.ll Partial fix for bug 22589 2015-02-18 19:32:25 +00:00
unloop.ll Update Transforms tests to use CHECK-LABEL for easier debugging. No functionality change. 2013-07-14 01:42:54 +00:00
unroll-cleanup.ll Add another InstCombine pass after LoopUnroll. 2015-05-14 22:02:54 +00:00
unroll-pragmas-disabled.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
unroll-pragmas.ll Add new llvm.loop.unroll.enable metadata. 2015-08-10 17:28:08 +00:00
update-loop-info-in-subloops.ll LoopUnroll: Create sub-loops in LoopInfo 2014-10-07 21:19:00 +00:00