diff options
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 57 |
1 files changed, 1 insertions, 56 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 0d4a62c9d80..4652e449f4b 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -7348,60 +7348,6 @@ ScalarEvolution::isKnownPredicateWithRanges(ICmpInst::Predicate Pred, return false; } -bool ScalarEvolution::isKnownPredicateViaNoOverflow(ICmpInst::Predicate Pred, - const SCEV *LHS, - const SCEV *RHS) { - - // Match Result to (X + Y)<ExpectedFlags> where Y is a constant integer. - // Return Y via OutY. - auto MatchBinaryAddToConst = - [this](const SCEV *Result, const SCEV *X, APInt &OutY, - SCEV::NoWrapFlags ExpectedFlags) { - const SCEV *NonConstOp, *ConstOp; - SCEV::NoWrapFlags FlagsPresent; - - if (!splitBinaryAdd(Result, ConstOp, NonConstOp, FlagsPresent) || - !isa<SCEVConstant>(ConstOp) || NonConstOp != X) - return false; - - OutY = cast<SCEVConstant>(ConstOp)->getValue()->getValue(); - return (FlagsPresent & ExpectedFlags) == ExpectedFlags; - }; - - APInt C; - - switch (Pred) { - default: - break; - - case ICmpInst::ICMP_SGE: - std::swap(LHS, RHS); - case ICmpInst::ICMP_SLE: - // X s<= (X + C)<nsw> if C >= 0 - if (MatchBinaryAddToConst(RHS, LHS, C, SCEV::FlagNSW) && C.isNonNegative()) - return true; - - // (X + C)<nsw> s<= X if C <= 0 - if (MatchBinaryAddToConst(LHS, RHS, C, SCEV::FlagNSW) && - !C.isStrictlyPositive()) - return true; - - case ICmpInst::ICMP_SGT: - std::swap(LHS, RHS); - case ICmpInst::ICMP_SLT: - // X s< (X + C)<nsw> if C > 0 - if (MatchBinaryAddToConst(RHS, LHS, C, SCEV::FlagNSW) && - C.isStrictlyPositive()) - return true; - - // (X + C)<nsw> s< X if C < 0 - if (MatchBinaryAddToConst(LHS, RHS, C, SCEV::FlagNSW) && C.isNegative()) - return true; - } - - return false; -} - bool ScalarEvolution::isKnownPredicateViaSplitting(ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS) { @@ -8058,8 +8004,7 @@ ScalarEvolution::isImpliedCondOperandsHelper(ICmpInst::Predicate Pred, [this](ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS) { return isKnownPredicateWithRanges(Pred, LHS, RHS) || IsKnownPredicateViaMinOrMax(*this, Pred, LHS, RHS) || - IsKnownPredicateViaAddRecStart(*this, Pred, LHS, RHS) || - isKnownPredicateViaNoOverflow(Pred, LHS, RHS); + IsKnownPredicateViaAddRecStart(*this, Pred, LHS, RHS); }; switch (Pred) { |

