diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index dd309bc2c54a8..971732bda98dc 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -11376,11 +11376,9 @@ bool ScalarEvolution::isKnownPredicateViaConstantRanges(CmpPredicate Pred, if (HasSameValue(LHS, RHS)) return ICmpInst::isTrueWhenEqual(Pred); - // This code is split out from isKnownPredicate because it is called from - // within isLoopEntryGuardedByCond. - - auto CheckRanges = [&](const ConstantRange &RangeLHS, - const ConstantRange &RangeRHS) { + auto CheckRange = [&](bool IsSigned) { + auto RangeLHS = IsSigned ? getSignedRange(LHS) : getUnsignedRange(LHS); + auto RangeRHS = IsSigned ? getSignedRange(RHS) : getUnsignedRange(RHS); return RangeLHS.icmp(Pred, RangeRHS); }; @@ -11390,27 +11388,13 @@ bool ScalarEvolution::isKnownPredicateViaConstantRanges(CmpPredicate Pred, return false; if (Pred == CmpInst::ICMP_NE) { - auto SL = getSignedRange(LHS); - auto SR = getSignedRange(RHS); - if (CheckRanges(SL, SR)) - return true; - auto UL = getUnsignedRange(LHS); - auto UR = getUnsignedRange(RHS); - if (CheckRanges(UL, UR)) + if (CheckRange(true) || CheckRange(false)) return true; auto *Diff = getMinusSCEV(LHS, RHS); return !isa(Diff) && isKnownNonZero(Diff); } - if (CmpInst::isSigned(Pred)) { - auto SL = getSignedRange(LHS); - auto SR = getSignedRange(RHS); - return CheckRanges(SL, SR); - } - - auto UL = getUnsignedRange(LHS); - auto UR = getUnsignedRange(RHS); - return CheckRanges(UL, UR); + return CheckRange(CmpInst::isSigned(Pred)); } bool ScalarEvolution::isKnownPredicateViaNoOverflow(CmpPredicate Pred,