llvm-project/llvm/test/Analysis/ScalarEvolution
Max Kazantsev fdfd98ceec [SCEV] Limit AddRec "simplifications" to avoid combinatorial explosions
SCEV's transform that turns `{A1,+,A2,+,...,+,An}<L> * {B1,+,B2,+,...,+,Bn}<L>` into
a single AddRec of size `2n+1` with complex combinatorial coefficients can easily
trigger exponential growth of the SCEV (in case if nothing gets folded and simplified).
We tried to restrain this transform using the option `scalar-evolution-max-add-rec-size`,
but its default value seems to be insufficiently small: the test attached to this patch
with default value of this option `16` has a SCEV of >3M symbols (when printed out).

This patch reduces the simplification limit. It is not a cure to combinatorial
explosions, but at least it reduces this corner case to something more or less
reasonable.

Differential Revision: https://reviews.llvm.org/D53282
Reviewed By: sanjoy

llvm-svn: 344584
2018-10-16 05:26:21 +00:00
..
2007-07-15-NegativeStride.ll
2007-08-06-MisinterpretBranch.ll
2007-08-06-Unsigned.ll
2007-09-27-LargeStepping.ll
2007-11-14-SignedAddRec.ll
2007-11-18-OrInstruction.ll
2008-02-11-ReversedCondition.ll
2008-02-12-SMAXTripCount.ll
2008-02-15-UMax.ll
2008-05-25-NegativeStepToZero.ll
2008-06-12-BinomialInt64.ll
2008-07-12-UnneededSelect1.ll
2008-07-12-UnneededSelect2.ll
2008-07-19-InfiniteLoop.ll
2008-07-19-WrappingIV.ll
2008-07-29-SGTTripCount.ll
2008-07-29-SMinExpr.ll
2008-08-04-IVOverflow.ll
2008-08-04-LongAddRec.ll
2008-11-02-QuadraticCrash.ll
2008-11-15-CubicOOM.ll
2008-11-18-LessThanOrEqual.ll
2008-11-18-Stride1.ll
2008-11-18-Stride2.ll
2008-12-08-FiniteSGE.ll
2008-12-11-SMaxOverflow.ll
2008-12-14-StrideAndSigned.ll
2008-12-15-DontUseSDiv.ll
2009-01-02-SignedNegativeStride.ll
2009-04-22-TruncCast.ll
2009-05-09-PointerEdgeCount.ll
2009-07-04-GroupConstantsWidthMismatch.ll
2010-09-03-RequiredTransitive.ll
2011-03-09-ExactNoMaxBECount.ll
2011-04-26-FoldAddRec.ll [PM] Clean up the testing for IVUsers, especially with the new PM. 2017-01-15 09:29:27 +00:00
2011-10-04-ConstEvolve.ll
2012-03-26-LoadConstant.ll
2012-05-18-LoopPredRecurse.ll [PM] Clean up the testing for IVUsers, especially with the new PM. 2017-01-15 09:29:27 +00:00
2012-05-29-MulAddRec.ll [SimplifyIndVars] Ignore dead users 2018-06-13 02:25:32 +00:00
SolveQuadraticEquation.ll
ZeroStep.ll [SCEV] createAddRecFromPHI: Optimize for the most common case. 2017-05-03 23:53:38 +00:00
and-xor.ll [SCEV] Simplify zext/trunc idiom that appears when handling bitmasks. 2018-06-14 17:13:48 +00:00
avoid-assume-hang.ll
avoid-infinite-recursion-0.ll
avoid-infinite-recursion-1.ll [PM] Clean up the testing for IVUsers, especially with the new PM. 2017-01-15 09:29:27 +00:00
avoid-smax-0.ll
avoid-smax-1.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
binomial-explision.ll [SCEV] Limit AddRec "simplifications" to avoid combinatorial explosions 2018-10-16 05:26:21 +00:00
cache_loop_exit_limit.ll [SCEV] Re-enable "Cache results of computeExitLimit" 2017-08-03 08:41:30 +00:00
constant_condition.ll
different-loops-recs.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
div-overflow.ll
do-loop.ll
exact_iter_count.ll Re-enable "[SCEV] Make computeExitLimit more simple and more powerful" 2018-05-03 02:37:55 +00:00
exhaustive-trip-counts.ll [SCEV] Compute max be count from shift operator only if all else fails 2016-06-30 02:47:28 +00:00
expander-replace-congruent-ivs.ll [SCEVExpander] Fix a failed cast<> assertion 2016-05-11 17:41:41 +00:00
exponential-behavior.ll [SCEV] Fix exponential time complexity by caching 2017-04-24 00:09:46 +00:00
ext-antecedent.ll
extract-highbits-sameconstmask.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
extract-highbits-variablemask.ll [NFC][SCEV] Add tests related to bit masking (PR37793) 2018-06-20 07:54:11 +00:00
extract-lowbits-sameconstmask.ll [NFC][SCEV] Add tests related to bit masking (PR37793) 2018-06-20 07:54:11 +00:00
extract-lowbits-variablemask.ll [NFC][SCEV] Add tests related to bit masking (PR37793) 2018-06-20 07:54:11 +00:00
flags-from-poison-dbg.ll [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
flags-from-poison.ll [SCEV] Preserve NSW information for sext(subtract). 2017-08-04 20:19:46 +00:00
flattened-0.ll [SCEV] Add URem support to SCEV 2017-09-01 14:59:59 +00:00
fold.ll Fix incorrect CHECK-LABEL 2018-06-11 19:56:12 +00:00
guards.ll [SimplifyIndVars] Ignore dead users 2018-06-13 02:25:32 +00:00
how-far-to-zero.ll
implied-via-addition.ll [ScalarEvolution] Re-enable Predicate implication from operations 2017-03-31 12:05:30 +00:00
implied-via-division.ll [ScalarEvolution] Re-enable Predicate implication from operations 2017-03-31 12:05:30 +00:00
incorrect-nsw.ll
increasing-or-decreasing-iv.ll Remove trailing newline from test case; NFC 2016-03-09 01:51:44 +00:00
infer-prestart-no-wrap.ll [SCEV] Don't always add no-wrap flags to post-inc add recs 2016-05-29 00:32:17 +00:00
infer-via-ranges.ll
inner-loop-by-latch-cond-unknown.ll [SCEV] Re-land: Fix isKnownPredicate 2018-03-19 06:35:30 +00:00
invalidation.ll [PM] The assumption cache is fundamentally designed to be self-updating, 2017-01-15 00:26:18 +00:00
latch-dominating-conditions.ll
limit-depth.ll [SCEV] Use depth limit instead of local cache for SExt and ZExt 2017-06-30 05:04:09 +00:00
load-with-range-metadata.ll
load.ll
lshr-shl-differentconstmask.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
max-addops-inline.ll [SCEV] Introduce add operation inlining limit 2017-01-26 13:33:17 +00:00
max-addrec-size.ll [SCEV] Limit max size of AddRecExpr during evolving 2017-07-23 15:40:19 +00:00
max-be-count-not-constant.ll [SCEV] Fix an assertion failure in the max backedge taken count 2017-10-25 21:41:00 +00:00
max-mulops-inline.ll [SCEV] Add a threshold to restrict number of mul operands to be inlined into SCEV 2016-10-20 21:38:39 +00:00
max-trip-count-address-space.ll [SCEV] Simplify trunc-of-add/mul to add/mul-of-trunc under more circumstances. 2018-06-14 17:13:35 +00:00
max-trip-count.ll [SCEV] Make exact taken count calculation more optimistic 2018-03-27 07:30:38 +00:00
merge-add-rec-many-inputs.ll Fix overconfident assert in ScalarEvolution::isImpliedViaMerge 2018-06-29 11:46:30 +00:00
min-max-exprs.ll
no-wrap-add-exprs.ll [SCEV] Add zext(C + x + ...) -> D + zext(C-D + x + ...)<nuw><nsw> transform 2018-07-24 21:48:56 +00:00
no-wrap-unknown-becount.ll Revert @llvm.assume with operator bundles (r289755-r289757) 2016-12-19 08:22:17 +00:00
non-IV-phi.ll
nowrap-preinc-limits.ll [SCEV] Don't always add no-wrap flags to post-inc add recs 2016-05-29 00:32:17 +00:00
nsw-offset-assume.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
nsw-offset.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
nsw.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
nw-sub-is-not-nw-add.ll
overflow-intrinsics.ll [SCEV] See through op.with.overflow intrinsics (re-apply) 2016-05-29 00:34:42 +00:00
pointer-sign-bits.ll
pr3909.ll
pr18606-min-zeros.ll [SCEV] Cache results during GetMinTrailingZeros query 2017-02-14 15:53:12 +00:00
pr18606.ll [SCEV] Memoize visitMulExpr results in SCEVRewriteVisitor. 2016-10-21 20:05:21 +00:00
pr22179.ll
pr22641.ll
pr22674.ll
pr22856.ll
pr24757.ll [SCEV] Make getUDivExactExpr handle non-nuw multiplies correctly. 2017-01-18 23:56:42 +00:00
pr25369.ll
pr27315.ll [SCEV] Don't always add no-wrap flags to post-inc add recs 2016-05-29 00:32:17 +00:00
pr28705.ll Fix the runtime error caused by "Use ValueOffsetPair to enhance value reuse during SCEV expansion". 2016-08-09 20:40:03 +00:00
pr34538.ll [SCEV] Handling for ICmp occuring in the evolution chain. 2017-11-13 16:43:24 +00:00
pr35890.ll [SCEV] Make getPostIncExpr guaranteed to return AddRec 2018-02-12 05:09:38 +00:00
predicated-trip-count.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
range-signedness.ll
returned.ll Teach SCEV to look through returned-argument functions 2016-07-11 02:48:23 +00:00
scev-aa.ll [PM/AA] Wire up SCEVAA to the new pass manager's registry and test it. 2016-02-20 04:01:45 +00:00
scev-canonical-mode.ll This patch is to fix PR26529 caused by r259736. 2016-02-09 00:07:08 +00:00
scev-dispositions.ll [SCEV] Tweak the output format and content of -analyze 2016-05-03 17:49:57 +00:00
scev-expander-existing-value-offset.ll Recommit "Use ValueOffsetPair to enhance value reuse during SCEV expansion". 2016-08-09 20:37:50 +00:00
scev-expander-incorrect-nowrap.ll
scev-expander-reuse-gep.ll Create a getelementptr instead of sub expr for ValueOffsetPair if the 2016-09-14 04:39:50 +00:00
scev-expander-reuse-unroll.ll [UNROLL] Postpone ScalarEvolution::forgetLoop after TripCountSC is expanded 2016-08-25 16:17:18 +00:00
scev-expander-reuse-vect.ll [UNROLL] Postpone ScalarEvolution::forgetLoop after TripCountSC is expanded 2016-08-25 16:17:18 +00:00
scev-invalid.ll
scev-prestart-nowrap.ll
sext-inreg.ll [SCEV] Simplify trunc-of-add/mul to add/mul-of-trunc under more circumstances. 2018-06-14 17:13:35 +00:00
sext-iv-0.ll
sext-iv-1.ll
sext-iv-2.ll
sext-mul.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
sext-to-zext.ll [SCEV] Be less eager about demoting zexts to sexts 2016-03-03 18:31:23 +00:00
sext-zero.ll Revert "[SCEV] Add nuw/nsw to mul ops in StrengthenNoWrapFlags" 2018-06-19 04:09:44 +00:00
shift-op.ll [SCEV] Fix predicate usage in computeExitLimitFromICmp 2017-12-08 12:19:45 +00:00
shl-lshr-differentconstmask.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
sle.ll
smax-br-phi-idioms.ll [SCEV] Don't infinitely recurse on unreachable code 2016-08-05 18:34:14 +00:00
smax.ll
solve-quadratic-i1.ll [SCEV] Properly solve quadratic equations 2018-08-02 19:13:35 +00:00
solve-quadratic-overflow.ll [SCEV] Properly solve quadratic equations 2018-08-02 19:13:35 +00:00
solve-quadratic.ll [SCEV] Properly solve quadratic equations 2018-08-02 19:13:35 +00:00
strip-injective-zext.ll [SCEV] Simplify trunc-of-add/mul to add/mul-of-trunc under more circumstances. 2018-06-14 17:13:35 +00:00
trip-count-pow2.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
trip-count-switch.ll
trip-count-unknown-stride.ll Reapplying r278731 after fixing the problem that caused it to be reverted. 2016-09-16 14:38:13 +00:00
trip-count.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
trip-count2.ll
trip-count3.ll Remove alignment argument from memcpy/memmove/memset in favour of alignment attributes (Step 1) 2018-01-19 17:13:12 +00:00
trip-count4.ll
trip-count5.ll [SCEV] Un-grep'ify tests; NFC 2016-08-05 20:33:49 +00:00
trip-count6.ll
trip-count7.ll
trip-count8.ll
trip-count9.ll
trip-count10.ll
trip-count11.ll
trip-count12.ll
trip-count13.ll [LoopUnroll] Keep the loop test only on the first iteration of max-or-zero loops 2016-10-21 11:08:48 +00:00
trip-count14.ll [SCEV] Make exact taken count calculation more optimistic 2018-03-27 07:30:38 +00:00
tripmultiple_calculation.ll [SCEV] Fix trip multiple calculation 2017-03-20 20:25:46 +00:00
trunc-simplify.ll [SCEV] Simplify trunc-of-add/mul to add/mul-of-trunc under more circumstances. 2018-06-14 17:13:35 +00:00
truncate.ll [SCEV] Fix buggy behavior in getAddExpr with truncs 2018-07-19 01:46:21 +00:00
undefined.ll
unknown_phis.ll [SCEV] Smart range calculation for SCEVUnknown Phis 2018-03-01 06:56:48 +00:00
unreachable-code.ll
unsimplified-loop.ll
urem-0.ll [SCEV] Add URem support to SCEV 2017-09-01 14:59:59 +00:00
zext-divrem.ll [SCEV] Re-apply r335197 (with Polly fixes). 2018-06-21 21:29:54 +00:00
zext-mul.ll Re-apply "[SCEV] Strengthen StrengthenNoWrapFlags (reapply r334428)." 2018-07-13 23:58:46 +00:00
zext-signed-addrec.ll
zext-wrap.ll [SCEV] Compute affine range in another way to avoid bitwidth extending. 2017-03-16 21:07:38 +00:00