llvm-project/llvm/test/Transforms/LoopUnroll
William S. Moses d9da6a535f [LICM][PhaseOrder] Don't speculate in LICM until after running loop rotate
LICM will speculatively hoist code outside of loops. This requires removing information, like alias analysis (https://github.com/llvm/llvm-project/issues/53794), range information (https://bugs.llvm.org/show_bug.cgi?id=50550), among others. Prior to https://reviews.llvm.org/D99249 , LICM would only be run after LoopRotate. Running Loop Rotate prior to LICM prevents a instruction hoist from being speculative, if it was conditionally executed by the iteration (as is commonly emitted by clang and other frontends). Adding the additional LICM pass first, however, forces all of these instructions to be considered speculative, even if they are not speculative after LoopRotate. This destroys information, resulting in performance losses for discarding this additional information.

This PR modifies LICM to accept a ``speculative'' parameter which allows LICM to be set to perform information-loss speculative hoists or not. Phase ordering is then modified to not perform the information-losing speculative hoists until after loop rotate is performed, preserving this additional information.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D119965
2022-02-17 20:13:07 -05:00
..
AArch64 [LICM][PhaseOrder] Don't speculate in LICM until after running loop rotate 2022-02-17 20:13:07 -05: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