1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00
llvm-mirror/test/Transforms/IndVarSimplify
Philip Reames c08128ee52 [LoopDeletion] Handle inner loops w/untaken backedges
This builds on the restricted after initial revert form of D93906, and adds back support for breaking backedges of inner loops. It turns out the original invalidation logic wasn't quite right, specifically around the handling of LCSSA.

When breaking the backedge of an inner loop, we can cause blocks which were in the outer loop only because they were also included in a sub-loop to be removed from both loops. This results in the exit block set for our original parent loop changing, and thus a need for new LCSSA phi nodes.

This case happens when the inner loop has an exit block which is also an exit block of the parent, and there's a block in the child which reaches an exit to said block without also reaching an exit to the parent loop.

(I'm describing this in terms of the immediate parent, but the problem is general for any transitive parent in the nest.)

The approach implemented here involves a potentially expensive LCSSA rebuild.  Perf testing during review didn't show anything concerning, but we may end up needing to revert this if anyone encounters a practical compile time issue.

Differential Revision: https://reviews.llvm.org/D94378
2021-01-22 16:31:29 -08:00
..
AMDGPU
ARM [SCEV] Strenthen nowrap flags after constant folding for mul exprs 2020-10-25 19:43:58 +01:00
NVPTX
X86 [LoopDeletion] Handle inner loops w/untaken backedges 2021-01-22 16:31:29 -08:00
2002-09-09-PointerIndVar.ll
2003-04-16-ExprAnalysis.ll
2003-09-23-NotAtTop.ll
2003-12-10-RemoveInstrCrash.ll
2003-12-15-Crash.ll
2004-03-10-PHIInsertionBug.ll
2004-04-05-InvokeCastCrash.ll
2004-04-07-ScalarEvolutionCrash.ll
2005-02-11-InvokeCrash.ll
2005-02-17-TruncateExprCrash.ll
2005-02-26-ExitValueCompute.ll
2005-06-15-InstMoveCrash.ll
2005-11-18-Crash.ll
2006-03-31-NegativeStride.ll
2006-06-16-Indvar-LCSSA-Crash.ll
2006-09-20-LFTR-Crash.ll
2006-12-10-BitCast.ll
2007-01-06-TripCount.ll
2007-06-06-DeleteDanglesPtr.ll
2007-11-23-BitcastCrash.ll
2008-06-15-SCEVExpanderBug.ll
2008-09-02-IVType.ll
2008-10-03-CouldNotCompute.ll
2008-11-25-APFloatAssert.ll
2009-04-22-IndvarCrash.ll
2009-04-27-Floating.ll
2009-05-24-useafterfree.ll
2011-09-10-widen-nsw.ll
2011-09-19-vectoriv.ll
2011-09-27-hoistsext.ll
2011-10-27-lftrnull.ll
2011-11-01-lftrptr.ll [NFC][IndVars] Autogenerate check lines in tests being affected by upcoming patch 2020-10-15 23:15:04 +03:00
2011-11-17-selfphi.ll
2012-10-19-congruent-constant.ll
2014-06-21-congruent-constant.ll [NewPM][LoopUnswitch] Pin loop-unswitch to legacy PM or use simple-loop-unswitch 2020-08-06 10:56:00 -07:00
2020-12-15-trunc-bug-expensive-range-inference.ll [SCEV] Add missing type check into getRangeForAffineNoSelfWrappingAR 2020-12-15 14:50:32 +07:00
ada-loops.ll
addrec_no_exec_on_every_iteration.ll Return "[SCEV] Prove implicaitons via AddRec start" 2020-10-08 11:15:35 +07:00
ashr-tripcount.ll
avoid-i0.ll
backedge-on-min-max.ll
bec-cmp.ll
canonicalize-cmp.ll [Test] Auto-generated checks for some IndVarSimplify tests 2020-09-08 11:15:40 +07:00
casted-argument.ll
checks_against_min_value.ll [Test] Missing range check removal opportunity 2020-09-18 17:55:23 +07:00
const_phi.ll
constant_result.ll
constant-fold.ll
crash.ll
dangling-use.ll
divide-pointer.ll
dont-recompute.ll
drop-exact.ll
elim-extend.ll [IndVars] Regenerate test checks (NFC) 2020-06-29 20:33:50 +02:00
eliminate-comparison.ll [SCEV] Strength nowrap flags after constant folding 2020-10-25 18:00:22 +01:00
eliminate-exit-no-dl.ll
eliminate-exit.ll
eliminate-max.ll
eliminate-overflow-modified.ll [IndVarSimplify] Fix Modified status for removal of overflow intrinsics 2020-09-29 13:20:59 +02:00
eliminate-rem.ll
eliminate-sat.ll
exit_value_test2.ll [LoopDeletion] Break backedge of outermost loops when known not taken 2021-01-10 16:02:33 -08:00
exit_value_test3.ll
exit_value_tests.ll [SimplifyCFG] MergeBlockIntoPredecessor() already knows how to preserve DomTree 2020-12-17 01:03:49 +03:00
floating-point-iv.ll [SCEV] Drop cached ranges of AddRecs after flag update 2020-11-10 12:37:12 +07:00
full_widening.ll
indirectbr.ll
infer-poison-flags.ll [Test] Auto-update for some tests 2020-10-14 17:03:33 +07:00
interesting-invoke-use.ll OpaquePtr: Update more tests to use typed sret 2020-11-20 20:08:43 -05:00
iterationCount_zext_or_trunc.ll
iv-fold.ll
iv-sext.ll
iv-widen-elim-ext.ll
iv-zext.ll
lcssa-preservation.ll
lftr_disabled.ll
lftr-address-space-pointers.ll
lftr-dead-ivs.ll [Test] Auto-update for some tests 2020-10-14 17:03:33 +07:00
lftr-multi-exit.ll [Test] Auto-generated checks for some IndVarSimplify tests 2020-09-08 11:15:40 +07:00
lftr-pr20680.ll
lftr-pr31181.ll [Test] Auto-update for some tests 2020-10-14 17:03:33 +07:00
lftr-pr41998.ll
lftr-promote.ll
lftr-reuse.ll
lftr.ll [Test] Auto-update for some tests 2020-10-14 17:03:33 +07:00
loop_evaluate7.ll
loop_evaluate8.ll
loop_evaluate9.ll OpaquePtr: Bulk update tests to use typed byval 2020-11-20 14:00:46 -05:00
loop_evaluate11.ll
loop_evaluate_1.ll [SimplifyCFG] Teach FoldTwoEntryPHINode() to preserve DomTree 2020-12-20 00:18:33 +03:00
loop_evaluate_2.ll [SimplifyCFG] Teach FoldTwoEntryPHINode() to preserve DomTree 2020-12-20 00:18:33 +03:00
loop_evaluate_3.ll
loop_evaluate_4.ll
loop_evaluate_5.ll
loop_evaluate_6.ll
loop-predication.ll
lrev-existing-umin.ll
masked-iv.ll
monotonic_checks.ll Return "[IndVars] Remove monotonic checks with unknown exit count" 2020-10-28 18:51:40 +07:00
no-iv-rewrite.ll [NFC] Run update script on test 2020-08-17 12:53:14 +01:00
phi-uses-value-multiple-times.ll
post-inc-range.ll
pr18223.ll [Test] Auto-generated checks for some IndVarSimplify tests 2020-09-08 11:15:40 +07:00
pr22222.ll
pr24783.ll
pr24952.ll
pr25060.ll
pr25578.ll
pr26974.ll
pr28705.ll
pr32045.ll
pr38674.ll
pr38855.ll [FunctionAttrs] Rename functionattrs -> function-attrs 2020-07-28 09:09:13 -07:00
pr39673.ll
pr40454.ll
pr45835.ll
predicated_ranges.ll [IndVars] Use isLoopBackedgeGuardedByCond for last iteration check 2020-11-26 12:37:21 +07:00
preserve-memoryssa.ll
preserve-signed-wrap.ll
promote-iv-to-eliminate-casts.ll Revert D89381 "[SCEV] Recommit "Use nw flag and symbolic iteration count to sharpen ranges of AddRecs", attempt 2" 2020-10-20 21:03:58 -07:00
replace-loop-exit-folds.ll [SCEV] Strenthen nowrap flags after constant folding for mul exprs 2020-10-25 19:43:58 +01:00
replace-sdiv-by-udiv.ll
replace-srem-by-urem.ll
rewrite-loop-exit-value.ll
rewrite-loop-exit-values-phi.ll [IndVarSimplify] Fix Modified status when handling dead PHI nodes 2020-11-26 14:28:21 +01:00
rlev-add-me.ll
scev-expander-preserve-lcssa.ll [test] Fix scev-expander-preserve-lcssa.ll under NPM 2020-12-10 09:46:08 -08:00
scevexpander-phi-base-case.ll
sentinel.ll [Test] Add one more test on IndVars that was failing on one of older builds 2020-08-07 14:23:55 +07:00
shared-exit-between-nested-loop.ll [IndVarSimplify] Notify top most loop to drop cached exit counts 2020-11-19 15:37:54 +08:00
sharpen-range.ll
shrunk-constant.ll [test] Fix shrunk-constant.ll under NPM 2020-10-21 21:21:24 -07:00
signed-trip-count.ll
single-element-range.ll
sink-alloca.ll
sink-from-preheader.ll
sink-trapping.ll
strengthen-overflow.ll
tripcount_compute.ll
tripcount_infinite.ll [NFCI][SimplifyCFG] Mark all the SimplifyCFG tests that already don't invalidate DomTree as such 2020-12-17 01:03:49 +03:00
trivial-checks.ll [Test] Add tests showing that IndVars cannot prove (X + 1 > X) 2020-09-17 22:37:43 +07:00
udiv-invariant-but-traps.ll
udiv.ll
ult-sub-to-eq.ll
use-range-metadata.ll
variable-stride-ivs-0.ll
widen-i32-i8ptr.ll [NFC][IndVars] Autogenerate check lines in tests being affected by upcoming patch 2020-10-15 23:15:04 +03:00
widen-loop-comp.ll [IndVars] A test for adding trunc instructions to unwind blocks 2020-12-18 17:08:26 +07:00
zext-nuw.ll [IndVars] Regenerate test checks (NFC) 2020-11-02 22:31:11 +01:00