[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