llvm-project/llvm/test/Transforms/IndVarSimplify
Max Kazantsev 613af1f7ca [SCEV] Prove implications for SCEVUnknown Phis
This patch teaches SCEV how to prove implications for SCEVUnknown nodes that are Phis.
If we need to prove `Pred` for `LHS, RHS`, and `LHS` is a Phi with possible incoming values
`L1, L2, ..., LN`, then if we prove `Pred` for `(L1, RHS), (L2, RHS), ..., (LN, RHS)` then we can also
prove it for `(LHS, RHS)`. If both `LHS` and `RHS` are Phis from the same block, it is sufficient
to prove the predicate for values that come from the same predecessor block.

The typical case that it handles is that we sometimes need to prove that `Phi(Len, Len - 1) >= 0`
given that `Len > 0`. The new logic was added to `isImpliedViaOperations` and only uses it and
non-recursive reasoning to prove the facts we need, so it should not hurt compile time a lot.

Differential Revision: https://reviews.llvm.org/D44001
Reviewed By: anna

llvm-svn: 329150
2018-04-04 05:46:47 +00:00
..
AMDGPU AMDGPU: Mark all unspecified CC functions in tests as amdgpu_kernel 2017-03-21 21:39:51 +00:00
NVPTX
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 [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
2005-06-15-InstMoveCrash.ll
2005-11-18-Crash.ll
2006-03-31-NegativeStride.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
2006-06-16-Indvar-LCSSA-Crash.ll
2006-09-20-LFTR-Crash.ll
2006-12-10-BitCast.ll
2007-01-06-TripCount.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
2007-06-06-DeleteDanglesPtr.ll
2007-11-23-BitcastCrash.ll
2008-06-15-SCEVExpanderBug.ll
2008-09-02-IVType.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
2008-10-03-CouldNotCompute.ll
2008-11-25-APFloatAssert.ll
2009-04-14-shorten_iv_vars.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
2009-04-15-shorten-iv-vars-2.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
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 ConstantFold: Fold getelementptr (i32, i32* null, i64 undef) to null. 2017-05-08 17:37:29 +00:00
2011-11-01-lftrptr.ll opt: Rename -default-data-layout flag to -data-layout and make it always override the layout. 2017-02-17 17:36:52 +00:00
2011-11-15-multiexit.ll
2011-11-17-selfphi.ll
2012-07-17-lftr-undef.ll
2012-10-19-congruent-constant.ll
2014-06-21-congruent-constant.ll
ada-loops.ll
ashr-tripcount.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
avoid-i0.ll
backedge-on-min-max.ll [PM] Port IndVarSimplify to the new pass manager 2016-06-05 18:01:19 +00:00
bec-cmp.ll
canonicalize-cmp.ll Re-enable "[IndVars] Canonicalize comparisons between non-negative values and indvars" 2017-07-08 17:17:30 +00:00
casted-argument.ll
const_phi.ll
constant-fold.ll [SimplifyIndVar] Do not fail when we constant fold an IV user to ConstantPointerNull 2017-09-29 16:32:12 +00:00
crash.ll
dangling-use.ll
divide-pointer.ll
dont-recompute.ll
elim-extend.ll Extend trip count instead of truncating IV in LFTR, when legal 2016-08-11 21:31:40 +00:00
eliminate-comparison.ll Re-enable "[IndVars] Canonicalize comparisons between non-negative values and indvars" 2017-07-08 17:17:30 +00:00
eliminate-max.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
eliminate-rem.ll [SimplifyIndvar] Replace the srem used by IV if we can prove both of its operands are non-negative 2017-09-25 17:39:40 +00:00
exit_value_test2.ll [SCEV/IndVars] Always compute loop exiting values if the backedge count is 0 2017-08-01 22:37:58 +00:00
exit_value_test3.ll
exit_value_tests.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
floating-point-iv.ll
huge_muls.ll [SCEV] Make MulOpsInlineThreshold lower to avoid excessive compilation time 2017-06-21 07:28:13 +00:00
indirectbr.ll
inner-loop-by-latch-cond.ll [SCEV] Re-land: Fix isKnownPredicate 2018-03-19 06:35:30 +00:00
inner-loop.ll Re-apply [SCEV] Fix isLoopEntryGuardedByCond usage 2018-02-05 05:49:47 +00:00
interesting-invoke-use.ll
iterationCount_zext_or_trunc.ll
iv-fold.ll
iv-sext.ll
iv-widen-elim-ext.ll [IndVars] Change the order to compute WidenAddRec in widenIVUse. 2016-11-15 17:34:52 +00:00
iv-widen.ll [IndVars] Change the order to compute WidenAddRec in widenIVUse. 2016-11-15 17:34:52 +00:00
iv-zext.ll
lcssa-preservation.ll
lftr-address-space-pointers.ll
lftr-extend-const.ll
lftr-other-uses.ll
lftr-promote.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
lftr-reuse.ll
lftr-udiv-tripcount.ll
lftr-wide-trip-count.ll Extend trip count instead of truncating IV in LFTR, when legal 2016-08-11 21:31:40 +00:00
lftr-zext.ll
lftr_disabled.ll [IndVars] Add an option to be able to disable LFTR 2017-06-09 06:11:59 +00:00
lftr_simple.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop-invariant-conditions.ll [NFC] Fix metadata placement in test 2018-02-15 07:13:18 +00:00
loop_evaluate7.ll
loop_evaluate8.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate9.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate10.ll [SCEV] Make exact taken count calculation more optimistic 2018-03-27 07:30:38 +00:00
loop_evaluate11.ll
loop_evaluate_1.ll
loop_evaluate_2.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate_3.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate_4.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate_5.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
loop_evaluate_6.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
lrev-existing-umin.ll
masked-iv.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
no-iv-rewrite.ll
overflow-intrinsics.ll [IndVars] Eliminate op.with.overflow when possible (re-apply) 2016-05-29 00:36:25 +00:00
phi-uses-value-multiple-times.ll
polynomial-expand.ll
post-inc-range.ll [IndVarSimplify] Teach calculatePostIncRange to take guards into account 2016-10-19 19:43:54 +00:00
pr18223.ll
pr20680.ll
pr22222.ll
pr24356.ll
pr24783.ll
pr24804.ll
pr24952.ll
pr24956.ll
pr25047.ll
pr25051.ll
pr25060.ll
pr25360.ll
pr25421.ll
pr25576.ll
pr25578.ll
pr26207.ll
pr26973.ll
pr26974.ll
pr27133.ll
pr28935.ll [IndVars] Ignore (s|z)exts that don't extend the induction variable 2016-08-13 00:58:31 +00:00
pr32045.ll [ValueTracking] Don't do an unchecked shift in ComputeNumSignBits 2017-02-25 20:30:45 +00:00
pr35406.ll [SCEV] Fix the movement of insertion point in expander. PR35406. 2017-12-15 05:24:42 +00:00
preserve-signed-wrap.ll
promote-iv-to-eliminate-casts.ll [SCEV] Prove implications for SCEVUnknown Phis 2018-04-04 05:46:47 +00:00
replace-iv-with-loop-invariant.ll [SimplifyIndVar] Replace IVUsers with loop invariant whenever possible 2017-10-12 02:54:11 +00:00
replace-sdiv-by-udiv.ll [SimplifyIndvar] Replace the sdiv used by IV if we can prove both of its operands are non-negative 2017-03-30 21:56:56 +00:00
replace-srem-by-urem.ll [SimplifyIndVar] Constant fold IV users 2017-09-27 03:11:46 +00:00
rewrite-loop-exit-value.ll
scev-phi-debug-info.ll IndVarSimplify: preserve debug information attached to widened PHI nodes. 2017-11-02 23:17:06 +00:00
scevexpander-phi-base-case.ll [ScalarEvolution] Fix base condition in isNormalAddRecPHI. 2017-12-14 14:47:52 +00:00
sharpen-range.ll [PM] Port IndVarSimplify to the new pass manager 2016-06-05 18:01:19 +00:00
shrunk-constant.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
signed-trip-count.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
single-element-range.ll
sink-alloca.ll
sink-trapping.ll [LLVM] Remove unwanted --check-prefix=CHECK from unit tests. NFC. 2016-04-19 23:51:52 +00:00
strengthen-overflow.ll [IndVarSimplify] Add AShr exact flags using induction variables ranges. 2017-07-05 13:25:58 +00:00
tripcount_compute.ll
tripcount_infinite.ll
udiv-invariant-but-traps.ll
udiv.ll Revert rL316568 because of sudden performance drop on ARM 2017-10-27 04:17:44 +00:00
uglygep.ll [IndVars] Un-grepify test; NFC 2016-08-03 20:53:23 +00:00
ult-sub-to-eq.ll Extend trip count instead of truncating IV in LFTR, when legal 2016-08-11 21:31:40 +00:00
use-range-metadata.ll
variable-stride-ivs-0.ll
variable-stride-ivs-1.ll
verify-scev.ll
widen-loop-comp.ll Re-enable "[IndVars] Canonicalize comparisons between non-negative values and indvars" 2017-07-08 17:17:30 +00:00
widen-nsw.ll
zext-nuw.ll