@@ -16581,24 +16581,24 @@ SDValue SITargetLowering::performSetCCCombine(SDNode *N,
1658116581
1658216582 // Eliminate setcc by using carryout from add/sub instruction
1658316583
16584- // X = ADD i64 Y , Z Xlo = UADDO i32 Ylo , Zlo
16585- // setcc X ult Y -> XHi = UADDO_CARRY i32 Yhi , Zhi
16584+ // LHS = ADD i64 RHS , Z LHSlo = UADDO i32 RHSlo , Zlo
16585+ // setcc LHS ult RHS -> LHSHi = UADDO_CARRY i32 RHShi , Zhi
1658616586 // similarly for subtraction
1658716587
16588- // X = ADD i64 Y, 1 Xlo = UADDO i32 Ylo, 1
16589- // setcc X eq 0 -> XHi = UADDO_CARRY i32 Yhi, 0
16588+ // LHS = ADD i64 Y, 1 LHSlo = UADDO i32 Ylo, 1
16589+ // setcc LHS eq 0 -> LHSHi = UADDO_CARRY i32 Yhi, 0
1659016590
1659116591 // Don't split a 64-bit add/sub into two 32-bit add/sub instructions for
1659216592 // non-divergent operations. This can result in lo/hi 32-bit operations
1659316593 // being done in SGPR and VGPR with additional operations being needed
1659416594 // to move operands and/or generate the intermediate carry.
1659516595 if (VT == MVT::i64 && N->isDivergent() &&
16596- ((((LHS.getOpcode() == ISD::ADD && CC == ISD::SETULT) ||
16597- (LHS.getOpcode() == ISD::SUB && CC == ISD::SETUGT)) &&
16598- LHS.getOperand(0) == RHS) ||
16599- (LHS.getOpcode() == ISD::ADD && CC == ISD::SETEQ && CRHS &&
16600- CRHS->isZero() && dyn_cast<ConstantSDNode>(LHS.getOperand(1) ) &&
16601- dyn_cast<ConstantSDNode> (LHS.getOperand(1))->isOne( )))) {
16596+ ((CC == ISD::SETULT &&
16597+ sd_match (LHS, m_Add(m_Specific(RHS), m_Value()))) ||
16598+ (CC == ISD::SETUGT &&
16599+ sd_match (LHS, m_Sub(m_Specific(RHS), m_Value()))) ||
16600+ (CC == ISD::SETEQ && CRHS && CRHS->isZero( ) &&
16601+ sd_match (LHS, m_Add(m_Value(), m_One()) )))) {
1660216602 EVT TargetType = MVT::i32;
1660316603 EVT CarryVT = MVT::i1;
1660416604 bool IsAdd = LHS.getOpcode() == ISD::ADD;
0 commit comments