[llvm] [SCEV] Improve code in isKnownPredicateViaConstantRanges (NFC) (PR #147335)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 7 09:03:25 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: Ramkumar Ramachandra (artagnon)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/147335.diff
1 Files Affected:
- (modified) llvm/lib/Analysis/ScalarEvolution.cpp (+5-21)
``````````diff
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<SCEVCouldNotCompute>(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,
``````````
</details>
https://github.com/llvm/llvm-project/pull/147335
More information about the llvm-commits
mailing list