llvm-project/llvm/test/Analysis/ScalarEvolution
Li Huang faa857dba7 [SCEV] Memoize visitMulExpr results in SCEVRewriteVisitor.
Summary:
When SCEVRewriteVisitor traverses the SCEV DAG, it may visit the same SCEV
multiple times if this SCEV is referenced by multiple other SCEVs. This has
exponential time complexity in the worst case. Memoizing the results will
avoid re-visiting the same SCEV. Add a map to save the results, and override
the visit function of SCEVVisitor. Now SCEVRewriteVisitor only visit each
SCEV once and thus returns the same result for the same input SCEV.

This patch fixes PR18606, PR18607.

Reviewers: Sanjoy Das, Mehdi Amini, Michael Zolotukhin

Differential Revision: https://reviews.llvm.org/D25810

llvm-svn: 284868
2016-10-21 20:05:21 +00:00
..
2007-07-15-NegativeStride.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2008-11-18-Stride1.ll
2008-11-18-Stride2.ll
2008-12-08-FiniteSGE.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2008-12-11-SMaxOverflow.ll
2008-12-14-StrideAndSigned.ll
2008-12-15-DontUseSDiv.ll
2009-01-02-SignedNegativeStride.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2009-04-22-TruncCast.ll
2009-05-09-PointerEdgeCount.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
2009-07-04-GroupConstantsWidthMismatch.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
2010-09-03-RequiredTransitive.ll
2011-03-09-ExactNoMaxBECount.ll
2011-04-26-FoldAddRec.ll
2011-10-04-ConstEvolve.ll
2012-03-26-LoadConstant.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
2012-05-18-LoopPredRecurse.ll
2012-05-29-MulAddRec.ll
SolveQuadraticEquation.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
and-xor.ll
avoid-assume-hang.ll ScalarEvolution assume hanging bugfix 2015-09-09 20:47:30 +00:00
avoid-infinite-recursion-0.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
avoid-infinite-recursion-1.ll
avoid-smax-0.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
avoid-smax-1.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
constant_condition.ll Revert "Revert "This patch builds on top of D13378 to handle constant condition."" 2015-10-07 18:14:25 +00:00
div-overflow.ll
do-loop.ll
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
ext-antecedent.ll [SCEV] Revert bailout added in r75511. 2015-03-26 17:28:26 +00:00
flags-from-poison-dbg.ll Teach isGuarantdToTransferExecToSuccessor about debug info intrinsics 2016-06-08 17:48:36 +00:00
flags-from-poison.ll SCEV: Don't assert about non-SCEV-able value in isSCEVExprNeverPoison() (PR28932) 2016-08-17 22:50:18 +00:00
fold.ll When simplifying a SCEV truncate by distributing, consider it a simplification to replace a cast, even if we end up with a trunc around the term. Fixes PR22960! 2015-03-20 02:25:00 +00:00
guards.ll [SCEV] Use guards to prove predicates 2016-05-10 00:31:49 +00:00
how-far-to-zero.ll
incorrect-nsw.ll Bugfix: SCEV incorrectly marks certain add recurrences as nsw 2015-02-09 18:34:55 +00:00
incorrect-offset-scaling.ll Fix ScalarEvolutionExpander step scaling bug 2016-07-13 01:28:12 +00:00
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 [SCEV] Make isImpliedCond smarter. 2015-03-18 00:41:29 +00:00
latch-dominating-conditions.ll [SCEV] Look at backedge dominating conditions (re-land r233447). 2015-04-01 18:24:06 +00:00
load-with-range-metadata.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
load.ll [SCEV] Add a `scalar-evolution-print-constant-ranges' option 2015-03-09 21:43:39 +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] Add a `scalar-evolution-print-constant-ranges' option 2015-03-09 21:43:39 +00:00
max-trip-count.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
min-max-exprs.ll [SCEV] Mark AddExprs as nsw or nuw if legal 2015-10-22 19:57:19 +00:00
no-wrap-add-exprs.ll [SCEV] Commute zero extends through <nuw> additions 2015-10-22 19:57:38 +00:00
no-wrap-unknown-becount.ll [SCEV] Make isImpliedCondOperandsViaRanges smarter 2016-07-23 00:54:36 +00:00
non-IV-phi.ll [SCEV] Generalize the SCEV algorithm for creating expressions for PHI nodes 2015-10-30 15:02:28 +00:00
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 [SCEV] No-wrap flags are not propagated when folding "{S,+,X}+T ==> {S+T,+,X}" 2016-05-25 13:01:33 +00:00
nsw-offset.ll [SCEV] No-wrap flags are not propagated when folding "{S,+,X}+T ==> {S+T,+,X}" 2016-05-25 13:01:33 +00:00
nsw.ll [SCEV] Fix incorrect trip count computation 2016-06-18 04:38:31 +00:00
nw-sub-is-not-nw-add.ll Make ScalarEvolution less aggressive with respect to no-wrap flags. 2015-01-22 00:48:47 +00:00
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.ll [SCEV] Memoize visitMulExpr results in SCEVRewriteVisitor. 2016-10-21 20:05:21 +00:00
pr22179.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
pr22641.ll Fix bug 22641 2015-02-24 01:02:42 +00:00
pr22674.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
pr22856.ll [SCEV] Fix PR22856. 2015-03-13 18:31:19 +00:00
pr24757.ll [ScalarEvolution] Fix PR24757. 2015-09-10 05:27:38 +00:00
pr25369.ll [SCEV] Fix PR25369 2015-11-02 02:06:01 +00:00
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
predicated-trip-count.ll Re-commit [SCEV] Introduce a guarded backedge taken count and use it in LAA and LV 2016-04-08 14:29:09 +00:00
range-signedness.ll [SCEV] Unify getUnsignedRange and getSignedRange 2015-03-09 21:43:43 +00:00
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 Bugfix: SCEVExpander incorrectly marks increment operations as no-wrap 2015-02-25 20:02:59 +00:00
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 [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
sext-inreg.ll [SCEV] Un-grep'ify tests; NFC 2016-08-05 20:33:49 +00:00
sext-iv-0.ll [SCEV] Add a `scalar-evolution-print-constant-ranges' option 2015-03-09 21:43:39 +00:00
sext-iv-1.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
sext-iv-2.ll [opaque pointer type] Add textual IR support for explicit type parameter to gep operator 2015-03-13 18:20:45 +00:00
sext-to-zext.ll [SCEV] Be less eager about demoting zexts to sexts 2016-03-03 18:31:23 +00:00
shift-op.ll [SCEV] Compute max backedge count for loops with "shift ivs" 2015-10-28 21:27:14 +00:00
sle.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
smax-br-phi-idioms.ll [SCEV] Don't infinitely recurse on unreachable code 2016-08-05 18:34:14 +00:00
smax.ll
trip-count-pow2.ll ScalarEvolution: HowFarToZero was wrongly using signed division 2014-11-16 07:30:35 +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 Be wary of abnormal exits from loop when exploiting UB 2016-06-09 01:13:59 +00:00
trip-count2.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +00:00
trip-count3.ll Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00
trip-count4.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
trip-count5.ll [SCEV] Un-grep'ify tests; NFC 2016-08-05 20:33:49 +00:00
trip-count6.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
trip-count7.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
trip-count8.ll
trip-count9.ll
trip-count10.ll
trip-count11.ll [SCEV] Add a `scalar-evolution-print-constant-ranges' option 2015-03-09 21:43:39 +00:00
trip-count12.ll [opaque pointer type] Add textual IR support for explicit type parameter to load instruction 2015-02-27 21:17:42 +00:00
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 [LoopUnroll] Keep the loop test only on the first iteration of max-or-zero loops 2016-10-21 11:08:48 +00:00
undefined.ll
unreachable-code.ll
unsimplified-loop.ll
zext-signed-addrec.ll [opaque pointer type] Add textual IR support for explicit type parameter to the call instruction 2015-04-16 23:24:18 +00:00
zext-wrap.ll [SCEV] Reapply 'Teach isLoopBackedgeGuardedByCond to exploit trip counts' 2015-09-25 23:53:50 +00:00