summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeno Fischer <keno@alumni.harvard.edu>2019-05-01 15:58:24 +0000
committerKeno Fischer <keno@alumni.harvard.edu>2019-05-01 15:58:24 +0000
commita3e4b3bd33200fdb91fb4b137d7585ea3c957df9 (patch)
tree39154f6a871b2877c6216c5de4da243ae794c8dc
parent0b4699b931716065a7c0d631a6a11cc5afec587c (diff)
downloadbcm5719-llvm-a3e4b3bd33200fdb91fb4b137d7585ea3c957df9.tar.gz
bcm5719-llvm-a3e4b3bd33200fdb91fb4b137d7585ea3c957df9.zip
[SCEV] Use isKnownViaNonRecursiveReasoning for smax simplification
Summary: Commit rL331949: SCEV] Do not use induction in isKnownPredicate for simplification umax changed the codepath for umax from isKnownPredicate to isKnownViaNonRecursiveReasoning to avoid compile time blow up (and as I found out also stack overflows). However, there is an exact copy of the code for umax that was lacking this change. In D50167 I want to unify these codepaths, but to avoid that being a behavior change for the smax case, pull this independent bit out of it. Reviewed By: sanjoy Differential Revision: https://reviews.llvm.org/D61166 llvm-svn: 359693
-rw-r--r--llvm/lib/Analysis/ScalarEvolution.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index d7635a82cf2..6dccf338f73 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -3605,11 +3605,12 @@ ScalarEvolution::getSMaxExpr(SmallVectorImpl<const SCEV *> &Ops) {
for (unsigned i = 0, e = Ops.size()-1; i != e; ++i)
// X smax Y smax Y --> X smax Y
// X smax Y --> X, if X is always greater than Y
- if (Ops[i] == Ops[i+1] ||
- isKnownPredicate(ICmpInst::ICMP_SGE, Ops[i], Ops[i+1])) {
+ if (Ops[i] == Ops[i + 1] || isKnownViaNonRecursiveReasoning(
+ ICmpInst::ICMP_SGE, Ops[i], Ops[i + 1])) {
Ops.erase(Ops.begin()+i+1, Ops.begin()+i+2);
--i; --e;
- } else if (isKnownPredicate(ICmpInst::ICMP_SLE, Ops[i], Ops[i+1])) {
+ } else if (isKnownViaNonRecursiveReasoning(ICmpInst::ICMP_SLE, Ops[i],
+ Ops[i + 1])) {
Ops.erase(Ops.begin()+i, Ops.begin()+i+1);
--i; --e;
}
OpenPOWER on IntegriCloud