Skip to content

Commit

Permalink
[SCEV] Use isKnownViaNonRecursiveReasoning for smax simplification
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Keno committed May 1, 2019
1 parent 0b4699b commit a3e4b3b
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions llvm/lib/Analysis/ScalarEvolution.cpp
Expand Up @@ -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;
}
Expand Down

0 comments on commit a3e4b3b

Please sign in to comment.