llvm/test/Analysis/ScalarEvolution
Sanjoy Das 7e76879901 [ValueTracking] Make poison propagation more aggressive
Summary:
Motivation: fix PR31181 without regression (the actual fix is still in
progress).  However, the actual content of PR31181 is not relevant
here.

This change makes poison propagation more aggressive in the following
cases:

 1. poision * Val == poison, for any Val.  In particular, this changes
    existing intentional and documented behavior in these two cases:
     a. Val is 0
     b. Val is 2^k * N
 2. poison << Val == poison, for any Val
 3. getelementptr is poison if any input is poison

I think all of these are justified (and are axiomatically true in the
new poison / undef model):

1a: we need poison * 0 to be poison to allow transforms like these:

  A * (B + C) ==> A * B + A * C

If poison * 0 were 0 then the above transform could not be allowed
since e.g. we could have A = poison, B = 1, C = -1, making the LHS

  poison * (1 + -1) = poison * 0 = 0

and the RHS

  poison * 1 + poison * -1 = poison + poison = poison

1b: we need e.g. poison * 4 to be poison since we want to allow

  A * 4 ==> A + A + A + A

If poison * 4 were a value with all of their bits poison except the
last four; then we'd not be able to do this transform since then if A
were poison the LHS would only be "partially" poison while the RHS
would be "full" poison.

2: Same reasoning as (1b), we'd like have the following kinds
transforms be legal:

  A << 1 ==> A + A

Reviewers: majnemer, efriedma

Subscribers: mcrosier, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295809 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-22 06:52:32 +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 [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 [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 [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
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 [PM] Clean up the testing for IVUsers, especially with the new PM. 2017-01-15 09:29:27 +00:00
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 [ValueTracking] Make poison propagation more aggressive 2017-02-22 06:52:32 +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
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
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 [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-addops-inline.ll [SCEV] Introduce add operation inlining limit 2017-01-26 13:33:17 +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 [SCEV] Make howFarToZero max backedge-taken count check for precondition. 2017-01-11 21:07:15 +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 Revert @llvm.assume with operator bundles (r289755-r289757) 2016-12-19 08:22:17 +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 Revert @llvm.assume with operator bundles (r289755-r289757) 2016-12-19 08:22:17 +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-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 [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 [SCEV] Make getUDivExactExpr handle non-nuw multiplies correctly. 2017-01-18 23:56:42 +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] Simplify/generalize howFarToZero solving. 2017-01-31 00:42:42 +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
SolveQuadraticEquation.ll [opaque pointer type] Add textual IR support for explicit type parameter to getelementptr instruction 2015-02-27 19:29:02 +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
trip-count-pow2.ll [SCEV] Simplify/generalize howFarToZero solving. 2017-01-31 00:42:42 +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
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