[llvm] [AMDGPU] Remove setcc by using add/sub carryout (PR #155255)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 2 08:12:57 PDT 2025
================
@@ -16579,6 +16576,55 @@ SDValue SITargetLowering::performSetCCCombine(SDNode *N,
}
}
+ // Eliminate setcc by using carryout from add/sub instruction
+
+ // LHS = ADD i64 RHS, Z LHSlo = UADDO i32 RHSlo, Zlo
+ // setcc LHS ult RHS -> LHSHi = UADDO_CARRY i32 RHShi, Zhi
+ // similarly for subtraction
+
+ // LHS = ADD i64 Y, 1 LHSlo = UADDO i32 Ylo, 1
+ // setcc LHS eq 0 -> LHSHi = UADDO_CARRY i32 Yhi, 0
+
+ if (VT == MVT::i64 && ((CC == ISD::SETULT &&
+ sd_match(LHS, m_Add(m_Specific(RHS), m_Value()))) ||
+ (CC == ISD::SETUGT &&
+ sd_match(LHS, m_Sub(m_Specific(RHS), m_Value()))) ||
+ (CC == ISD::SETEQ && CRHS && CRHS->isZero() &&
+ sd_match(LHS, m_Add(m_Value(), m_One()))))) {
+ EVT TargetType = MVT::i32;
+ EVT CarryVT = MVT::i1;
----------------
LU-JOHN wrote:
Hardcoded.
https://github.com/llvm/llvm-project/pull/155255
More information about the llvm-commits
mailing list