[llvm] [SCEV] Cancel common addend/multiplier in SimplifyICmpOperands (PR #205014)
Aleksandr Popov via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 1 05:13:48 PDT 2026
================
@@ -11123,6 +11123,41 @@ bool ScalarEvolution::SimplifyICmpOperands(CmpPredicate &Pred, SCEVUse &LHS,
Changed = true;
}
+ // (K + A) pred (K + B) --> A pred B
+ // when both adds have the appropriate no-wrap flag.
+ {
+ const SCEVConstant *C = nullptr;
+ if ((ICmpInst::isSigned(Pred) &&
+ match(LHS, m_scev_c_NSWAdd(m_SCEVConstant(C), m_SCEV(NewLHS))) &&
+ match(RHS, m_scev_c_NSWAdd(m_scev_Specific(C), m_SCEV(NewRHS)))) ||
+ (ICmpInst::isUnsigned(Pred) &&
+ match(LHS, m_scev_c_NUWAdd(m_SCEVConstant(C), m_SCEV(NewLHS))) &&
+ match(RHS, m_scev_c_NUWAdd(m_scev_Specific(C), m_SCEV(NewRHS))))) {
----------------
aleks-tmb wrote:
Thanks, added handling for the equality case
https://github.com/llvm/llvm-project/pull/205014
More information about the llvm-commits
mailing list