llvm-project/llvm/test/Transforms/LoopUnroll
Roman Lebedev 371fcb720e
[SimplifyCFG][PhaseOrdering] Defer lowering switch into an integer range comparison and branch until after at least the IPSCCP
That transformation is lossy, as discussed in
https://github.com/llvm/llvm-project/issues/53853
and https://github.com/rust-lang/rust/issues/85133#issuecomment-904185574

This is an alternative to D119839,
which would add a limited IPSCCP into SimplifyCFG.

Unlike lowering switch to lookup, we still want this transformation
to happen relatively early, but after giving a chance for the things
like CVP to do their thing. It seems like deferring it just until
the IPSCCP is enough for the tests at hand, but perhaps we need to
be more aggressive and disable it until CVP.

Fixes https://github.com/llvm/llvm-project/issues/53853
Refs. https://github.com/rust-lang/rust/issues/85133

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D119854
2022-02-17 12:13:55 +03:00
..
AArch64 [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
AMDGPU [AMDGPU][CostModel] Refine cost model for control-flow instructions. 2021-04-10 09:20:24 +03:00
ARM [SimplifyCFG][PhaseOrdering] Defer lowering switch into an integer range comparison and branch until after at least the IPSCCP 2022-02-17 12:13:55 +03:00
Hexagon
PowerPC [PowerPC] Do not increase cost for getUserCost with MMA types 2021-12-21 13:36:08 -06:00
RISCV [RISCV] Add target specific loop unrolling and peeling preferences 2021-12-18 12:54:50 -08:00
WebAssembly [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
X86 [BasicTTIImpl][LoopUnroll] getUnrollingPreferences(): emit ORE remark when advising against unrolling due to a call in a loop 2021-08-03 00:57:26 +03: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 [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
2011-08-09-IVSimplify.ll
2011-08-09-PhiUpdate.ll [LoopUnroll] Remove unrelated passes from test (NFC) 2022-01-07 09:20:23 +01:00
2011-10-01-NoopTrunc.ll
2012-04-09-unroll-indirectbr.ll [NFCI][SimplifyCFG] Mark all the SimplifyCFG tests that already don't invalidate DomTree as such 2020-12-17 01:03:49 +03:00
FullUnroll.ll [test] Fix FullUnroll.ll 2020-09-17 15:56:13 -07:00
assume-timeout.ll [ValueTracking] add scan limit for assumes 2021-02-15 15:24:20 -05:00
basic.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
callbr.ll [llvm][test] rewrite callbr to use i rather than X constraint NFC 2022-01-11 11:31:08 -08:00
complete_unroll_profitability_with_assume.ll
convergent.ll
dce.ll Do actual DCE in LoopUnroll (try 4) 2021-05-19 10:25:31 -07:00
debug-info.ll
disable-full-unroll-by-opt.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
disable-loop-unrolling_forced.ll
disable_nonforced.ll
disable_nonforced_count.ll
disable_nonforced_enable.ll
disable_nonforced_full.ll
ephemeral.ll
epilog_const_phi.ll
followup.ll
full-unroll-bad-cost.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-crashers.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics-2.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics-cmp.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics-dce.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics-geps.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics-phi-prop.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-heuristics.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
full-unroll-invariant.ll Do actual DCE in LoopUnroll (try 4) 2021-05-19 10:25:31 -07:00
full-unroll-keep-first-exit.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
full-unroll-one-unpredictable-exit.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
high-cost-trip-count-computation.ll
ignore-annotation-intrinsic-cost.ll
invalidate_right_loop.ll
loop-remarks-with-hotness.ll [LoopUnroll] Simplify optimization remarks 2021-06-18 23:47:03 +02:00
loop-remarks.ll
multiple-exits.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
noalias.ll [LoopUnroll] Use llvm.experimental.noalias.scope.decl for duplicating noalias metadata as needed 2021-01-24 13:48:20 +01:00
nonlatchcondbr.ll Revert "[unroll] Prune all but first copy of invariant exit" 2022-01-03 11:57:35 -08:00
not-rotated.ll
opt-levels.ll [NewPM] Run non-trivial loop unswitching under -O2/3/s/z 2021-01-12 11:04:40 -08:00
optsize-loop-size.ll Do actual DCE in LoopUnroll (try 4) 2021-05-19 10:25:31 -07:00
partial-unroll-const-bounds.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
partial-unroll-dead-instructions.ll
partial-unroll-non-latch-exit.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
partially-unroll-unconditional-latch.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
peel-loop-and-unroll.ll [LoopUnroll] Separate peeling from unrolling 2021-06-05 10:32:00 +02:00
peel-loop-conditions-pgo-1.ll
peel-loop-conditions-pgo-2.ll
peel-loop-conditions.ll Loop peeling: check that latch is conditional branch 2021-01-20 11:01:16 -05:00
peel-loop-inner.ll [SimplifyCFG] performBranchToCommonDestFolding(): require block-closed SSA form for bonus instructions (PR51125) 2021-09-09 12:28:09 +03:00
peel-loop-irreducible.ll
peel-loop-negative.ll
peel-loop-nests.ll
peel-loop-noalias-scope-decl.ll [LoopPeel] Use llvm.experimental.noalias.scope.decl for duplicating noalias metadata as needed. 2021-02-01 10:01:17 +01:00
peel-loop-not-forced.ll
peel-loop-pgo-deopt-idom-2.ll [LoopPeel] Allow peeling with multiple unreachable-terminated exit blocks. 2021-08-25 13:26:40 +01:00
peel-loop-pgo-deopt-idom.ll [LoopPeel] Allow peeling with multiple unreachable-terminated exit blocks. 2021-08-25 13:26:40 +01:00
peel-loop-pgo-deopt.ll [LoopPeel] Allow peeling with multiple unreachable-terminated exit blocks. 2021-08-25 13:26:40 +01:00
peel-loop-pgo.ll Revert "Use uint64_t for branch weights instead of uint32_t" 2020-10-31 00:25:32 -07:00
peel-loop-scev-invalidate.ll
peel-loop.ll [NewPM] Consistently use 'simplifycfg' rather than 'simplify-cfg' 2021-07-09 09:47:03 +02:00
peel-loop2.ll
peel-multiple-unreachable-exits.ll [LoopPeel] Peel loops with exits followed by an unreachable or deopt block 2021-11-02 23:12:04 +07:00
peel-to-turn-invariant-accesses-dereferenceable.ll [LoopPeel] Peel if it turns invariant loads dereferenceable. 2021-10-12 11:42:28 +01:00
pr10813.ll
pr11361.ll
pr14167.ll Re-land "[PowerPC] Remove QPX/A2Q BGQ/BGP CNK support" 2020-07-28 14:00:11 +00:00
pr18861.ll
pr27157.ll
pr28132.ll
pr31718.ll Remove loop invariant exit conditions from tests in advance of D116496 2022-01-03 09:44:28 -08:00
pr33437.ll [LoopUnroll] Separate peeling from unrolling 2021-06-05 10:32:00 +02:00
pr45939-peel-count-and-complete-unroll.ll [LoopUnroll] Separate peeling from unrolling 2021-06-05 10:32:00 +02:00
rebuild_lcssa.ll [LoopUnroll] Regenerate test checks (NFC) 2021-05-24 17:26:07 +02:00
revert-D110922.ll [Test] Add commit justifying revert of D110922 2021-10-09 14:32:46 +07:00
revisit.ll [runtime] Move prolog/epilog block to a post-simplify strategy 2021-08-31 09:29:36 -07:00
runtime-epilog-debuginfo.ll Revert "[NFC] remove explicit default value for strboolattr attribute in tests" 2021-05-24 19:43:40 +02:00
runtime-li.ll [LoopUnroll] Make some tests more robust (NFC) 2021-04-17 20:59:20 +02:00
runtime-loop-at-most-two-exits.ll [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
runtime-loop-branchweight.ll Revert "Use uint64_t for branch weights instead of uint32_t" 2020-10-31 00:25:32 -07:00
runtime-loop-known-exit.ll [LoopUnroll] Use smallest exact trip count from any exit 2021-06-20 20:58:26 +02:00
runtime-loop-multiexit-dom-verify.ll [LoopUnroll] Make test more robust by removing undef. 2022-01-08 15:44:23 +00:00
runtime-loop-multiple-exits.ll Revert "[unroll] Prune all but first copy of invariant exit" 2022-01-03 11:57:35 -08:00
runtime-loop-non-exiting-latch.ll
runtime-loop.ll [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
runtime-loop1.ll [runtime] Move prolog/epilog block to a post-simplify strategy 2021-08-31 09:29:36 -07:00
runtime-loop2.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
runtime-loop3.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
runtime-loop4.ll
runtime-loop5.ll [SCEV] Canonicalize X - urem X, Y patterns 2021-11-16 11:59:21 -08:00
runtime-multiexit-heuristic.ll Compute estimated trip counts for multiple exit loops 2021-12-09 09:53:49 -08:00
runtime-small-upperbound.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
runtime-unroll-assume-no-remainder.ll [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
runtime-unroll-remainder.ll [runtime-unroll] Use incrementing IVs instead of decrementing ones 2021-11-12 15:44:58 -08:00
scevunroll.ll Revert "[unroll] Prune all but first copy of invariant exit" 2022-01-03 11:57:35 -08:00
shifted-tripcount.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
tripcount-overflow.ll
unloop.ll [LoopUnroll] Use smallest exact trip count from any exit 2021-06-20 20:58:26 +02:00
unroll-after-peel.ll [LoopUnroll] Fix a crash 2021-01-11 10:19:26 +07:00
unroll-cleanup.ll
unroll-cleanuppad.ll
unroll-cost-symbolic-execute.ll [unroll] Use value domain for symbolic execution based cost model 2021-05-26 08:41:25 -07:00
unroll-count.ll
unroll-header-exiting-with-phis-multiple-exiting-blocks.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
unroll-header-exiting-with-phis.ll Do actual DCE in LoopUnroll (try 4) 2021-05-19 10:25:31 -07:00
unroll-heuristics-pgo.ll
unroll-loop-invalidation.ll [NewPM] Hide pass manager debug logging behind -debug-pass-manager-verbose 2021-05-07 21:51:47 -07:00
unroll-maxcount.ll
unroll-opt-attribute.ll [PGO][PGSO] Let unroll hints take precedence over PGSO. 2021-01-07 10:10:31 -08:00
unroll-pragmas-disabled.ll
unroll-pragmas.ll
unroll-preserve-scev-lcssa.ll
unroll-unconditional-latch.ll [unroll] Keep unrolled iterations with initial iteration 2021-11-12 11:40:50 -08:00
update-loop-info-in-subloops.ll [NewPM][LoopUnroll] Rename unroll* to loop-unroll* 2020-06-26 09:28:32 -07:00
wrong_assert_in_peeling.ll [LoopUnroll] Separate peeling from unrolling 2021-06-05 10:32:00 +02:00