llvm-project/llvm/test/Transforms/LoopUnroll
Andrew Wei 0af3e6a22d [InstCombine] Sink instructions with multiple users in a successor block.
This patch tries to sink instructions when they are only used in a successor block.

This is a further enhancement patch based on Anna's commit:
D109700, which allows sinking an instruction having multiple uses in a single user.

In this patch, sink instructions with multiple users in a single successor block will be supported.
It could fix a known issue from rust:
  https://github.com/rust-lang/rust/issues/51346#issuecomment-394443610

Reviewed By: nikic, reames

Differential Revision: https://reviews.llvm.org/D121585
2022-03-18 11:53:45 +08: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
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
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
full-unroll-crashers.ll
full-unroll-heuristics-2.ll
full-unroll-heuristics-cmp.ll
full-unroll-heuristics-dce.ll
full-unroll-heuristics-geps.ll
full-unroll-heuristics-phi-prop.ll
full-unroll-heuristics.ll
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
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
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
runtime-loop3.ll
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 [InstCombine] Sink instructions with multiple users in a successor block. 2022-03-18 11:53:45 +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
wrong_assert_in_peeling.ll [LoopUnroll] Separate peeling from unrolling 2021-06-05 10:32:00 +02:00