Lines Matching refs:N1

424     SDValue visitADDLikeCommutative(SDValue N0, SDValue N1, SDNode *LocReference);
430 SDValue visitUADDOLike(SDValue N0, SDValue N1, SDNode *N);
436 SDValue visitUADDO_CARRYLike(SDValue N0, SDValue N1, SDValue CarryIn,
438 SDValue visitSADDO_CARRYLike(SDValue N0, SDValue N1, SDValue CarryIn,
447 SDValue visitSDIVLike(SDValue N0, SDValue N1, SDNode *N);
449 SDValue visitUDIVLike(SDValue N0, SDValue N1, SDNode *N);
460 SDValue visitANDLike(SDValue N0, SDValue N1, SDNode *N);
462 SDValue visitORLike(SDValue N0, SDValue N1, const SDLoc &DL);
574 SDValue N1);
576 SDValue N1, SDNodeFlags Flags);
578 SDValue N1, SDNodeFlags Flags);
580 EVT VT, SDValue N0, SDValue N1,
590 SDValue SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2);
591 SDValue SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
595 const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2, SDValue N3,
598 SDValue foldSelectCCToShiftAnd(const SDLoc &DL, SDValue N0, SDValue N1,
602 SDValue foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1,
608 SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
637 SDValue buildOptimizedSREM(SDValue N0, SDValue N1, SDNode *N);
650 SDValue MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
652 SDValue MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1);
657 SDValue MatchFunnelPosNeg(SDValue N0, SDValue N1, SDValue Pos, SDValue Neg,
1003 SDValue N0, N1, N2; in isOneUseSetCC() local
1004 if (isSetCCEquivalent(N, N0, N1, N2) && N->hasOneUse()) in isOneUseSetCC()
1076 SDValue N1) { in reassociationCanBreakAddressingModePattern() argument
1093 if ((N1.getOpcode() == ISD::VSCALE || in reassociationCanBreakAddressingModePattern()
1094 ((N1.getOpcode() == ISD::SHL || N1.getOpcode() == ISD::MUL) && in reassociationCanBreakAddressingModePattern()
1095 N1.getOperand(0).getOpcode() == ISD::VSCALE && in reassociationCanBreakAddressingModePattern()
1096 isa<ConstantSDNode>(N1.getOperand(1)))) && in reassociationCanBreakAddressingModePattern()
1097 N1.getValueType().getFixedSizeInBits() <= 64) { in reassociationCanBreakAddressingModePattern()
1098 int64_t ScalableOffset = N1.getOpcode() == ISD::VSCALE in reassociationCanBreakAddressingModePattern()
1099 ? N1.getConstantOperandVal(0) in reassociationCanBreakAddressingModePattern()
1100 : (N1.getOperand(0).getConstantOperandVal(0) * in reassociationCanBreakAddressingModePattern()
1101 (N1.getOpcode() == ISD::SHL in reassociationCanBreakAddressingModePattern()
1102 ? (1LL << N1.getConstantOperandVal(1)) in reassociationCanBreakAddressingModePattern()
1103 : N1.getConstantOperandVal(1))); in reassociationCanBreakAddressingModePattern()
1126 auto *C2 = dyn_cast<ConstantSDNode>(N1); in reassociationCanBreakAddressingModePattern()
1194 SDValue N0, SDValue N1, in reassociateOpsCommutative() argument
1210 if (DAG.isConstantIntBuildVectorOrConstantInt(peekThroughBitcasts(N1))) { in reassociateOpsCommutative()
1212 if (SDValue OpNode = DAG.FoldConstantArithmetic(Opc, DL, VT, {N01, N1})) in reassociateOpsCommutative()
1216 if (TLI.isReassocProfitable(DAG, N0, N1)) { in reassociateOpsCommutative()
1219 SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N00, N1, NewFlags); in reassociateOpsCommutative()
1230 if (N1 == N00 || N1 == N01) in reassociateOpsCommutative()
1235 if (N1 == N00) in reassociateOpsCommutative()
1238 if (N1 == N01) in reassociateOpsCommutative()
1242 if (TLI.isReassocProfitable(DAG, N0, N1)) { in reassociateOpsCommutative()
1243 if (N1 != N01) { in reassociateOpsCommutative()
1245 if (SDNode *NE = DAG.getNodeIfExists(Opc, DAG.getVTList(VT), {N00, N1})) { in reassociateOpsCommutative()
1253 if (N1 != N00) { in reassociateOpsCommutative()
1255 if (SDNode *NE = DAG.getNodeIfExists(Opc, DAG.getVTList(VT), {N01, N1})) { in reassociateOpsCommutative()
1271 if (N1->getOpcode() == ISD::SETCC && N00->getOpcode() == ISD::SETCC && in reassociateOpsCommutative()
1273 ISD::CondCode CC1 = cast<CondCodeSDNode>(N1.getOperand(2))->get(); in reassociateOpsCommutative()
1277 SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N00, N1, Flags); in reassociateOpsCommutative()
1281 SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N01, N1, Flags); in reassociateOpsCommutative()
1294 SDValue N1, SDNodeFlags Flags) { in reassociateOps() argument
1299 N1.getValueType().isFloatingPoint()) in reassociateOps()
1303 if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N0, N1, Flags)) in reassociateOps()
1305 if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N1, N0, Flags)) in reassociateOps()
1315 SDValue N1, SDNodeFlags Flags) { in reassociateReduction() argument
1316 if (N0.getOpcode() == RedOpc && N1.getOpcode() == RedOpc && in reassociateReduction()
1317 N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType() && in reassociateReduction()
1318 N0->hasOneUse() && N1->hasOneUse() && in reassociateReduction()
1324 N0.getOperand(0), N1.getOperand(0))); in reassociateReduction()
1526 SDValue N1 = Op.getOperand(1); in PromoteIntBinOp() local
1527 SDValue NN1 = PromoteOperand(N1, PVT, Replace1); in PromoteIntBinOp()
1539 Replace1 &= (N0 != N1) && !N1->hasOneUse(); in PromoteIntBinOp()
1546 if (Replace0 && Replace1 && N0->isPredecessorOf(N1.getNode())) { in PromoteIntBinOp()
1547 std::swap(N0, N1); in PromoteIntBinOp()
1557 ReplaceLoadWithPromotedLoad(N1.getNode(), NN1.getNode()); in PromoteIntBinOp()
1602 SDValue N1 = Op.getOperand(1); in PromoteIntShiftOp() local
1604 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, N0, N1)); in PromoteIntShiftOp()
2055 SDValue N1 = N->getOperand(1); in combine() local
2058 if (N0 != N1 && (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1))) { in combine()
2059 SDValue Ops[] = {N1, N0}; in combine()
2388 SDValue N1 = N->getOperand(1); in foldSelectWithIdentityConstant() local
2390 std::swap(N0, N1); in foldSelectWithIdentityConstant()
2393 if (N1.getOpcode() != ISD::VSELECT || !N1.hasOneUse()) in foldSelectWithIdentityConstant()
2403 SDValue Cond = N1.getOperand(0); in foldSelectWithIdentityConstant()
2404 SDValue TVal = N1.getOperand(1); in foldSelectWithIdentityConstant()
2405 SDValue FVal = N1.getOperand(2); in foldSelectWithIdentityConstant()
2637 SDValue N1 = N->getOperand(1); in visitADDLike() local
2644 if (N1.isUndef()) in visitADDLike()
2645 return N1; in visitADDLike()
2648 if (SDValue C = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, {N0, N1})) in visitADDLike()
2653 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitADDLike()
2654 return DAG.getNode(ISD::ADD, DL, VT, N1, N0); in visitADDLike()
2656 if (areBitwiseNotOfEachother(N0, N1)) in visitADDLike()
2665 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitADDLike()
2670 if (isNullConstant(N1)) in visitADDLike()
2678 if (SDValue Sub = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N1, N01})) in visitADDLike()
2682 if (SDValue Add = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, {N1, N00})) in visitADDLike()
2691 isOneOrOneSplat(N1)) { in visitADDLike()
2708 if (SDValue Add = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, {N1, N01})) in visitADDLike()
2716 if (!reassociationCanBreakAddressingModePattern(ISD::ADD, DL, N, N0, N1)) { in visitADDLike()
2717 if (SDValue RADD = reassociateOps(ISD::ADD, DL, N0, N1, N->getFlags())) in visitADDLike()
2726 auto ReassociateAddOr = [&](SDValue N0, SDValue N1) { in visitADDLike() argument
2738 DAG.getNode(ISD::ADD, DL, VT, N1, N0.getOperand(0)), in visitADDLike()
2743 if (SDValue Add = ReassociateAddOr(N0, N1)) in visitADDLike()
2745 if (SDValue Add = ReassociateAddOr(N1, N0)) in visitADDLike()
2750 reassociateReduction(ISD::VECREDUCE_ADD, ISD::ADD, DL, VT, N0, N1)) in visitADDLike()
2758 return DAG.getNode(ISD::SUB, DL, VT, N1, A); in visitADDLike()
2761 if (sd_match(N1, m_Neg(m_Value(B)))) in visitADDLike()
2765 if (sd_match(N1, m_Sub(m_Value(B), m_Specific(N0)))) in visitADDLike()
2769 if (sd_match(N0, m_Sub(m_Value(B), m_Specific(N1)))) in visitADDLike()
2774 sd_match(N1, m_Sub(m_Value(C), m_Specific(A)))) in visitADDLike()
2779 sd_match(N1, m_Sub(m_Specific(B), m_Value(C)))) in visitADDLike()
2784 if (sd_match(N1, m_Sub(m_Value(B), m_Add(m_Specific(N0), m_Value(C))))) in visitADDLike()
2788 if (sd_match(N1, in visitADDLike()
2791 return DAG.getNode(N1.getOpcode(), DL, VT, B, C); in visitADDLike()
2795 sd_match(N1, m_OneUse(m_Sub(m_Value(C), m_Value(D)))) && in visitADDLike()
2799 DAG.getNode(ISD::ADD, SDLoc(N1), VT, B, D)); in visitADDLike()
2807 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchUSUBSAT, in visitADDLike()
2816 if (isOneOrOneSplat(N1)) { in visitADDLike()
2854 isAllOnesOrAllOnesSplat(N1, /*AllowUndefs=*/true)) { in visitADDLike()
2862 if (ConstantSDNode *CB = dyn_cast<ConstantSDNode>(N1)) { in visitADDLike()
2880 SDValue Mul = DAG.getNode(ISD::MUL, SDLoc(N1), VT, A, in visitADDLike()
2909 SDValue Mul = DAG.getNode(ISD::MUL, SDLoc(N1), VT, A, in visitADDLike()
2911 SDValue Add = DAG.getNode(ISD::ADD, SDLoc(N1), VT, Mul, B, Flags); in visitADDLike()
2919 if (SDValue Combined = visitADDLikeCommutative(N0, N1, N)) in visitADDLike()
2922 if (SDValue Combined = visitADDLikeCommutative(N1, N0, N)) in visitADDLike()
2952 SDValue N1 = N->getOperand(1); in visitADD() local
2971 DAG.haveNoCommonBitsSet(N0, N1)) { in visitADD()
2974 return DAG.getNode(ISD::OR, DL, VT, N0, N1, Flags); in visitADD()
2978 if (N0.getOpcode() == ISD::VSCALE && N1.getOpcode() == ISD::VSCALE) { in visitADD()
2980 const APInt &C1 = N1->getConstantOperandAPInt(0); in visitADD()
2987 N1.getOpcode() == ISD::VSCALE) { in visitADD()
2989 const APInt &VS1 = N1->getConstantOperandAPInt(0); in visitADD()
2996 N1.getOpcode() == ISD::STEP_VECTOR) { in visitADD()
2998 const APInt &C1 = N1->getConstantOperandAPInt(0); in visitADD()
3006 N1.getOpcode() == ISD::STEP_VECTOR) { in visitADD()
3008 const APInt &SV1 = N1->getConstantOperandAPInt(0); in visitADD()
3020 SDValue N1 = N->getOperand(1); in visitADDSAT() local
3026 if (N0.isUndef() || N1.isUndef()) in visitADDSAT()
3030 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitADDSAT()
3035 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitADDSAT()
3036 return DAG.getNode(Opcode, DL, VT, N1, N0); in visitADDSAT()
3044 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitADDSAT()
3049 if (isNullConstant(N1)) in visitADDSAT()
3053 if (DAG.willNotOverflowAdd(IsSigned, N0, N1)) in visitADDSAT()
3054 return DAG.getNode(ISD::ADD, DL, VT, N0, N1); in visitADDSAT()
3111 static SDValue foldAddSubMasked1(bool IsAdd, SDValue N0, SDValue N1, in foldAddSubMasked1() argument
3113 if (N1.getOpcode() == ISD::ZERO_EXTEND) in foldAddSubMasked1()
3114 N1 = N1.getOperand(0); in foldAddSubMasked1()
3116 if (N1.getOpcode() != ISD::AND || !isOneOrOneSplat(N1->getOperand(1))) in foldAddSubMasked1()
3120 SDValue N10 = N1.getOperand(0); in foldAddSubMasked1()
3136 SDValue DAGCombiner::visitADDLikeCommutative(SDValue N0, SDValue N1, in visitADDLikeCommutative() argument
3143 if (sd_match(N1, m_Shl(m_Neg(m_Value(Y)), m_Value(N)))) in visitADDLikeCommutative()
3147 if (SDValue V = foldAddSubMasked1(true, N0, N1, DAG, DL)) in visitADDLikeCommutative()
3160 return DAG.getNode(ISD::SUB, DL, VT, N1, Not); in visitADDLikeCommutative()
3168 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), N1); in visitADDLikeCommutative()
3174 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1)); in visitADDLikeCommutative()
3180 if (N0.getOpcode() == ISD::MUL && N0.getOperand(0) == N1 && in visitADDLikeCommutative()
3195 return DAG.getNode(ISD::SUB, DL, VT, N1, ZExt); in visitADDLikeCommutative()
3199 if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) { in visitADDLikeCommutative()
3200 VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1)); in visitADDLikeCommutative()
3202 SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0), in visitADDLikeCommutative()
3209 if (N1.getOpcode() == ISD::UADDO_CARRY && isNullConstant(N1.getOperand(1)) && in visitADDLikeCommutative()
3210 N1.getResNo() == 0) in visitADDLikeCommutative()
3211 return DAG.getNode(ISD::UADDO_CARRY, DL, N1->getVTList(), in visitADDLikeCommutative()
3212 N0, N1.getOperand(0), N1.getOperand(2)); in visitADDLikeCommutative()
3216 if (SDValue Carry = getAsCarry(TLI, N1)) in visitADDLikeCommutative()
3226 SDValue N1 = N->getOperand(1); in visitADDC() local
3232 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDC()
3237 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1); in visitADDC()
3239 return DAG.getNode(ISD::ADDC, DL, N->getVTList(), N1, N0); in visitADDC()
3242 if (isNullConstant(N1)) in visitADDC()
3247 if (DAG.computeOverflowForUnsignedAdd(N0, N1) == SelectionDAG::OFK_Never) in visitADDC()
3248 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDC()
3298 SDValue N1 = N->getOperand(1); in visitADDO() local
3307 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDO()
3312 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitADDO()
3313 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0); in visitADDO()
3316 if (isNullOrNullSplat(N1)) in visitADDO()
3320 if (DAG.willNotOverflowAdd(IsSigned, N0, N1)) in visitADDO()
3321 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDO()
3326 if (isBitwiseNot(N0) && isOneOrOneSplat(N1)) in visitADDO()
3331 if (isBitwiseNot(N0) && isOneOrOneSplat(N1)) { in visitADDO()
3338 if (SDValue Combined = visitUADDOLike(N0, N1, N)) in visitADDO()
3341 if (SDValue Combined = visitUADDOLike(N1, N0, N)) in visitADDO()
3348 SDValue DAGCombiner::visitUADDOLike(SDValue N0, SDValue N1, SDNode *N) { in visitUADDOLike() argument
3355 if (N1.getOpcode() == ISD::UADDO_CARRY && isNullConstant(N1.getOperand(1))) { in visitUADDOLike()
3356 SDValue Y = N1.getOperand(0); in visitUADDOLike()
3360 N1.getOperand(2)); in visitUADDOLike()
3365 if (SDValue Carry = getAsCarry(TLI, N1)) in visitUADDOLike()
3374 SDValue N1 = N->getOperand(1); in visitADDE() local
3379 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1); in visitADDE()
3382 N1, N0, CarryIn); in visitADDE()
3386 return DAG.getNode(ISD::ADDC, SDLoc(N), N->getVTList(), N0, N1); in visitADDE()
3393 SDValue N1 = N->getOperand(1); in visitUADDO_CARRY() local
3399 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1); in visitUADDO_CARRY()
3401 return DAG.getNode(ISD::UADDO_CARRY, DL, N->getVTList(), N1, N0, CarryIn); in visitUADDO_CARRY()
3407 return DAG.getNode(ISD::UADDO, DL, N->getVTList(), N0, N1); in visitUADDO_CARRY()
3411 if (isNullConstant(N0) && isNullConstant(N1)) { in visitUADDO_CARRY()
3421 if (SDValue Combined = visitUADDO_CARRYLike(N0, N1, CarryIn, N)) in visitUADDO_CARRY()
3424 if (SDValue Combined = visitUADDO_CARRYLike(N1, N0, CarryIn, N)) in visitUADDO_CARRY()
3432 SDValue Ops[] = {N1, N0, CarryIn}; in visitUADDO_CARRY()
3557 SDValue N0, SDValue N1, SDNode *N) { in combineCarryDiamond() argument
3561 SDValue Carry1 = getAsCarry(TLI, N1); in combineCarryDiamond()
3628 SDValue DAGCombiner::visitUADDO_CARRYLike(SDValue N0, SDValue N1, in visitUADDO_CARRYLike() argument
3635 SDValue Sub = DAG.getNode(ISD::USUBO_CARRY, DL, N->getVTList(), N1, in visitUADDO_CARRYLike()
3648 isNullConstant(N1) && !N->hasAnyUseOfValue(1)) in visitUADDO_CARRYLike()
3657 if (auto Y = getAsCarry(TLI, N1)) { in visitUADDO_CARRYLike()
3668 SDValue DAGCombiner::visitSADDO_CARRYLike(SDValue N0, SDValue N1, in visitSADDO_CARRYLike() argument
3673 return DAG.getNode(ISD::SSUBO_CARRY, SDLoc(N), N->getVTList(), N1, in visitSADDO_CARRYLike()
3682 SDValue N1 = N->getOperand(1); in visitSADDO_CARRY() local
3688 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1); in visitSADDO_CARRY()
3690 return DAG.getNode(ISD::SADDO_CARRY, DL, N->getVTList(), N1, N0, CarryIn); in visitSADDO_CARRY()
3696 return DAG.getNode(ISD::SADDO, DL, N->getVTList(), N0, N1); in visitSADDO_CARRY()
3699 if (SDValue Combined = visitSADDO_CARRYLike(N0, N1, CarryIn, N)) in visitSADDO_CARRY()
3702 if (SDValue Combined = visitSADDO_CARRYLike(N1, N0, CarryIn, N)) in visitSADDO_CARRY()
3797 SDValue N1 = N->getOperand(1); in visitSUB() local
3810 if (PeekThroughFreeze(N0) == PeekThroughFreeze(N1)) in visitSUB()
3814 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N0, N1})) in visitSUB()
3823 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitSUB()
3831 if (ConstantSDNode *N1C = getAsNonOpaqueConstant(N1)) in visitSUB()
3840 if (N1->getOpcode() == ISD::SRA || N1->getOpcode() == ISD::SRL) { in visitSUB()
3841 ConstantSDNode *ShiftAmt = isConstOrConstSplat(N1.getOperand(1)); in visitSUB()
3843 auto NewSh = N1->getOpcode() == ISD::SRA ? ISD::SRL : ISD::SRA; in visitSUB()
3845 return DAG.getNode(NewSh, DL, VT, N1.getOperand(0), N1.getOperand(1)); in visitSUB()
3853 if (DAG.MaskedValueIsZero(N1, ~APInt::getSignMask(BitWidth))) { in visitSUB()
3860 return N1; in visitSUB()
3864 if (N1.getOpcode() == ISD::ABS && N1.hasOneUse() && in visitSUB()
3866 if (SDValue Result = TLI.expandABS(N1.getNode(), DAG, true)) in visitSUB()
3871 SDValue N1S = DAG.getSplatValue(N1, true); in visitSUB()
3880 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitSUB()
3883 if (N1.getOpcode() == ISD::SUB && isNullOrNullSplat(N1.getOperand(0))) in visitSUB()
3884 return DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(1)); in visitSUB()
3887 if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(0)) in visitSUB()
3888 return N1.getOperand(1); in visitSUB()
3891 if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1) in visitSUB()
3895 if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1) in visitSUB()
3901 if (SDValue NewC = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N01, N1})) in visitSUB()
3906 if (N1.getOpcode() == ISD::ADD) { in visitSUB()
3907 SDValue N11 = N1.getOperand(1); in visitSUB()
3909 return DAG.getNode(ISD::SUB, DL, VT, NewC, N1.getOperand(0)); in visitSUB()
3915 if (SDValue NewC = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, {N01, N1})) in visitSUB()
3922 if (SDValue NewC = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N00, N1})) in visitSUB()
3929 if (sd_match(N0, m_Add(m_Value(A), m_Add(m_Specific(N1), m_Value(C))))) in visitSUB()
3933 if (sd_match(N0, m_Add(m_Value(A), m_Sub(m_Specific(N1), m_Value(C))))) in visitSUB()
3937 if (sd_match(N0, m_Sub(m_Value(A), m_Sub(m_Value(B), m_Specific(N1))))) in visitSUB()
3941 if (sd_match(N1, m_OneUse(m_Sub(m_Value(B), m_Value(C))))) in visitSUB()
3946 if (sd_match(N1, m_And(m_Specific(N0), m_Value(B))) && in visitSUB()
3947 (N1.hasOneUse() || isConstantOrConstantVector(B, /*NoOpaques=*/true))) in visitSUB()
3951 if (sd_match(N1, m_OneUse(m_Mul(m_Neg(m_Value(B)), m_Value(C))))) in visitSUB()
3958 if (N1.isUndef()) in visitSUB()
3959 return N1; in visitSUB()
3971 if (SDValue V = foldAddSubMasked1(false, N0, N1, DAG, DL)) in visitSUB()
3985 if (TLI.preferIncOfAddToSubOfNot(VT) && N1.hasOneUse() && isBitwiseNot(N1)) { in visitSUB()
3986 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(0)); in visitSUB()
3992 if (!reassociationCanBreakAddressingModePattern(ISD::SUB, DL, N, N0, N1) && in visitSUB()
3995 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1); in visitSUB()
3999 if (N1.getOpcode() == ISD::ADD && N1.hasOneUse() && in visitSUB()
4000 isConstantOrConstantVector(N1.getOperand(1), /*NoOpaques=*/true)) { in visitSUB()
4001 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(0)); in visitSUB()
4002 return DAG.getNode(ISD::SUB, DL, VT, Sub, N1.getOperand(1)); in visitSUB()
4008 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1); in visitSUB()
4014 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1), N1); in visitSUB()
4021 if (N1.getOpcode() == ISD::ZERO_EXTEND && in visitSUB()
4022 N1.getOperand(0).getScalarValueSizeInBits() == 1 && in visitSUB()
4025 SDValue SExt = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, N1.getOperand(0)); in visitSUB()
4031 sd_match(N1, m_Sra(m_Value(A), m_SpecificInt(BitWidth - 1))) && in visitSUB()
4032 sd_match(N0, m_Xor(m_Specific(A), m_Specific(N1)))) in visitSUB()
4039 if (GlobalAddressSDNode *GB = dyn_cast<GlobalAddressSDNode>(N1)) in visitSUB()
4046 if (N1.getOpcode() == ISD::SIGN_EXTEND_INREG) { in visitSUB()
4047 VTSDNode *TN = cast<VTSDNode>(N1.getOperand(1)); in visitSUB()
4049 SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0), in visitSUB()
4056 if (N1.getOpcode() == ISD::VSCALE && N1.hasOneUse()) { in visitSUB()
4057 const APInt &IntVal = N1.getConstantOperandAPInt(0); in visitSUB()
4062 if (N1.getOpcode() == ISD::STEP_VECTOR && N1.hasOneUse()) { in visitSUB()
4063 APInt NewStep = -N1.getConstantOperandAPInt(0); in visitSUB()
4070 if (!LegalOperations && N1.getOpcode() == ISD::SRL && N1.hasOneUse()) { in visitSUB()
4071 SDValue ShAmt = N1.getOperand(1); in visitSUB()
4074 SDValue SRA = DAG.getNode(ISD::SRA, DL, VT, N1.getOperand(0), ShAmt); in visitSUB()
4082 if (N1.getOpcode() == ISD::SHL) { in visitSUB()
4083 ConstantSDNode *ShlC = isConstOrConstSplat(N1.getOperand(1)); in visitSUB()
4085 return DAG.getNode(ISD::ADD, DL, VT, N1, N0); in visitSUB()
4092 N0.getOperand(0), N1, N0.getOperand(2)); in visitSUB()
4097 SDValue X = N1; in visitSUB()
4111 const APInt &MaybeOnes = ~DAG.computeKnownBits(N1).Zero; in visitSUB()
4113 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitSUB()
4120 sd_match(N1, m_SMin(m_Specific(A), m_Specific(B)))) in visitSUB()
4126 sd_match(N1, m_UMin(m_Specific(A), m_Specific(B)))) in visitSUB()
4135 SDValue N1 = N->getOperand(1); in visitSUBSAT() local
4141 if (N0.isUndef() || N1.isUndef()) in visitSUBSAT()
4145 if (N0 == N1) in visitSUBSAT()
4149 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitSUBSAT()
4158 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitSUBSAT()
4163 if (isNullConstant(N1)) in visitSUBSAT()
4167 if (DAG.willNotOverflowSub(IsSigned, N0, N1)) in visitSUBSAT()
4168 return DAG.getNode(ISD::SUB, DL, VT, N0, N1); in visitSUBSAT()
4175 SDValue N1 = N->getOperand(1); in visitSUBC() local
4181 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1), in visitSUBC()
4185 if (N0 == N1) in visitSUBC()
4190 if (isNullConstant(N1)) in visitSUBC()
4195 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0), in visitSUBC()
4203 SDValue N1 = N->getOperand(1); in visitSUBO() local
4212 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1), in visitSUBO()
4216 if (N0 == N1) in visitSUBO()
4221 if (ConstantSDNode *N1C = getAsNonOpaqueConstant(N1)) in visitSUBO()
4227 if (isNullOrNullSplat(N1)) in visitSUBO()
4231 if (DAG.willNotOverflowSub(IsSigned, N0, N1)) in visitSUBO()
4232 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1), in visitSUBO()
4237 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0), in visitSUBO()
4245 SDValue N1 = N->getOperand(1); in visitSUBE() local
4250 return DAG.getNode(ISD::SUBC, SDLoc(N), N->getVTList(), N0, N1); in visitSUBE()
4257 SDValue N1 = N->getOperand(1); in visitUSUBO_CARRY() local
4264 return DAG.getNode(ISD::USUBO, SDLoc(N), N->getVTList(), N0, N1); in visitUSUBO_CARRY()
4272 SDValue N1 = N->getOperand(1); in visitSSUBO_CARRY() local
4279 return DAG.getNode(ISD::SSUBO, SDLoc(N), N->getVTList(), N0, N1); in visitSSUBO_CARRY()
4289 SDValue N1 = N->getOperand(1); in visitMULFIX() local
4294 if (N0.isUndef() || N1.isUndef()) in visitMULFIX()
4299 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitMULFIX()
4300 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0, Scale); in visitMULFIX()
4303 if (isNullConstant(N1)) in visitMULFIX()
4311 SDValue N1 = N->getOperand(1); in visitMUL() local
4319 if (N0.isUndef() || N1.isUndef()) in visitMUL()
4323 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MUL, DL, VT, {N0, N1})) in visitMUL()
4328 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitMUL()
4329 return Matcher.getNode(ISD::MUL, DL, VT, N1, N0); in visitMUL()
4342 N1IsConst = ISD::isConstantSplatVector(N1.getNode(), ConstValue1); in visitMUL()
4346 N1IsConst = isa<ConstantSDNode>(N1); in visitMUL()
4348 ConstValue1 = N1->getAsAPIntVal(); in visitMUL()
4349 N1IsOpaqueConst = cast<ConstantSDNode>(N1)->isOpaque(); in visitMUL()
4355 return N1; in visitMUL()
4370 if (isConstantOrConstantVector(N1, /*NoOpaques*/ true) && in visitMUL()
4372 if (SDValue LogBase2 = BuildLogBase2(N1, DL)) { in visitMUL()
4398 if (SDNode *LoHi = DAG.getNodeIfExists(LoHiOpc, LoHiVT, {N0, N1})) in visitMUL()
4401 if (SDNode *LoHi = DAG.getNodeIfExists(LoHiOpc, LoHiVT, {N1, N0})) in visitMUL()
4424 TLI.decomposeMulByConstant(*DAG.getContext(), VT, N1)) { in visitMUL()
4460 if (SDValue C3 = DAG.FoldConstantArithmetic(ISD::SHL, DL, VT, {N1, N01})) in visitMUL()
4472 Sh = N0; Y = N1; in visitMUL()
4473 } else if (sd_context_match(N1, Matcher, m_OneUse(m_Opc(ISD::SHL))) && in visitMUL()
4474 isConstantOrConstantVector(N1.getOperand(1))) { in visitMUL()
4475 Sh = N1; Y = N0; in visitMUL()
4486 DAG.isConstantIntBuildVectorOrConstantInt(N1) && in visitMUL()
4488 isMulAddWithConstProfitable(N, N0, N1)) in visitMUL()
4491 Matcher.getNode(ISD::MUL, SDLoc(N0), VT, N0.getOperand(0), N1), in visitMUL()
4492 Matcher.getNode(ISD::MUL, SDLoc(N1), VT, N0.getOperand(1), N1)); in visitMUL()
4495 ConstantSDNode *NC1 = isConstOrConstSplat(N1); in visitMUL()
4505 ISD::isConstantSplatVector(N1.getNode(), MulVal)) { in visitMUL()
4538 ISD::matchUnaryPredicate(N1, IsClearMask, /*AllowUndefs*/ true)) { in visitMUL()
4539 assert(N1.getOpcode() == ISD::BUILD_VECTOR && "Unknown constant vector"); in visitMUL()
4540 EVT LegalSVT = N1.getOperand(0).getValueType(); in visitMUL()
4554 if (SDValue RMUL = reassociateOps(ISD::MUL, DL, N0, N1, N->getFlags())) in visitMUL()
4561 reassociateReduction(ISD::VECREDUCE_MUL, ISD::MUL, DL, VT, N0, N1)) in visitMUL()
4661 SDValue N1 = N->getOperand(1); in simplifyDivRem() local
4667 ConstantSDNode *N1C = isConstOrConstSplat(N1); in simplifyDivRem()
4674 if (DAG.isUndef(Opc, {N0, N1})) in simplifyDivRem()
4690 if (N0 == N1) in simplifyDivRem()
4707 SDValue N1 = N->getOperand(1); in visitSDIV() local
4713 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SDIV, DL, VT, {N0, N1})) in visitSDIV()
4722 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitSDIV()
4728 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ), in visitSDIV()
4740 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0)) in visitSDIV()
4741 return DAG.getNode(ISD::UDIV, DL, N1.getValueType(), N0, N1); in visitSDIV()
4743 if (SDValue V = visitSDIVLike(N0, N1, N)) { in visitSDIV()
4747 { N0, N1 })) { in visitSDIV()
4748 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, V, N1); in visitSDIV()
4784 SDValue DAGCombiner::visitSDIVLike(SDValue N0, SDValue N1, SDNode *N) { in visitSDIVLike() argument
4794 if (!N->getFlags().hasExact() && isDivisorPowerOfTwo(N1)) { in visitSDIVLike()
4802 SDValue C1 = DAG.getNode(ISD::CTTZ, DL, VT, N1); in visitSDIVLike()
4825 SDValue IsOne = DAG.getSetCC(DL, CCVT, N1, One, ISD::SETEQ); in visitSDIVLike()
4826 SDValue IsAllOnes = DAG.getSetCC(DL, CCVT, N1, AllOnes, ISD::SETEQ); in visitSDIVLike()
4836 SDValue IsNeg = DAG.getSetCC(DL, CCVT, N1, Zero, ISD::SETLT); in visitSDIVLike()
4845 if (isConstantOrConstantVector(N1) && in visitSDIVLike()
4855 SDValue N1 = N->getOperand(1); in visitUDIV() local
4861 if (SDValue C = DAG.FoldConstantArithmetic(ISD::UDIV, DL, VT, {N0, N1})) in visitUDIV()
4870 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitUDIV()
4872 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ), in visitUDIV()
4883 if (SDValue V = visitUDIVLike(N0, N1, N)) { in visitUDIV()
4887 { N0, N1 })) { in visitUDIV()
4888 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, V, N1); in visitUDIV()
4908 SDValue DAGCombiner::visitUDIVLike(SDValue N0, SDValue N1, SDNode *N) { in visitUDIVLike() argument
4913 if (isConstantOrConstantVector(N1, /*NoOpaques*/ true)) { in visitUDIVLike()
4914 if (SDValue LogBase2 = BuildLogBase2(N1, DL)) { in visitUDIVLike()
4925 if (N1.getOpcode() == ISD::SHL) { in visitUDIVLike()
4926 SDValue N10 = N1.getOperand(0); in visitUDIVLike()
4931 EVT ADDVT = N1.getOperand(1).getValueType(); in visitUDIVLike()
4934 SDValue Add = DAG.getNode(ISD::ADD, DL, ADDVT, N1.getOperand(1), Trunc); in visitUDIVLike()
4943 if (isConstantOrConstantVector(N1) && in visitUDIVLike()
4951 SDValue DAGCombiner::buildOptimizedSREM(SDValue N0, SDValue N1, SDNode *N) { in buildOptimizedSREM() argument
4952 if (!N->getFlags().hasExact() && isDivisorPowerOfTwo(N1) && in buildOptimizedSREM()
4953 !DAG.doesNodeExist(ISD::SDIV, N->getVTList(), {N0, N1})) { in buildOptimizedSREM()
4965 SDValue N1 = N->getOperand(1); in visitREM() local
4973 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitREM()
4978 if (!isSigned && llvm::isAllOnesOrAllOnesSplat(N1, /*AllowUndefs*/ false) && in visitREM()
4981 SDValue EqualsNeg1 = DAG.getSetCC(DL, CCVT, F0, N1, ISD::SETEQ); in visitREM()
4994 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0)) in visitREM()
4995 return DAG.getNode(ISD::UREM, DL, VT, N0, N1); in visitREM()
4997 if (DAG.isKnownToBeAPowerOfTwo(N1)) { in visitREM()
5000 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne); in visitREM()
5008 if ((N1.getOpcode() == ISD::SHL || N1.getOpcode() == ISD::SRL) && in visitREM()
5009 DAG.isKnownToBeAPowerOfTwo(N1.getOperand(0))) { in visitREM()
5011 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne); in visitREM()
5026 if (DAG.isKnownNeverZero(N1) && !TLI.isIntDivCheap(VT, Attr)) { in visitREM()
5029 if (SDValue OptimizedRem = buildOptimizedSREM(N0, N1, N)) in visitREM()
5034 isSigned ? visitSDIVLike(N0, N1, N) : visitUDIVLike(N0, N1, N); in visitREM()
5039 { N0, N1 })) in visitREM()
5041 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, OptimizedDiv, N1); in visitREM()
5058 SDValue N1 = N->getOperand(1); in visitMULHS() local
5063 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MULHS, DL, VT, {N0, N1})) in visitMULHS()
5068 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitMULHS()
5069 return DAG.getNode(ISD::MULHS, DL, N->getVTList(), N1, N0); in visitMULHS()
5077 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitMULHS()
5082 if (isNullConstant(N1)) in visitMULHS()
5083 return N1; in visitMULHS()
5086 if (isOneConstant(N1)) in visitMULHS()
5092 if (N0.isUndef() || N1.isUndef()) in visitMULHS()
5104 N1 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N1); in visitMULHS()
5105 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1); in visitMULHS()
5106 N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1, in visitMULHS()
5108 return DAG.getNode(ISD::TRUNCATE, DL, VT, N1); in visitMULHS()
5117 SDValue N1 = N->getOperand(1); in visitMULHU() local
5122 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MULHU, DL, VT, {N0, N1})) in visitMULHU()
5127 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitMULHU()
5128 return DAG.getNode(ISD::MULHU, DL, N->getVTList(), N1, N0); in visitMULHU()
5136 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitMULHU()
5141 if (isNullConstant(N1)) in visitMULHU()
5142 return N1; in visitMULHU()
5145 if (isOneConstant(N1)) in visitMULHU()
5149 if (N0.isUndef() || N1.isUndef()) in visitMULHU()
5153 if (isConstantOrConstantVector(N1, /*NoOpaques*/ true) && in visitMULHU()
5155 if (SDValue LogBase2 = BuildLogBase2(N1, DL)) { in visitMULHU()
5174 N1 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N1); in visitMULHU()
5175 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1); in visitMULHU()
5176 N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1, in visitMULHU()
5178 return DAG.getNode(ISD::TRUNCATE, DL, VT, N1); in visitMULHU()
5194 SDValue N1 = N->getOperand(1); in visitAVG() local
5200 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitAVG()
5205 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitAVG()
5206 return DAG.getNode(Opcode, DL, N->getVTList(), N1, N0); in visitAVG()
5214 return N1; in visitAVG()
5215 if (N1.isUndef()) in visitAVG()
5219 if (N0 == N1 && Level >= AfterLegalizeTypes) in visitAVG()
5253 if (DAG.isKnownNeverZero(N1)) in visitAVG()
5256 DAG.getNode(ISD::ADD, DL, VT, N1, DAG.getAllOnesConstant(DL, VT))); in visitAVG()
5259 ISD::AVGCEILU, DL, VT, N1, in visitAVG()
5269 SDValue N1 = N->getOperand(1); in visitABD() local
5274 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitABD()
5279 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitABD()
5280 return DAG.getNode(Opcode, DL, N->getVTList(), N1, N0); in visitABD()
5287 if (N0.isUndef() || N1.isUndef()) in visitABD()
5303 DAG.SignBitIsZero(N0) && DAG.SignBitIsZero(N1)) in visitABD()
5304 return DAG.getNode(ISD::ABDU, DL, VT, N1, N0); in visitABD()
5363 SDValue N1 = N->getOperand(1); in visitSMUL_LOHI() local
5368 if (isa<ConstantSDNode>(N0) && isa<ConstantSDNode>(N1)) in visitSMUL_LOHI()
5369 return DAG.getNode(ISD::SMUL_LOHI, DL, N->getVTList(), N0, N1); in visitSMUL_LOHI()
5373 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitSMUL_LOHI()
5374 return DAG.getNode(ISD::SMUL_LOHI, DL, N->getVTList(), N1, N0); in visitSMUL_LOHI()
5384 SDValue Hi = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N1); in visitSMUL_LOHI()
5404 SDValue N1 = N->getOperand(1); in visitUMUL_LOHI() local
5409 if (isa<ConstantSDNode>(N0) && isa<ConstantSDNode>(N1)) in visitUMUL_LOHI()
5410 return DAG.getNode(ISD::UMUL_LOHI, DL, N->getVTList(), N0, N1); in visitUMUL_LOHI()
5414 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitUMUL_LOHI()
5415 return DAG.getNode(ISD::UMUL_LOHI, DL, N->getVTList(), N1, N0); in visitUMUL_LOHI()
5418 if (isNullConstant(N1)) { in visitUMUL_LOHI()
5424 if (isOneConstant(N1)) { in visitUMUL_LOHI()
5437 SDValue Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N1); in visitUMUL_LOHI()
5454 SDValue N1 = N->getOperand(1); in visitMULO() local
5462 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitMULO()
5478 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitMULO()
5479 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0); in visitMULO()
5482 if (isNullOrNullSplat(N1)) in visitMULO()
5495 SDValue And = DAG.getNode(ISD::AND, DL, VT, N0, N1); in visitMULO()
5502 if (DAG.willNotOverflowMul(IsSigned, N0, N1)) in visitMULO()
5503 return CombineTo(N, DAG.getNode(ISD::MUL, DL, VT, N0, N1), in visitMULO()
5514 static SDValue isSaturatingMinMax(SDValue N0, SDValue N1, SDValue N2, in isSaturatingMinMax() argument
5517 auto isSignedMinMax = [&](SDValue N0, SDValue N1, SDValue N2, SDValue N3, in isSaturatingMinMax()
5524 ConstantSDNode *N1C = isConstOrConstSplat(peekThroughTruncates(N1)); in isSaturatingMinMax()
5528 const APInt &C1 = N1C->getAPIntValue().trunc(N1.getScalarValueSizeInBits()); in isSaturatingMinMax()
5536 unsigned Opcode0 = isSignedMinMax(N0, N1, N2, N3, CC); in isSaturatingMinMax()
5594 ConstantSDNode *MinCOp = isConstOrConstSplat(Opcode0 == ISD::SMIN ? N1 : N01); in isSaturatingMinMax()
5595 ConstantSDNode *MaxCOp = isConstOrConstSplat(Opcode0 == ISD::SMIN ? N01 : N1); in isSaturatingMinMax()
5617 static SDValue PerformMinMaxFpToSatCombine(SDValue N0, SDValue N1, SDValue N2, in PerformMinMaxFpToSatCombine() argument
5622 SDValue Fp = isSaturatingMinMax(N0, N1, N2, N3, CC, BW, Unsigned, DAG); in PerformMinMaxFpToSatCombine()
5639 static SDValue PerformUMinFpToSatCombine(SDValue N0, SDValue N1, SDValue N2, in PerformUMinFpToSatCombine() argument
5649 ConstantSDNode *N1C = isConstOrConstSplat(N1); in PerformUMinFpToSatCombine()
5677 SDValue N1 = N->getOperand(1); in visitIMINMAX() local
5683 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitIMINMAX()
5687 if (N0 == N1) in visitIMINMAX()
5692 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitIMINMAX()
5693 return DAG.getNode(Opcode, DL, VT, N1, N0); in visitIMINMAX()
5701 if (SDValue RMINMAX = reassociateOps(Opcode, DL, N0, N1, N->getFlags())) in visitIMINMAX()
5711 (N1.isUndef() || DAG.SignBitIsZero(N1))) { in visitIMINMAX()
5721 return DAG.getNode(AltOpcode, DL, VT, N0, N1); in visitIMINMAX()
5726 N0, N1, N0, N1, Opcode == ISD::SMIN ? ISD::SETLT : ISD::SETGT, DAG)) in visitIMINMAX()
5729 if (SDValue S = PerformUMinFpToSatCombine(N0, N1, N0, N1, ISD::SETULT, DAG)) in visitIMINMAX()
5748 SDLoc(N), VT, N0, N1)) in visitIMINMAX()
5761 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in hoistLogicOpWithSameOpcodeHands() local
5766 assert(HandOpcode == N1.getOpcode() && "Bad input!"); in hoistLogicOpWithSameOpcodeHands()
5777 SDValue Y = N1.getOperand(0); in hoistLogicOpWithSameOpcodeHands()
5782 N0.getOperand(1) == N1.getOperand(1))) { in hoistLogicOpWithSameOpcodeHands()
5785 if (!N0.hasOneUse() && !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5812 if (!N0.hasOneUse() && !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5834 N0.getOperand(1) == N1.getOperand(1)) { in hoistLogicOpWithSameOpcodeHands()
5836 if (!N0.hasOneUse() || !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5845 if (!N0.hasOneUse() || !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5855 N0.getOperand(2) == N1.getOperand(2)) { in hoistLogicOpWithSameOpcodeHands()
5856 if (!N0.hasOneUse() || !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5859 SDValue Y1 = N1.getOperand(1); in hoistLogicOpWithSameOpcodeHands()
5898 auto *SVN1 = cast<ShuffleVectorSDNode>(N1); in hoistLogicOpWithSameOpcodeHands()
5917 if (N0.getOperand(1) == N1.getOperand(1) && ShOp.getNode()) { in hoistLogicOpWithSameOpcodeHands()
5919 N0.getOperand(0), N1.getOperand(0)); in hoistLogicOpWithSameOpcodeHands()
5930 if (N0.getOperand(0) == N1.getOperand(0) && ShOp.getNode()) { in hoistLogicOpWithSameOpcodeHands()
5932 N1.getOperand(1)); in hoistLogicOpWithSameOpcodeHands()
5941 SDValue DAGCombiner::foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1, in foldLogicOfSetCCs() argument
5945 !isSetCCEquivalent(N1, RL, RR, N1CC)) in foldLogicOfSetCCs()
5948 assert(N0.getValueType() == N1.getValueType() && in foldLogicOfSetCCs()
6027 N0.hasOneUse() && N1.hasOneUse()) { in foldLogicOfSetCCs()
6032 SDValue XorR = DAG.getNode(ISD::XOR, SDLoc(N1), OpVT, RL, RR); in foldLogicOfSetCCs()
6366 SDValue DAGCombiner::visitANDLike(SDValue N0, SDValue N1, SDNode *N) { in visitANDLike() argument
6367 EVT VT = N1.getValueType(); in visitANDLike()
6371 if (N0.isUndef() || N1.isUndef()) in visitANDLike()
6374 if (SDValue V = foldLogicOfSetCCs(true, N0, N1, DL)) in visitANDLike()
6379 if (N1.getOpcode() == ISD::ADD) in visitANDLike()
6380 std::swap(N0, N1); in visitANDLike()
6383 if (N0.getOpcode() == ISD::ADD && N1.getOpcode() == ISD::SRL && in visitANDLike()
6386 if (ConstantSDNode *SRLI = dyn_cast<ConstantSDNode>(N1.getOperand(1))) { in visitANDLike()
6713 SDValue N1 = N->getOperand(1); in unfoldExtremeBitClearingToShifts() local
6740 if (matchMask(N1)) in unfoldExtremeBitClearingToShifts()
6743 X = N1; in unfoldExtremeBitClearingToShifts()
6941 SDValue N1 = N->getOperand(1); in visitAND() local
6942 EVT VT = N1.getValueType(); in visitAND()
6946 if (N0 == N1) in visitAND()
6950 if (SDValue C = DAG.FoldConstantArithmetic(ISD::AND, DL, VT, {N0, N1})) in visitAND()
6955 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitAND()
6956 return DAG.getNode(ISD::AND, DL, VT, N1, N0); in visitAND()
6958 if (areBitwiseNotOfEachother(N0, N1)) in visitAND()
6967 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitAND()
6969 return DAG.getConstant(APInt::getZero(N1.getScalarValueSizeInBits()), DL, in visitAND()
6970 N1.getValueType()); in visitAND()
6973 if (ISD::isConstantSplatVectorAllOnes(N1.getNode())) in visitAND()
6978 ConstantSDNode *Splat = isConstOrConstSplat(N1, true, true); in visitAND()
6980 N1.hasOneUse()) { in visitAND()
7006 if (isAllOnesConstant(N1)) in visitAND()
7011 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitAND()
7022 if (SDValue RAND = reassociateOps(ISD::AND, DL, N0, N1, N->getFlags())) in visitAND()
7027 reassociateReduction(ISD::VECREDUCE_AND, ISD::AND, DL, VT, N0, N1)) in visitAND()
7035 ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchSubset)) in visitAND()
7036 return N1; in visitAND()
7056 DAG.getZExtOrTrunc(N1, DL, SrcVT))); in visitAND()
7065 DAG.isConstantIntBuildVectorOrConstantInt(N1) && in visitAND()
7069 DAG.getNode(ISD::AND, DL, VT, N1, in visitAND()
7096 N1, /*AllowUndef=*/false, /*AllowTruncation=*/true)) { in visitAND()
7098 } else if (BuildVectorSDNode *Vector = dyn_cast<BuildVectorSDNode>(N1)) { in visitAND()
7184 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitAND()
7212 isConstantSplatVectorMaskForType(N1.getNode(), ScalarVT) && in visitAND()
7243 if (SDValue Combined = visitANDLike(N0, N1, N)) in visitAND()
7247 if (N0.getOpcode() == N1.getOpcode()) in visitAND()
7251 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitAND()
7253 if (SDValue R = foldLogicOfShifts(N, N1, N0, DAG)) in visitAND()
7289 unsigned ExtBitSize = N1.getScalarValueSizeInBits(); in visitAND()
7292 if (DAG.MaskedValueIsZero(N1, ExtBits) && in visitAND()
7339 if (IsAndZeroExtMask(N0, N1)) in visitAND()
7349 if (SDValue R = foldLogicTreeOfShifts(N, N0, N1, DAG)) in visitAND()
7356 SDValue DAGCombiner::MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1, in MatchBSwapHWordLow() argument
7371 std::swap(N0, N1); in MatchBSwapHWordLow()
7372 if (N1.getOpcode() == ISD::AND && N1.getOperand(0).getOpcode() == ISD::SHL) in MatchBSwapHWordLow()
7373 std::swap(N0, N1); in MatchBSwapHWordLow()
7387 if (N1.getOpcode() == ISD::AND) { in MatchBSwapHWordLow()
7388 if (!N1->hasOneUse()) in MatchBSwapHWordLow()
7390 ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1)); in MatchBSwapHWordLow()
7393 N1 = N1.getOperand(0); in MatchBSwapHWordLow()
7397 if (N0.getOpcode() == ISD::SRL && N1.getOpcode() == ISD::SHL) in MatchBSwapHWordLow()
7398 std::swap(N0, N1); in MatchBSwapHWordLow()
7399 if (N0.getOpcode() != ISD::SHL || N1.getOpcode() != ISD::SRL) in MatchBSwapHWordLow()
7401 if (!N0->hasOneUse() || !N1->hasOneUse()) in MatchBSwapHWordLow()
7405 ConstantSDNode *N11C = dyn_cast<ConstantSDNode>(N1.getOperand(1)); in MatchBSwapHWordLow()
7423 SDValue N10 = N1->getOperand(0); in MatchBSwapHWordLow()
7584 SDValue N1, EVT VT) { in matchBSwapHWordOrAndAnd() argument
7589 if (N0.getOpcode() != ISD::AND || N1.getOpcode() != ISD::AND) in matchBSwapHWordOrAndAnd()
7592 if (!N0->hasOneUse() || !N1->hasOneUse()) in matchBSwapHWordOrAndAnd()
7595 ConstantSDNode *Mask1 = isConstOrConstSplat(N1.getOperand(1)); in matchBSwapHWordOrAndAnd()
7602 SDValue Shift1 = N1.getOperand(0); in matchBSwapHWordOrAndAnd()
7626 SDValue DAGCombiner::MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1) { in MatchBSwapHWord() argument
7636 if (SDValue BSwap = matchBSwapHWordOrAndAnd(TLI, DAG, N, N0, N1, VT)) in MatchBSwapHWord()
7640 if (SDValue BSwap = matchBSwapHWordOrAndAnd(TLI, DAG, N, N1, N0, VT)) in MatchBSwapHWord()
7652 if (!isBSwapHWordPair(N1, Parts)) in MatchBSwapHWord()
7656 if (!isBSwapHWordElement(N1, Parts)) in MatchBSwapHWord()
7689 SDValue DAGCombiner::visitORLike(SDValue N0, SDValue N1, const SDLoc &DL) { in visitORLike() argument
7690 EVT VT = N1.getValueType(); in visitORLike()
7693 if (!LegalOperations && (N0.isUndef() || N1.isUndef())) in visitORLike()
7696 if (SDValue V = foldLogicOfSetCCs(false, N0, N1, DL)) in visitORLike()
7700 if (N0.getOpcode() == ISD::AND && N1.getOpcode() == ISD::AND && in visitORLike()
7702 (N0->hasOneUse() || N1->hasOneUse())) { in visitORLike()
7708 getAsNonOpaqueConstant(N1.getOperand(1))) { in visitORLike()
7715 DAG.MaskedValueIsZero(N1.getOperand(0), LHSMask&~RHSMask)) { in visitORLike()
7717 N0.getOperand(0), N1.getOperand(0)); in visitORLike()
7727 N1.getOpcode() == ISD::AND && in visitORLike()
7728 N0.getOperand(0) == N1.getOperand(0) && in visitORLike()
7730 (N0->hasOneUse() || N1->hasOneUse())) { in visitORLike()
7732 N0.getOperand(1), N1.getOperand(1)); in visitORLike()
7740 static SDValue visitORCommutative(SelectionDAG &DAG, SDValue N0, SDValue N1, in visitORCommutative() argument
7754 SDValue N1Resized = peekThroughResize(N1); in visitORCommutative()
7760 return N1; in visitORCommutative()
7768 N1); in visitORCommutative()
7776 N1); in visitORCommutative()
7783 if (sd_match(N0, m_Xor(m_Value(X), m_Specific(N1)))) in visitORCommutative()
7784 return DAG.getNode(ISD::OR, DL, VT, X, N1); in visitORCommutative()
7788 (sd_match(N1, m_And(m_Specific(X), m_Specific(Y))) || in visitORCommutative()
7789 sd_match(N1, m_Or(m_Specific(X), m_Specific(Y))))) in visitORCommutative()
7792 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitORCommutative()
7802 if (N0.getOpcode() == ISD::FSHL && N1.getOpcode() == ISD::SHL && in visitORCommutative()
7803 N0.getOperand(0) == N1.getOperand(0) && in visitORCommutative()
7804 peekThroughZext(N0.getOperand(2)) == peekThroughZext(N1.getOperand(1))) in visitORCommutative()
7808 if (N0.getOpcode() == ISD::FSHR && N1.getOpcode() == ISD::SRL && in visitORCommutative()
7809 N0.getOperand(1) == N1.getOperand(0) && in visitORCommutative()
7810 peekThroughZext(N0.getOperand(2)) == peekThroughZext(N1.getOperand(1))) in visitORCommutative()
7818 sd_match(N1, m_ZExt(m_Value(Lo))) && in visitORCommutative()
7838 SDValue N1 = N->getOperand(1); in visitOR() local
7839 EVT VT = N1.getValueType(); in visitOR()
7843 if (N0 == N1) in visitOR()
7847 if (SDValue C = DAG.FoldConstantArithmetic(ISD::OR, DL, VT, {N0, N1})) in visitOR()
7852 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitOR()
7853 return DAG.getNode(ISD::OR, DL, VT, N1, N0); in visitOR()
7861 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitOR()
7865 if (ISD::isConstantSplatVectorAllOnes(N1.getNode())) in visitOR()
7867 return DAG.getAllOnesConstant(DL, N1.getValueType()); in visitOR()
7872 auto *SV1 = dyn_cast<ShuffleVectorSDNode>(N1); in visitOR()
7876 bool ZeroN10 = ISD::isBuildVectorAllZeros(N1.getOperand(0).getNode()); in visitOR()
7877 bool ZeroN11 = ISD::isBuildVectorAllZeros(N1.getOperand(1).getNode()); in visitOR()
7916 SDValue NewRHS = ZeroN10 ? N1.getOperand(1) : N1.getOperand(0); in visitOR()
7927 if (isNullConstant(N1)) in visitOR()
7931 if (isAllOnesConstant(N1)) in visitOR()
7932 return N1; in visitOR()
7938 ConstantSDNode *N1C = dyn_cast<ConstantSDNode>(N1); in visitOR()
7940 return N1; in visitOR()
7945 if (SDValue Combined = visitORLike(N0, N1, DL)) in visitOR()
7948 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitOR()
7952 if (SDValue BSwap = MatchBSwapHWord(N, N0, N1)) in visitOR()
7954 if (SDValue BSwap = MatchBSwapHWordLow(N, N0, N1)) in visitOR()
7958 if (SDValue ROR = reassociateOps(ISD::OR, DL, N0, N1, N->getFlags())) in visitOR()
7963 reassociateReduction(ISD::VECREDUCE_OR, ISD::OR, DL, VT, N0, N1)) in visitOR()
7972 ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchIntersect, true)) { in visitOR()
7973 if (SDValue COR = DAG.FoldConstantArithmetic(ISD::OR, SDLoc(N1), VT, in visitOR()
7974 {N1, N0.getOperand(1)})) { in visitOR()
7975 SDValue IOR = DAG.getNode(ISD::OR, SDLoc(N0), VT, N0.getOperand(0), N1); in visitOR()
7981 if (SDValue Combined = visitORCommutative(DAG, N0, N1, N)) in visitOR()
7983 if (SDValue Combined = visitORCommutative(DAG, N1, N0, N)) in visitOR()
7987 if (N0.getOpcode() == N1.getOpcode()) in visitOR()
7992 if (SDValue Rot = MatchRotate(N0, N1, DL)) in visitOR()
8011 if (SDValue R = foldLogicTreeOfShifts(N, N0, N1, DAG)) in visitOR()
8329 SDValue DAGCombiner::MatchFunnelPosNeg(SDValue N0, SDValue N1, SDValue Pos, in MatchFunnelPosNeg() argument
8344 if (matchRotateSub(InnerPos, InnerNeg, EltBits, DAG, /*IsRotate*/ N0 == N1)) { in MatchFunnelPosNeg()
8345 return DAG.getNode(HasPos ? PosOpcode : NegOpcode, DL, VT, N0, N1, in MatchFunnelPosNeg()
8362 if (IsBinOpImm(N1, ISD::SRL, 1) && in MatchFunnelPosNeg()
8366 return DAG.getNode(ISD::FSHL, DL, VT, N0, N1.getOperand(0), Pos); in MatchFunnelPosNeg()
8375 return DAG.getNode(ISD::FSHR, DL, VT, N0.getOperand(0), N1, Neg); in MatchFunnelPosNeg()
8385 return DAG.getNode(ISD::FSHR, DL, VT, N0.getOperand(0), N1, Neg); in MatchFunnelPosNeg()
9337 SDValue N1 = N->getOperand(1); in unfoldMaskedMerge() local
9338 if (!matchAndXor(N0, 0, N1) && !matchAndXor(N0, 1, N1) && in unfoldMaskedMerge()
9339 !matchAndXor(N1, 0, N0) && !matchAndXor(N1, 1, N0)) in unfoldMaskedMerge()
9388 SDValue N1 = N->getOperand(1); in visitXOR() local
9393 if (N0.isUndef() && N1.isUndef()) in visitXOR()
9399 if (N1.isUndef()) in visitXOR()
9400 return N1; in visitXOR()
9403 if (SDValue C = DAG.FoldConstantArithmetic(ISD::XOR, DL, VT, {N0, N1})) in visitXOR()
9408 !DAG.isConstantIntBuildVectorOrConstantInt(N1)) in visitXOR()
9409 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitXOR()
9417 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) in visitXOR()
9422 if (isNullConstant(N1)) in visitXOR()
9429 if (SDValue RXOR = reassociateOps(ISD::XOR, DL, N0, N1, N->getFlags())) in visitXOR()
9434 reassociateReduction(ISD::VECREDUCE_XOR, ISD::XOR, DL, VT, N0, N1)) in visitXOR()
9439 DAG.haveNoCommonBitsSet(N0, N1)) { in visitXOR()
9442 return DAG.getNode(ISD::OR, DL, VT, N0, N1, Flags); in visitXOR()
9448 isMinSignedConstant(N1)) in visitXOR()
9455 if (TLI.isConstTrueVal(N1) && in visitXOR()
9489 if (isOneConstant(N1) && N0Opcode == ISD::ZERO_EXTEND && N0.hasOneUse() && in visitXOR()
9500 if (isOneConstant(N1) && VT == MVT::i1 && N0.hasOneUse() && in visitXOR()
9505 N00 = DAG.getNode(ISD::XOR, SDLoc(N00), VT, N00, N1); // N00 = ~N00 in visitXOR()
9506 N01 = DAG.getNode(ISD::XOR, SDLoc(N01), VT, N01, N1); // N01 = ~N01 in visitXOR()
9512 if (isAllOnesConstant(N1) && N0.hasOneUse() && in visitXOR()
9517 N00 = DAG.getNode(ISD::XOR, SDLoc(N00), VT, N00, N1); // N00 = ~N00 in visitXOR()
9518 N01 = DAG.getNode(ISD::XOR, SDLoc(N01), VT, N01, N1); // N01 = ~N01 in visitXOR()
9527 if (isAllOnesConstant(N1) && N0.getOpcode() == ISD::SUB && in visitXOR()
9534 if (isAllOnesConstant(N1) && N0.getOpcode() == ISD::ADD && in visitXOR()
9540 if (N0Opcode == ISD::AND && N0.hasOneUse() && N0->getOperand(1) == N1) { in visitXOR()
9544 return DAG.getNode(ISD::AND, DL, VT, NotX, N1); in visitXOR()
9549 SDValue A = N0Opcode == ISD::ADD ? N0 : N1; in visitXOR()
9550 SDValue S = N0Opcode == ISD::SRA ? N0 : N1; in visitXOR()
9562 if (N0 == N1) in visitXOR()
9584 isAllOnesConstant(N1) && isOneConstant(N0.getOperand(0))) { in visitXOR()
9590 if (N0Opcode == N1.getOpcode()) in visitXOR()
9594 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitXOR()
9596 if (SDValue R = foldLogicOfShifts(N, N1, N0, DAG)) in visitXOR()
9598 if (SDValue R = foldLogicTreeOfShifts(N, N0, N1, DAG)) in visitXOR()
9609 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitXOR()
9784 SDValue N1 = N->getOperand(1); in visitRotate() local
9789 if (isNullOrNullSplat(N1)) in visitRotate()
9794 APInt ModuloMask(N1.getScalarValueSizeInBits(), Bitsize - 1); in visitRotate()
9795 if (DAG.MaskedValueIsZero(N1, ModuloMask)) in visitRotate()
9805 if (ISD::matchUnaryPredicate(N1, MatchOutOfRange) && OutOfRange) { in visitRotate()
9806 EVT AmtVT = N1.getValueType(); in visitRotate()
9809 DAG.FoldConstantArithmetic(ISD::UREM, dl, AmtVT, {N1, Bits})) in visitRotate()
9814 auto *RotAmtC = isConstOrConstSplat(N1); in visitRotate()
9824 if (N1.getOpcode() == ISD::TRUNCATE && in visitRotate()
9825 N1.getOperand(0).getOpcode() == ISD::AND) { in visitRotate()
9826 if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode())) in visitRotate()
9835 SDNode *C1 = DAG.isConstantIntBuildVectorOrConstantInt(N1); in visitRotate()
9843 {N1, BitsizeC}); in visitRotate()
9863 SDValue N1 = N->getOperand(1); in visitSHL() local
9864 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSHL()
9869 EVT ShiftVT = N1.getValueType(); in visitSHL()
9873 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SHL, DL, VT, {N0, N1})) in visitSHL()
9881 BuildVectorSDNode *N1CV = dyn_cast<BuildVectorSDNode>(N1); in visitSHL()
9894 DAG.FoldConstantArithmetic(ISD::SHL, DL, VT, {N01, N1})) in visitSHL()
9909 if (N1.getOpcode() == ISD::TRUNCATE && in visitSHL()
9910 N1.getOperand(0).getOpcode() == ISD::AND) { in visitSHL()
9911 if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode())) in visitSHL()
9924 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange)) in visitSHL()
9934 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) { in visitSHL()
9935 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1)); in visitSHL()
9962 if (ISD::matchBinaryPredicate(InnerShiftAmt, N1, MatchOutOfRange, in visitSHL()
9975 if (ISD::matchBinaryPredicate(InnerShiftAmt, N1, MatchInRange, in visitSHL()
9980 Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, Sum, N1); in visitSHL()
9999 if (ISD::matchBinaryPredicate(InnerShiftAmt, N1, MatchEqual, in visitSHL()
10003 SDValue NewSHL = DAG.getZExtOrTrunc(N1, DL, InnerShiftAmtVT); in visitSHL()
10022 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSHL()
10026 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N1, N01); in visitSHL()
10029 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSHL()
10033 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N01, N1); in visitSHL()
10043 (N0.getOperand(1) == N1 || N0.hasOneUse()) && in visitSHL()
10045 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSHL()
10049 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N01, N1); in visitSHL()
10056 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSHL()
10060 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N1, N01); in visitSHL()
10062 Mask = DAG.getNode(ISD::SHL, DL, VT, Mask, N1); in visitSHL()
10070 if (N0.getOpcode() == ISD::SRA && N1 == N0.getOperand(1) && in visitSHL()
10071 isConstantOrConstantVector(N1, /* No Opaques */ true)) { in visitSHL()
10073 SDValue HiBitsMask = DAG.getNode(ISD::SHL, DL, VT, AllBits, N1); in visitSHL()
10085 DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N1), VT, {N01, N1})) { in visitSHL()
10086 SDValue Shl0 = DAG.getNode(ISD::SHL, SDLoc(N0), VT, N0.getOperand(0), N1); in visitSHL()
10109 DAG.FoldConstantArithmetic(ISD::SHL, DL, VT, {ExtC, N1})) { in visitSHL()
10111 SDValue ShlX = DAG.getNode(ISD::SHL, DL, VT, ExtX, N1); in visitSHL()
10121 DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N1), VT, {N01, N1})) in visitSHL()
10125 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitSHL()
10132 if (((N1.getOpcode() == ISD::CTTZ && in visitSHL()
10134 N1.getOpcode() == ISD::CTTZ_ZERO_UNDEF) && in visitSHL()
10135 N1.hasOneUse() && !TLI.isOperationLegalOrCustom(ISD::CTTZ, ShiftVT) && in visitSHL()
10137 SDValue Y = N1.getOperand(0); in visitSHL()
10158 ISD::isConstantSplatVector(N1.getNode(), ShlVal)) { in visitSHL()
10321 SDValue N1 = N->getOperand(1); in visitSRA() local
10322 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSRA()
10330 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SRA, DL, VT, {N0, N1})) in visitSRA()
10347 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitSRA()
10352 EVT ShiftVT = N1.getValueType(); in visitSRA()
10366 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), SumOfShifts)) { in visitSRA()
10368 if (N1.getOpcode() == ISD::BUILD_VECTOR) in visitSRA()
10370 else if (N1.getOpcode() == ISD::SPLAT_VECTOR) { in visitSRA()
10428 if (Shl.getOpcode() == ISD::SHL && Shl.getOperand(1) == N1 && in visitSRA()
10464 if (N1.getOpcode() == ISD::TRUNCATE && in visitSRA()
10465 N1.getOperand(0).getOpcode() == ISD::AND) { in visitSRA()
10466 if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode())) in visitSRA()
10485 SDValue Amt = DAG.getZExtOrTrunc(N1, DL, LargeShiftVT); in visitSRA()
10501 return DAG.getNode(ISD::SRL, DL, VT, N0, N1); in visitSRA()
10521 SDValue N1 = N->getOperand(1); in visitSRL() local
10522 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSRL()
10527 EVT ShiftVT = N1.getValueType(); in visitSRL()
10531 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SRL, DL, VT, {N0, N1})) in visitSRL()
10543 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitSRL()
10557 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange)) in visitSRL()
10567 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) { in visitSRL()
10568 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1)); in visitSRL()
10612 (N0.getOperand(1) == N1 || N0->hasOneUse()) && in visitSRL()
10621 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSRL()
10625 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N01, N1); in visitSRL()
10632 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSRL()
10636 SDValue Diff = DAG.getNode(ISD::SUB, DL, ShiftVT, N1, N01); in visitSRL()
10638 Mask = DAG.getNode(ISD::SRL, DL, VT, Mask, N1); in visitSRL()
10671 return DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), N1); in visitSRL()
10710 if (N1.getOpcode() == ISD::TRUNCATE && in visitSRL()
10711 N1.getOperand(0).getOpcode() == ISD::AND) { in visitSRL()
10712 if (SDValue NewOp1 = distributeTruncateThroughAnd(N1.getNode())) in visitSRL()
10776 SDValue N1 = N->getOperand(1); in visitFunnelShift() local
10787 return IsFSHL ? N0 : N1; in visitFunnelShift()
10800 return DAG.getNode(N->getOpcode(), DL, VT, N0, N1, in visitFunnelShift()
10806 return IsFSHL ? N0 : N1; in visitFunnelShift()
10814 ISD::SRL, DL, VT, N1, in visitFunnelShift()
10816 if (IsUndefOrZero(N1)) in visitFunnelShift()
10829 auto *RHS = dyn_cast<LoadSDNode>(N1); in visitFunnelShift()
10853 DAG.ReplaceAllUsesOfValueWith(N1.getValue(1), Load.getValue(1)); in visitFunnelShift()
10868 return DAG.getNode(ISD::SRL, DL, VT, N1, N2); in visitFunnelShift()
10869 if (IsUndefOrZero(N1) && IsFSHL && DAG.MaskedValueIsZero(N2, ~ModuloBits)) in visitFunnelShift()
10879 if (N0 == N1 && hasOperation(RotOpc, VT)) in visitFunnelShift()
10891 SDValue N1 = N->getOperand(1); in visitSHLSAT() local
10892 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSHLSAT()
10899 if (SDValue C = DAG.FoldConstantArithmetic(N->getOpcode(), DL, VT, {N0, N1})) in visitSHLSAT()
10902 ConstantSDNode *N1C = isConstOrConstSplat(N1); in visitSHLSAT()
10908 return DAG.getNode(ISD::SHL, DL, VT, N0, N1); in visitSHLSAT()
10914 return DAG.getNode(ISD::SHL, DL, VT, N0, N1); in visitSHLSAT()
11379 SDValue N1 = N->getOperand(1); in foldSelectOfConstants() local
11388 auto *C1 = dyn_cast<ConstantSDNode>(N1); in foldSelectOfConstants()
11487 return DAG.getNode(ISD::OR, DL, VT, NotCond, N1); in foldSelectOfConstants()
11540 SDValue N1 = N->getOperand(1); in foldVSelectToSignBitSplatMask() local
11556 std::swap(N1, N2); in foldVSelectToSignBitSplatMask()
11565 return DAG.getNode(ISD::AND, DL, VT, Sra, DAG.getFreeze(N1)); in foldVSelectToSignBitSplatMask()
11569 if (isAllOnesOrAllOnesSplat(N1)) { in foldVSelectToSignBitSplatMask()
11580 if (isNullOrNullSplat(N1) && TLI.hasAndNot(N1)) { in foldVSelectToSignBitSplatMask()
11597 SDValue N1 = N->getOperand(1); in visitSELECT() local
11604 if (SDValue V = DAG.simplifySelect(N0, N1, N2)) in visitSELECT()
11612 SDValue SelectOp = DAG.getSelect(DL, VT, F, N2, N1); in visitSELECT()
11621 if (SimplifySelectOps(N, N1, N2)) in visitSELECT()
11641 DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond1, N1, N2, Flags); in visitSELECT()
11643 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0, in visitSELECT()
11653 SDValue InnerSelect = DAG.getNode(ISD::SELECT, DL, N1.getValueType(), in visitSELECT()
11654 Cond1, N1, N2, Flags); in visitSELECT()
11656 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0, N1, in visitSELECT()
11664 if (N1->getOpcode() == ISD::SELECT && N1->hasOneUse()) { in visitSELECT()
11665 SDValue N1_0 = N1->getOperand(0); in visitSELECT()
11666 SDValue N1_1 = N1->getOperand(1); in visitSELECT()
11667 SDValue N1_2 = N1->getOperand(2); in visitSELECT()
11672 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), And, N1_1, in visitSELECT()
11677 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1_1, in visitSELECT()
11687 if (N2_1 == N1 && N0.getValueType() == N2_0.getValueType()) { in visitSELECT()
11691 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Or, N1, in visitSELECT()
11696 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1, in visitSELECT()
11711 if (N0.hasOneUse() && isLegalToCombineMinNumMaxNum(DAG, N1, N2, Flags, TLI)) in visitSELECT()
11713 combineMinNumMaxNum(DL, VT, Cond0, Cond1, N1, N2, CC)) in visitSELECT()
11722 CC == ISD::SETUGT && N0.hasOneUse() && isAllOnesConstant(N1) && in visitSELECT()
11741 return DAG.getSelect(DL, VT, UAO.getValue(1), N1, UAO.getValue(0)); in visitSELECT()
11751 SDValue SelectNode = DAG.getNode(ISD::SELECT_CC, DL, VT, Cond0, Cond1, N1, in visitSELECT()
11757 if (SDValue NewSel = SimplifySelect(DL, N0, N1, N2)) in visitSELECT()
11765 if (SDValue R = combineSelectAsExtAnd(N0, N1, N2, DL, DAG)) in visitSELECT()
12209 SDValue N1 = N->getOperand(1); in foldVSelectOfConstants() local
12214 !ISD::isBuildVectorOfConstantSDNodes(N1.getNode()) || in foldVSelectOfConstants()
12225 SDValue N1Elt = N1.getOperand(i); in foldVSelectOfConstants()
12256 if (ISD::isConstantSplatVector(N1.getNode(), Pow2C) && Pow2C.isPowerOf2() && in foldVSelectOfConstants()
12275 SDValue N1 = N->getOperand(1); in visitVP_SELECT() local
12279 if (SDValue V = DAG.simplifySelect(N0, N1, N2)) in visitVP_SELECT()
12290 SDValue N1 = N->getOperand(1); in visitVSELECT() local
12295 if (SDValue V = DAG.simplifySelect(N0, N1, N2)) in visitVSELECT()
12303 return DAG.getSelect(DL, VT, F, N2, N1); in visitVSELECT()
12306 if (N1.getOpcode() == ISD::ADD && N1.getOperand(0) == N2 && N1->hasOneUse() && in visitVSELECT()
12307 DAG.isConstantIntBuildVectorOrConstantInt(N1.getOperand(1)) && in visitVSELECT()
12308 N0.getScalarValueSizeInBits() == N1.getScalarValueSizeInBits() && in visitVSELECT()
12312 ISD::ADD, DL, N1.getValueType(), N2, in visitVSELECT()
12313 DAG.getNode(ISD::AND, DL, N0.getValueType(), N1.getOperand(1), N0)); in visitVSELECT()
12329 N1 == LHS && N2.getOpcode() == ISD::SUB && N1 == N2.getOperand(1)) in visitVSELECT()
12332 N2 == LHS && N1.getOpcode() == ISD::SUB && N2 == N1.getOperand(1)) in visitVSELECT()
12333 isAbs = ISD::isBuildVectorAllZeros(N1.getOperand(0).getNode()); in visitVSELECT()
12356 if (SDValue FMinMax = combineMinNumMaxNum(DL, VT, LHS, RHS, N1, N2, CC)) in visitVSELECT()
12360 if (SDValue S = PerformMinMaxFpToSatCombine(LHS, RHS, N1, N2, CC, DAG)) in visitVSELECT()
12362 if (SDValue S = PerformUMinFpToSatCombine(LHS, RHS, N1, N2, CC, DAG)) in visitVSELECT()
12372 EVT WideVT = N1.getValueType().changeVectorElementTypeToInteger(); in visitVSELECT()
12391 return DAG.getSelect(DL, N1.getValueType(), WideSetCC, N1, N2); in visitVSELECT()
12400 if (N1.getOpcode() == ISD::SUB && N2.getOpcode() == ISD::SUB && in visitVSELECT()
12401 N1.getOperand(0) == N2.getOperand(1) && in visitVSELECT()
12402 N1.getOperand(1) == N2.getOperand(0)) { in visitVSELECT()
12411 if (LHS == N1.getOperand(0) && RHS == N1.getOperand(1)) in visitVSELECT()
12418 if (RHS == N1.getOperand(0) && LHS == N1.getOperand(1) ) in visitVSELECT()
12433 if (ISD::isConstantSplatVectorAllOnes(N1.getNode())) { in visitVSELECT()
12437 Other = N1; in visitVSELECT()
12480 if (ISD::isConstantSplatVectorAllZeros(N1.getNode())) { in visitVSELECT()
12484 Other = N1; in visitVSELECT()
12555 if (SimplifySelectOps(N, N1, N2)) in visitVSELECT()
12560 return N1; in visitVSELECT()
12568 if (N1.getOpcode() == ISD::CONCAT_VECTORS && in visitVSELECT()
12590 SDValue N1 = N->getOperand(1); in visitSELECT_CC() local
12603 isNullConstant(N1)) in visitSELECT_CC()
12607 if (SDValue SCC = SimplifySetCC(getSetCCResultType(N0.getValueType()), N0, N1, in visitSELECT_CC()
12636 return SimplifySelectCC(DL, N0, N1, N2, N3, CC); in visitSELECT_CC()
12648 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in visitSETCC() local
12651 if (SDValue Combined = SimplifySetCC(VT, N0, N1, Cond, DL, !PreferSetCC)) { in visitSETCC()
12693 if (IsAndWithShift(N0, N1)) { in visitSETCC()
12695 ShiftOrRotate = N1; in visitSETCC()
12696 } else if (IsAndWithShift(N1, N0)) { in visitSETCC()
12697 AndOrOp = N1; in visitSETCC()
12699 } else if (IsRotateWithOp(N0, N1)) { in visitSETCC()
12702 ShiftOrRotate = N1; in visitSETCC()
12703 } else if (IsRotateWithOp(N1, N0)) { in visitSETCC()
12705 AndOrOp = N1; in visitSETCC()
13146 SDValue N1 = N0->getOperand(0); in CombineZExtLogicopShiftLoad() local
13147 if (!(N1.getOpcode() == ISD::SHL || N1.getOpcode() == ISD::SRL) || in CombineZExtLogicopShiftLoad()
13148 N1.getOperand(1).getOpcode() != ISD::Constant || in CombineZExtLogicopShiftLoad()
13149 (LegalOperations && !TLI.isOperationLegal(N1.getOpcode(), VT))) in CombineZExtLogicopShiftLoad()
13153 if (!isa<LoadSDNode>(N1.getOperand(0))) in CombineZExtLogicopShiftLoad()
13155 LoadSDNode *Load = cast<LoadSDNode>(N1.getOperand(0)); in CombineZExtLogicopShiftLoad()
13164 if (N1.getOpcode() == ISD::SHL && N0.getOpcode() != ISD::AND) in CombineZExtLogicopShiftLoad()
13167 if (!N0.hasOneUse() || !N1.hasOneUse()) in CombineZExtLogicopShiftLoad()
13171 if (!ExtendUsesToFormExtLoad(VT, N1.getNode(), N1.getOperand(0), in CombineZExtLogicopShiftLoad()
13180 SDLoc DL1(N1); in CombineZExtLogicopShiftLoad()
13181 SDValue Shift = DAG.getNode(N1.getOpcode(), DL1, VT, ExtLoad, in CombineZExtLogicopShiftLoad()
13182 N1.getOperand(1)); in CombineZExtLogicopShiftLoad()
13189 ExtendSetCCUses(SetCCs, N1.getOperand(0), ExtLoad, ISD::ZERO_EXTEND); in CombineZExtLogicopShiftLoad()
14338 SDValue N1 = N->getOperand(1); in visitAssertExt() local
14339 EVT AssertVT = cast<VTSDNode>(N1)->getVT(); in visitAssertExt()
14374 BigA.getOperand(0), N1); in visitAssertExt()
14672 SDValue N1 = N->getOperand(1); in visitSIGN_EXTEND_INREG() local
14674 EVT ExtVT = cast<VTSDNode>(N1)->getVT(); in visitSIGN_EXTEND_INREG()
14684 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, N0, N1); in visitSIGN_EXTEND_INREG()
14694 N1); in visitSIGN_EXTEND_INREG()
14841 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, BSwap, N1); in visitSIGN_EXTEND_INREG()
15865 SDValue N1 = N->getOperand(1); in visitFADDForFMACombine() local
15897 if (N0 == N1) in visitFADDForFMACombine()
15920 if (Aggressive && isContractableFMUL(N0) && isContractableFMUL(N1)) { in visitFADDForFMACombine()
15921 if (N0->use_size() > N1->use_size()) in visitFADDForFMACombine()
15922 std::swap(N0, N1); in visitFADDForFMACombine()
15928 N0.getOperand(1), N1); in visitFADDForFMACombine()
15933 if (isContractableFMUL(N1) && (Aggressive || N1->hasOneUse())) { in visitFADDForFMACombine()
15934 return matcher.getNode(PreferredFusedOpcode, SL, VT, N1.getOperand(0), in visitFADDForFMACombine()
15935 N1.getOperand(1), N0); in visitFADDForFMACombine()
15952 E = N1; in visitFADDForFMACombine()
15953 } else if (isFusedOp(N1) && N1.hasOneUse()) { in visitFADDForFMACombine()
15954 FMA = N1; in visitFADDForFMACombine()
15986 matcher.getNode(ISD::FP_EXTEND, SL, VT, N00.getOperand(1)), N1); in visitFADDForFMACombine()
15992 if (matcher.match(N1, ISD::FP_EXTEND)) { in visitFADDForFMACombine()
15993 SDValue N10 = N1.getOperand(0); in visitFADDForFMACombine()
16025 N1); in visitFADDForFMACombine()
16054 N1); in visitFADDForFMACombine()
16061 if (isFusedOp(N1)) { in visitFADDForFMACombine()
16062 SDValue N12 = N1.getOperand(2); in visitFADDForFMACombine()
16068 return FoldFAddFMAFPExtFMul(N1.getOperand(0), N1.getOperand(1), in visitFADDForFMACombine()
16080 if (N1.getOpcode() == ISD::FP_EXTEND) { in visitFADDForFMACombine()
16081 SDValue N10 = N1.getOperand(0); in visitFADDForFMACombine()
16102 SDValue N1 = N->getOperand(1); in visitFSUBForFMACombine() local
16172 if (isContractableFMUL(N0) && isContractableFMUL(N1) && in visitFSUBForFMACombine()
16173 (N0->use_size() > N1->use_size())) { in visitFSUBForFMACombine()
16175 if (SDValue V = tryToFoldXSubYZ(N0, N1)) in visitFSUBForFMACombine()
16178 if (SDValue V = tryToFoldXYSubZ(N0, N1)) in visitFSUBForFMACombine()
16182 if (SDValue V = tryToFoldXYSubZ(N0, N1)) in visitFSUBForFMACombine()
16185 if (SDValue V = tryToFoldXSubYZ(N0, N1)) in visitFSUBForFMACombine()
16196 matcher.getNode(ISD::FNEG, SL, VT, N1)); in visitFSUBForFMACombine()
16212 matcher.getNode(ISD::FNEG, SL, VT, N1)); in visitFSUBForFMACombine()
16219 if (matcher.match(N1, ISD::FP_EXTEND)) { in visitFSUBForFMACombine()
16220 SDValue N10 = N1.getOperand(0); in visitFSUBForFMACombine()
16252 N1)); in visitFSUBForFMACombine()
16276 N1)); in visitFSUBForFMACombine()
16307 matcher.getNode(ISD::FNEG, SL, VT, N1))); in visitFSUBForFMACombine()
16312 if (CanFuse && isFusedOp(N1) && in visitFSUBForFMACombine()
16313 isContractableAndReassociableFMUL(N1.getOperand(2)) && in visitFSUBForFMACombine()
16314 N1->hasOneUse() && NoSignedZero) { in visitFSUBForFMACombine()
16315 SDValue N20 = N1.getOperand(2).getOperand(0); in visitFSUBForFMACombine()
16316 SDValue N21 = N1.getOperand(2).getOperand(1); in visitFSUBForFMACombine()
16319 matcher.getNode(ISD::FNEG, SL, VT, N1.getOperand(0)), in visitFSUBForFMACombine()
16320 N1.getOperand(1), in visitFSUBForFMACombine()
16340 matcher.getNode(ISD::FNEG, SL, VT, N1))); in visitFSUBForFMACombine()
16366 matcher.getNode(ISD::FNEG, SL, VT, N1))); in visitFSUBForFMACombine()
16373 if (isFusedOp(N1) && matcher.match(N1.getOperand(2), ISD::FP_EXTEND) && in visitFSUBForFMACombine()
16374 N1->hasOneUse()) { in visitFSUBForFMACombine()
16375 SDValue N120 = N1.getOperand(2).getOperand(0); in visitFSUBForFMACombine()
16383 matcher.getNode(ISD::FNEG, SL, VT, N1.getOperand(0)), in visitFSUBForFMACombine()
16384 N1.getOperand(1), in visitFSUBForFMACombine()
16399 if (matcher.match(N1, ISD::FP_EXTEND) && isFusedOp(N1.getOperand(0))) { in visitFSUBForFMACombine()
16400 SDValue CvtSrc = N1.getOperand(0); in visitFSUBForFMACombine()
16431 SDValue N1 = N->getOperand(1); in visitFMULForFMADistributiveCombine() local
16441 SDValue FAdd = N0.getOpcode() == ISD::FADD ? N0 : N1; in visitFMULForFMADistributiveCombine()
16480 if (SDValue FMA = FuseFADD(N0, N1)) in visitFMULForFMADistributiveCombine()
16482 if (SDValue FMA = FuseFADD(N1, N0)) in visitFMULForFMADistributiveCombine()
16513 if (SDValue FMA = FuseFSUB(N0, N1)) in visitFMULForFMADistributiveCombine()
16515 if (SDValue FMA = FuseFSUB(N1, N0)) in visitFMULForFMADistributiveCombine()
16535 SDValue N1 = N->getOperand(1); in visitFADD() local
16537 SDNode *N1CFP = DAG.isConstantFPBuildVectorOrConstantFP(N1); in visitFADD()
16544 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFADD()
16548 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FADD, DL, VT, {N0, N1})) in visitFADD()
16553 return DAG.getNode(ISD::FADD, DL, VT, N1, N0); in visitFADD()
16561 ConstantFPSDNode *N1C = isConstOrConstSplatFP(N1, true); in visitFADD()
16572 N1, DAG, LegalOperations, ForCodeSize)) in visitFADD()
16579 return DAG.getNode(ISD::FSUB, DL, VT, N1, NegN0); in visitFADD()
16592 return DAG.getNode(ISD::FSUB, DL, VT, N1, Add); in visitFADD()
16595 if (isFMulNegTwo(N1)) { in visitFADD()
16596 SDValue B = N1.getOperand(0); in visitFADD()
16608 if (N0.getOpcode() == ISD::FNEG && N0.getOperand(0) == N1) in visitFADD()
16612 if (N1.getOpcode() == ISD::FNEG && N1.getOperand(0) == N0) in visitFADD()
16625 SDValue NewC = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), N1); in visitFADD()
16640 if (CFP01 && !CFP00 && N0.getOperand(0) == N1) { in visitFADD()
16643 return DAG.getNode(ISD::FMUL, DL, VT, N1, NewCFP); in visitFADD()
16647 if (CFP01 && !CFP00 && N1.getOpcode() == ISD::FADD && in visitFADD()
16648 N1.getOperand(0) == N1.getOperand(1) && in visitFADD()
16649 N0.getOperand(0) == N1.getOperand(0)) { in visitFADD()
16656 if (N1.getOpcode() == ISD::FMUL) { in visitFADD()
16658 DAG.isConstantFPBuildVectorOrConstantFP(N1.getOperand(0)); in visitFADD()
16660 DAG.isConstantFPBuildVectorOrConstantFP(N1.getOperand(1)); in visitFADD()
16663 if (CFP11 && !CFP10 && N1.getOperand(0) == N0) { in visitFADD()
16664 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1), in visitFADD()
16672 N1.getOperand(0) == N0.getOperand(0)) { in visitFADD()
16673 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1), in visitFADD()
16675 return DAG.getNode(ISD::FMUL, DL, VT, N1.getOperand(0), NewCFP); in visitFADD()
16684 (N0.getOperand(0) == N1)) { in visitFADD()
16685 return DAG.getNode(ISD::FMUL, DL, VT, N1, in visitFADD()
16690 if (N1.getOpcode() == ISD::FADD) { in visitFADD()
16692 DAG.isConstantFPBuildVectorOrConstantFP(N1.getOperand(0)); in visitFADD()
16694 if (!CFP10 && N1.getOperand(0) == N1.getOperand(1) && in visitFADD()
16695 N1.getOperand(0) == N0) { in visitFADD()
16702 if (N0.getOpcode() == ISD::FADD && N1.getOpcode() == ISD::FADD && in visitFADD()
16704 N1.getOperand(0) == N1.getOperand(1) && in visitFADD()
16705 N0.getOperand(0) == N1.getOperand(0)) { in visitFADD()
16713 VT, N0, N1, Flags)) in visitFADD()
16729 SDValue N1 = N->getOperand(2); in visitSTRICT_FADD() local
16738 N1, DAG, LegalOperations, ForCodeSize)) { in visitSTRICT_FADD()
16748 {Chain, N1, NegN0}); in visitSTRICT_FADD()
16755 SDValue N1 = N->getOperand(1); in visitFSUB() local
16757 ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1, true); in visitFSUB()
16764 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFSUB()
16768 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FSUB, DL, VT, {N0, N1})) in visitFSUB()
16787 if (N0 == N1) { in visitFSUB()
16804 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize)) in visitFSUB()
16807 return DAG.getNode(ISD::FNEG, DL, VT, N1); in visitFSUB()
16814 N1.getOpcode() == ISD::FADD) { in visitFSUB()
16816 if (N0 == N1->getOperand(0)) in visitFSUB()
16817 return DAG.getNode(ISD::FNEG, DL, VT, N1->getOperand(1)); in visitFSUB()
16819 if (N0 == N1->getOperand(1)) in visitFSUB()
16820 return DAG.getNode(ISD::FNEG, DL, VT, N1->getOperand(0)); in visitFSUB()
16825 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize)) in visitFSUB()
16945 SDValue N1 = N->getOperand(1); in visitFMUL() local
16946 ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1, true); in visitFMUL()
16953 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFMUL()
16957 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FMUL, DL, VT, {N0, N1})) in visitFMUL()
16962 !DAG.isConstantFPBuildVectorOrConstantFP(N1)) in visitFMUL()
16963 return DAG.getNode(ISD::FMUL, DL, VT, N1, N0); in visitFMUL()
16975 if (DAG.isConstantFPBuildVectorOrConstantFP(N1) && in visitFMUL()
16983 SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, N01, N1); in visitFMUL()
16993 SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, Two, N1); in visitFMUL()
16999 VT, N0, N1, Flags)) in visitFMUL()
17025 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize, CostN1); in visitFMUL()
17034 (N0.getOpcode() == ISD::SELECT || N1.getOpcode() == ISD::SELECT) && in visitFMUL()
17036 SDValue Select = N0, X = N1; in visitFMUL()
17093 SDValue N1 = N->getOperand(1); in visitFMA() local
17096 ConstantFPSDNode *N1CFP = dyn_cast<ConstantFPSDNode>(N1); in visitFMA()
17106 isa<ConstantFPSDNode>(N1) && in visitFMA()
17108 return matcher.getNode(ISD::FMA, DL, VT, N0, N1, N2); in visitFMA()
17121 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize, CostN1); in visitFMA()
17137 return matcher.getNode(ISD::FADD, SDLoc(N), VT, N1, N2); in visitFMA()
17143 !DAG.isConstantFPBuildVectorOrConstantFP(N1)) in visitFMA()
17144 return matcher.getNode(ISD::FMA, SDLoc(N), VT, N1, N0, N2); in visitFMA()
17151 DAG.isConstantFPBuildVectorOrConstantFP(N1) && in visitFMA()
17155 matcher.getNode(ISD::FADD, DL, VT, N1, N2.getOperand(1))); in visitFMA()
17160 DAG.isConstantFPBuildVectorOrConstantFP(N1) && in visitFMA()
17164 matcher.getNode(ISD::FMUL, DL, VT, N1, N0.getOperand(1)), N2); in visitFMA()
17184 (N1.hasOneUse() && in visitFMA()
17187 matcher.getNode(ISD::FNEG, DL, VT, N1), N2); in visitFMA()
17196 matcher.getNode(ISD::FADD, DL, VT, N1, in visitFMA()
17203 matcher.getNode(ISD::FADD, DL, VT, N1, in visitFMA()
17219 SDValue N1 = N->getOperand(1); in visitFMAD() local
17225 if (isa<ConstantFPSDNode>(N0) && isa<ConstantFPSDNode>(N1) && in visitFMAD()
17227 return DAG.getNode(ISD::FMAD, DL, VT, N0, N1, N2); in visitFMAD()
17249 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in combineRepeatedFPDivisors() local
17262 if (VT.isVector() && DAG.isSplatValue(N1)) in combineRepeatedFPDivisors()
17265 if (!MinUses || (N1->use_size() * NumElts) < MinUses) in combineRepeatedFPDivisors()
17271 for (auto *U : N1->uses()) { in combineRepeatedFPDivisors()
17272 if (U->getOpcode() == ISD::FDIV && U->getOperand(1) == N1) { in combineRepeatedFPDivisors()
17294 SDValue Reciprocal = DAG.getNode(ISD::FDIV, DL, VT, FPOne, N1, Flags); in combineRepeatedFPDivisors()
17314 SDValue N1 = N->getOperand(1); in visitFDIV() local
17321 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFDIV()
17325 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FDIV, DL, VT, {N0, N1})) in visitFDIV()
17341 if (auto *N1CFP = isConstOrConstSplatFP(N1, true)) { in visitFDIV()
17364 if (N1.getOpcode() == ISD::FSQRT) { in visitFDIV()
17365 if (SDValue RV = buildRsqrtEstimate(N1.getOperand(0), Flags)) in visitFDIV()
17367 } else if (N1.getOpcode() == ISD::FP_EXTEND && in visitFDIV()
17368 N1.getOperand(0).getOpcode() == ISD::FSQRT) { in visitFDIV()
17370 buildRsqrtEstimate(N1.getOperand(0).getOperand(0), Flags)) { in visitFDIV()
17371 RV = DAG.getNode(ISD::FP_EXTEND, SDLoc(N1), VT, RV); in visitFDIV()
17375 } else if (N1.getOpcode() == ISD::FP_ROUND && in visitFDIV()
17376 N1.getOperand(0).getOpcode() == ISD::FSQRT) { in visitFDIV()
17378 buildRsqrtEstimate(N1.getOperand(0).getOperand(0), Flags)) { in visitFDIV()
17379 RV = DAG.getNode(ISD::FP_ROUND, SDLoc(N1), VT, RV, N1.getOperand(1)); in visitFDIV()
17383 } else if (N1.getOpcode() == ISD::FMUL) { in visitFDIV()
17387 if (N1.getOperand(0).getOpcode() == ISD::FSQRT) { in visitFDIV()
17388 Sqrt = N1.getOperand(0); in visitFDIV()
17389 Y = N1.getOperand(1); in visitFDIV()
17390 } else if (N1.getOperand(1).getOpcode() == ISD::FSQRT) { in visitFDIV()
17391 Sqrt = N1.getOperand(1); in visitFDIV()
17392 Y = N1.getOperand(0); in visitFDIV()
17397 if (Flags.hasAllowReassociation() && N1.hasOneUse() && in visitFDIV()
17398 N1->getFlags().hasAllowReassociation() && Sqrt.hasOneUse()) { in visitFDIV()
17421 SDValue Div = DAG.getNode(ISD::FDIV, SDLoc(N1), VT, Rsqrt, Y); in visitFDIV()
17430 if (SDValue RV = BuildDivEstimate(N0, N1, Flags)) in visitFDIV()
17437 if (N1.getOpcode() == ISD::FSQRT && N0 == N1.getOperand(0)) in visitFDIV()
17438 return N1; in visitFDIV()
17450 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize, CostN1); in visitFDIV()
17464 SDValue N1 = N->getOperand(1); in visitFREM() local
17470 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFREM()
17474 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FREM, DL, VT, {N0, N1})) in visitFREM()
17486 DAG.isKnownToBeAPowerOfTwoFP(N1)) { in visitFREM()
17489 SDValue Div = DAG.getNode(ISD::FDIV, DL, VT, N0, N1); in visitFREM()
17494 N1, N0); in visitFREM()
17496 SDValue Mul = DAG.getNode(ISD::FMUL, DL, VT, Rnd, N1); in visitFREM()
17546 SDValue N1 = N->getOperand(1); in CanCombineFCOPYSIGN_EXTEND_ROUND() local
17547 if (N1.getOpcode() != ISD::FP_EXTEND && in CanCombineFCOPYSIGN_EXTEND_ROUND()
17548 N1.getOpcode() != ISD::FP_ROUND) in CanCombineFCOPYSIGN_EXTEND_ROUND()
17550 EVT N1VT = N1->getValueType(0); in CanCombineFCOPYSIGN_EXTEND_ROUND()
17551 EVT N1Op0VT = N1->getOperand(0).getValueType(); in CanCombineFCOPYSIGN_EXTEND_ROUND()
17557 SDValue N1 = N->getOperand(1); in visitFCOPYSIGN() local
17562 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FCOPYSIGN, DL, VT, {N0, N1})) in visitFCOPYSIGN()
17584 return DAG.getNode(ISD::FCOPYSIGN, DL, VT, N0.getOperand(0), N1); in visitFCOPYSIGN()
17587 if (N1.getOpcode() == ISD::FABS) in visitFCOPYSIGN()
17591 if (N1.getOpcode() == ISD::FCOPYSIGN) in visitFCOPYSIGN()
17592 return DAG.getNode(ISD::FCOPYSIGN, DL, VT, N0, N1.getOperand(1)); in visitFCOPYSIGN()
17597 return DAG.getNode(ISD::FCOPYSIGN, DL, VT, N0, N1.getOperand(0)); in visitFCOPYSIGN()
17600 EVT SignVT = N1.getValueType(); in visitFCOPYSIGN()
17601 if (SimplifyDemandedBits(N1, in visitFCOPYSIGN()
17897 SDValue N1 = N->getOperand(1); in visitFP_ROUND() local
17902 DAG.FoldConstantArithmetic(ISD::FP_ROUND, SDLoc(N), VT, {N0, N1})) in visitFP_ROUND()
17950 N0.getOperand(0), N1); in visitFP_ROUND()
18107 SDValue N1 = N->getOperand(1); in visitFMinMax() local
18116 if (SDValue C = DAG.FoldConstantArithmetic(Opc, SDLoc(N), VT, {N0, N1})) in visitFMinMax()
18121 !DAG.isConstantFPBuildVectorOrConstantFP(N1)) in visitFMinMax()
18122 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0); in visitFMinMax()
18124 if (const ConstantFPSDNode *N1CFP = isConstOrConstSplatFP(N1)) { in visitFMinMax()
18157 Opc, SDLoc(N), VT, N0, N1, Flags)) in visitFMinMax()
18188 SDValue N1 = N->getOperand(1); in visitBRCOND() local
18193 if (N1->getOpcode() == ISD::FREEZE && N1.hasOneUse()) { in visitBRCOND()
18195 N1->getOperand(0), N2); in visitBRCOND()
18208 if (N1->getOpcode() == ISD::SETCC && N1.hasOneUse()) { in visitBRCOND()
18209 SDValue S0 = N1->getOperand(0), S1 = N1->getOperand(1); in visitBRCOND()
18210 ISD::CondCode Cond = cast<CondCodeSDNode>(N1->getOperand(2))->get(); in visitBRCOND()
18244 DAG.getSetCC(SDLoc(N1), N1->getValueType(0), S0, S1, Cond), N2); in visitBRCOND()
18255 if (N1.getOpcode() == ISD::SETCC && in visitBRCOND()
18257 N1.getOperand(0).getValueType())) { in visitBRCOND()
18259 Chain, N1.getOperand(2), in visitBRCOND()
18260 N1.getOperand(0), N1.getOperand(1), N2); in visitBRCOND()
18263 if (N1.hasOneUse()) { in visitBRCOND()
18267 if (SDValue NewN1 = rebuildSetCC(N1)) in visitBRCOND()
19937 SDValue N1 = Value.getOperand(1); in ReduceLoadOpStoreWidth() local
19938 unsigned BitWidth = N1.getValueSizeInBits(); in ReduceLoadOpStoreWidth()
19939 APInt Imm = N1->getAsAPIntVal(); in ReduceLoadOpStoreWidth()
24977 SDValue N0 = Shuf->getOperand(0), N1 = Shuf->getOperand(1); in foldShuffleOfConcatUndefs() local
24979 N1.getOpcode() != ISD::CONCAT_VECTORS || N1.getNumOperands() != 2 || in foldShuffleOfConcatUndefs()
24980 !N0.getOperand(1).isUndef() || !N1.getOperand(1).isUndef()) in foldShuffleOfConcatUndefs()
25014 SDValue X = N0.getOperand(0), Y = N1.getOperand(0); in foldShuffleOfConcatUndefs()
25028 SDValue N1 = N->getOperand(1); in partitionShuffleOfConcats() local
25042 if (NumElemsPerConcat * 2 == NumElts && N1.isUndef() && in partitionShuffleOfConcats()
25048 N1 = DAG.getUNDEF(ConcatVT); in partitionShuffleOfConcats()
25049 return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, N0, N1); in partitionShuffleOfConcats()
25080 Ops.push_back(N1.getOperand(OpIdx - N0.getNumOperands())); in partitionShuffleOfConcats()
25108 SDValue N1 = SVN->getOperand(1); in combineShuffleOfScalars() local
25115 if (!N1.isUndef()) { in combineShuffleOfScalars()
25116 if (!N1->hasOneUse()) in combineShuffleOfScalars()
25120 bool N1AnyConst = isAnyConstantBuildVector(N1); in combineShuffleOfScalars()
25123 if (!N0AnyConst && N1AnyConst && !ISD::isBuildVectorAllZeros(N1.getNode())) in combineShuffleOfScalars()
25131 auto *BV1 = dyn_cast<BuildVectorSDNode>(N1); in combineShuffleOfScalars()
25142 SDValue &S = (M < (int)NumElts ? N0 : N1); in combineShuffleOfScalars()
25754 SDValue N1 = N->getOperand(1); in visitVECTOR_SHUFFLE() local
25759 if (N0.isUndef() && N1.isUndef()) in visitVECTOR_SHUFFLE()
25765 if (N0 == N1) in visitVECTOR_SHUFFLE()
25774 if (N1.isUndef()) { in visitVECTOR_SHUFFLE()
25786 return DAG.getVectorShuffle(VT, SDLoc(N), N0, N1, NewMask); in visitVECTOR_SHUFFLE()
25918 (N1.isUndef() || in visitVECTOR_SHUFFLE()
25919 (N1.getOpcode() == ISD::CONCAT_VECTORS && in visitVECTOR_SHUFFLE()
25920 N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType()))) { in visitVECTOR_SHUFFLE()
25928 if (N0.getOpcode() == ISD::CONCAT_VECTORS && N1.isUndef() && in visitVECTOR_SHUFFLE()
25945 return DAG.getVectorShuffle(VT, SDLoc(N), NewCat, N1, NewMask); in visitVECTOR_SHUFFLE()
26002 if (N1.getOpcode() == ISD::CONCAT_VECTORS) in visitVECTOR_SHUFFLE()
26003 if (SDValue InsertN1 = ShuffleToInsert(N0, N1, Mask)) in visitVECTOR_SHUFFLE()
26008 if (SDValue InsertN0 = ShuffleToInsert(N1, N0, CommuteMask)) in visitVECTOR_SHUFFLE()
26035 (DemandedRHS.isZero() || DAG.MaskedVectorIsZero(N1, DemandedRHS))) { in visitVECTOR_SHUFFLE()
26077 N1.isUndef() && Level < AfterLegalizeVectorOps && in visitVECTOR_SHUFFLE()
26139 ShuffleVectorSDNode *OtherSVN, SDValue N1, in visitVECTOR_SHUFFLE()
26175 CurrentVec = N1; in visitVECTOR_SHUFFLE()
26255 if (N1.getOpcode() == ISD::VECTOR_SHUFFLE && in visitVECTOR_SHUFFLE()
26259 assert(N1->getOperand(0).getValueType() == VT && in visitVECTOR_SHUFFLE()
26262 SDValue SV0 = N1->getOperand(0); in visitVECTOR_SHUFFLE()
26263 SDValue SV1 = N1->getOperand(1); in visitVECTOR_SHUFFLE()
26274 N1.getOpcode() == ISD::VECTOR_SHUFFLE && in visitVECTOR_SHUFFLE()
26276 !cast<ShuffleVectorSDNode>(N1)->isSplat()) { in visitVECTOR_SHUFFLE()
26317 (N1.isUndef() || in visitVECTOR_SHUFFLE()
26318 (SrcOpcode == N1.getOpcode() && N->isOnlyUserOf(N1.getNode())))) { in visitVECTOR_SHUFFLE()
26322 SDValue Op10 = N1.isUndef() ? N1 : N1.getOperand(0); in visitVECTOR_SHUFFLE()
26323 SDValue Op11 = N1.isUndef() ? N1 : N1.getOperand(1); in visitVECTOR_SHUFFLE()
26336 SDValue InnerN = Commute ? N1 : N0; in visitVECTOR_SHUFFLE()
26499 SDValue N1 = N->getOperand(1); in visitINSERT_SUBVECTOR() local
26504 if (N1.isUndef()) in visitINSERT_SUBVECTOR()
26510 if (N0.isUndef() && N1.getOpcode() == ISD::EXTRACT_SUBVECTOR && in visitINSERT_SUBVECTOR()
26511 N1.getOperand(1) == N2) { in visitINSERT_SUBVECTOR()
26512 EVT SrcVT = N1.getOperand(0).getValueType(); in visitINSERT_SUBVECTOR()
26514 return N1.getOperand(0); in visitINSERT_SUBVECTOR()
26521 VT, N0, N1.getOperand(0), N2); in visitINSERT_SUBVECTOR()
26525 VT, N1.getOperand(0), N2); in visitINSERT_SUBVECTOR()
26532 if (N1.getOpcode() == ISD::EXTRACT_SUBVECTOR && N1.getOperand(0) == N0 && in visitINSERT_SUBVECTOR()
26533 N1.getOperand(1) == N2) in visitINSERT_SUBVECTOR()
26538 if (N0.isUndef() && N1.getOpcode() == ISD::SPLAT_VECTOR) in visitINSERT_SUBVECTOR()
26539 if (DAG.isConstantValueOfAnyType(N1.getOperand(0)) || N1.hasOneUse()) in visitINSERT_SUBVECTOR()
26540 return DAG.getNode(ISD::SPLAT_VECTOR, SDLoc(N), VT, N1.getOperand(0)); in visitINSERT_SUBVECTOR()
26546 if (N0.isUndef() && N1.getOpcode() == ISD::BITCAST && in visitINSERT_SUBVECTOR()
26547 N1.getOperand(0).getOpcode() == ISD::EXTRACT_SUBVECTOR && in visitINSERT_SUBVECTOR()
26548 N1.getOperand(0).getOperand(1) == N2 && in visitINSERT_SUBVECTOR()
26549 N1.getOperand(0).getOperand(0).getValueType().getVectorElementCount() == in visitINSERT_SUBVECTOR()
26551 N1.getOperand(0).getOperand(0).getValueType().getSizeInBits() == in visitINSERT_SUBVECTOR()
26553 return DAG.getBitcast(VT, N1.getOperand(0).getOperand(0)); in visitINSERT_SUBVECTOR()
26560 if (N0.getOpcode() == ISD::BITCAST && N1.getOpcode() == ISD::BITCAST) { in visitINSERT_SUBVECTOR()
26562 SDValue CN1 = N1.getOperand(0); in visitINSERT_SUBVECTOR()
26578 N0.getOperand(1).getValueType() == N1.getValueType() && in visitINSERT_SUBVECTOR()
26581 N1, N2); in visitINSERT_SUBVECTOR()
26586 if (N0.isUndef() && N1.getOpcode() == ISD::INSERT_SUBVECTOR && in visitINSERT_SUBVECTOR()
26587 N1.getOperand(0).isUndef() && isNullConstant(N1.getOperand(2)) && in visitINSERT_SUBVECTOR()
26590 N1.getOperand(1), N2); in visitINSERT_SUBVECTOR()
26596 N1.getOpcode() == ISD::BITCAST) { in visitINSERT_SUBVECTOR()
26598 SDValue N1Src = peekThroughBitcasts(N1); in visitINSERT_SUBVECTOR()
26634 N1.getValueType() == N0.getOperand(1).getValueType()) { in visitINSERT_SUBVECTOR()
26639 N0.getOperand(0), N1, N2); in visitINSERT_SUBVECTOR()
26649 N0.getOperand(0).getValueType() == N1.getValueType() && in visitINSERT_SUBVECTOR()
26651 N1.getValueType().isScalableVector()) { in visitINSERT_SUBVECTOR()
26652 unsigned Factor = N1.getValueType().getVectorMinNumElements(); in visitINSERT_SUBVECTOR()
26654 Ops[InsIdx / Factor] = N1; in visitINSERT_SUBVECTOR()
27018 SDValue N1 = N->getOperand(1); in scalarizeBinOpOfSplats() local
27029 SDValue Src1 = DAG.getSplatSourceVector(N1, Index1); in scalarizeBinOpOfSplats()
27033 N1.getOpcode() == ISD::SPLAT_VECTOR; in scalarizeBinOpOfSplats()
27048 if (N0.getOpcode() == ISD::BUILD_VECTOR && N0.getOpcode() == N1.getOpcode() && in scalarizeBinOpOfSplats()
27050 count_if(N1->ops(), [](SDValue V) { return !V.isUndef(); }) == 1) { in scalarizeBinOpOfSplats()
27210 SDValue DAGCombiner::SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1, in SimplifySelect() argument
27215 SDValue SCC = SimplifySelectCC(DL, N0.getOperand(0), N0.getOperand(1), N1, N2, in SimplifySelect()
27437 SDValue N1, SDValue N2, SDValue N3, in foldSelectCCToShiftAnd() argument
27454 if (!(isAllOnesConstant(N1) || (isNullConstant(N1) && N0 == N2))) in foldSelectCCToShiftAnd()
27459 if (!(isNullConstant(N1) || (isOneConstant(N1) && N0 == N2))) in foldSelectCCToShiftAnd()
27509 SDValue N1 = N->getOperand(1); in foldSelectOfBinops() local
27513 unsigned BinOpc = N1.getOpcode(); in foldSelectOfBinops()
27515 (N1.getResNo() != N2.getResNo())) in foldSelectOfBinops()
27522 if (!N0->hasOneUse() || !N1->hasOneUse() || !N2->hasOneUse()) in foldSelectOfBinops()
27527 SDVTList OpVTs = N1->getVTList(); in foldSelectOfBinops()
27531 if (N1.getOperand(1) == N2.getOperand(1)) { in foldSelectOfBinops()
27532 SDValue N10 = N1.getOperand(0); in foldSelectOfBinops()
27535 SDValue NewBinOp = DAG.getNode(BinOpc, DL, OpVTs, NewSel, N1.getOperand(1)); in foldSelectOfBinops()
27536 NewBinOp->setFlags(N1->getFlags()); in foldSelectOfBinops()
27538 return SDValue(NewBinOp.getNode(), N1.getResNo()); in foldSelectOfBinops()
27543 if (N1.getOperand(0) == N2.getOperand(0)) { in foldSelectOfBinops()
27544 SDValue N11 = N1.getOperand(1); in foldSelectOfBinops()
27550 DAG.getNode(BinOpc, DL, OpVTs, N1.getOperand(0), NewSel); in foldSelectOfBinops()
27551 NewBinOp->setFlags(N1->getFlags()); in foldSelectOfBinops()
27553 return SDValue(NewBinOp.getNode(), N1.getResNo()); in foldSelectOfBinops()
27606 const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2, SDValue N3, in convertSelectOfFPConstantsToLoadOffset() argument
27647 DAG.getSetCC(DL, getSetCCResultType(N0.getValueType()), N0, N1, CC); in convertSelectOfFPConstantsToLoadOffset()
27660 SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1, in SimplifySelectCC() argument
27669 auto *N1C = dyn_cast<ConstantSDNode>(N1.getNode()); in SimplifySelectCC()
27674 if (SDValue SCC = DAG.FoldSetCC(CmpResVT, N0, N1, CC, DL)) { in SimplifySelectCC()
27684 convertSelectOfFPConstantsToLoadOffset(DL, N0, N1, N2, N3, CC)) in SimplifySelectCC()
27687 if (SDValue V = foldSelectCCToShiftAnd(DL, N0, N1, N2, N3, CC)) in SimplifySelectCC()
27697 N0->getValueType(0) == VT && isNullConstant(N1) && isNullConstant(N2)) { in SimplifySelectCC()
27741 SCC = DAG.getSetCC(DL, CmpResVT, N0, N1, CC); in SimplifySelectCC()
27744 SCC = DAG.getSetCC(SDLoc(N0), MVT::i1, N0, N1, CC); in SimplifySelectCC()
27813 if (SDValue S = PerformMinMaxFpToSatCombine(N0, N1, N2, N3, CC, DAG)) in SimplifySelectCC()
27815 if (SDValue S = PerformUMinFpToSatCombine(N0, N1, N2, N3, CC, DAG)) in SimplifySelectCC()
27822 SDValue DAGCombiner::SimplifySetCC(EVT VT, SDValue N0, SDValue N1, in SimplifySetCC() argument
27827 return TLI.SimplifySetCC(VT, N0, N1, Cond, foldBooleans, DagCombineInfo, DL); in SimplifySetCC()