From: Keno Fischer Date: Wed, 1 May 2019 15:58:24 +0000 (+0000) Subject: [SCEV] Use isKnownViaNonRecursiveReasoning for smax simplification X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f951f1577099feb05fe6e41c94ebeecbdebc78c4;p=llvm [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359693 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index d7635a82cf2..6dccf338f73 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -3605,11 +3605,12 @@ ScalarEvolution::getSMaxExpr(SmallVectorImpl &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; }