mirror of
https://github.com/RPCS3/llvm.git
synced 2025-03-04 08:37:45 +00:00
[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
This commit is contained in:
parent
92bb3811f2
commit
f951f15770
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user