Lines Matching refs:N0
401 SDValue visitADDLikeCommutative(SDValue N0, SDValue N1, SDNode *LocReference);
407 SDValue visitUADDOLike(SDValue N0, SDValue N1, SDNode *N);
413 SDValue visitADDCARRYLike(SDValue N0, SDValue N1, SDValue CarryIn, SDNode *N);
421 SDValue visitSDIVLike(SDValue N0, SDValue N1, SDNode *N);
423 SDValue visitUDIVLike(SDValue N0, SDValue N1, SDNode *N);
433 SDValue visitANDLike(SDValue N0, SDValue N1, SDNode *N);
435 SDValue visitORLike(SDValue N0, SDValue N1, SDNode *N);
525 SDValue N0,
527 SDValue reassociateOpsCommutative(unsigned Opc, const SDLoc &DL, SDValue N0,
529 SDValue reassociateOps(unsigned Opc, const SDLoc &DL, SDValue N0,
539 SDValue SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2);
540 SDValue SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1,
544 const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2, SDValue N3,
547 SDValue foldSelectCCToShiftAnd(const SDLoc &DL, SDValue N0, SDValue N1,
551 SDValue foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1,
556 SDValue SimplifySetCC(EVT VT, SDValue N0, SDValue N1, ISD::CondCode Cond,
576 SDValue buildOptimizedSREM(SDValue N0, SDValue N1, SDNode *N);
586 SDValue MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1,
588 SDValue MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1);
593 SDValue MatchFunnelPosNeg(SDValue N0, SDValue N1, SDValue Pos, SDValue Neg,
931 SDValue N0, N1, N2; in isOneUseSetCC() local
932 if (isSetCCEquivalent(N, N0, N1, N2) && N->hasOneUse()) in isOneUseSetCC()
1003 SDValue N0, in reassociationCanBreakAddressingModePattern() argument
1014 if (Opc != ISD::ADD || N0.getOpcode() != ISD::ADD) in reassociationCanBreakAddressingModePattern()
1025 if (auto *C1 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { in reassociationCanBreakAddressingModePattern()
1026 if (N0.hasOneUse()) in reassociationCanBreakAddressingModePattern()
1056 if (auto *GA = dyn_cast<GlobalAddressSDNode>(N0.getOperand(1))) in reassociationCanBreakAddressingModePattern()
1085 SDValue N0, SDValue N1) { in reassociateOpsCommutative() argument
1086 EVT VT = N0.getValueType(); in reassociateOpsCommutative()
1088 if (N0.getOpcode() != Opc) in reassociateOpsCommutative()
1091 SDValue N00 = N0.getOperand(0); in reassociateOpsCommutative()
1092 SDValue N01 = N0.getOperand(1); in reassociateOpsCommutative()
1101 if (TLI.isReassocProfitable(DAG, N0, N1)) { in reassociateOpsCommutative()
1104 SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N00, N1); in reassociateOpsCommutative()
1116 return N0; in reassociateOpsCommutative()
1127 if (TLI.isReassocProfitable(DAG, N0, N1)) { in reassociateOpsCommutative()
1153 SDValue DAGCombiner::reassociateOps(unsigned Opc, const SDLoc &DL, SDValue N0, in reassociateOps() argument
1158 if (N0.getValueType().isFloatingPoint() || in reassociateOps()
1163 if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N0, N1)) in reassociateOps()
1165 if (SDValue Combined = reassociateOpsCommutative(Opc, DL, N1, N0)) in reassociateOps()
1367 SDValue N0 = Op.getOperand(0); in PromoteIntBinOp() local
1368 SDValue NN0 = PromoteOperand(N0, PVT, Replace0); in PromoteIntBinOp()
1383 Replace0 &= !N0->hasOneUse(); in PromoteIntBinOp()
1384 Replace1 &= (N0 != N1) && !N1->hasOneUse(); in PromoteIntBinOp()
1391 if (Replace0 && Replace1 && N0->isPredecessorOf(N1.getNode())) { in PromoteIntBinOp()
1392 std::swap(N0, N1); in PromoteIntBinOp()
1398 ReplaceLoadWithPromotedLoad(N0.getNode(), NN0.getNode()); in PromoteIntBinOp()
1435 SDValue N0 = Op.getOperand(0); in PromoteIntShiftOp() local
1437 N0 = SExtPromoteOperand(N0, PVT); in PromoteIntShiftOp()
1439 N0 = ZExtPromoteOperand(N0, PVT); in PromoteIntShiftOp()
1441 N0 = PromoteOperand(N0, PVT, Replace); in PromoteIntShiftOp()
1443 if (!N0.getNode()) in PromoteIntShiftOp()
1449 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, N0, N1)); in PromoteIntShiftOp()
1452 ReplaceLoadWithPromotedLoad(Op.getOperand(0).getNode(), N0.getNode()); in PromoteIntShiftOp()
1872 SDValue N0 = N->getOperand(0); in combine() local
1876 if (N0 != N1 && (isa<ConstantSDNode>(N0) || !isa<ConstantSDNode>(N1))) { in combine()
1877 SDValue Ops[] = {N1, N0}; in combine()
2184 SDValue N0 = N->getOperand(0); in foldSelectWithIdentityConstant() local
2187 std::swap(N0, N1); in foldSelectWithIdentityConstant()
2232 SDValue F0 = DAG.getFreeze(N0); in foldSelectWithIdentityConstant()
2238 SDValue F0 = DAG.getFreeze(N0); in foldSelectWithIdentityConstant()
2418 SDValue N0 = N->getOperand(0); in visitADDLike() local
2420 EVT VT = N0.getValueType(); in visitADDLike()
2424 if (N0.isUndef()) in visitADDLike()
2425 return N0; in visitADDLike()
2430 if (SDValue C = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, {N0, N1})) in visitADDLike()
2434 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitADDLike()
2436 return DAG.getNode(ISD::ADD, DL, VT, N1, N0); in visitADDLike()
2445 return N0; in visitADDLike()
2450 return N0; in visitADDLike()
2452 if (N0.getOpcode() == ISD::SUB) { in visitADDLike()
2453 SDValue N00 = N0.getOperand(0); in visitADDLike()
2454 SDValue N01 = N0.getOperand(1); in visitADDLike()
2458 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), Sub); in visitADDLike()
2462 return DAG.getNode(ISD::SUB, DL, VT, Add, N0.getOperand(1)); in visitADDLike()
2469 if (N0.getOpcode() == ISD::SIGN_EXTEND && N0.hasOneUse() && in visitADDLike()
2471 SDValue X = N0.getOperand(0); in visitADDLike()
2485 if (isADDLike(N0, DAG)) { in visitADDLike()
2486 SDValue N01 = N0.getOperand(1); in visitADDLike()
2488 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), Add); in visitADDLike()
2495 if (!reassociationCanBreakAddressingModePattern(ISD::ADD, DL, N, N0, N1)) { in visitADDLike()
2496 if (SDValue RADD = reassociateOps(ISD::ADD, DL, N0, N1, N->getFlags())) in visitADDLike()
2503 auto ReassociateAddOr = [&](SDValue N0, SDValue N1) { in visitADDLike() argument
2504 if (isADDLike(N0, DAG) && N0.hasOneUse() && in visitADDLike()
2505 isConstantOrConstantVector(N0.getOperand(1), /* NoOpaque */ true)) { in visitADDLike()
2507 DAG.getNode(ISD::ADD, DL, VT, N1, N0.getOperand(0)), in visitADDLike()
2508 N0.getOperand(1)); in visitADDLike()
2512 if (SDValue Add = ReassociateAddOr(N0, N1)) in visitADDLike()
2514 if (SDValue Add = ReassociateAddOr(N1, N0)) in visitADDLike()
2518 if (N0.getOpcode() == ISD::SUB && isNullOrNullSplat(N0.getOperand(0))) in visitADDLike()
2519 return DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1)); in visitADDLike()
2523 return DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(1)); in visitADDLike()
2526 if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(1)) in visitADDLike()
2530 if (N0.getOpcode() == ISD::SUB && N1 == N0.getOperand(1)) in visitADDLike()
2531 return N0.getOperand(0); in visitADDLike()
2534 if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB && in visitADDLike()
2535 N0.getOperand(0) == N1.getOperand(1)) in visitADDLike()
2537 N0.getOperand(1)); in visitADDLike()
2540 if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB && in visitADDLike()
2541 N0.getOperand(1) == N1.getOperand(0)) in visitADDLike()
2542 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), in visitADDLike()
2547 N0 == N1.getOperand(1).getOperand(0)) in visitADDLike()
2553 N0 == N1.getOperand(1).getOperand(1)) in visitADDLike()
2560 N0 == N1.getOperand(0).getOperand(1)) in visitADDLike()
2565 if (N0.getOpcode() == ISD::SUB && N1.getOpcode() == ISD::SUB && in visitADDLike()
2566 N0->hasOneUse() && N1->hasOneUse()) { in visitADDLike()
2567 SDValue N00 = N0.getOperand(0); in visitADDLike()
2568 SDValue N01 = N0.getOperand(1); in visitADDLike()
2574 DAG.getNode(ISD::ADD, SDLoc(N0), VT, N00, N10), in visitADDLike()
2579 if (N0.getOpcode() == ISD::UMAX && hasOperation(ISD::USUBSAT, VT)) { in visitADDLike()
2584 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchUSUBSAT, in visitADDLike()
2586 return DAG.getNode(ISD::USUBSAT, DL, VT, N0.getOperand(0), in visitADDLike()
2587 N0.getOperand(1)); in visitADDLike()
2595 if (isBitwiseNot(N0)) in visitADDLike()
2597 N0.getOperand(0)); in visitADDLike()
2600 if (N0.getOpcode() == ISD::ADD) { in visitADDLike()
2603 if (isBitwiseNot(N0.getOperand(0))) { in visitADDLike()
2604 A = N0.getOperand(1); in visitADDLike()
2605 Xor = N0.getOperand(0); in visitADDLike()
2606 } else if (isBitwiseNot(N0.getOperand(1))) { in visitADDLike()
2607 A = N0.getOperand(0); in visitADDLike()
2608 Xor = N0.getOperand(1); in visitADDLike()
2619 if (!TLI.preferIncOfAddToSubOfNot(VT) && N0.getOpcode() == ISD::ADD && in visitADDLike()
2620 N0.hasOneUse()) { in visitADDLike()
2621 SDValue Not = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(0), in visitADDLike()
2623 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(1), Not); in visitADDLike()
2628 if (N0.getOpcode() == ISD::SUB && N0.hasOneUse() && in visitADDLike()
2630 SDValue Xor = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1), N1); in visitADDLike()
2631 return DAG.getNode(ISD::ADD, DL, VT, Xor, N0.getOperand(0)); in visitADDLike()
2634 if (SDValue Combined = visitADDLikeCommutative(N0, N1, N)) in visitADDLike()
2637 if (SDValue Combined = visitADDLikeCommutative(N1, N0, N)) in visitADDLike()
2644 SDValue N0 = N->getOperand(0); in visitADD() local
2646 EVT VT = N0.getValueType(); in visitADD()
2660 DAG.haveNoCommonBitsSet(N0, N1)) in visitADD()
2661 return DAG.getNode(ISD::OR, DL, VT, N0, N1); in visitADD()
2664 if (N0.getOpcode() == ISD::VSCALE && N1.getOpcode() == ISD::VSCALE) { in visitADD()
2665 const APInt &C0 = N0->getConstantOperandAPInt(0); in visitADD()
2671 if ((N0.getOpcode() == ISD::ADD) && in visitADD()
2672 (N0.getOperand(1).getOpcode() == ISD::VSCALE) && in visitADD()
2674 const APInt &VS0 = N0.getOperand(1)->getConstantOperandAPInt(0); in visitADD()
2677 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), VS); in visitADD()
2681 if (N0.getOpcode() == ISD::STEP_VECTOR && in visitADD()
2683 const APInt &C0 = N0->getConstantOperandAPInt(0); in visitADD()
2690 if ((N0.getOpcode() == ISD::ADD) && in visitADD()
2691 (N0.getOperand(1).getOpcode() == ISD::STEP_VECTOR) && in visitADD()
2693 const APInt &SV0 = N0.getOperand(1)->getConstantOperandAPInt(0); in visitADD()
2697 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), SV); in visitADD()
2705 SDValue N0 = N->getOperand(0); in visitADDSAT() local
2707 EVT VT = N0.getValueType(); in visitADDSAT()
2711 if (N0.isUndef() || N1.isUndef()) in visitADDSAT()
2715 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitADDSAT()
2719 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitADDSAT()
2721 return DAG.getNode(Opcode, DL, VT, N1, N0); in visitADDSAT()
2730 return N0; in visitADDSAT()
2735 return N0; in visitADDSAT()
2739 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never) in visitADDSAT()
2740 return DAG.getNode(ISD::ADD, DL, VT, N0, N1); in visitADDSAT()
2790 static SDValue foldAddSubMasked1(bool IsAdd, SDValue N0, SDValue N1, in foldAddSubMasked1() argument
2795 EVT VT = N0.getValueType(); in foldAddSubMasked1()
2801 return DAG.getNode(IsAdd ? ISD::SUB : ISD::ADD, DL, VT, N0, N1.getOperand(0)); in foldAddSubMasked1()
2805 SDValue DAGCombiner::visitADDLikeCommutative(SDValue N0, SDValue N1, in visitADDLikeCommutative() argument
2807 EVT VT = N0.getValueType(); in visitADDLikeCommutative()
2813 return DAG.getNode(ISD::SUB, DL, VT, N0, in visitADDLikeCommutative()
2818 if (SDValue V = foldAddSubMasked1(true, N0, N1, DAG, DL)) in visitADDLikeCommutative()
2825 if (!TLI.preferIncOfAddToSubOfNot(VT) && N0.getOpcode() == ISD::ADD && in visitADDLikeCommutative()
2826 N0.hasOneUse() && isOneOrOneSplat(N0.getOperand(1))) { in visitADDLikeCommutative()
2827 SDValue Not = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(0), in visitADDLikeCommutative()
2832 if (N0.getOpcode() == ISD::SUB && N0.hasOneUse()) { in visitADDLikeCommutative()
2836 if (isConstantOrConstantVector(N0.getOperand(1), /*NoOpaques=*/true)) { in visitADDLikeCommutative()
2837 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), N1); in visitADDLikeCommutative()
2838 return DAG.getNode(ISD::SUB, DL, VT, Add, N0.getOperand(1)); in visitADDLikeCommutative()
2842 if (isConstantOrConstantVector(N0.getOperand(0), /*NoOpaques=*/true)) { in visitADDLikeCommutative()
2843 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1)); in visitADDLikeCommutative()
2844 return DAG.getNode(ISD::ADD, DL, VT, Sub, N0.getOperand(0)); in visitADDLikeCommutative()
2851 if (N0.getOpcode() == ISD::SIGN_EXTEND && in visitADDLikeCommutative()
2852 N0.getOperand(0).getScalarValueSizeInBits() == 1 && in visitADDLikeCommutative()
2854 SDValue ZExt = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)); in visitADDLikeCommutative()
2864 return DAG.getNode(ISD::SUB, DL, VT, N0, ZExt); in visitADDLikeCommutative()
2872 N0, N1.getOperand(0), N1.getOperand(2)); in visitADDLikeCommutative()
2878 DAG.getVTList(VT, Carry.getValueType()), N0, in visitADDLikeCommutative()
2885 SDValue N0 = N->getOperand(0); in visitADDC() local
2887 EVT VT = N0.getValueType(); in visitADDC()
2892 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDC()
2896 ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0); in visitADDC()
2899 return DAG.getNode(ISD::ADDC, DL, N->getVTList(), N1, N0); in visitADDC()
2903 return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE, in visitADDC()
2907 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never) in visitADDC()
2908 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDC()
2957 SDValue N0 = N->getOperand(0); in visitADDO() local
2959 EVT VT = N0.getValueType(); in visitADDO()
2967 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDO()
2971 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitADDO()
2973 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0); in visitADDO()
2977 return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT)); in visitADDO()
2981 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never) in visitADDO()
2982 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1), in visitADDO()
2986 if (isBitwiseNot(N0) && isOneOrOneSplat(N1)) { in visitADDO()
2988 DAG.getConstant(0, DL, VT), N0.getOperand(0)); in visitADDO()
2993 if (SDValue Combined = visitUADDOLike(N0, N1, N)) in visitADDO()
2996 if (SDValue Combined = visitUADDOLike(N1, N0, N)) in visitADDO()
3003 SDValue DAGCombiner::visitUADDOLike(SDValue N0, SDValue N1, SDNode *N) { in visitUADDOLike() argument
3004 EVT VT = N0.getValueType(); in visitUADDOLike()
3014 return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0, Y, in visitUADDOLike()
3021 return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0, in visitUADDOLike()
3028 SDValue N0 = N->getOperand(0); in visitADDE() local
3033 ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0); in visitADDE()
3037 N1, N0, CarryIn); in visitADDE()
3041 return DAG.getNode(ISD::ADDC, SDLoc(N), N->getVTList(), N0, N1); in visitADDE()
3047 SDValue N0 = N->getOperand(0); in visitADDCARRY() local
3053 ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0); in visitADDCARRY()
3056 return DAG.getNode(ISD::ADDCARRY, DL, N->getVTList(), N1, N0, CarryIn); in visitADDCARRY()
3062 return DAG.getNode(ISD::UADDO, DL, N->getVTList(), N0, N1); in visitADDCARRY()
3066 if (isNullConstant(N0) && isNullConstant(N1)) { in visitADDCARRY()
3067 EVT VT = N0.getValueType(); in visitADDCARRY()
3076 if (SDValue Combined = visitADDCARRYLike(N0, N1, CarryIn, N)) in visitADDCARRY()
3079 if (SDValue Combined = visitADDCARRYLike(N1, N0, CarryIn, N)) in visitADDCARRY()
3086 SDValue N0 = N->getOperand(0); in visitSADDO_CARRY() local
3092 ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0); in visitSADDO_CARRY()
3095 return DAG.getNode(ISD::SADDO_CARRY, DL, N->getVTList(), N1, N0, CarryIn); in visitSADDO_CARRY()
3101 return DAG.getNode(ISD::SADDO, DL, N->getVTList(), N0, N1); in visitSADDO_CARRY()
3221 SDValue N0, SDValue N1, SDNode *N) { in combineCarryDiamond() argument
3222 SDValue Carry0 = getAsCarry(TLI, N0); in combineCarryDiamond()
3288 SDValue DAGCombiner::visitADDCARRYLike(SDValue N0, SDValue N1, SDValue CarryIn, in visitADDCARRYLike() argument
3291 if (isBitwiseNot(N0)) in visitADDCARRYLike()
3295 N0.getOperand(0), NotC); in visitADDCARRYLike()
3304 if ((N0.getOpcode() == ISD::ADD || in visitADDCARRYLike()
3305 (N0.getOpcode() == ISD::UADDO && N0.getResNo() == 0 && in visitADDCARRYLike()
3306 N0.getValue(1) != CarryIn)) && in visitADDCARRYLike()
3309 N0.getOperand(0), N0.getOperand(1), CarryIn); in visitADDCARRYLike()
3318 if (auto R = combineADDCARRYDiamond(*this, DAG, N0, Y, CarryIn, N)) in visitADDCARRYLike()
3320 if (auto R = combineADDCARRYDiamond(*this, DAG, N0, CarryIn, Y, N)) in visitADDCARRYLike()
3415 SDValue N0 = N->getOperand(0); in visitSUB() local
3417 EVT VT = N0.getValueType(); in visitSUB()
3428 if (PeekThroughFreeze(N0) == PeekThroughFreeze(N1)) in visitSUB()
3432 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N0, N1})) in visitSUB()
3442 return N0; in visitSUB()
3452 return DAG.getNode(ISD::ADD, DL, VT, N0, in visitSUB()
3456 if (isNullOrNullSplat(N0)) { in visitSUB()
3473 return N0; in visitSUB()
3479 return N0; in visitSUB()
3504 if (isAllOnesOrAllOnesSplat(N0)) in visitSUB()
3505 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitSUB()
3509 return DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(1)); in visitSUB()
3512 if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(0)) in visitSUB()
3516 if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1) in visitSUB()
3517 return N0.getOperand(1); in visitSUB()
3520 if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1) in visitSUB()
3521 return N0.getOperand(0); in visitSUB()
3524 if (N0.getOpcode() == ISD::ADD) { in visitSUB()
3525 SDValue N01 = N0.getOperand(1); in visitSUB()
3527 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), NewC); in visitSUB()
3533 if (SDValue NewC = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N0, N11})) in visitSUB()
3538 if (N0.getOpcode() == ISD::SUB) { in visitSUB()
3539 SDValue N01 = N0.getOperand(1); in visitSUB()
3541 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), NewC); in visitSUB()
3545 if (N0.getOpcode() == ISD::SUB) { in visitSUB()
3546 SDValue N00 = N0.getOperand(0); in visitSUB()
3548 return DAG.getNode(ISD::SUB, DL, VT, NewC, N0.getOperand(1)); in visitSUB()
3552 if (N0.getOpcode() == ISD::ADD && in visitSUB()
3553 (N0.getOperand(1).getOpcode() == ISD::SUB || in visitSUB()
3554 N0.getOperand(1).getOpcode() == ISD::ADD) && in visitSUB()
3555 N0.getOperand(1).getOperand(0) == N1) in visitSUB()
3556 return DAG.getNode(N0.getOperand(1).getOpcode(), DL, VT, N0.getOperand(0), in visitSUB()
3557 N0.getOperand(1).getOperand(1)); in visitSUB()
3560 if (N0.getOpcode() == ISD::ADD && N0.getOperand(1).getOpcode() == ISD::ADD && in visitSUB()
3561 N0.getOperand(1).getOperand(1) == N1) in visitSUB()
3562 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), in visitSUB()
3563 N0.getOperand(1).getOperand(0)); in visitSUB()
3566 if (N0.getOpcode() == ISD::SUB && N0.getOperand(1).getOpcode() == ISD::SUB && in visitSUB()
3567 N0.getOperand(1).getOperand(1) == N1) in visitSUB()
3568 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), in visitSUB()
3569 N0.getOperand(1).getOperand(0)); in visitSUB()
3573 return DAG.getNode(ISD::ADD, DL, VT, N0, in visitSUB()
3581 if (A != N0) in visitSUB()
3583 if (A == N0 && in visitSUB()
3598 return DAG.getNode(ISD::ADD, DL, VT, N0, Mul); in visitSUB()
3605 return DAG.getNode(ISD::ADD, DL, VT, N0, Mul); in visitSUB()
3610 if (N0.isUndef()) in visitSUB()
3611 return N0; in visitSUB()
3621 if (SDValue V = foldAddSubMasked1(false, N0, N1, DAG, SDLoc(N))) in visitSUB()
3628 if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB && isOneOrOneSplat(N1)) { in visitSUB()
3629 SDValue Xor = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1), in visitSUB()
3631 return DAG.getNode(ISD::ADD, DL, VT, Xor, N0.getOperand(0)); in visitSUB()
3639 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(0)); in visitSUB()
3645 if (N0.hasOneUse() && N0.getOpcode() == ISD::ADD && in visitSUB()
3646 isConstantOrConstantVector(N0.getOperand(1), /*NoOpaques=*/true)) { in visitSUB()
3647 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1); in visitSUB()
3648 return DAG.getNode(ISD::ADD, DL, VT, Sub, N0.getOperand(1)); in visitSUB()
3653 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(0)); in visitSUB()
3658 if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB && in visitSUB()
3659 isConstantOrConstantVector(N0.getOperand(1), /*NoOpaques=*/true)) { in visitSUB()
3660 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1); in visitSUB()
3661 return DAG.getNode(ISD::SUB, DL, VT, Sub, N0.getOperand(1)); in visitSUB()
3664 if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB && in visitSUB()
3665 isConstantOrConstantVector(N0.getOperand(0), /*NoOpaques=*/true)) { in visitSUB()
3666 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1), N1); in visitSUB()
3667 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), Add); in visitSUB()
3678 return DAG.getNode(ISD::ADD, DL, VT, N0, SExt); in visitSUB()
3683 if (N0.getOpcode() == ISD::XOR && N1.getOpcode() == ISD::SRA) { in visitSUB()
3684 SDValue X0 = N0.getOperand(0), X1 = N0.getOperand(1); in visitSUB()
3694 if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(N0)) in visitSUB()
3714 return DAG.getNode(ISD::ADD, DL, VT, N0, ZExt); in visitSUB()
3721 return DAG.getNode(ISD::ADD, DL, VT, N0, DAG.getVScale(DL, VT, -IntVal)); in visitSUB()
3727 return DAG.getNode(ISD::ADD, DL, VT, N0, in visitSUB()
3739 return DAG.getNode(ISD::ADD, DL, VT, N0, SRA); in visitSUB()
3749 return DAG.getNode(ISD::ADD, DL, VT, N1, N0); in visitSUB()
3754 if (SDValue Carry = getAsCarry(TLI, N0)) { in visitSUB()
3766 if (ConstantSDNode *C0 = isConstOrConstSplat(N0)) { in visitSUB()
3771 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitSUB()
3779 SDValue N0 = N->getOperand(0); in visitSUBSAT() local
3781 EVT VT = N0.getValueType(); in visitSUBSAT()
3785 if (N0.isUndef() || N1.isUndef()) in visitSUBSAT()
3789 if (N0 == N1) in visitSUBSAT()
3793 if (SDValue C = DAG.FoldConstantArithmetic(N->getOpcode(), DL, VT, {N0, N1})) in visitSUBSAT()
3803 return N0; in visitSUBSAT()
3808 return N0; in visitSUBSAT()
3814 SDValue N0 = N->getOperand(0); in visitSUBC() local
3816 EVT VT = N0.getValueType(); in visitSUBC()
3821 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1), in visitSUBC()
3825 if (N0 == N1) in visitSUBC()
3831 return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue)); in visitSUBC()
3834 if (isAllOnesConstant(N0)) in visitSUBC()
3835 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0), in visitSUBC()
3842 SDValue N0 = N->getOperand(0); in visitSUBO() local
3844 EVT VT = N0.getValueType(); in visitSUBO()
3852 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1), in visitSUBO()
3856 if (N0 == N1) in visitSUBO()
3864 return DAG.getNode(ISD::SADDO, DL, N->getVTList(), N0, in visitSUBO()
3870 return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT)); in visitSUBO()
3873 if (!IsSigned && isAllOnesOrAllOnesSplat(N0)) in visitSUBO()
3874 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0), in visitSUBO()
3881 SDValue N0 = N->getOperand(0); in visitSUBE() local
3887 return DAG.getNode(ISD::SUBC, SDLoc(N), N->getVTList(), N0, N1); in visitSUBE()
3893 SDValue N0 = N->getOperand(0); in visitSUBCARRY() local
3901 return DAG.getNode(ISD::USUBO, SDLoc(N), N->getVTList(), N0, N1); in visitSUBCARRY()
3908 SDValue N0 = N->getOperand(0); in visitSSUBO_CARRY() local
3916 return DAG.getNode(ISD::SSUBO, SDLoc(N), N->getVTList(), N0, N1); in visitSSUBO_CARRY()
3925 SDValue N0 = N->getOperand(0); in visitMULFIX() local
3928 EVT VT = N0.getValueType(); in visitMULFIX()
3931 if (N0.isUndef() || N1.isUndef()) in visitMULFIX()
3935 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitMULFIX()
3937 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0, Scale); in visitMULFIX()
3947 SDValue N0 = N->getOperand(0); in visitMUL() local
3949 EVT VT = N0.getValueType(); in visitMUL()
3953 if (N0.isUndef() || N1.isUndef()) in visitMUL()
3957 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MUL, DL, VT, {N0, N1})) in visitMUL()
3961 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitMUL()
3963 return DAG.getNode(ISD::MUL, DL, VT, N1, N0); in visitMUL()
3992 return N0; in visitMUL()
4000 DAG.getConstant(0, DL, VT), N0); in visitMUL()
4007 EVT ShiftVT = getShiftAmountTy(N0.getValueType()); in visitMUL()
4009 return DAG.getNode(ISD::SHL, DL, VT, N0, Trunc); in visitMUL()
4019 DAG.getNode(ISD::SHL, DL, VT, N0, in visitMUL()
4021 getShiftAmountTy(N0.getValueType())))); in visitMUL()
4060 DAG.getNode(ISD::SHL, DL, VT, N0, DAG.getConstant(ShAmt, DL, VT)); in visitMUL()
4063 DAG.getNode(ISD::SHL, DL, VT, N0, in visitMUL()
4065 : DAG.getNode(MathOp, DL, VT, Shl, N0); in visitMUL()
4073 if (N0.getOpcode() == ISD::SHL) { in visitMUL()
4074 SDValue N01 = N0.getOperand(1); in visitMUL()
4076 return DAG.getNode(ISD::MUL, DL, VT, N0.getOperand(0), C3); in visitMUL()
4085 if (N0.getOpcode() == ISD::SHL && in visitMUL()
4086 isConstantOrConstantVector(N0.getOperand(1)) && N0->hasOneUse()) { in visitMUL()
4087 Sh = N0; Y = N1; in visitMUL()
4091 Sh = N1; Y = N0; in visitMUL()
4102 N0.getOpcode() == ISD::ADD && in visitMUL()
4103 DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1)) && in visitMUL()
4104 isMulAddWithConstProfitable(N, N0, N1)) in visitMUL()
4107 DAG.getNode(ISD::MUL, SDLoc(N0), VT, N0.getOperand(0), N1), in visitMUL()
4108 DAG.getNode(ISD::MUL, SDLoc(N1), VT, N0.getOperand(1), N1)); in visitMUL()
4111 if (N0.getOpcode() == ISD::VSCALE) in visitMUL()
4113 const APInt &C0 = N0.getConstantOperandAPInt(0); in visitMUL()
4120 if (N0.getOpcode() == ISD::STEP_VECTOR) in visitMUL()
4122 const APInt &C0 = N0.getConstantOperandAPInt(0); in visitMUL()
4153 return DAG.getNode(ISD::AND, DL, VT, N0, DAG.getBuildVector(VT, DL, Mask)); in visitMUL()
4158 if (SDValue RMUL = reassociateOps(ISD::MUL, DL, N0, N1, N->getFlags())) in visitMUL()
4257 SDValue N0 = N->getOperand(0); in simplifyDivRem() local
4271 if (DAG.isUndef(Opc, {N0, N1})) in simplifyDivRem()
4276 if (N0.isUndef()) in simplifyDivRem()
4281 ConstantSDNode *N0C = isConstOrConstSplat(N0); in simplifyDivRem()
4283 return N0; in simplifyDivRem()
4287 if (N0 == N1) in simplifyDivRem()
4297 return IsDiv ? N0 : DAG.getConstant(0, DL, VT); in simplifyDivRem()
4303 SDValue N0 = N->getOperand(0); in visitSDIV() local
4310 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SDIV, DL, VT, {N0, N1})) in visitSDIV()
4321 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), N0); in visitSDIV()
4325 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ), in visitSDIV()
4337 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0)) in visitSDIV()
4338 return DAG.getNode(ISD::UDIV, DL, N1.getValueType(), N0, N1); in visitSDIV()
4340 if (SDValue V = visitSDIVLike(N0, N1, N)) { in visitSDIV()
4344 { N0, N1 })) { in visitSDIV()
4346 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul); in visitSDIV()
4381 SDValue DAGCombiner::visitSDIVLike(SDValue N0, SDValue N1, SDNode *N) { in visitSDIVLike() argument
4397 EVT ShiftAmtTy = getShiftAmountTy(N0.getValueType()); in visitSDIVLike()
4406 SDValue Sign = DAG.getNode(ISD::SRA, DL, VT, N0, in visitSDIVLike()
4413 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, Srl); in visitSDIVLike()
4425 Sra = DAG.getSelect(DL, VT, IsOneOrAllOnes, N0, Sra); in visitSDIVLike()
4451 SDValue N0 = N->getOperand(0); in visitUDIV() local
4458 if (SDValue C = DAG.FoldConstantArithmetic(ISD::UDIV, DL, VT, {N0, N1})) in visitUDIV()
4469 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ), in visitUDIV()
4479 if (SDValue V = visitUDIVLike(N0, N1, N)) { in visitUDIV()
4483 { N0, N1 })) { in visitUDIV()
4485 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul); in visitUDIV()
4504 SDValue DAGCombiner::visitUDIVLike(SDValue N0, SDValue N1, SDNode *N) { in visitUDIVLike() argument
4514 EVT ShiftVT = getShiftAmountTy(N0.getValueType()); in visitUDIVLike()
4517 return DAG.getNode(ISD::SRL, DL, VT, N0, Trunc); in visitUDIVLike()
4533 return DAG.getNode(ISD::SRL, DL, VT, N0, Add); in visitUDIVLike()
4547 SDValue DAGCombiner::buildOptimizedSREM(SDValue N0, SDValue N1, SDNode *N) { in buildOptimizedSREM() argument
4549 !DAG.doesNodeExist(ISD::SDIV, N->getVTList(), {N0, N1})) { in buildOptimizedSREM()
4560 SDValue N0 = N->getOperand(0); in visitREM() local
4569 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitREM()
4575 SDValue F0 = DAG.getFreeze(N0); in visitREM()
4589 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0)) in visitREM()
4590 return DAG.getNode(ISD::UREM, DL, VT, N0, N1); in visitREM()
4597 return DAG.getNode(ISD::AND, DL, VT, N0, Add); in visitREM()
4608 return DAG.getNode(ISD::AND, DL, VT, N0, Add); in visitREM()
4624 if (SDValue OptimizedRem = buildOptimizedSREM(N0, N1, N)) in visitREM()
4629 isSigned ? visitSDIVLike(N0, N1, N) : visitUDIVLike(N0, N1, N); in visitREM()
4634 { N0, N1 })) in visitREM()
4637 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul); in visitREM()
4652 SDValue N0 = N->getOperand(0); in visitMULHS() local
4658 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MULHS, DL, VT, {N0, N1})) in visitMULHS()
4662 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitMULHS()
4664 return DAG.getNode(ISD::MULHS, DL, N->getVTList(), N1, N0); in visitMULHS()
4682 return DAG.getNode(ISD::SRA, DL, N0.getValueType(), N0, in visitMULHS()
4683 DAG.getConstant(N0.getScalarValueSizeInBits() - 1, DL, in visitMULHS()
4684 getShiftAmountTy(N0.getValueType()))); in visitMULHS()
4687 if (N0.isUndef() || N1.isUndef()) in visitMULHS()
4698 N0 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N0); in visitMULHS()
4700 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1); in visitMULHS()
4712 SDValue N0 = N->getOperand(0); in visitMULHU() local
4718 if (SDValue C = DAG.FoldConstantArithmetic(ISD::MULHU, DL, VT, {N0, N1})) in visitMULHU()
4722 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitMULHU()
4724 return DAG.getNode(ISD::MULHU, DL, N->getVTList(), N1, N0); in visitMULHU()
4742 return DAG.getConstant(0, DL, N0.getValueType()); in visitMULHU()
4745 if (N0.isUndef() || N1.isUndef()) in visitMULHU()
4755 EVT ShiftVT = getShiftAmountTy(N0.getValueType()); in visitMULHU()
4757 return DAG.getNode(ISD::SRL, DL, VT, N0, Trunc); in visitMULHU()
4768 N0 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N0); in visitMULHU()
4770 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1); in visitMULHU()
4789 SDValue N0 = N->getOperand(0); in visitAVG() local
4795 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitAVG()
4799 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitAVG()
4801 return DAG.getNode(Opcode, DL, N->getVTList(), N1, N0); in visitAVG()
4810 return DAG.getNode(ISD::SRA, DL, VT, N0, DAG.getConstant(1, DL, VT)); in visitAVG()
4812 return DAG.getNode(ISD::SRL, DL, VT, N0, DAG.getConstant(1, DL, VT)); in visitAVG()
4817 if (N0.isUndef()) in visitAVG()
4820 return N0; in visitAVG()
4880 SDValue N0 = N->getOperand(0); in visitSMUL_LOHI() local
4886 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitSMUL_LOHI()
4888 return DAG.getNode(ISD::SMUL_LOHI, DL, N->getVTList(), N1, N0); in visitSMUL_LOHI()
4897 SDValue Lo = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N0); in visitSMUL_LOHI()
4918 SDValue N0 = N->getOperand(0); in visitUMUL_LOHI() local
4924 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitUMUL_LOHI()
4926 return DAG.getNode(ISD::UMUL_LOHI, DL, N->getVTList(), N1, N0); in visitUMUL_LOHI()
4937 return CombineTo(N, N0, Zero); in visitUMUL_LOHI()
4947 SDValue Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N0); in visitUMUL_LOHI()
4965 SDValue N0 = N->getOperand(0); in visitMULO() local
4967 EVT VT = N0.getValueType(); in visitMULO()
4973 ConstantSDNode *N0C = isConstOrConstSplat(N0); in visitMULO()
4989 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitMULO()
4991 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0); in visitMULO()
5003 N->getVTList(), N0, N0); in visitMULO()
5008 SDValue And = DAG.getNode(ISD::AND, DL, VT, N0, N1); in visitMULO()
5017 unsigned SignBits = DAG.ComputeNumSignBits(N0); in visitMULO()
5021 return CombineTo(N, DAG.getNode(ISD::MUL, DL, VT, N0, N1), in visitMULO()
5025 KnownBits N0Known = DAG.computeKnownBits(N0); in visitMULO()
5029 return CombineTo(N, DAG.getNode(ISD::MUL, DL, VT, N0, N1), in visitMULO()
5042 static SDValue isSaturatingMinMax(SDValue N0, SDValue N1, SDValue N2, in isSaturatingMinMax() argument
5045 auto isSignedMinMax = [&](SDValue N0, SDValue N1, SDValue N2, SDValue N3, in isSaturatingMinMax()
5049 if (N0 != N2 && (N2.getOpcode() != ISD::TRUNCATE || N0 != N2.getOperand(0))) in isSaturatingMinMax()
5064 unsigned Opcode0 = isSignedMinMax(N0, N1, N2, N3, CC); in isSaturatingMinMax()
5070 switch (N0.getOpcode()) { in isSaturatingMinMax()
5073 N00 = N02 = N0.getOperand(0); in isSaturatingMinMax()
5074 N01 = N03 = N0.getOperand(1); in isSaturatingMinMax()
5075 N0CC = N0.getOpcode() == ISD::SMIN ? ISD::SETLT : ISD::SETGT; in isSaturatingMinMax()
5078 N00 = N0.getOperand(0); in isSaturatingMinMax()
5079 N01 = N0.getOperand(1); in isSaturatingMinMax()
5080 N02 = N0.getOperand(2); in isSaturatingMinMax()
5081 N03 = N0.getOperand(3); in isSaturatingMinMax()
5082 N0CC = cast<CondCodeSDNode>(N0.getOperand(4))->get(); in isSaturatingMinMax()
5086 if (N0.getOperand(0).getOpcode() != ISD::SETCC) in isSaturatingMinMax()
5088 N00 = N0.getOperand(0).getOperand(0); in isSaturatingMinMax()
5089 N01 = N0.getOperand(0).getOperand(1); in isSaturatingMinMax()
5090 N02 = N0.getOperand(1); in isSaturatingMinMax()
5091 N03 = N0.getOperand(2); in isSaturatingMinMax()
5092 N0CC = cast<CondCodeSDNode>(N0.getOperand(0).getOperand(2))->get(); in isSaturatingMinMax()
5125 static SDValue PerformMinMaxFpToSatCombine(SDValue N0, SDValue N1, SDValue N2, in PerformMinMaxFpToSatCombine() argument
5130 SDValue Fp = isSaturatingMinMax(N0, N1, N2, N3, CC, BW, Unsigned); in PerformMinMaxFpToSatCombine()
5148 static SDValue PerformUMinFpToSatCombine(SDValue N0, SDValue N1, SDValue N2, in PerformUMinFpToSatCombine() argument
5154 if ((N0 != N2 && in PerformUMinFpToSatCombine()
5155 (N2.getOpcode() != ISD::TRUNCATE || N0 != N2.getOperand(0))) || in PerformUMinFpToSatCombine()
5156 N0.getOpcode() != ISD::FP_TO_UINT || CC != ISD::SETULT) in PerformUMinFpToSatCombine()
5169 EVT FPVT = N0.getOperand(0).getValueType(); in PerformUMinFpToSatCombine()
5179 DAG.getNode(ISD::FP_TO_UINT_SAT, SDLoc(N0), NewVT, N0.getOperand(0), in PerformUMinFpToSatCombine()
5181 return DAG.getZExtOrTrunc(Sat, SDLoc(N0), N3.getValueType()); in PerformUMinFpToSatCombine()
5185 SDValue N0 = N->getOperand(0); in visitIMINMAX() local
5187 EVT VT = N0.getValueType(); in visitIMINMAX()
5192 if (SDValue C = DAG.FoldConstantArithmetic(Opcode, DL, VT, {N0, N1})) in visitIMINMAX()
5196 if (N0 == N1) in visitIMINMAX()
5197 return N0; in visitIMINMAX()
5200 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitIMINMAX()
5202 return DAG.getNode(Opcode, DL, VT, N1, N0); in visitIMINMAX()
5212 (N0.isUndef() || DAG.SignBitIsZero(N0)) && in visitIMINMAX()
5223 return DAG.getNode(AltOpcode, DL, VT, N0, N1); in visitIMINMAX()
5228 N0, N1, N0, N1, Opcode == ISD::SMIN ? ISD::SETLT : ISD::SETGT, DAG)) in visitIMINMAX()
5231 if (SDValue S = PerformUMinFpToSatCombine(N0, N1, N0, N1, ISD::SETULT, DAG)) in visitIMINMAX()
5244 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in hoistLogicOpWithSameOpcodeHands() local
5245 EVT VT = N0.getValueType(); in hoistLogicOpWithSameOpcodeHands()
5247 unsigned HandOpcode = N0.getOpcode(); in hoistLogicOpWithSameOpcodeHands()
5253 if (N0.getNumOperands() == 0) in hoistLogicOpWithSameOpcodeHands()
5260 SDValue X = N0.getOperand(0); in hoistLogicOpWithSameOpcodeHands()
5268 if (!N0.hasOneUse() && !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5292 if (!N0.hasOneUse() && !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5314 N0.getOperand(1) == N1.getOperand(1)) { in hoistLogicOpWithSameOpcodeHands()
5316 if (!N0.hasOneUse() || !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5319 return DAG.getNode(HandOpcode, DL, VT, Logic, N0.getOperand(1)); in hoistLogicOpWithSameOpcodeHands()
5325 if (!N0.hasOneUse() || !N1.hasOneUse()) in hoistLogicOpWithSameOpcodeHands()
5362 auto *SVN0 = cast<ShuffleVectorSDNode>(N0); in hoistLogicOpWithSameOpcodeHands()
5377 SDValue ShOp = N0.getOperand(1); in hoistLogicOpWithSameOpcodeHands()
5382 if (N0.getOperand(1) == N1.getOperand(1) && ShOp.getNode()) { in hoistLogicOpWithSameOpcodeHands()
5384 N0.getOperand(0), N1.getOperand(0)); in hoistLogicOpWithSameOpcodeHands()
5390 ShOp = N0.getOperand(0); in hoistLogicOpWithSameOpcodeHands()
5395 if (N0.getOperand(0) == N1.getOperand(0) && ShOp.getNode()) { in hoistLogicOpWithSameOpcodeHands()
5396 SDValue Logic = DAG.getNode(LogicOpcode, DL, VT, N0.getOperand(1), in hoistLogicOpWithSameOpcodeHands()
5406 SDValue DAGCombiner::foldLogicOfSetCCs(bool IsAnd, SDValue N0, SDValue N1, in foldLogicOfSetCCs() argument
5409 if (!isSetCCEquivalent(N0, LL, LR, N0CC) || in foldLogicOfSetCCs()
5413 assert(N0.getValueType() == N1.getValueType() && in foldLogicOfSetCCs()
5422 EVT VT = N0.getValueType(); in foldLogicOfSetCCs()
5451 SDValue Or = DAG.getNode(ISD::OR, SDLoc(N0), OpVT, LL, RL); in foldLogicOfSetCCs()
5470 SDValue And = DAG.getNode(ISD::AND, SDLoc(N0), OpVT, LL, RL); in foldLogicOfSetCCs()
5484 SDValue Add = DAG.getNode(ISD::ADD, SDLoc(N0), OpVT, LL, One); in foldLogicOfSetCCs()
5492 N0.hasOneUse() && N1.hasOneUse()) { in foldLogicOfSetCCs()
5496 SDValue XorL = DAG.getNode(ISD::XOR, SDLoc(N0), OpVT, LL, LR); in foldLogicOfSetCCs()
5554 SDValue DAGCombiner::visitANDLike(SDValue N0, SDValue N1, SDNode *N) { in visitANDLike() argument
5559 if (N0.isUndef() || N1.isUndef()) in visitANDLike()
5562 if (SDValue V = foldLogicOfSetCCs(true, N0, N1, DL)) in visitANDLike()
5566 if (N0.getOpcode() == ISD::ADD && N1.getOpcode() == ISD::SRL && in visitANDLike()
5567 VT.getSizeInBits() <= 64 && N0->hasOneUse()) { in visitANDLike()
5568 if (ConstantSDNode *ADDI = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { in visitANDLike()
5581 if (DAG.MaskedValueIsZero(N0.getOperand(1), Mask)) { in visitANDLike()
5584 SDLoc DL0(N0); in visitANDLike()
5587 N0.getOperand(0), DAG.getConstant(ADDC, DL, VT)); in visitANDLike()
5588 CombineTo(N0.getNode(), NewAdd); in visitANDLike()
5601 if (N0.getOpcode() == ISD::SRL && N0.hasOneUse()) { in visitANDLike()
5603 if (ConstantSDNode *CShift = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { in visitANDLike()
5629 SDValue SL(N0); in visitANDLike()
5635 N0.getOperand(0)); in visitANDLike()
5940 SDValue N0 = N->getOperand(0); in unfoldExtremeBitClearingToShifts() local
5944 if (!TLI.shouldFoldMaskToVariableShiftPair(N0)) in unfoldExtremeBitClearingToShifts()
5969 X = N0; in unfoldExtremeBitClearingToShifts()
5970 else if (matchMask(N0)) in unfoldExtremeBitClearingToShifts()
6065 SDValue N0 = N->getOperand(0); in foldAndToUsubsat() local
6070 if (N0.getOpcode() == ISD::SRA) in foldAndToUsubsat()
6071 std::swap(N0, N1); in foldAndToUsubsat()
6074 if (N0.getOpcode() != ISD::XOR && N0.getOpcode() != ISD::ADD) in foldAndToUsubsat()
6077 if (N1.getOpcode() != ISD::SRA || !N0.hasOneUse() || !N1.hasOneUse() || in foldAndToUsubsat()
6078 N0.getOperand(0) != N1.getOperand(0)) in foldAndToUsubsat()
6082 ConstantSDNode *XorC = isConstOrConstSplat(N0.getOperand(1), true); in foldAndToUsubsat()
6092 return DAG.getNode(ISD::USUBSAT, DL, VT, N0.getOperand(0), SignMask); in foldAndToUsubsat()
6143 SDValue N0 = N->getOperand(0); in visitAND() local
6148 if (N0 == N1) in visitAND()
6149 return N0; in visitAND()
6152 if (SDValue C = DAG.FoldConstantArithmetic(ISD::AND, SDLoc(N), VT, {N0, N1})) in visitAND()
6156 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitAND()
6158 return DAG.getNode(ISD::AND, SDLoc(N), VT, N1, N0); in visitAND()
6173 return N0; in visitAND()
6176 auto *MLoad = dyn_cast<MaskedLoadSDNode>(N0); in visitAND()
6178 if (MLoad && MLoad->getExtensionType() == ISD::EXTLOAD && N0.hasOneUse() && in visitAND()
6201 return N0; in visitAND()
6213 if (SDValue RAND = reassociateOps(ISD::AND, SDLoc(N), N0, N1, N->getFlags())) in visitAND()
6221 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitAND()
6228 if (N0.getOpcode() == ISD::OR && in visitAND()
6229 ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchSubset)) in visitAND()
6232 if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) { in visitAND()
6233 SDValue N0Op0 = N0.getOperand(0); in visitAND()
6238 N0.getValueType(), N0Op0); in visitAND()
6246 CombineTo(N0.getNode(), Zext); in visitAND()
6257 if ((N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT && in visitAND()
6258 N0.getValueSizeInBits() == N0.getOperand(0).getScalarValueSizeInBits() && in visitAND()
6259 N0.getOperand(0).getOpcode() == ISD::LOAD && in visitAND()
6260 N0.getOperand(0).getResNo() == 0) || in visitAND()
6261 (N0.getOpcode() == ISD::LOAD && N0.getResNo() == 0)) { in visitAND()
6262 LoadSDNode *Load = cast<LoadSDNode>( (N0.getOpcode() == ISD::LOAD) ? in visitAND()
6263 N0 : N0.getOperand(0) ); in visitAND()
6333 CombineTo(N, (N0.getNode() == Load) ? NewLoad : N0); in visitAND()
6356 if (N0.getOpcode() == ISD::EXTRACT_SUBVECTOR && N0.hasOneUse() && N1C && in visitAND()
6357 ISD::isExtOpcode(N0.getOperand(0).getOpcode())) { in visitAND()
6358 SDValue Ext = N0.getOperand(0); in visitAND()
6371 N0.getOperand(1)); in visitAND()
6376 if (auto *GN0 = dyn_cast<MaskedGatherSDNode>(N0)) { in visitAND()
6399 if (N1C && N0.getOpcode() == ISD::LOAD && !VT.isVector()) in visitAND()
6412 if (SDValue Combined = visitANDLike(N0, N1, N)) in visitAND()
6416 if (N0.getOpcode() == N1.getOpcode()) in visitAND()
6420 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitAND()
6422 if (SDValue R = foldLogicOfShifts(N, N1, N0, DAG)) in visitAND()
6432 if (N1C && N1C->isOne() && N0.getOpcode() == ISD::SUB) { in visitAND()
6433 if (isNullOrNullSplat(N0.getOperand(0))) { in visitAND()
6434 SDValue SubRHS = N0.getOperand(1); in visitAND()
6451 if (ISD::isUNINDEXEDLoad(N0.getNode()) && in visitAND()
6452 (ISD::isEXTLoad(N0.getNode()) || in visitAND()
6453 (ISD::isSEXTLoad(N0.getNode()) && N0.hasOneUse()))) { in visitAND()
6454 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitAND()
6465 DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N0), VT, LN0->getChain(), in visitAND()
6468 CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1)); in visitAND()
6474 if (N1C && N1C->getAPIntValue() == 0xffff && N0.getOpcode() == ISD::OR) { in visitAND()
6475 if (SDValue BSwap = MatchBSwapHWordLow(N0.getNode(), N0.getOperand(0), in visitAND()
6476 N0.getOperand(1), false)) in visitAND()
6508 if (IsAndZeroExtMask(N0, N1)) in visitAND()
6509 return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT, N0.getOperand(0)); in visitAND()
6519 SDValue DAGCombiner::MatchBSwapHWordLow(SDNode *N, SDValue N0, SDValue N1, in MatchBSwapHWordLow() argument
6533 if (N0.getOpcode() == ISD::AND && N0.getOperand(0).getOpcode() == ISD::SRL) in MatchBSwapHWordLow()
6534 std::swap(N0, N1); in MatchBSwapHWordLow()
6536 std::swap(N0, N1); in MatchBSwapHWordLow()
6537 if (N0.getOpcode() == ISD::AND) { in MatchBSwapHWordLow()
6538 if (!N0->hasOneUse()) in MatchBSwapHWordLow()
6540 ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in MatchBSwapHWordLow()
6546 N0 = N0.getOperand(0); in MatchBSwapHWordLow()
6560 if (N0.getOpcode() == ISD::SRL && N1.getOpcode() == ISD::SHL) in MatchBSwapHWordLow()
6561 std::swap(N0, N1); in MatchBSwapHWordLow()
6562 if (N0.getOpcode() != ISD::SHL || N1.getOpcode() != ISD::SRL) in MatchBSwapHWordLow()
6564 if (!N0->hasOneUse() || !N1->hasOneUse()) in MatchBSwapHWordLow()
6567 ConstantSDNode *N01C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in MatchBSwapHWordLow()
6575 SDValue N00 = N0->getOperand(0); in MatchBSwapHWordLow()
6649 SDValue N0 = N.getOperand(0); in isBSwapHWordElement() local
6650 unsigned Opc0 = N0.getOpcode(); in isBSwapHWordElement()
6659 N1C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in isBSwapHWordElement()
6688 ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in isBSwapHWordElement()
6696 ConstantSDNode *C = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in isBSwapHWordElement()
6721 Parts[MaskByteOffset] = N0.getOperand(0).getNode(); in isBSwapHWordElement()
6747 SelectionDAG &DAG, SDNode *N, SDValue N0, in matchBSwapHWordOrAndAnd() argument
6753 if (N0.getOpcode() != ISD::AND || N1.getOpcode() != ISD::AND) in matchBSwapHWordOrAndAnd()
6756 if (!N0->hasOneUse() || !N1->hasOneUse()) in matchBSwapHWordOrAndAnd()
6758 ConstantSDNode *Mask0 = isConstOrConstSplat(N0.getOperand(1)); in matchBSwapHWordOrAndAnd()
6765 SDValue Shift0 = N0.getOperand(0); in matchBSwapHWordOrAndAnd()
6790 SDValue DAGCombiner::MatchBSwapHWord(SDNode *N, SDValue N0, SDValue N1) { in MatchBSwapHWord() argument
6800 if (SDValue BSwap = matchBSwapHWordOrAndAnd(TLI, DAG, N, N0, N1, VT, in MatchBSwapHWord()
6805 if (SDValue BSwap = matchBSwapHWordOrAndAnd(TLI, DAG, N, N1, N0, VT, in MatchBSwapHWord()
6816 if (isBSwapHWordPair(N0, Parts)) { in MatchBSwapHWord()
6820 } else if (N0.getOpcode() == ISD::OR) { in MatchBSwapHWord()
6824 SDValue N00 = N0.getOperand(0); in MatchBSwapHWord()
6825 SDValue N01 = N0.getOperand(1); in MatchBSwapHWord()
6855 SDValue DAGCombiner::visitORLike(SDValue N0, SDValue N1, SDNode *N) { in visitORLike() argument
6860 if (!LegalOperations && (N0.isUndef() || N1.isUndef())) in visitORLike()
6863 if (SDValue V = foldLogicOfSetCCs(false, N0, N1, DL)) in visitORLike()
6867 if (N0.getOpcode() == ISD::AND && N1.getOpcode() == ISD::AND && in visitORLike()
6869 (N0->hasOneUse() || N1->hasOneUse())) { in visitORLike()
6873 getAsNonOpaqueConstant(N0.getOperand(1))) { in visitORLike()
6881 if (DAG.MaskedValueIsZero(N0.getOperand(0), RHSMask&~LHSMask) && in visitORLike()
6883 SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT, in visitORLike()
6884 N0.getOperand(0), N1.getOperand(0)); in visitORLike()
6893 if (N0.getOpcode() == ISD::AND && in visitORLike()
6895 N0.getOperand(0) == N1.getOperand(0) && in visitORLike()
6897 (N0->hasOneUse() || N1->hasOneUse())) { in visitORLike()
6898 SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT, in visitORLike()
6899 N0.getOperand(1), N1.getOperand(1)); in visitORLike()
6900 return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), X); in visitORLike()
6907 static SDValue visitORCommutative(SelectionDAG &DAG, SDValue N0, SDValue N1, in visitORCommutative() argument
6909 EVT VT = N0.getValueType(); in visitORCommutative()
6910 if (N0.getOpcode() == ISD::AND) { in visitORCommutative()
6911 SDValue N00 = N0.getOperand(0); in visitORCommutative()
6912 SDValue N01 = N0.getOperand(1); in visitORCommutative()
6926 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitORCommutative()
6936 if (N0.getOpcode() == ISD::FSHL && N1.getOpcode() == ISD::SHL && in visitORCommutative()
6937 N0.getOperand(0) == N1.getOperand(0) && in visitORCommutative()
6938 peekThroughZext(N0.getOperand(2)) == peekThroughZext(N1.getOperand(1))) in visitORCommutative()
6939 return N0; in visitORCommutative()
6942 if (N0.getOpcode() == ISD::FSHR && N1.getOpcode() == ISD::SRL && in visitORCommutative()
6943 N0.getOperand(1) == N1.getOperand(0) && in visitORCommutative()
6944 peekThroughZext(N0.getOperand(2)) == peekThroughZext(N1.getOperand(1))) in visitORCommutative()
6945 return N0; in visitORCommutative()
6951 SDValue N0 = N->getOperand(0); in visitOR() local
6956 if (N0 == N1) in visitOR()
6957 return N0; in visitOR()
6960 if (SDValue C = DAG.FoldConstantArithmetic(ISD::OR, SDLoc(N), VT, {N0, N1})) in visitOR()
6964 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitOR()
6966 return DAG.getNode(ISD::OR, SDLoc(N), VT, N1, N0); in visitOR()
6975 return N0; in visitOR()
6984 auto *SV0 = dyn_cast<ShuffleVectorSDNode>(N0); in visitOR()
6987 bool ZeroN00 = ISD::isBuildVectorAllZeros(N0.getOperand(0).getNode()); in visitOR()
6988 bool ZeroN01 = ISD::isBuildVectorAllZeros(N0.getOperand(1).getNode()); in visitOR()
7028 SDValue NewLHS = ZeroN00 ? N0.getOperand(1) : N0.getOperand(0); in visitOR()
7043 return N0; in visitOR()
7054 if (N1C && DAG.MaskedValueIsZero(N0, ~N1C->getAPIntValue())) in visitOR()
7057 if (SDValue Combined = visitORLike(N0, N1, N)) in visitOR()
7060 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitOR()
7064 if (SDValue BSwap = MatchBSwapHWord(N, N0, N1)) in visitOR()
7066 if (SDValue BSwap = MatchBSwapHWordLow(N, N0, N1)) in visitOR()
7070 if (SDValue ROR = reassociateOps(ISD::OR, SDLoc(N), N0, N1, N->getFlags())) in visitOR()
7078 if (N0.getOpcode() == ISD::AND && N0->hasOneUse() && in visitOR()
7079 ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchIntersect, true)) { in visitOR()
7081 {N1, N0.getOperand(1)})) { in visitOR()
7082 SDValue IOR = DAG.getNode(ISD::OR, SDLoc(N0), VT, N0.getOperand(0), N1); in visitOR()
7088 if (SDValue Combined = visitORCommutative(DAG, N0, N1, N)) in visitOR()
7090 if (SDValue Combined = visitORCommutative(DAG, N1, N0, N)) in visitOR()
7094 if (N0.getOpcode() == N1.getOpcode()) in visitOR()
7099 if (SDValue Rot = MatchRotate(N0, N1, SDLoc(N))) in visitOR()
7111 DAG.haveNoCommonBitsSet(N0, N1)) in visitOR()
7429 SDValue DAGCombiner::MatchFunnelPosNeg(SDValue N0, SDValue N1, SDValue Pos, in MatchFunnelPosNeg() argument
7434 EVT VT = N0.getValueType(); in MatchFunnelPosNeg()
7444 if (matchRotateSub(InnerPos, InnerNeg, EltBits, DAG, /*IsRotate*/ N0 == N1)) { in MatchFunnelPosNeg()
7445 return DAG.getNode(HasPos ? PosOpcode : NegOpcode, DL, VT, N0, N1, in MatchFunnelPosNeg()
7466 return DAG.getNode(ISD::FSHL, DL, VT, N0, N1.getOperand(0), Pos); in MatchFunnelPosNeg()
7471 if (IsBinOpImm(N0, ISD::SHL, 1) && in MatchFunnelPosNeg()
7475 return DAG.getNode(ISD::FSHR, DL, VT, N0.getOperand(0), N1, Neg); in MatchFunnelPosNeg()
7481 if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N0.getOperand(1) && in MatchFunnelPosNeg()
7485 return DAG.getNode(ISD::FSHR, DL, VT, N0.getOperand(0), N1, Neg); in MatchFunnelPosNeg()
8352 SDValue N0 = N->getOperand(0); in unfoldMaskedMerge() local
8354 if (!matchAndXor(N0, 0, N1) && !matchAndXor(N0, 1, N1) && in unfoldMaskedMerge()
8355 !matchAndXor(N1, 0, N0) && !matchAndXor(N1, 1, N0)) in unfoldMaskedMerge()
8403 SDValue N0 = N->getOperand(0); in visitXOR() local
8405 EVT VT = N0.getValueType(); in visitXOR()
8409 if (N0.isUndef() && N1.isUndef()) in visitXOR()
8413 if (N0.isUndef()) in visitXOR()
8414 return N0; in visitXOR()
8419 if (SDValue C = DAG.FoldConstantArithmetic(ISD::XOR, DL, VT, {N0, N1})) in visitXOR()
8423 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitXOR()
8425 return DAG.getNode(ISD::XOR, DL, VT, N1, N0); in visitXOR()
8434 return N0; in visitXOR()
8439 return N0; in visitXOR()
8445 if (SDValue RXOR = reassociateOps(ISD::XOR, DL, N0, N1, N->getFlags())) in visitXOR()
8456 unsigned N0Opcode = N0.getOpcode(); in visitXOR()
8459 isSetCCEquivalent(N0, LHS, RHS, CC, /*MatchStrict*/ true)) { in visitXOR()
8468 return DAG.getSetCC(SDLoc(N0), VT, LHS, RHS, NotCC); in visitXOR()
8470 return DAG.getSelectCC(SDLoc(N0), LHS, RHS, N0.getOperand(2), in visitXOR()
8471 N0.getOperand(3), NotCC); in visitXOR()
8474 if (N0.hasOneUse()) { in visitXOR()
8478 DAG.getSetCC(SDLoc(N0), VT, LHS, RHS, NotCC, in visitXOR()
8479 N0.getOperand(0), N0Opcode == ISD::STRICT_FSETCCS); in visitXOR()
8481 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), SetCC.getValue(1)); in visitXOR()
8482 recursivelyDeleteUnusedNodes(N0.getNode()); in visitXOR()
8492 if (isOneConstant(N1) && N0Opcode == ISD::ZERO_EXTEND && N0.hasOneUse() && in visitXOR()
8493 isSetCCEquivalent(N0.getOperand(0), LHS, RHS, CC)){ in visitXOR()
8494 SDValue V = N0.getOperand(0); in visitXOR()
8495 SDLoc DL0(N0); in visitXOR()
8503 if (isOneConstant(N1) && VT == MVT::i1 && N0.hasOneUse() && in visitXOR()
8505 SDValue N00 = N0.getOperand(0), N01 = N0.getOperand(1); in visitXOR()
8515 if (isAllOnesConstant(N1) && N0.hasOneUse() && in visitXOR()
8517 SDValue N00 = N0.getOperand(0), N01 = N0.getOperand(1); in visitXOR()
8530 if (isAllOnesConstant(N1) && N0.getOpcode() == ISD::SUB && in visitXOR()
8531 isNullConstant(N0.getOperand(0))) { in visitXOR()
8532 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1), in visitXOR()
8537 if (isAllOnesConstant(N1) && N0.getOpcode() == ISD::ADD && in visitXOR()
8538 isAllOnesOrAllOnesSplat(N0.getOperand(1))) { in visitXOR()
8540 N0.getOperand(0)); in visitXOR()
8544 if (N0Opcode == ISD::AND && N0.hasOneUse() && N0->getOperand(1) == N1) { in visitXOR()
8545 SDValue X = N0.getOperand(0); in visitXOR()
8553 SDValue A = N0Opcode == ISD::ADD ? N0 : N1; in visitXOR()
8554 SDValue S = N0Opcode == ISD::SRA ? N0 : N1; in visitXOR()
8566 if (N0 == N1) in visitXOR()
8588 isAllOnesConstant(N1) && isOneConstant(N0.getOperand(0))) { in visitXOR()
8590 N0.getOperand(1)); in visitXOR()
8598 if (SDValue R = foldLogicOfShifts(N, N0, N1, DAG)) in visitXOR()
8600 if (SDValue R = foldLogicOfShifts(N, N1, N0, DAG)) in visitXOR()
8611 if (SDValue Combined = combineCarryDiamond(DAG, TLI, N0, N1, N)) in visitXOR()
8785 SDValue N0 = N->getOperand(0); in visitRotate() local
8792 return N0; in visitRotate()
8798 return N0; in visitRotate()
8812 return DAG.getNode(N->getOpcode(), dl, VT, N0, Amt); in visitRotate()
8819 return DAG.getNode(ISD::BSWAP, dl, VT, N0); in visitRotate()
8829 return DAG.getNode(N->getOpcode(), dl, VT, N0, NewOp1); in visitRotate()
8832 unsigned NextOp = N0.getOpcode(); in visitRotate()
8838 SDNode *C2 = DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1)); in visitRotate()
8847 {N0.getOperand(1), BitsizeC}); in visitRotate()
8853 return DAG.getNode(N->getOpcode(), dl, VT, N0->getOperand(0), in visitRotate()
8862 SDValue N0 = N->getOperand(0); in visitSHL() local
8864 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSHL()
8867 EVT VT = N0.getValueType(); in visitSHL()
8872 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N), VT, {N0, N1})) in visitSHL()
8884 if (N0.getOpcode() == ISD::AND) { in visitSHL()
8885 SDValue N00 = N0->getOperand(0); in visitSHL()
8886 SDValue N01 = N0->getOperand(1); in visitSHL()
8911 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, NewOp1); in visitSHL()
8918 if (N0.getOpcode() == ISD::SHL) { in visitSHL()
8926 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange)) in visitSHL()
8936 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) { in visitSHL()
8938 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1)); in visitSHL()
8939 return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Sum); in visitSHL()
8948 if ((N0.getOpcode() == ISD::ZERO_EXTEND || in visitSHL()
8949 N0.getOpcode() == ISD::ANY_EXTEND || in visitSHL()
8950 N0.getOpcode() == ISD::SIGN_EXTEND) && in visitSHL()
8951 N0.getOperand(0).getOpcode() == ISD::SHL) { in visitSHL()
8952 SDValue N0Op0 = N0.getOperand(0); in visitSHL()
8982 SDValue Ext = DAG.getNode(N0.getOpcode(), DL, VT, N0Op0.getOperand(0)); in visitSHL()
8992 if (N0.getOpcode() == ISD::ZERO_EXTEND && N0.hasOneUse() && in visitSHL()
8993 N0.getOperand(0).getOpcode() == ISD::SRL) { in visitSHL()
8994 SDValue N0Op0 = N0.getOperand(0); in visitSHL()
9011 return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N0), VT, NewSHL); in visitSHL()
9015 if (N0.getOpcode() == ISD::SRL || N0.getOpcode() == ISD::SRA) { in visitSHL()
9028 if (N0->getFlags().hasExact()) { in visitSHL()
9029 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSHL()
9032 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSHL()
9034 return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Diff); in visitSHL()
9036 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSHL()
9039 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSHL()
9041 return DAG.getNode(N0.getOpcode(), DL, VT, N0.getOperand(0), Diff); in visitSHL()
9049 if (N0.getOpcode() == ISD::SRL && in visitSHL()
9050 (N0.getOperand(1) == N1 || N0.hasOneUse()) && in visitSHL()
9052 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSHL()
9055 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSHL()
9060 SDValue Shift = DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), Diff); in visitSHL()
9063 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSHL()
9066 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSHL()
9070 SDValue Shift = DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Diff); in visitSHL()
9077 if (N0.getOpcode() == ISD::SRA && N1 == N0.getOperand(1) && in visitSHL()
9082 return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), HiBitsMask); in visitSHL()
9089 if ((N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::OR) && in visitSHL()
9090 N0->hasOneUse() && in visitSHL()
9092 isConstantOrConstantVector(N0.getOperand(1), /* No Opaques */ true) && in visitSHL()
9094 SDValue Shl0 = DAG.getNode(ISD::SHL, SDLoc(N0), VT, N0.getOperand(0), N1); in visitSHL()
9095 SDValue Shl1 = DAG.getNode(ISD::SHL, SDLoc(N1), VT, N0.getOperand(1), N1); in visitSHL()
9098 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, Shl0, Shl1); in visitSHL()
9102 if (N0.getOpcode() == ISD::MUL && N0->hasOneUse()) { in visitSHL()
9103 SDValue N01 = N0.getOperand(1); in visitSHL()
9106 return DAG.getNode(ISD::MUL, SDLoc(N), VT, N0.getOperand(0), Shl); in visitSHL()
9115 if (N0.getOpcode() == ISD::VSCALE) in visitSHL()
9117 const APInt &C0 = N0.getConstantOperandAPInt(0); in visitSHL()
9124 if (N0.getOpcode() == ISD::STEP_VECTOR) in visitSHL()
9126 const APInt &C0 = N0.getConstantOperandAPInt(0); in visitSHL()
9222 SDValue N0 = N->getOperand(0); in visitSRA() local
9224 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSRA()
9227 EVT VT = N0.getValueType(); in visitSRA()
9231 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SRA, SDLoc(N), VT, {N0, N1})) in visitSRA()
9237 if (DAG.ComputeNumSignBits(N0) == OpSizeInBits) in visitSRA()
9238 return N0; in visitSRA()
9251 if (N1C && N0.getOpcode() == ISD::SHL && N1 == N0.getOperand(1)) { in visitSRA()
9261 N0.getOperand(0), DAG.getValueType(ExtVT)); in visitSRA()
9264 if (DAG.ComputeNumSignBits(N0.getOperand(0)) > N1C->getZExtValue()) in visitSRA()
9265 return N0.getOperand(0); in visitSRA()
9270 if (N0.getOpcode() == ISD::SRA) { in visitSRA()
9286 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), SumOfShifts)) { in visitSRA()
9297 return DAG.getNode(ISD::SRA, DL, VT, N0.getOperand(0), ShiftValue); in visitSRA()
9306 if (N0.getOpcode() == ISD::SHL && N1C) { in visitSRA()
9308 const ConstantSDNode *N01C = isConstOrConstSplat(N0.getOperand(1)); in visitSRA()
9330 getShiftAmountTy(N0.getOperand(0).getValueType())); in visitSRA()
9332 N0.getOperand(0), Amt); in visitSRA()
9346 if ((N0.getOpcode() == ISD::ADD || N0.getOpcode() == ISD::SUB) && N1C && in visitSRA()
9347 N0.hasOneUse()) { in visitSRA()
9348 bool IsAdd = N0.getOpcode() == ISD::ADD; in visitSRA()
9349 SDValue Shl = N0.getOperand(IsAdd ? 0 : 1); in visitSRA()
9354 isConstOrConstSplat(N0.getOperand(IsAdd ? 1 : 0))) { in visitSRA()
9390 return DAG.getNode(ISD::SRA, SDLoc(N), VT, N0, NewOp1); in visitSRA()
9397 if (N0.getOpcode() == ISD::TRUNCATE && in visitSRA()
9398 (N0.getOperand(0).getOpcode() == ISD::SRL || in visitSRA()
9399 N0.getOperand(0).getOpcode() == ISD::SRA) && in visitSRA()
9400 N0.getOperand(0).hasOneUse() && in visitSRA()
9401 N0.getOperand(0).getOperand(1).hasOneUse() && N1C) { in visitSRA()
9402 SDValue N0Op0 = N0.getOperand(0); in visitSRA()
9424 if (DAG.SignBitIsZero(N0)) in visitSRA()
9425 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, N1); in visitSRA()
9444 SDValue N0 = N->getOperand(0); in visitSRL() local
9446 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSRL()
9449 EVT VT = N0.getValueType(); in visitSRL()
9454 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SRL, SDLoc(N), VT, {N0, N1})) in visitSRL()
9472 if (N0.getOpcode() == ISD::SRL) { in visitSRL()
9480 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchOutOfRange)) in visitSRL()
9490 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchInRange)) { in visitSRL()
9492 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1)); in visitSRL()
9493 return DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), Sum); in visitSRL()
9497 if (N1C && N0.getOpcode() == ISD::TRUNCATE && in visitSRL()
9498 N0.getOperand(0).getOpcode() == ISD::SRL) { in visitSRL()
9499 SDValue InnerShift = N0.getOperand(0); in visitSRL()
9520 if (N0.hasOneUse() && InnerShift.hasOneUse() && in visitSRL()
9537 if (N0.getOpcode() == ISD::SHL && in visitSRL()
9538 (N0.getOperand(1) == N1 || N0->hasOneUse()) && in visitSRL()
9547 if (ISD::matchBinaryPredicate(N1, N0.getOperand(1), MatchShiftAmount, in visitSRL()
9551 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSRL()
9556 SDValue Shift = DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Diff); in visitSRL()
9559 if (ISD::matchBinaryPredicate(N0.getOperand(1), N1, MatchShiftAmount, in visitSRL()
9563 SDValue N01 = DAG.getZExtOrTrunc(N0.getOperand(1), DL, ShiftVT); in visitSRL()
9567 SDValue Shift = DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), Diff); in visitSRL()
9574 if (N1C && N0.getOpcode() == ISD::ANY_EXTEND) { in visitSRL()
9576 EVT SmallVT = N0.getOperand(0).getValueType(); in visitSRL()
9583 SDLoc DL0(N0); in visitSRL()
9585 N0.getOperand(0), in visitSRL()
9600 if (N0.getOpcode() == ISD::SRA) in visitSRL()
9601 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0.getOperand(0), N1); in visitSRL()
9605 if (N1C && N0.getOpcode() == ISD::CTLZ && in visitSRL()
9607 KnownBits Known = DAG.computeKnownBits(N0.getOperand(0)); in visitSRL()
9611 if (Known.One.getBoolValue()) return DAG.getConstant(0, SDLoc(N0), VT); in visitSRL()
9616 if (UnknownBits == 0) return DAG.getConstant(1, SDLoc(N0), VT); in visitSRL()
9625 SDValue Op = N0.getOperand(0); in visitSRL()
9628 SDLoc DL(N0); in visitSRL()
9645 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, NewOp1); in visitSRL()
9700 SDValue N0 = N->getOperand(0); in visitFunnelShift() local
9711 return IsFSHL ? N0 : N1; in visitFunnelShift()
9724 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N0, N1, in visitFunnelShift()
9730 return IsFSHL ? N0 : N1; in visitFunnelShift()
9736 if (IsUndefOrZero(N0)) in visitFunnelShift()
9741 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, in visitFunnelShift()
9752 auto *LHS = dyn_cast<LoadSDNode>(N0); in visitFunnelShift()
9791 if (IsUndefOrZero(N0) && !IsFSHL && DAG.MaskedValueIsZero(N2, ~ModuloBits)) in visitFunnelShift()
9794 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, N2); in visitFunnelShift()
9802 if (N0 == N1 && hasOperation(RotOpc, VT)) in visitFunnelShift()
9803 return DAG.getNode(RotOpc, SDLoc(N), VT, N0, N2); in visitFunnelShift()
9813 SDValue N0 = N->getOperand(0); in visitSHLSAT() local
9815 if (SDValue V = DAG.simplifyShift(N0, N1)) in visitSHLSAT()
9818 EVT VT = N0.getValueType(); in visitSHLSAT()
9822 DAG.FoldConstantArithmetic(N->getOpcode(), SDLoc(N), VT, {N0, N1})) in visitSHLSAT()
9830 N1C->getAPIntValue().ult(DAG.ComputeNumSignBits(N0))) in visitSHLSAT()
9831 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, N1); in visitSHLSAT()
9836 DAG.computeKnownBits(N0).countMinLeadingZeros())) in visitSHLSAT()
9837 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, N1); in visitSHLSAT()
9887 SDValue N0 = N->getOperand(0); in visitABS() local
9891 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitABS()
9892 return DAG.getNode(ISD::ABS, SDLoc(N), VT, N0); in visitABS()
9894 if (N0.getOpcode() == ISD::ABS) in visitABS()
9895 return N0; in visitABS()
9897 if (DAG.SignBitIsZero(N0)) in visitABS()
9898 return N0; in visitABS()
9907 SDValue N0 = N->getOperand(0); in visitBSWAP() local
9912 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitBSWAP()
9913 return DAG.getNode(ISD::BSWAP, DL, VT, N0); in visitBSWAP()
9915 if (N0.getOpcode() == ISD::BSWAP) in visitBSWAP()
9916 return N0.getOperand(0); in visitBSWAP()
9922 if (N0.getOpcode() == ISD::BITREVERSE && N0.hasOneUse()) { in visitBSWAP()
9923 SDValue BSwap = DAG.getNode(ISD::BSWAP, DL, VT, N0.getOperand(0)); in visitBSWAP()
9930 if (BW >= 32 && N0.getOpcode() == ISD::SHL && N0.hasOneUse()) { in visitBSWAP()
9931 auto *ShAmt = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in visitBSWAP()
9938 SDValue Res = N0.getOperand(0); in visitBSWAP()
9952 if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL) && in visitBSWAP()
9953 N0.hasOneUse()) { in visitBSWAP()
9954 auto *ShAmt = dyn_cast<ConstantSDNode>(N0.getOperand(1)); in visitBSWAP()
9957 SDValue NewSwap = DAG.getNode(ISD::BSWAP, DL, VT, N0.getOperand(0)); in visitBSWAP()
9958 unsigned InverseShift = N0.getOpcode() == ISD::SHL ? ISD::SRL : ISD::SHL; in visitBSWAP()
9959 return DAG.getNode(InverseShift, DL, VT, NewSwap, N0.getOperand(1)); in visitBSWAP()
9967 SDValue N0 = N->getOperand(0); in visitBITREVERSE() local
9971 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitBITREVERSE()
9972 return DAG.getNode(ISD::BITREVERSE, SDLoc(N), VT, N0); in visitBITREVERSE()
9974 if (N0.getOpcode() == ISD::BITREVERSE) in visitBITREVERSE()
9975 return N0.getOperand(0); in visitBITREVERSE()
9980 SDValue N0 = N->getOperand(0); in visitCTLZ() local
9984 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitCTLZ()
9985 return DAG.getNode(ISD::CTLZ, SDLoc(N), VT, N0); in visitCTLZ()
9989 if (DAG.isKnownNeverZero(N0)) in visitCTLZ()
9990 return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, SDLoc(N), VT, N0); in visitCTLZ()
9997 SDValue N0 = N->getOperand(0); in visitCTLZ_ZERO_UNDEF() local
10001 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitCTLZ_ZERO_UNDEF()
10002 return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, SDLoc(N), VT, N0); in visitCTLZ_ZERO_UNDEF()
10007 SDValue N0 = N->getOperand(0); in visitCTTZ() local
10011 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitCTTZ()
10012 return DAG.getNode(ISD::CTTZ, SDLoc(N), VT, N0); in visitCTTZ()
10016 if (DAG.isKnownNeverZero(N0)) in visitCTTZ()
10017 return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, SDLoc(N), VT, N0); in visitCTTZ()
10024 SDValue N0 = N->getOperand(0); in visitCTTZ_ZERO_UNDEF() local
10028 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitCTTZ_ZERO_UNDEF()
10029 return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, SDLoc(N), VT, N0); in visitCTTZ_ZERO_UNDEF()
10034 SDValue N0 = N->getOperand(0); in visitCTPOP() local
10038 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitCTPOP()
10039 return DAG.getNode(ISD::CTPOP, SDLoc(N), VT, N0); in visitCTPOP()
10285 SDValue N0 = N->getOperand(0); in foldVSelectToSignBitSplatMask() local
10289 if (N0.getOpcode() != ISD::SETCC || !N0.hasOneUse()) in foldVSelectToSignBitSplatMask()
10292 SDValue Cond0 = N0.getOperand(0); in foldVSelectToSignBitSplatMask()
10293 SDValue Cond1 = N0.getOperand(1); in foldVSelectToSignBitSplatMask()
10294 ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get(); in foldVSelectToSignBitSplatMask()
10343 SDValue N0 = N->getOperand(0); in visitSELECT() local
10347 EVT VT0 = N0.getValueType(); in visitSELECT()
10351 if (SDValue V = DAG.simplifySelect(N0, N1, N2)) in visitSELECT()
10377 if (N0->getOpcode() == ISD::AND && N0->hasOneUse()) { in visitSELECT()
10378 SDValue Cond0 = N0->getOperand(0); in visitSELECT()
10379 SDValue Cond1 = N0->getOperand(1); in visitSELECT()
10390 if (N0->getOpcode() == ISD::OR && N0->hasOneUse()) { in visitSELECT()
10391 SDValue Cond0 = N0->getOperand(0); in visitSELECT()
10392 SDValue Cond1 = N0->getOperand(1); in visitSELECT()
10408 if (N1_2 == N2 && N0.getValueType() == N1_0.getValueType()) { in visitSELECT()
10411 SDValue And = DAG.getNode(ISD::AND, DL, N0.getValueType(), N0, N1_0); in visitSELECT()
10416 if (SDValue Combined = visitANDLike(N0, N1_0, N)) { in visitSELECT()
10427 if (N2_1 == N1 && N0.getValueType() == N2_0.getValueType()) { in visitSELECT()
10430 SDValue Or = DAG.getNode(ISD::OR, DL, N0.getValueType(), N0, N2_0); in visitSELECT()
10435 if (SDValue Combined = visitORLike(N0, N2_0, N)) in visitSELECT()
10443 if (SDValue F = extractBooleanFlip(N0, DAG, TLI, false)) { in visitSELECT()
10450 if (N0.getOpcode() == ISD::SETCC) { in visitSELECT()
10451 SDValue Cond0 = N0.getOperand(0), Cond1 = N0.getOperand(1); in visitSELECT()
10452 ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get(); in visitSELECT()
10458 if (N0.hasOneUse() && isLegalToCombineMinNumMaxNum(DAG, N1, N2, TLI)) in visitSELECT()
10469 CC == ISD::SETUGT && N0.hasOneUse() && isAllOnesConstant(N1) && in visitSELECT()
10497 Flags = N0->getFlags(); in visitSELECT()
10499 N2, N0.getOperand(2)); in visitSELECT()
10504 if (SDValue NewSel = SimplifySelect(DL, N0, N1, N2)) in visitSELECT()
10843 SDValue N0 = N->getOperand(0); in visitVSELECT() local
10849 if (SDValue V = DAG.simplifySelect(N0, N1, N2)) in visitVSELECT()
10856 if (SDValue F = extractBooleanFlip(N0, DAG, TLI, false)) in visitVSELECT()
10864 if (N0.getOpcode() == ISD::SETCC) { in visitVSELECT()
10865 SDValue LHS = N0.getOperand(0), RHS = N0.getOperand(1); in visitVSELECT()
10866 ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get(); in visitVSELECT()
10897 if (N0.hasOneUse() && isLegalToCombineMinNumMaxNum(DAG, LHS, RHS, TLI)) { in visitVSELECT()
11071 if (ISD::isConstantSplatVectorAllOnes(N0.getNode())) in visitVSELECT()
11074 if (ISD::isConstantSplatVectorAllZeros(N0.getNode())) in visitVSELECT()
11082 ISD::isBuildVectorOfConstantSDNodes(N0.getNode())) { in visitVSELECT()
11101 SDValue N0 = N->getOperand(0); in visitSELECT_CC() local
11113 if (SDValue SCC = SimplifySetCC(getSetCCResultType(N0.getValueType()), N0, N1, in visitSELECT_CC()
11142 return SimplifySelectCC(SDLoc(N), N0, N1, N2, N3, CC); in visitSELECT_CC()
11170 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in visitSETCC() local
11171 ConstantSDNode *N0C = dyn_cast<ConstantSDNode>(N0); in visitSETCC()
11188 if (N0->getOpcode() == ISD::FREEZE && N0.hasOneUse() && N1C) { in visitSETCC()
11190 N0 = N0->getOperand(0); in visitSETCC()
11203 return DAG.getFreeze(DAG.getSetCC(SDLoc(N), VT, N0, N1, Cond)); in visitSETCC()
11278 SDValue N0 = N->getOperand(0); in tryToFoldExtendSelectLoad() local
11286 if (!(N0->getOpcode() == ISD::SELECT || N0->getOpcode() == ISD::VSELECT) || in tryToFoldExtendSelectLoad()
11287 !N0.hasOneUse()) in tryToFoldExtendSelectLoad()
11290 SDValue Op1 = N0->getOperand(1); in tryToFoldExtendSelectLoad()
11291 SDValue Op2 = N0->getOperand(2); in tryToFoldExtendSelectLoad()
11309 return DAG.getSelect(DL, VT, N0->getOperand(0), Ext1, Ext2); in tryToFoldExtendSelectLoad()
11321 SDValue N0 = N->getOperand(0); in tryToFoldExtendOfConstant() local
11333 if (isa<ConstantSDNode>(N0)) in tryToFoldExtendOfConstant()
11334 return DAG.getNode(Opcode, DL, VT, N0); in tryToFoldExtendOfConstant()
11339 if (N0->getOpcode() == ISD::SELECT) { in tryToFoldExtendOfConstant()
11340 SDValue Op1 = N0->getOperand(1); in tryToFoldExtendOfConstant()
11341 SDValue Op2 = N0->getOperand(2); in tryToFoldExtendOfConstant()
11343 (Opcode != ISD::ZERO_EXTEND || !TLI.isZExtFree(N0.getValueType(), VT))) { in tryToFoldExtendOfConstant()
11356 return DAG.getSelect(DL, VT, N0->getOperand(0), in tryToFoldExtendOfConstant()
11367 ISD::isBuildVectorOfConstantSDNodes(N0.getNode()))) in tryToFoldExtendOfConstant()
11372 unsigned EVTBits = N0->getValueType(0).getScalarSizeInBits(); in tryToFoldExtendOfConstant()
11382 SDValue Op = N0.getOperand(i); in tryToFoldExtendOfConstant()
11405 static bool ExtendUsesToFormExtLoad(EVT VT, SDNode *N, SDValue N0, in ExtendUsesToFormExtLoad() argument
11410 bool isTruncFree = TLI.isTruncateFree(VT, N0.getValueType()); in ExtendUsesToFormExtLoad()
11411 for (SDNode::use_iterator UI = N0->use_begin(), UE = N0->use_end(); UI != UE; in ExtendUsesToFormExtLoad()
11416 if (UI.getUse().getResNo() != N0.getResNo()) in ExtendUsesToFormExtLoad()
11427 if (UseOp == N0) in ExtendUsesToFormExtLoad()
11487 SDValue N0 = N->getOperand(0); in CombineExtLoad() local
11489 EVT SrcVT = N0.getValueType(); in CombineExtLoad()
11512 if (N0->getOpcode() != ISD::LOAD) in CombineExtLoad()
11515 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in CombineExtLoad()
11518 !N0.hasOneUse() || !LN0->isSimple() || in CombineExtLoad()
11524 if (!ExtendUsesToFormExtLoad(DstVT, N, N0, N->getOpcode(), SetCCs, TLI)) in CombineExtLoad()
11578 DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), NewValue); in CombineExtLoad()
11579 ExtendSetCCUses(SetCCs, N0, NewValue, (ISD::NodeType)N->getOpcode()); in CombineExtLoad()
11580 CombineTo(N0.getNode(), Trunc, NewChain); in CombineExtLoad()
11594 SDValue N0 = N->getOperand(0); in CombineZExtLogicopShiftLoad() local
11595 if (!(N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR || in CombineZExtLogicopShiftLoad()
11596 N0.getOpcode() == ISD::XOR) || in CombineZExtLogicopShiftLoad()
11597 N0.getOperand(1).getOpcode() != ISD::Constant || in CombineZExtLogicopShiftLoad()
11598 (LegalOperations && !TLI.isOperationLegal(N0.getOpcode(), VT))) in CombineZExtLogicopShiftLoad()
11602 SDValue N1 = N0->getOperand(0); in CombineZExtLogicopShiftLoad()
11620 if (N1.getOpcode() == ISD::SHL && N0.getOpcode() != ISD::AND) in CombineZExtLogicopShiftLoad()
11623 if (!N0.hasOneUse() || !N1.hasOneUse()) in CombineZExtLogicopShiftLoad()
11640 APInt Mask = N0.getConstantOperandAPInt(1).zext(VT.getSizeInBits()); in CombineZExtLogicopShiftLoad()
11641 SDLoc DL0(N0); in CombineZExtLogicopShiftLoad()
11642 SDValue And = DAG.getNode(N0.getOpcode(), DL0, VT, Shift, in CombineZExtLogicopShiftLoad()
11656 recursivelyDeleteUnusedNodes(N0.getNode()); in CombineZExtLogicopShiftLoad()
11711 SDValue N0, ISD::LoadExtType ExtLoadType) { in tryToFoldExtOfExtload() argument
11712 SDNode *N0Node = N0.getNode(); in tryToFoldExtOfExtload()
11716 !ISD::isUNINDEXEDLoad(N0Node) || !N0.hasOneUse()) in tryToFoldExtOfExtload()
11719 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in tryToFoldExtOfExtload()
11741 bool LegalOperations, SDNode *N, SDValue N0, in tryToFoldExtOfLoad() argument
11747 if (!ISD::isNON_EXTLoad(N0.getNode()) || in tryToFoldExtOfLoad()
11748 !ISD::isUNINDEXEDLoad(N0.getNode()) || in tryToFoldExtOfLoad()
11750 !cast<LoadSDNode>(N0)->isSimple()) && in tryToFoldExtOfLoad()
11751 !TLI.isLoadExtLegal(ExtLoadType, VT, N0.getValueType()))) in tryToFoldExtOfLoad()
11756 if (!N0.hasOneUse()) in tryToFoldExtOfLoad()
11757 DoXform = ExtendUsesToFormExtLoad(VT, N, N0, ExtOpc, SetCCs, TLI); in tryToFoldExtOfLoad()
11763 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in tryToFoldExtOfLoad()
11765 LN0->getBasePtr(), N0.getValueType(), in tryToFoldExtOfLoad()
11767 Combiner.ExtendSetCCUses(SetCCs, N0, ExtLoad, ExtOpc); in tryToFoldExtOfLoad()
11776 DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), ExtLoad); in tryToFoldExtOfLoad()
11784 SDNode *N, SDValue N0, in tryToFoldExtOfMaskedLoad() argument
11787 if (!N0.hasOneUse()) in tryToFoldExtOfMaskedLoad()
11790 MaskedLoadSDNode *Ld = dyn_cast<MaskedLoadSDNode>(N0); in tryToFoldExtOfMaskedLoad()
11847 SDValue N0 = N->getOperand(0); in foldSextSetcc() local
11848 if (N0.getOpcode() != ISD::SETCC) in foldSextSetcc()
11851 SDValue N00 = N0.getOperand(0); in foldSextSetcc()
11852 SDValue N01 = N0.getOperand(1); in foldSextSetcc()
11853 ISD::CondCode CC = cast<CondCodeSDNode>(N0.getOperand(2))->get(); in foldSextSetcc()
11859 SelectionDAG::FlagInserter FlagsInserter(DAG, N0->getFlags()); in foldSextSetcc()
11870 if (SVT != N0.getValueType()) { in foldSextSetcc()
11890 if (N0.hasOneUse() && TLI.isOperationLegalOrCustom(ISD::SETCC, VT) && in foldSextSetcc()
11917 if (UI.getUse().getResNo() != 0 || User == N0.getNode()) in foldSextSetcc()
11939 unsigned SetCCWidth = N0.getScalarValueSizeInBits(); in foldSextSetcc()
11972 SDValue N0 = N->getOperand(0); in visitSIGN_EXTEND() local
11977 if (N0.isUndef()) in visitSIGN_EXTEND()
11985 if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND) in visitSIGN_EXTEND()
11986 return DAG.getNode(ISD::SIGN_EXTEND, DL, VT, N0.getOperand(0)); in visitSIGN_EXTEND()
11988 if (N0.getOpcode() == ISD::TRUNCATE) { in visitSIGN_EXTEND()
11991 if (SDValue NarrowLoad = reduceLoadWidth(N0.getNode())) { in visitSIGN_EXTEND()
11992 SDNode *oye = N0.getOperand(0).getNode(); in visitSIGN_EXTEND()
11993 if (NarrowLoad.getNode() != N0.getNode()) { in visitSIGN_EXTEND()
11994 CombineTo(N0.getNode(), NarrowLoad); in visitSIGN_EXTEND()
12003 SDValue Op = N0.getOperand(0); in visitSIGN_EXTEND()
12005 unsigned MidBits = N0.getScalarValueSizeInBits(); in visitSIGN_EXTEND()
12028 N0.getValueType())) { in visitSIGN_EXTEND()
12030 Op = DAG.getNode(ISD::ANY_EXTEND, SDLoc(N0), VT, Op); in visitSIGN_EXTEND()
12032 Op = DAG.getNode(ISD::TRUNCATE, SDLoc(N0), VT, Op); in visitSIGN_EXTEND()
12034 DAG.getValueType(N0.getValueType())); in visitSIGN_EXTEND()
12040 tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0, in visitSIGN_EXTEND()
12045 tryToFoldExtOfMaskedLoad(DAG, TLI, VT, N, N0, ISD::SEXTLOAD, in visitSIGN_EXTEND()
12056 DAG, *this, TLI, VT, LegalOperations, N, N0, ISD::SEXTLOAD)) in visitSIGN_EXTEND()
12061 if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR || in visitSIGN_EXTEND()
12062 N0.getOpcode() == ISD::XOR) && in visitSIGN_EXTEND()
12063 isa<LoadSDNode>(N0.getOperand(0)) && in visitSIGN_EXTEND()
12064 N0.getOperand(1).getOpcode() == ISD::Constant && in visitSIGN_EXTEND()
12065 (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) { in visitSIGN_EXTEND()
12066 LoadSDNode *LN00 = cast<LoadSDNode>(N0.getOperand(0)); in visitSIGN_EXTEND()
12071 bool DoXform = ExtendUsesToFormExtLoad(VT, N0.getNode(), N0.getOperand(0), in visitSIGN_EXTEND()
12078 APInt Mask = N0.getConstantOperandAPInt(1).sext(VT.getSizeInBits()); in visitSIGN_EXTEND()
12079 SDValue And = DAG.getNode(N0.getOpcode(), DL, VT, in visitSIGN_EXTEND()
12081 ExtendSetCCUses(SetCCs, N0.getOperand(0), ExtLoad, ISD::SIGN_EXTEND); in visitSIGN_EXTEND()
12082 bool NoReplaceTruncAnd = !N0.hasOneUse(); in visitSIGN_EXTEND()
12088 DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And); in visitSIGN_EXTEND()
12089 CombineTo(N0.getNode(), TruncAnd); in visitSIGN_EXTEND()
12111 DAG.SignBitIsZero(N0)) in visitSIGN_EXTEND()
12112 return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0); in visitSIGN_EXTEND()
12119 if (N0.getOpcode() == ISD::SUB && N0.hasOneUse() && in visitSIGN_EXTEND()
12120 isNullOrNullSplat(N0.getOperand(0)) && in visitSIGN_EXTEND()
12121 N0.getOperand(1).getOpcode() == ISD::ZERO_EXTEND && in visitSIGN_EXTEND()
12123 SDValue Zext = DAG.getZExtOrTrunc(N0.getOperand(1).getOperand(0), DL, VT); in visitSIGN_EXTEND()
12128 if (N0.getOpcode() == ISD::ADD && N0.hasOneUse() && in visitSIGN_EXTEND()
12129 isAllOnesOrAllOnesSplat(N0.getOperand(1)) && in visitSIGN_EXTEND()
12130 N0.getOperand(0).getOpcode() == ISD::ZERO_EXTEND && in visitSIGN_EXTEND()
12132 SDValue Zext = DAG.getZExtOrTrunc(N0.getOperand(0).getOperand(0), DL, VT); in visitSIGN_EXTEND()
12138 if (N0.getValueType() == MVT::i1 && isBitwiseNot(N0) && N0.hasOneUse() && in visitSIGN_EXTEND()
12142 if (SDValue NewXor = visitXOR(N0.getNode())) { in visitSIGN_EXTEND()
12145 if (NewXor.getNode() == N0.getNode()) { in visitSIGN_EXTEND()
12155 SDValue Zext = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)); in visitSIGN_EXTEND()
12222 SDValue N0 = N->getOperand(0); in visitZERO_EXTEND() local
12226 if (N0.isUndef()) in visitZERO_EXTEND()
12234 if (N0.getOpcode() == ISD::ZERO_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND) in visitZERO_EXTEND()
12236 N0.getOperand(0)); in visitZERO_EXTEND()
12243 if (isTruncateOf(DAG, N0, Op, Known)) { in visitZERO_EXTEND()
12245 (Op.getScalarValueSizeInBits() == N0.getScalarValueSizeInBits()) ? in visitZERO_EXTEND()
12248 N0.getScalarValueSizeInBits(), in visitZERO_EXTEND()
12256 if (N0.getOpcode() == ISD::TRUNCATE) { in visitZERO_EXTEND()
12259 if (SDValue NarrowLoad = reduceLoadWidth(N0.getNode())) { in visitZERO_EXTEND()
12260 SDNode *oye = N0.getOperand(0).getNode(); in visitZERO_EXTEND()
12261 if (NarrowLoad.getNode() != N0.getNode()) { in visitZERO_EXTEND()
12262 CombineTo(N0.getNode(), NarrowLoad); in visitZERO_EXTEND()
12269 EVT SrcVT = N0.getOperand(0).getValueType(); in visitZERO_EXTEND()
12270 EVT MinVT = N0.getValueType(); in visitZERO_EXTEND()
12277 SDValue Op = N0.getOperand(0); in visitZERO_EXTEND()
12282 DAG.transferDbgValues(N0, ZExtOrTrunc); in visitZERO_EXTEND()
12288 SDValue Op = DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT); in visitZERO_EXTEND()
12293 DAG.transferDbgValues(N0, And); in visitZERO_EXTEND()
12300 if (N0.getOpcode() == ISD::AND && in visitZERO_EXTEND()
12301 N0.getOperand(0).getOpcode() == ISD::TRUNCATE && in visitZERO_EXTEND()
12302 N0.getOperand(1).getOpcode() == ISD::Constant && in visitZERO_EXTEND()
12303 (!TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(), in visitZERO_EXTEND()
12304 N0.getValueType()) || in visitZERO_EXTEND()
12305 !TLI.isZExtFree(N0.getValueType(), VT))) { in visitZERO_EXTEND()
12306 SDValue X = N0.getOperand(0).getOperand(0); in visitZERO_EXTEND()
12308 APInt Mask = N0.getConstantOperandAPInt(1).zext(VT.getSizeInBits()); in visitZERO_EXTEND()
12316 tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0, in visitZERO_EXTEND()
12321 tryToFoldExtOfMaskedLoad(DAG, TLI, VT, N, N0, ISD::ZEXTLOAD, in visitZERO_EXTEND()
12334 if ((N0.getOpcode() == ISD::AND || N0.getOpcode() == ISD::OR || in visitZERO_EXTEND()
12335 N0.getOpcode() == ISD::XOR) && in visitZERO_EXTEND()
12336 isa<LoadSDNode>(N0.getOperand(0)) && in visitZERO_EXTEND()
12337 N0.getOperand(1).getOpcode() == ISD::Constant && in visitZERO_EXTEND()
12338 (!LegalOperations && TLI.isOperationLegal(N0.getOpcode(), VT))) { in visitZERO_EXTEND()
12339 LoadSDNode *LN00 = cast<LoadSDNode>(N0.getOperand(0)); in visitZERO_EXTEND()
12345 if (!N0.hasOneUse()) { in visitZERO_EXTEND()
12346 if (N0.getOpcode() == ISD::AND) { in visitZERO_EXTEND()
12347 auto *AndC = cast<ConstantSDNode>(N0.getOperand(1)); in visitZERO_EXTEND()
12355 DoXform = ExtendUsesToFormExtLoad(VT, N0.getNode(), N0.getOperand(0), in visitZERO_EXTEND()
12362 APInt Mask = N0.getConstantOperandAPInt(1).zext(VT.getSizeInBits()); in visitZERO_EXTEND()
12364 SDValue And = DAG.getNode(N0.getOpcode(), DL, VT, in visitZERO_EXTEND()
12366 ExtendSetCCUses(SetCCs, N0.getOperand(0), ExtLoad, ISD::ZERO_EXTEND); in visitZERO_EXTEND()
12367 bool NoReplaceTruncAnd = !N0.hasOneUse(); in visitZERO_EXTEND()
12373 DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And); in visitZERO_EXTEND()
12374 CombineTo(N0.getNode(), TruncAnd); in visitZERO_EXTEND()
12395 DAG, *this, TLI, VT, LegalOperations, N, N0, ISD::ZEXTLOAD)) in visitZERO_EXTEND()
12401 if (N0.getOpcode() == ISD::SETCC) { in visitZERO_EXTEND()
12403 SelectionDAG::FlagInserter FlagsInserter(DAG, N0->getFlags()); in visitZERO_EXTEND()
12407 N0.getValueType().getVectorElementType() == MVT::i1) { in visitZERO_EXTEND()
12408 EVT N00VT = N0.getOperand(0).getValueType(); in visitZERO_EXTEND()
12409 if (getSetCCResultType(N00VT) == N0.getValueType()) in visitZERO_EXTEND()
12420 SDValue VSetCC = DAG.getNode(ISD::SETCC, DL, VT, N0.getOperand(0), in visitZERO_EXTEND()
12421 N0.getOperand(1), N0.getOperand(2)); in visitZERO_EXTEND()
12422 return DAG.getZeroExtendInReg(VSetCC, DL, N0.getValueType()); in visitZERO_EXTEND()
12430 DAG.getNode(ISD::SETCC, DL, MatchingVectorType, N0.getOperand(0), in visitZERO_EXTEND()
12431 N0.getOperand(1), N0.getOperand(2)); in visitZERO_EXTEND()
12433 N0.getValueType()); in visitZERO_EXTEND()
12438 EVT N0VT = N0.getValueType(); in visitZERO_EXTEND()
12439 EVT N00VT = N0.getOperand(0).getValueType(); in visitZERO_EXTEND()
12441 DL, N0.getOperand(0), N0.getOperand(1), in visitZERO_EXTEND()
12444 cast<CondCodeSDNode>(N0.getOperand(2))->get(), true)) in visitZERO_EXTEND()
12449 if ((N0.getOpcode() == ISD::SHL || N0.getOpcode() == ISD::SRL) && in visitZERO_EXTEND()
12450 isa<ConstantSDNode>(N0.getOperand(1)) && in visitZERO_EXTEND()
12451 N0.getOperand(0).getOpcode() == ISD::ZERO_EXTEND && in visitZERO_EXTEND()
12452 N0.hasOneUse()) { in visitZERO_EXTEND()
12453 SDValue ShAmt = N0.getOperand(1); in visitZERO_EXTEND()
12454 if (N0.getOpcode() == ISD::SHL) { in visitZERO_EXTEND()
12455 SDValue InnerZExt = N0.getOperand(0); in visitZERO_EXTEND()
12470 return DAG.getNode(N0.getOpcode(), DL, VT, in visitZERO_EXTEND()
12471 DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)), in visitZERO_EXTEND()
12488 SDValue N0 = N->getOperand(0); in visitANY_EXTEND() local
12492 if (N0.isUndef()) in visitANY_EXTEND()
12501 if (N0.getOpcode() == ISD::ANY_EXTEND || in visitANY_EXTEND()
12502 N0.getOpcode() == ISD::ZERO_EXTEND || in visitANY_EXTEND()
12503 N0.getOpcode() == ISD::SIGN_EXTEND) in visitANY_EXTEND()
12504 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0)); in visitANY_EXTEND()
12508 if (N0.getOpcode() == ISD::TRUNCATE) { in visitANY_EXTEND()
12509 if (SDValue NarrowLoad = reduceLoadWidth(N0.getNode())) { in visitANY_EXTEND()
12510 SDNode *oye = N0.getOperand(0).getNode(); in visitANY_EXTEND()
12511 if (NarrowLoad.getNode() != N0.getNode()) { in visitANY_EXTEND()
12512 CombineTo(N0.getNode(), NarrowLoad); in visitANY_EXTEND()
12521 if (N0.getOpcode() == ISD::TRUNCATE) in visitANY_EXTEND()
12522 return DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT); in visitANY_EXTEND()
12526 if (N0.getOpcode() == ISD::AND && in visitANY_EXTEND()
12527 N0.getOperand(0).getOpcode() == ISD::TRUNCATE && in visitANY_EXTEND()
12528 N0.getOperand(1).getOpcode() == ISD::Constant && in visitANY_EXTEND()
12529 !TLI.isTruncateFree(N0.getOperand(0).getOperand(0).getValueType(), in visitANY_EXTEND()
12530 N0.getValueType())) { in visitANY_EXTEND()
12532 SDValue X = DAG.getAnyExtOrTrunc(N0.getOperand(0).getOperand(0), DL, VT); in visitANY_EXTEND()
12533 SDValue Y = DAG.getNode(ISD::ANY_EXTEND, DL, VT, N0.getOperand(1)); in visitANY_EXTEND()
12544 tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0, in visitANY_EXTEND()
12547 } else if (ISD::isNON_EXTLoad(N0.getNode()) && in visitANY_EXTEND()
12548 ISD::isUNINDEXEDLoad(N0.getNode()) && in visitANY_EXTEND()
12549 TLI.isLoadExtLegal(ISD::EXTLOAD, VT, N0.getValueType())) { in visitANY_EXTEND()
12552 if (!N0.hasOneUse()) in visitANY_EXTEND()
12554 ExtendUsesToFormExtLoad(VT, N, N0, ISD::ANY_EXTEND, SetCCs, TLI); in visitANY_EXTEND()
12556 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitANY_EXTEND()
12559 N0.getValueType(), LN0->getMemOperand()); in visitANY_EXTEND()
12560 ExtendSetCCUses(SetCCs, N0, ExtLoad, ISD::ANY_EXTEND); in visitANY_EXTEND()
12562 bool NoReplaceTrunc = N0.hasOneUse(); in visitANY_EXTEND()
12569 DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), ExtLoad); in visitANY_EXTEND()
12579 if (N0.getOpcode() == ISD::LOAD && !ISD::isNON_EXTLoad(N0.getNode()) && in visitANY_EXTEND()
12580 ISD::isUNINDEXEDLoad(N0.getNode()) && N0.hasOneUse()) { in visitANY_EXTEND()
12581 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitANY_EXTEND()
12595 if (N0.getOpcode() == ISD::SETCC) { in visitANY_EXTEND()
12597 SelectionDAG::FlagInserter FlagsInserter(DAG, N0->getFlags()); in visitANY_EXTEND()
12605 EVT N00VT = N0.getOperand(0).getValueType(); in visitANY_EXTEND()
12606 if (getSetCCResultType(N00VT) == N0.getValueType()) in visitANY_EXTEND()
12615 return DAG.getSetCC(SDLoc(N), VT, N0.getOperand(0), in visitANY_EXTEND()
12616 N0.getOperand(1), in visitANY_EXTEND()
12617 cast<CondCodeSDNode>(N0.getOperand(2))->get()); in visitANY_EXTEND()
12624 DAG.getSetCC(SDLoc(N), MatchingVectorType, N0.getOperand(0), in visitANY_EXTEND()
12625 N0.getOperand(1), in visitANY_EXTEND()
12626 cast<CondCodeSDNode>(N0.getOperand(2))->get()); in visitANY_EXTEND()
12633 DL, N0.getOperand(0), N0.getOperand(1), DAG.getConstant(1, DL, VT), in visitANY_EXTEND()
12635 cast<CondCodeSDNode>(N0.getOperand(2))->get(), true)) in visitANY_EXTEND()
12650 SDValue N0 = N->getOperand(0); in visitAssertExt() local
12655 if (N0.getOpcode() == Opcode && in visitAssertExt()
12656 AssertVT == cast<VTSDNode>(N0.getOperand(1))->getVT()) in visitAssertExt()
12657 return N0; in visitAssertExt()
12659 if (N0.getOpcode() == ISD::TRUNCATE && N0.hasOneUse() && in visitAssertExt()
12660 N0.getOperand(0).getOpcode() == Opcode) { in visitAssertExt()
12667 SDValue BigA = N0.getOperand(0); in visitAssertExt()
12679 if (N0.getOpcode() == ISD::TRUNCATE && N0.hasOneUse() && in visitAssertExt()
12680 N0.getOperand(0).getOpcode() == ISD::AssertSext && in visitAssertExt()
12682 SDValue BigA = N0.getOperand(0); in visitAssertExt()
12699 SDValue N0 = N->getOperand(0); in visitAssertAlign() local
12703 if (auto *AAN = dyn_cast<AssertAlignSDNode>(N0)) in visitAssertAlign()
12704 return DAG.getAssertAlign(DL, N0.getOperand(0), in visitAssertAlign()
12710 switch (N0.getOpcode()) { in visitAssertAlign()
12716 SDValue LHS = N0.getOperand(0); in visitAssertAlign()
12717 SDValue RHS = N0.getOperand(1); in visitAssertAlign()
12725 return DAG.getNode(N0.getOpcode(), DL, N0.getValueType(), LHS, RHS); in visitAssertAlign()
12741 SDValue N0 = N->getOperand(0); in reduceLoadWidth() local
12770 auto *LN = dyn_cast<LoadSDNode>(N0); in reduceLoadWidth()
12816 if (Opc == ISD::SRL || N0.getOpcode() == ISD::SRL) { in reduceLoadWidth()
12817 SDValue SRL = Opc == ISD::SRL ? SDValue(N, 0) : N0; in reduceLoadWidth()
12877 N0 = SRL.getOperand(0); in reduceLoadWidth()
12886 if (ShAmt == 0 && N0.getOpcode() == ISD::SHL && N0.hasOneUse() && in reduceLoadWidth()
12887 ExtVT == VT && TLI.isNarrowingProfitable(N0.getValueType(), VT)) { in reduceLoadWidth()
12888 if (ConstantSDNode *N01 = dyn_cast<ConstantSDNode>(N0.getOperand(1))) { in reduceLoadWidth()
12890 N0 = N0.getOperand(0); in reduceLoadWidth()
12895 if (!isa<LoadSDNode>(N0)) in reduceLoadWidth()
12898 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in reduceLoadWidth()
12940 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1)); in reduceLoadWidth()
12974 SDValue N0 = N->getOperand(0); in visitSIGN_EXTEND_INREG() local
12982 if (N0.isUndef()) in visitSIGN_EXTEND_INREG()
12986 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) in visitSIGN_EXTEND_INREG()
12987 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, N0, N1); in visitSIGN_EXTEND_INREG()
12990 if (ExtVTBits >= DAG.ComputeMaxSignificantBits(N0)) in visitSIGN_EXTEND_INREG()
12991 return N0; in visitSIGN_EXTEND_INREG()
12994 if (N0.getOpcode() == ISD::SIGN_EXTEND_INREG && in visitSIGN_EXTEND_INREG()
12995 ExtVT.bitsLT(cast<VTSDNode>(N0.getOperand(1))->getVT())) in visitSIGN_EXTEND_INREG()
12996 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, N0.getOperand(0), in visitSIGN_EXTEND_INREG()
13003 if (N0.getOpcode() == ISD::SIGN_EXTEND || N0.getOpcode() == ISD::ANY_EXTEND) { in visitSIGN_EXTEND_INREG()
13004 SDValue N00 = N0.getOperand(0); in visitSIGN_EXTEND_INREG()
13015 if (N0.getOpcode() == ISD::ANY_EXTEND_VECTOR_INREG || in visitSIGN_EXTEND_INREG()
13016 N0.getOpcode() == ISD::SIGN_EXTEND_VECTOR_INREG || in visitSIGN_EXTEND_INREG()
13017 N0.getOpcode() == ISD::ZERO_EXTEND_VECTOR_INREG) { in visitSIGN_EXTEND_INREG()
13018 SDValue N00 = N0.getOperand(0); in visitSIGN_EXTEND_INREG()
13020 unsigned DstElts = N0.getValueType().getVectorMinNumElements(); in visitSIGN_EXTEND_INREG()
13022 bool IsZext = N0.getOpcode() == ISD::ZERO_EXTEND_VECTOR_INREG; in visitSIGN_EXTEND_INREG()
13034 if (N0.getOpcode() == ISD::ZERO_EXTEND) { in visitSIGN_EXTEND_INREG()
13035 SDValue N00 = N0.getOperand(0); in visitSIGN_EXTEND_INREG()
13042 if (DAG.MaskedValueIsZero(N0, APInt::getOneBitSet(VTBits, ExtVTBits - 1))) in visitSIGN_EXTEND_INREG()
13043 return DAG.getZeroExtendInReg(N0, SDLoc(N), ExtVT); in visitSIGN_EXTEND_INREG()
13058 if (N0.getOpcode() == ISD::SRL) { in visitSIGN_EXTEND_INREG()
13059 if (auto *ShAmt = dyn_cast<ConstantSDNode>(N0.getOperand(1))) in visitSIGN_EXTEND_INREG()
13063 unsigned InSignBits = DAG.ComputeNumSignBits(N0.getOperand(0)); in visitSIGN_EXTEND_INREG()
13065 return DAG.getNode(ISD::SRA, SDLoc(N), VT, N0.getOperand(0), in visitSIGN_EXTEND_INREG()
13066 N0.getOperand(1)); in visitSIGN_EXTEND_INREG()
13074 if (ISD::isEXTLoad(N0.getNode()) && in visitSIGN_EXTEND_INREG()
13075 ISD::isUNINDEXEDLoad(N0.getNode()) && in visitSIGN_EXTEND_INREG()
13076 ExtVT == cast<LoadSDNode>(N0)->getMemoryVT() && in visitSIGN_EXTEND_INREG()
13077 ((!LegalOperations && cast<LoadSDNode>(N0)->isSimple() && in visitSIGN_EXTEND_INREG()
13078 N0.hasOneUse()) || in visitSIGN_EXTEND_INREG()
13080 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitSIGN_EXTEND_INREG()
13086 CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1)); in visitSIGN_EXTEND_INREG()
13092 if (ISD::isZEXTLoad(N0.getNode()) && ISD::isUNINDEXEDLoad(N0.getNode()) && in visitSIGN_EXTEND_INREG()
13093 N0.hasOneUse() && in visitSIGN_EXTEND_INREG()
13094 ExtVT == cast<LoadSDNode>(N0)->getMemoryVT() && in visitSIGN_EXTEND_INREG()
13095 ((!LegalOperations && cast<LoadSDNode>(N0)->isSimple()) && in visitSIGN_EXTEND_INREG()
13097 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitSIGN_EXTEND_INREG()
13103 CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1)); in visitSIGN_EXTEND_INREG()
13109 if (MaskedLoadSDNode *Ld = dyn_cast<MaskedLoadSDNode>(N0)) { in visitSIGN_EXTEND_INREG()
13110 if (ExtVT == Ld->getMemoryVT() && N0.hasOneUse() && in visitSIGN_EXTEND_INREG()
13118 CombineTo(N0.getNode(), ExtMaskedLoad, ExtMaskedLoad.getValue(1)); in visitSIGN_EXTEND_INREG()
13124 if (auto *GN0 = dyn_cast<MaskedGatherSDNode>(N0)) { in visitSIGN_EXTEND_INREG()
13136 CombineTo(N0.getNode(), ExtLoad, ExtLoad.getValue(1)); in visitSIGN_EXTEND_INREG()
13143 if (ExtVTBits <= 16 && N0.getOpcode() == ISD::OR) { in visitSIGN_EXTEND_INREG()
13144 if (SDValue BSwap = MatchBSwapHWordLow(N0.getNode(), N0.getOperand(0), in visitSIGN_EXTEND_INREG()
13145 N0.getOperand(1), false)) in visitSIGN_EXTEND_INREG()
13153 SDValue N0 = N->getOperand(0); in visitEXTEND_VECTOR_INREG() local
13157 if (N0.isUndef()) in visitEXTEND_VECTOR_INREG()
13170 SDValue N0 = N->getOperand(0); in visitTRUNCATE() local
13172 EVT SrcVT = N0.getValueType(); in visitTRUNCATE()
13177 return N0; in visitTRUNCATE()
13180 if (N0.getOpcode() == ISD::TRUNCATE) in visitTRUNCATE()
13181 return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0)); in visitTRUNCATE()
13184 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) { in visitTRUNCATE()
13185 SDValue C = DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0); in visitTRUNCATE()
13191 if (N0.getOpcode() == ISD::ZERO_EXTEND || in visitTRUNCATE()
13192 N0.getOpcode() == ISD::SIGN_EXTEND || in visitTRUNCATE()
13193 N0.getOpcode() == ISD::ANY_EXTEND) { in visitTRUNCATE()
13195 if (N0.getOperand(0).getValueType().bitsLT(VT)) in visitTRUNCATE()
13196 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0)); in visitTRUNCATE()
13198 if (N0.getOperand(0).getValueType().bitsGT(VT)) in visitTRUNCATE()
13199 return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0)); in visitTRUNCATE()
13202 return N0.getOperand(0); in visitTRUNCATE()
13207 if (!LegalTypes && N0.getOpcode() == ISD::SIGN_EXTEND_INREG && in visitTRUNCATE()
13208 N0.hasOneUse()) { in visitTRUNCATE()
13209 SDValue X = N0.getOperand(0); in visitTRUNCATE()
13210 SDValue ExtVal = N0.getOperand(1); in visitTRUNCATE()
13232 if (N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT && in visitTRUNCATE()
13233 LegalTypes && !LegalOperations && N0->hasOneUse() && VT != MVT::i1) { in visitTRUNCATE()
13234 EVT VecTy = N0.getOperand(0).getValueType(); in visitTRUNCATE()
13235 EVT ExTy = N0.getValueType(); in visitTRUNCATE()
13245 SDValue EltNo = N0->getOperand(1); in visitTRUNCATE()
13252 DAG.getBitcast(NVT, N0.getOperand(0)), in visitTRUNCATE()
13258 if (N0.getOpcode() == ISD::SELECT && N0.hasOneUse()) { in visitTRUNCATE()
13261 SDLoc SL(N0); in visitTRUNCATE()
13262 SDValue Cond = N0.getOperand(0); in visitTRUNCATE()
13263 SDValue TruncOp0 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(1)); in visitTRUNCATE()
13264 SDValue TruncOp1 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(2)); in visitTRUNCATE()
13270 if (N0.getOpcode() == ISD::SHL && N0.hasOneUse() && in visitTRUNCATE()
13273 SDValue Amt = N0.getOperand(1); in visitTRUNCATE()
13280 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(0)); in visitTRUNCATE()
13289 if (SDValue V = foldSubToUSubSat(VT, N0.getNode())) in visitTRUNCATE()
13293 if (N0.getOpcode() == ISD::BUILD_VECTOR && !LegalOperations && in visitTRUNCATE()
13300 for (const SDValue &Op : N0->op_values()) { in visitTRUNCATE()
13312 N0.getOpcode() == ISD::BITCAST && N0.hasOneUse() && in visitTRUNCATE()
13313 N0.getOperand(0).getOpcode() == ISD::BUILD_VECTOR && in visitTRUNCATE()
13314 N0.getOperand(0).hasOneUse()) { in visitTRUNCATE()
13315 SDValue BuildVect = N0.getOperand(0); in visitTRUNCATE()
13339 if (!LegalTypes || TLI.isTypeDesirableForOp(N0.getOpcode(), VT)) { in visitTRUNCATE()
13345 if (N0.hasOneUse() && ISD::isUNINDEXEDLoad(N0.getNode())) { in visitTRUNCATE()
13346 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitTRUNCATE()
13352 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLoad.getValue(1)); in visitTRUNCATE()
13360 if (N0.getOpcode() == ISD::CONCAT_VECTORS && !LegalTypes) { in visitTRUNCATE()
13366 for (unsigned i = 0, e = N0.getNumOperands(); i != e; ++i) { in visitTRUNCATE()
13367 SDValue X = N0.getOperand(i); in visitTRUNCATE()
13405 if (N0.getOpcode() == ISD::BITCAST && !VT.isVector()) { in visitTRUNCATE()
13406 SDValue VecSrc = N0.getOperand(0); in visitTRUNCATE()
13430 APInt::getLowBitsSet(N0.getValueSizeInBits(), VT.getSizeInBits()); in visitTRUNCATE()
13431 if (SDValue Shorter = DAG.GetDemandedBits(N0, Mask)) in visitTRUNCATE()
13439 if (!LegalTypes && N0.getOpcode() == ISD::EXTRACT_SUBVECTOR) { in visitTRUNCATE()
13440 SDValue N00 = N0.getOperand(0); in visitTRUNCATE()
13446 return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N0->getOperand(0)), VT, in visitTRUNCATE()
13447 N00.getOperand(0), N0.getOperand(1)); in visitTRUNCATE()
13458 switch (N0.getOpcode()) { in visitTRUNCATE()
13465 if (!LegalOperations && N0.hasOneUse() && in visitTRUNCATE()
13466 (isConstantOrConstantVector(N0.getOperand(0), true) || in visitTRUNCATE()
13467 isConstantOrConstantVector(N0.getOperand(1), true))) { in visitTRUNCATE()
13471 if (VT.isScalarInteger() || TLI.isOperationLegal(N0.getOpcode(), VT)) { in visitTRUNCATE()
13473 SDValue NarrowL = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(0)); in visitTRUNCATE()
13474 SDValue NarrowR = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(1)); in visitTRUNCATE()
13475 return DAG.getNode(N0.getOpcode(), DL, VT, NarrowL, NarrowR); in visitTRUNCATE()
13485 if (((!LegalOperations && N0.getOpcode() == ISD::ADDCARRY) || in visitTRUNCATE()
13486 TLI.isOperationLegal(N0.getOpcode(), VT)) && in visitTRUNCATE()
13487 N0.hasOneUse() && !N0->hasAnyUseOfValue(1)) { in visitTRUNCATE()
13489 SDValue X = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(0)); in visitTRUNCATE()
13490 SDValue Y = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(1)); in visitTRUNCATE()
13491 SDVTList VTs = DAG.getVTList(VT, N0->getValueType(1)); in visitTRUNCATE()
13492 return DAG.getNode(N0.getOpcode(), DL, VTs, X, Y, N0.getOperand(2)); in visitTRUNCATE()
13499 if (!LegalOperations && N0.hasOneUse() && in visitTRUNCATE()
13500 N0.getOperand(0).getOpcode() == ISD::ZERO_EXTEND && in visitTRUNCATE()
13501 N0.getOperand(0).getOperand(0).getScalarValueSizeInBits() <= in visitTRUNCATE()
13503 hasOperation(N0.getOpcode(), VT)) { in visitTRUNCATE()
13504 return getTruncatedUSUBSAT(VT, SrcVT, N0.getOperand(0), N0.getOperand(1), in visitTRUNCATE()
13568 SDValue N0 = N->getOperand(0); in foldBitcastedFPLogic() local
13569 EVT SourceVT = N0.getValueType(); in foldBitcastedFPLogic()
13575 switch (N0.getOpcode()) { in foldBitcastedFPLogic()
13596 SDValue LogicOp0 = N0.getOperand(0); in foldBitcastedFPLogic()
13597 ConstantSDNode *LogicOp1 = isConstOrConstSplat(N0.getOperand(1), true); in foldBitcastedFPLogic()
13603 if (N0.getOpcode() == ISD::OR) in foldBitcastedFPLogic()
13612 SDValue N0 = N->getOperand(0); in visitBITCAST() local
13615 if (N0.isUndef()) in visitBITCAST()
13626 (!LegalOperations && VT.isInteger() && N0.getValueType().isInteger() && in visitBITCAST()
13628 N0.getOpcode() == ISD::BUILD_VECTOR && N0->hasOneUse() && in visitBITCAST()
13629 cast<BuildVectorSDNode>(N0)->isConstant()) in visitBITCAST()
13630 return ConstantFoldBITCASTofBUILD_VECTOR(N0.getNode(), in visitBITCAST()
13634 if (isIntOrFPConstant(N0)) { in visitBITCAST()
13639 (isa<ConstantSDNode>(N0) && VT.isFloatingPoint() && !VT.isVector() && in visitBITCAST()
13641 (isa<ConstantFPSDNode>(N0) && VT.isInteger() && !VT.isVector() && in visitBITCAST()
13643 SDValue C = DAG.getBitcast(VT, N0); in visitBITCAST()
13650 if (N0.getOpcode() == ISD::BITCAST) in visitBITCAST()
13651 return DAG.getBitcast(VT, N0.getOperand(0)); in visitBITCAST()
13655 if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() && in visitBITCAST()
13657 TLI.hasBigEndianPartOrdering(N0.getValueType(), DAG.getDataLayout()) == in visitBITCAST()
13664 ((!LegalOperations && cast<LoadSDNode>(N0)->isSimple()) || in visitBITCAST()
13666 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitBITCAST()
13668 if (TLI.isLoadBitCastBeneficial(N0.getValueType(), VT, DAG, in visitBITCAST()
13674 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1)); in visitBITCAST()
13694 if (((N0.getOpcode() == ISD::FNEG && !TLI.isFNegFree(N0.getValueType())) || in visitBITCAST()
13695 (N0.getOpcode() == ISD::FABS && !TLI.isFAbsFree(N0.getValueType()))) && in visitBITCAST()
13696 N0->hasOneUse() && VT.isInteger() && !VT.isVector() && in visitBITCAST()
13697 !N0.getValueType().isVector()) { in visitBITCAST()
13698 SDValue NewConv = DAG.getBitcast(VT, N0.getOperand(0)); in visitBITCAST()
13702 if (N0.getValueType() == MVT::ppcf128 && !LegalTypes) { in visitBITCAST()
13705 APInt::getSignMask(VT.getSizeInBits() / 2), SDLoc(N0), MVT::i64); in visitBITCAST()
13707 if (N0.getOpcode() == ISD::FNEG) { in visitBITCAST()
13711 assert(N0.getOpcode() == ISD::FABS); in visitBITCAST()
13717 FlipBit = DAG.getNode(ISD::AND, SDLoc(N0), MVT::i64, Hi, SignBit); in visitBITCAST()
13721 DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit); in visitBITCAST()
13726 if (N0.getOpcode() == ISD::FNEG) in visitBITCAST()
13729 assert(N0.getOpcode() == ISD::FABS); in visitBITCAST()
13745 if (N0.getOpcode() == ISD::FCOPYSIGN && N0->hasOneUse() && in visitBITCAST()
13746 isa<ConstantFPSDNode>(N0.getOperand(0)) && VT.isInteger() && in visitBITCAST()
13748 unsigned OrigXWidth = N0.getOperand(1).getValueSizeInBits(); in visitBITCAST()
13751 SDValue X = DAG.getBitcast(IntXVT, N0.getOperand(1)); in visitBITCAST()
13772 if (N0.getValueType() == MVT::ppcf128 && !LegalTypes) { in visitBITCAST()
13774 SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0)); in visitBITCAST()
13776 SDValue X = DAG.getBitcast(VT, N0.getOperand(1)); in visitBITCAST()
13778 SDValue XorResult = DAG.getNode(ISD::XOR, SDLoc(N0), VT, Cst, X); in visitBITCAST()
13790 DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit); in visitBITCAST()
13799 SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0)); in visitBITCAST()
13809 if (N0.getOpcode() == ISD::BUILD_PAIR) in visitBITCAST()
13810 if (SDValue CombineLD = CombineConsecutiveLoads(N0.getNode(), VT)) in visitBITCAST()
13818 N0->getOpcode() == ISD::VECTOR_SHUFFLE && N0.hasOneUse() && in visitBITCAST()
13819 VT.getVectorNumElements() >= N0.getValueType().getVectorNumElements() && in visitBITCAST()
13820 !(VT.getVectorNumElements() % N0.getValueType().getVectorNumElements())) { in visitBITCAST()
13821 ShuffleVectorSDNode *SVN = cast<ShuffleVectorSDNode>(N0); in visitBITCAST()
13837 SDValue SV0 = PeekThroughBitcast(N0->getOperand(0)); in visitBITCAST()
13838 SDValue SV1 = PeekThroughBitcast(N0->getOperand(1)); in visitBITCAST()
13843 VT.getVectorNumElements() / N0.getValueType().getVectorNumElements(); in visitBITCAST()
13864 SDValue N0 = N->getOperand(0); in visitFREEZE() local
13866 if (DAG.isGuaranteedNotToBeUndefOrPoison(N0, /*PoisonOnly*/ false)) in visitFREEZE()
13867 return N0; in visitFREEZE()
13871 if (N0.getOpcode() == ISD::BITCAST) in visitFREEZE()
13873 DAG.getNode(ISD::FREEZE, SDLoc(N0), in visitFREEZE()
13874 N0.getOperand(0).getValueType(), in visitFREEZE()
13875 N0.getOperand(0))); in visitFREEZE()
13973 SDValue N0 = N->getOperand(0); in visitFADDForFMACombine() local
14021 if (Aggressive && isContractableFMUL(N0) && isContractableFMUL(N1)) { in visitFADDForFMACombine()
14022 if (N0->use_size() > N1->use_size()) in visitFADDForFMACombine()
14023 std::swap(N0, N1); in visitFADDForFMACombine()
14027 if (isContractableFMUL(N0) && (Aggressive || N0->hasOneUse())) { in visitFADDForFMACombine()
14028 return DAG.getNode(PreferredFusedOpcode, SL, VT, N0.getOperand(0), in visitFADDForFMACombine()
14029 N0.getOperand(1), N1); in visitFADDForFMACombine()
14036 N1.getOperand(1), N0); in visitFADDForFMACombine()
14043 if (CanReassociate && isFusedOp(N0) && in visitFADDForFMACombine()
14044 N0.getOperand(2).getOpcode() == ISD::FMUL && N0.hasOneUse() && in visitFADDForFMACombine()
14045 N0.getOperand(2).hasOneUse()) { in visitFADDForFMACombine()
14046 FMA = N0; in visitFADDForFMACombine()
14052 E = N0; in visitFADDForFMACombine()
14066 if (N0.getOpcode() == ISD::FP_EXTEND) { in visitFADDForFMACombine()
14067 SDValue N00 = N0.getOperand(0); in visitFADDForFMACombine()
14088 N0); in visitFADDForFMACombine()
14104 if (isFusedOp(N0)) { in visitFADDForFMACombine()
14105 SDValue N02 = N0.getOperand(2); in visitFADDForFMACombine()
14111 return FoldFAddFMAFPExtFMul(N0.getOperand(0), N0.getOperand(1), in visitFADDForFMACombine()
14132 if (N0.getOpcode() == ISD::FP_EXTEND) { in visitFADDForFMACombine()
14133 SDValue N00 = N0.getOperand(0); in visitFADDForFMACombine()
14157 N0); in visitFADDForFMACombine()
14176 N0); in visitFADDForFMACombine()
14187 SDValue N0 = N->getOperand(0); in visitFSUBForFMACombine() local
14251 if (isContractableFMUL(N0) && isContractableFMUL(N1) && in visitFSUBForFMACombine()
14252 (N0->use_size() > N1->use_size())) { in visitFSUBForFMACombine()
14254 if (SDValue V = tryToFoldXSubYZ(N0, N1)) in visitFSUBForFMACombine()
14257 if (SDValue V = tryToFoldXYSubZ(N0, N1)) in visitFSUBForFMACombine()
14261 if (SDValue V = tryToFoldXYSubZ(N0, N1)) in visitFSUBForFMACombine()
14264 if (SDValue V = tryToFoldXSubYZ(N0, N1)) in visitFSUBForFMACombine()
14269 if (N0.getOpcode() == ISD::FNEG && isContractableFMUL(N0.getOperand(0)) && in visitFSUBForFMACombine()
14270 (Aggressive || (N0->hasOneUse() && N0.getOperand(0).hasOneUse()))) { in visitFSUBForFMACombine()
14271 SDValue N00 = N0.getOperand(0).getOperand(0); in visitFSUBForFMACombine()
14272 SDValue N01 = N0.getOperand(0).getOperand(1); in visitFSUBForFMACombine()
14282 if (N0.getOpcode() == ISD::FP_EXTEND) { in visitFSUBForFMACombine()
14283 SDValue N00 = N0.getOperand(0); in visitFSUBForFMACombine()
14306 DAG.getNode(ISD::FP_EXTEND, SL, VT, N10.getOperand(1)), N0); in visitFSUBForFMACombine()
14316 if (N0.getOpcode() == ISD::FP_EXTEND) { in visitFSUBForFMACombine()
14317 SDValue N00 = N0.getOperand(0); in visitFSUBForFMACombine()
14339 if (N0.getOpcode() == ISD::FNEG) { in visitFSUBForFMACombine()
14340 SDValue N00 = N0.getOperand(0); in visitFSUBForFMACombine()
14375 if (CanFuse && isFusedOp(N0) && in visitFSUBForFMACombine()
14376 isContractableAndReassociableFMUL(N0.getOperand(2)) && in visitFSUBForFMACombine()
14377 N0->hasOneUse() && N0.getOperand(2)->hasOneUse()) { in visitFSUBForFMACombine()
14378 return DAG.getNode(PreferredFusedOpcode, SL, VT, N0.getOperand(0), in visitFSUBForFMACombine()
14379 N0.getOperand(1), in visitFSUBForFMACombine()
14381 N0.getOperand(2).getOperand(0), in visitFSUBForFMACombine()
14382 N0.getOperand(2).getOperand(1), in visitFSUBForFMACombine()
14397 DAG.getNode(ISD::FNEG, SL, VT, N20), N21, N0)); in visitFSUBForFMACombine()
14402 if (isFusedOp(N0) && N0->hasOneUse()) { in visitFSUBForFMACombine()
14403 SDValue N02 = N0.getOperand(2); in visitFSUBForFMACombine()
14410 PreferredFusedOpcode, SL, VT, N0.getOperand(0), N0.getOperand(1), in visitFSUBForFMACombine()
14426 if (N0.getOpcode() == ISD::FP_EXTEND) { in visitFSUBForFMACombine()
14427 SDValue N00 = N0.getOperand(0); in visitFSUBForFMACombine()
14462 DAG.getNode(ISD::FP_EXTEND, SL, VT, N1201), N0)); in visitFSUBForFMACombine()
14490 DAG.getNode(ISD::FP_EXTEND, SL, VT, N1021), N0)); in visitFSUBForFMACombine()
14502 SDValue N0 = N->getOperand(0); in visitFMULForFMADistributiveCombine() local
14513 SDValue FAdd = N0.getOpcode() == ISD::FADD ? N0 : N1; in visitFMULForFMADistributiveCombine()
14552 if (SDValue FMA = FuseFADD(N0, N1)) in visitFMULForFMADistributiveCombine()
14554 if (SDValue FMA = FuseFADD(N1, N0)) in visitFMULForFMADistributiveCombine()
14585 if (SDValue FMA = FuseFSUB(N0, N1)) in visitFMULForFMADistributiveCombine()
14587 if (SDValue FMA = FuseFSUB(N1, N0)) in visitFMULForFMADistributiveCombine()
14594 SDValue N0 = N->getOperand(0); in visitFADD() local
14596 bool N0CFP = DAG.isConstantFPBuildVectorOrConstantFP(N0); in visitFADD()
14604 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFADD()
14608 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FADD, DL, VT, {N0, N1})) in visitFADD()
14613 return DAG.getNode(ISD::FADD, DL, VT, N1, N0); in visitFADD()
14624 return N0; in visitFADD()
14633 return DAG.getNode(ISD::FSUB, DL, VT, N0, NegN1); in visitFADD()
14638 N0, DAG, LegalOperations, ForCodeSize)) in visitFADD()
14649 if (isFMulNegTwo(N0)) { in visitFADD()
14650 SDValue B = N0.getOperand(0); in visitFADD()
14658 return DAG.getNode(ISD::FSUB, DL, VT, N0, Add); in visitFADD()
14668 if (N0.getOpcode() == ISD::FNEG && N0.getOperand(0) == N1) in visitFADD()
14672 if (N1.getOpcode() == ISD::FNEG && N1.getOperand(0) == N0) in visitFADD()
14683 if (N1CFP && N0.getOpcode() == ISD::FADD && in visitFADD()
14684 DAG.isConstantFPBuildVectorOrConstantFP(N0.getOperand(1))) { in visitFADD()
14685 SDValue NewC = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), N1); in visitFADD()
14686 return DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(0), NewC); in visitFADD()
14693 if (N0.getOpcode() == ISD::FMUL) { in visitFADD()
14694 bool CFP00 = DAG.isConstantFPBuildVectorOrConstantFP(N0.getOperand(0)); in visitFADD()
14695 bool CFP01 = DAG.isConstantFPBuildVectorOrConstantFP(N0.getOperand(1)); in visitFADD()
14698 if (CFP01 && !CFP00 && N0.getOperand(0) == N1) { in visitFADD()
14699 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), in visitFADD()
14707 N0.getOperand(0) == N1.getOperand(0)) { in visitFADD()
14708 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), in visitFADD()
14710 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), NewCFP); in visitFADD()
14719 if (CFP11 && !CFP10 && N1.getOperand(0) == N0) { in visitFADD()
14722 return DAG.getNode(ISD::FMUL, DL, VT, N0, NewCFP); in visitFADD()
14726 if (CFP11 && !CFP10 && N0.getOpcode() == ISD::FADD && in visitFADD()
14727 N0.getOperand(0) == N0.getOperand(1) && in visitFADD()
14728 N1.getOperand(0) == N0.getOperand(0)) { in visitFADD()
14735 if (N0.getOpcode() == ISD::FADD) { in visitFADD()
14736 bool CFP00 = DAG.isConstantFPBuildVectorOrConstantFP(N0.getOperand(0)); in visitFADD()
14738 if (!CFP00 && N0.getOperand(0) == N0.getOperand(1) && in visitFADD()
14739 (N0.getOperand(0) == N1)) { in visitFADD()
14749 N1.getOperand(0) == N0) { in visitFADD()
14750 return DAG.getNode(ISD::FMUL, DL, VT, N0, in visitFADD()
14756 if (N0.getOpcode() == ISD::FADD && N1.getOpcode() == ISD::FADD && in visitFADD()
14757 N0.getOperand(0) == N0.getOperand(1) && in visitFADD()
14759 N0.getOperand(0) == N1.getOperand(0)) { in visitFADD()
14760 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), in visitFADD()
14776 SDValue N0 = N->getOperand(1); in visitSTRICT_FADD() local
14788 {Chain, N0, NegN1}); in visitSTRICT_FADD()
14794 N0, DAG, LegalOperations, ForCodeSize)) { in visitSTRICT_FADD()
14802 SDValue N0 = N->getOperand(0); in visitFSUB() local
14804 ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0, true); in visitFSUB()
14812 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFSUB()
14816 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FSUB, DL, VT, {N0, N1})) in visitFSUB()
14831 return N0; in visitFSUB()
14835 if (N0 == N1) { in visitFSUB()
14864 if (N0 == N1->getOperand(0)) in visitFSUB()
14867 if (N0 == N1->getOperand(1)) in visitFSUB()
14874 return DAG.getNode(ISD::FADD, DL, VT, N0, NegN1); in visitFSUB()
14886 SDValue N0 = N->getOperand(0); in visitFMUL() local
14895 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFMUL()
14899 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FMUL, DL, VT, {N0, N1})) in visitFMUL()
14903 if (DAG.isConstantFPBuildVectorOrConstantFP(N0) && in visitFMUL()
14905 return DAG.getNode(ISD::FMUL, DL, VT, N1, N0); in visitFMUL()
14918 N0.getOpcode() == ISD::FMUL) { in visitFMUL()
14919 SDValue N00 = N0.getOperand(0); in visitFMUL()
14920 SDValue N01 = N0.getOperand(1); in visitFMUL()
14932 if (N0.getOpcode() == ISD::FADD && N0.hasOneUse() && in visitFMUL()
14933 N0.getOperand(0) == N0.getOperand(1)) { in visitFMUL()
14936 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), MulConsts); in visitFMUL()
14942 return DAG.getNode(ISD::FADD, DL, VT, N0, N0); in visitFMUL()
14948 DAG.getConstantFP(-0.0, DL, VT), N0, Flags); in visitFMUL()
14958 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize, CostN0); in visitFMUL()
14969 (N0.getOpcode() == ISD::SELECT || N1.getOpcode() == ISD::SELECT) && in visitFMUL()
14971 SDValue Select = N0, X = N1; in visitFMUL()
15022 SDValue N0 = N->getOperand(0); in visitFMA() local
15025 ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0); in visitFMA()
15037 if (isa<ConstantFPSDNode>(N0) && in visitFMA()
15040 return DAG.getNode(ISD::FMA, DL, VT, N0, N1, N2); in visitFMA()
15049 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize, CostN0); in visitFMA()
15068 return DAG.getNode(ISD::FADD, SDLoc(N), VT, N0, N2); in visitFMA()
15071 if (DAG.isConstantFPBuildVectorOrConstantFP(N0) && in visitFMA()
15073 return DAG.getNode(ISD::FMA, SDLoc(N), VT, N1, N0, N2); in visitFMA()
15077 if (N2.getOpcode() == ISD::FMUL && N0 == N2.getOperand(0) && in visitFMA()
15080 return DAG.getNode(ISD::FMUL, DL, VT, N0, in visitFMA()
15085 if (N0.getOpcode() == ISD::FMUL && in visitFMA()
15087 DAG.isConstantFPBuildVectorOrConstantFP(N0.getOperand(1))) { in visitFMA()
15088 return DAG.getNode(ISD::FMA, DL, VT, N0.getOperand(0), in visitFMA()
15089 DAG.getNode(ISD::FMUL, DL, VT, N1, N0.getOperand(1)), in visitFMA()
15097 return DAG.getNode(ISD::FADD, DL, VT, N0, N2); in visitFMA()
15101 SDValue RHSNeg = DAG.getNode(ISD::FNEG, DL, VT, N0); in visitFMA()
15107 if (N0.getOpcode() == ISD::FNEG && in visitFMA()
15111 return DAG.getNode(ISD::FMA, DL, VT, N0.getOperand(0), in visitFMA()
15118 if (N1CFP && N0 == N2) { in visitFMA()
15120 ISD::FMUL, DL, VT, N0, in visitFMA()
15125 if (N1CFP && N2.getOpcode() == ISD::FNEG && N2.getOperand(0) == N0) { in visitFMA()
15127 ISD::FMUL, DL, VT, N0, in visitFMA()
15158 SDValue N0 = N->getOperand(0), N1 = N->getOperand(1); in combineRepeatedFPDivisors() local
15159 ConstantFPSDNode *N0CFP = isConstOrConstSplatFP(N0, /* AllowUndefs */ true); in combineRepeatedFPDivisors()
15222 SDValue N0 = N->getOperand(0); in visitFDIV() local
15230 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFDIV()
15234 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FDIV, DL, VT, {N0, N1})) in visitFDIV()
15264 return DAG.getNode(ISD::FMUL, DL, VT, N0, in visitFDIV()
15272 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV); in visitFDIV()
15279 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV); in visitFDIV()
15287 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV); in visitFDIV()
15317 return DAG.getNode(ISD::FMUL, DL, VT, N0, Rsqrt); in visitFDIV()
15329 return DAG.getNode(ISD::FMUL, DL, VT, N0, Div); in visitFDIV()
15336 if (SDValue RV = BuildDivEstimate(N0, N1, Flags)) in visitFDIV()
15343 if (N1.getOpcode() == ISD::FSQRT && N0 == N1.getOperand(0)) in visitFDIV()
15352 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize, CostN0); in visitFDIV()
15364 SDValue N0 = N->getOperand(0); in visitFREM() local
15370 if (SDValue R = DAG.simplifyFPBinop(N->getOpcode(), N0, N1, Flags)) in visitFREM()
15374 if (SDValue C = DAG.FoldConstantArithmetic(ISD::FREM, SDLoc(N), VT, {N0, N1})) in visitFREM()
15393 SDValue N0 = N->getOperand(0); in visitFSQRT() local
15394 if (TLI.isFsqrtCheap(N0, DAG)) in visitFSQRT()
15402 return buildSqrtEstimate(N0, Flags); in visitFSQRT()
15435 SDValue N0 = N->getOperand(0); in visitFCOPYSIGN() local
15441 DAG.FoldConstantArithmetic(ISD::FCOPYSIGN, SDLoc(N), VT, {N0, N1})) in visitFCOPYSIGN()
15450 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0); in visitFCOPYSIGN()
15454 DAG.getNode(ISD::FABS, SDLoc(N0), VT, N0)); in visitFCOPYSIGN()
15461 if (N0.getOpcode() == ISD::FABS || N0.getOpcode() == ISD::FNEG || in visitFCOPYSIGN()
15462 N0.getOpcode() == ISD::FCOPYSIGN) in visitFCOPYSIGN()
15463 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0.getOperand(0), N1); in visitFCOPYSIGN()
15467 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0); in visitFCOPYSIGN()
15471 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(1)); in visitFCOPYSIGN()
15476 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(0)); in visitFCOPYSIGN()
15573 SDValue N0 = N->getOperand(0); in foldFPToIntToFP() local
15574 if (N->getOpcode() == ISD::SINT_TO_FP && N0.getOpcode() == ISD::FP_TO_SINT && in foldFPToIntToFP()
15575 N0.getOperand(0).getValueType() == VT) in foldFPToIntToFP()
15576 return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); in foldFPToIntToFP()
15578 if (N->getOpcode() == ISD::UINT_TO_FP && N0.getOpcode() == ISD::FP_TO_UINT && in foldFPToIntToFP()
15579 N0.getOperand(0).getValueType() == VT) in foldFPToIntToFP()
15580 return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0.getOperand(0)); in foldFPToIntToFP()
15586 SDValue N0 = N->getOperand(0); in visitSINT_TO_FP() local
15588 EVT OpVT = N0.getValueType(); in visitSINT_TO_FP()
15591 if (N0.isUndef()) in visitSINT_TO_FP()
15595 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitSINT_TO_FP()
15599 return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0); in visitSINT_TO_FP()
15606 if (DAG.SignBitIsZero(N0)) in visitSINT_TO_FP()
15607 return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0); in visitSINT_TO_FP()
15612 if (N0.getOpcode() == ISD::SETCC && N0.getValueType() == MVT::i1 && in visitSINT_TO_FP()
15616 return DAG.getSelect(DL, VT, N0, DAG.getConstantFP(-1.0, DL, VT), in visitSINT_TO_FP()
15622 if (N0.getOpcode() == ISD::ZERO_EXTEND && in visitSINT_TO_FP()
15623 N0.getOperand(0).getOpcode() == ISD::SETCC && !VT.isVector() && in visitSINT_TO_FP()
15626 return DAG.getSelect(DL, VT, N0.getOperand(0), in visitSINT_TO_FP()
15638 SDValue N0 = N->getOperand(0); in visitUINT_TO_FP() local
15640 EVT OpVT = N0.getValueType(); in visitUINT_TO_FP()
15643 if (N0.isUndef()) in visitUINT_TO_FP()
15647 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) && in visitUINT_TO_FP()
15651 return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0); in visitUINT_TO_FP()
15658 if (DAG.SignBitIsZero(N0)) in visitUINT_TO_FP()
15659 return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0); in visitUINT_TO_FP()
15663 if (N0.getOpcode() == ISD::SETCC && !VT.isVector() && in visitUINT_TO_FP()
15666 return DAG.getSelect(DL, VT, N0, DAG.getConstantFP(1.0, DL, VT), in visitUINT_TO_FP()
15678 SDValue N0 = N->getOperand(0); in FoldIntToFPToInt() local
15681 if (N0.getOpcode() != ISD::UINT_TO_FP && N0.getOpcode() != ISD::SINT_TO_FP) in FoldIntToFPToInt()
15684 SDValue Src = N0.getOperand(0); in FoldIntToFPToInt()
15686 bool IsInputSigned = N0.getOpcode() == ISD::SINT_TO_FP; in FoldIntToFPToInt()
15701 const fltSemantics &sem = DAG.EVTToAPFloatSemantics(N0.getValueType()); in FoldIntToFPToInt()
15719 SDValue N0 = N->getOperand(0); in visitFP_TO_SINT() local
15723 if (N0.isUndef()) in visitFP_TO_SINT()
15727 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFP_TO_SINT()
15728 return DAG.getNode(ISD::FP_TO_SINT, SDLoc(N), VT, N0); in visitFP_TO_SINT()
15734 SDValue N0 = N->getOperand(0); in visitFP_TO_UINT() local
15738 if (N0.isUndef()) in visitFP_TO_UINT()
15742 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFP_TO_UINT()
15743 return DAG.getNode(ISD::FP_TO_UINT, SDLoc(N), VT, N0); in visitFP_TO_UINT()
15749 SDValue N0 = N->getOperand(0); in visitFP_ROUND() local
15751 ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0); in visitFP_ROUND()
15756 return DAG.getNode(ISD::FP_ROUND, SDLoc(N), VT, N0, N1); in visitFP_ROUND()
15759 if (N0.getOpcode() == ISD::FP_EXTEND && VT == N0.getOperand(0).getValueType()) in visitFP_ROUND()
15760 return N0.getOperand(0); in visitFP_ROUND()
15763 if (N0.getOpcode() == ISD::FP_ROUND) { in visitFP_ROUND()
15765 const bool N0IsTrunc = N0.getConstantOperandVal(1) == 1; in visitFP_ROUND()
15774 if (N0.getOperand(0).getValueType() == MVT::f80 && VT == MVT::f16) in visitFP_ROUND()
15784 return DAG.getNode(ISD::FP_ROUND, DL, VT, N0.getOperand(0), in visitFP_ROUND()
15790 if (N0.getOpcode() == ISD::FCOPYSIGN && N0->hasOneUse()) { in visitFP_ROUND()
15791 SDValue Tmp = DAG.getNode(ISD::FP_ROUND, SDLoc(N0), VT, in visitFP_ROUND()
15792 N0.getOperand(0), N1); in visitFP_ROUND()
15795 Tmp, N0.getOperand(1)); in visitFP_ROUND()
15805 SDValue N0 = N->getOperand(0); in visitFP_EXTEND() local
15814 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFP_EXTEND()
15815 return DAG.getNode(ISD::FP_EXTEND, SDLoc(N), VT, N0); in visitFP_EXTEND()
15818 if (N0.getOpcode() == ISD::FP16_TO_FP && in visitFP_EXTEND()
15820 return DAG.getNode(ISD::FP16_TO_FP, SDLoc(N), VT, N0.getOperand(0)); in visitFP_EXTEND()
15824 if (N0.getOpcode() == ISD::FP_ROUND in visitFP_EXTEND()
15825 && N0.getConstantOperandVal(1) == 1) { in visitFP_EXTEND()
15826 SDValue In = N0.getOperand(0); in visitFP_EXTEND()
15830 In, N0.getOperand(1)); in visitFP_EXTEND()
15835 if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() && in visitFP_EXTEND()
15836 TLI.isLoadExtLegalOrCustom(ISD::EXTLOAD, VT, N0.getValueType())) { in visitFP_EXTEND()
15837 LoadSDNode *LN0 = cast<LoadSDNode>(N0); in visitFP_EXTEND()
15840 LN0->getBasePtr(), N0.getValueType(), in visitFP_EXTEND()
15843 CombineTo(N0.getNode(), in visitFP_EXTEND()
15844 DAG.getNode(ISD::FP_ROUND, SDLoc(N0), in visitFP_EXTEND()
15845 N0.getValueType(), ExtLoad, in visitFP_EXTEND()
15846 DAG.getIntPtrConstant(1, SDLoc(N0))), in visitFP_EXTEND()
15858 SDValue N0 = N->getOperand(0); in visitFCEIL() local
15862 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFCEIL()
15863 return DAG.getNode(ISD::FCEIL, SDLoc(N), VT, N0); in visitFCEIL()
15869 SDValue N0 = N->getOperand(0); in visitFTRUNC() local
15873 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFTRUNC()
15874 return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0); in visitFTRUNC()
15879 switch (N0.getOpcode()) { in visitFTRUNC()
15886 return N0; in visitFTRUNC()
15893 SDValue N0 = N->getOperand(0); in visitFFLOOR() local
15897 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFFLOOR()
15898 return DAG.getNode(ISD::FFLOOR, SDLoc(N), VT, N0); in visitFFLOOR()
15904 SDValue N0 = N->getOperand(0); in visitFNEG() local
15909 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFNEG()
15910 return DAG.getNode(ISD::FNEG, SDLoc(N), VT, N0); in visitFNEG()
15913 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize)) in visitFNEG()
15920 if (N0.getOpcode() == ISD::FSUB && in visitFNEG()
15922 N->getFlags().hasNoSignedZeros()) && N0.hasOneUse()) { in visitFNEG()
15923 return DAG.getNode(ISD::FSUB, SDLoc(N), VT, N0.getOperand(1), in visitFNEG()
15924 N0.getOperand(0)); in visitFNEG()
15934 SDValue N0 = N->getOperand(0); in visitFMinMax() local
15944 if (SDValue C = DAG.FoldConstantArithmetic(Opc, SDLoc(N), VT, {N0, N1})) in visitFMinMax()
15948 if (DAG.isConstantFPBuildVectorOrConstantFP(N0) && in visitFMinMax()
15950 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0); in visitFMinMax()
15985 SDValue N0 = N->getOperand(0); in visitFABS() local
15989 if (DAG.isConstantFPBuildVectorOrConstantFP(N0)) in visitFABS()
15990 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0); in visitFABS()
15993 if (N0.getOpcode() == ISD::FABS) in visitFABS()
15998 if (N0.getOpcode() == ISD::FNEG || N0.getOpcode() == ISD::FCOPYSIGN) in visitFABS()
15999 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0.getOperand(0)); in visitFABS()
17643 SDValue N0 = Value.getOperand(0); in ReduceLoadOpStoreWidth() local
17644 if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() && in ReduceLoadOpStoreWidth()
17645 Chain == SDValue(N0.getNode(), 1)) { in ReduceLoadOpStoreWidth()
17646 LoadSDNode *LD = cast<LoadSDNode>(N0); in ReduceLoadOpStoreWidth()
17703 DAG.getLoad(NewVT, SDLoc(N0), LD->getChain(), NewPtr, in ReduceLoadOpStoreWidth()
17717 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLD.getValue(1)); in ReduceLoadOpStoreWidth()
21541 SDValue N0 = N->getOperand(0); in foldExtractSubvectorFromShuffleVector() local
21545 EVT WideVT = N0.getValueType(); in foldExtractSubvectorFromShuffleVector()
21550 auto *WideShuffleVector = dyn_cast<ShuffleVectorSDNode>(N0); in foldExtractSubvectorFromShuffleVector()
21876 SDValue N0 = Shuf->getOperand(0), N1 = Shuf->getOperand(1); in foldShuffleOfConcatUndefs() local
21877 if (N0.getOpcode() != ISD::CONCAT_VECTORS || N0.getNumOperands() != 2 || in foldShuffleOfConcatUndefs()
21879 !N0.getOperand(1).isUndef() || !N1.getOperand(1).isUndef()) in foldShuffleOfConcatUndefs()
21913 SDValue X = N0.getOperand(0), Y = N1.getOperand(0); in foldShuffleOfConcatUndefs()
21926 SDValue N0 = N->getOperand(0); in partitionShuffleOfConcats() local
21932 EVT ConcatVT = N0.getOperand(0).getValueType(); in partitionShuffleOfConcats()
21944 N0 = DAG.getVectorShuffle(ConcatVT, SDLoc(N), N0.getOperand(0), in partitionShuffleOfConcats()
21945 N0.getOperand(1), in partitionShuffleOfConcats()
21948 return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, N0, N1); in partitionShuffleOfConcats()
21976 if (OpIdx < (int)N0.getNumOperands()) in partitionShuffleOfConcats()
21977 Ops.push_back(N0.getOperand(OpIdx)); in partitionShuffleOfConcats()
21979 Ops.push_back(N1.getOperand(OpIdx - N0.getNumOperands())); in partitionShuffleOfConcats()
22006 SDValue N0 = SVN->getOperand(0); in combineShuffleOfScalars() local
22009 if (!N0->hasOneUse()) in combineShuffleOfScalars()
22018 bool N0AnyConst = isAnyConstantBuildVector(N0); in combineShuffleOfScalars()
22020 if (N0AnyConst && !N1AnyConst && !ISD::isBuildVectorAllZeros(N0.getNode())) in combineShuffleOfScalars()
22029 auto *BV0 = dyn_cast<BuildVectorSDNode>(N0); in combineShuffleOfScalars()
22041 SDValue &S = (M < (int)NumElts ? N0 : N1); in combineShuffleOfScalars()
22097 SDValue N0 = SVN->getOperand(0); in combineShuffleToVectorExtend() local
22129 SDLoc(SVN), OutVT, N0)); in combineShuffleToVectorExtend()
22149 SDValue N0 = peekThroughBitcasts(SVN->getOperand(0)); in combineTruncationShuffle() local
22151 unsigned Opcode = N0.getOpcode(); in combineTruncationShuffle()
22157 SDValue N00 = N0.getOperand(0); in combineTruncationShuffle()
22162 unsigned ExtDstSizeInBits = N0.getScalarValueSizeInBits(); in combineTruncationShuffle()
22465 SDValue N0 = N->getOperand(0); in visitVECTOR_SHUFFLE() local
22468 assert(N0.getValueType() == VT && "Vector shuffle must be normalized in DAG"); in visitVECTOR_SHUFFLE()
22471 if (N0.isUndef() && N1.isUndef()) in visitVECTOR_SHUFFLE()
22477 if (N0 == N1) in visitVECTOR_SHUFFLE()
22478 return DAG.getVectorShuffle(VT, SDLoc(N), N0, DAG.getUNDEF(VT), in visitVECTOR_SHUFFLE()
22482 if (N0.isUndef()) in visitVECTOR_SHUFFLE()
22498 return DAG.getVectorShuffle(VT, SDLoc(N), N0, N1, NewMask); in visitVECTOR_SHUFFLE()
22515 if (N0.hasOneUse() && TLI.isExtractVecEltCheap(VT, SplatIndex) && in visitVECTOR_SHUFFLE()
22516 TLI.isBinOp(N0.getOpcode()) && N0->getNumValues() == 1) { in visitVECTOR_SHUFFLE()
22519 SDValue L = N0.getOperand(0), R = N0.getOperand(1); in visitVECTOR_SHUFFLE()
22526 DAG.getNode(N0.getOpcode(), DL, EltVT, ExtL, ExtR, N0->getFlags()); in visitVECTOR_SHUFFLE()
22535 N0.hasOneUse()) { in visitVECTOR_SHUFFLE()
22536 if (N0.getOpcode() == ISD::SCALAR_TO_VECTOR && SplatIndex == 0) in visitVECTOR_SHUFFLE()
22537 return DAG.getSplatBuildVector(VT, SDLoc(N), N0.getOperand(0)); in visitVECTOR_SHUFFLE()
22539 if (N0.getOpcode() == ISD::INSERT_VECTOR_ELT) in visitVECTOR_SHUFFLE()
22540 if (auto *Idx = dyn_cast<ConstantSDNode>(N0.getOperand(2))) in visitVECTOR_SHUFFLE()
22542 return DAG.getSplatBuildVector(VT, SDLoc(N), N0.getOperand(1)); in visitVECTOR_SHUFFLE()
22548 SDNode *V = N0.getNode(); in visitVECTOR_SHUFFLE()
22569 return N0; in visitVECTOR_SHUFFLE()
22578 return N0; in visitVECTOR_SHUFFLE()
22610 if (N0.getOpcode() == ISD::CONCAT_VECTORS && in visitVECTOR_SHUFFLE()
22614 N0.getOperand(0).getValueType() == N1.getOperand(0).getValueType()))) { in visitVECTOR_SHUFFLE()
22622 if (N0.getOpcode() == ISD::CONCAT_VECTORS && N1.isUndef() && in visitVECTOR_SHUFFLE()
22623 N0.getNumOperands() == 2 && in visitVECTOR_SHUFFLE()
22624 N0.getOperand(0) == N0.getOperand(1)) { in visitVECTOR_SHUFFLE()
22636 SDValue UndefVec = DAG.getUNDEF(N0.getOperand(0).getValueType()); in visitVECTOR_SHUFFLE()
22638 N0.getOperand(0), UndefVec); in visitVECTOR_SHUFFLE()
22697 if (SDValue InsertN1 = ShuffleToInsert(N0, N1, Mask)) in visitVECTOR_SHUFFLE()
22699 if (N0.getOpcode() == ISD::CONCAT_VECTORS) { in visitVECTOR_SHUFFLE()
22702 if (SDValue InsertN0 = ShuffleToInsert(N1, N0, CommuteMask)) in visitVECTOR_SHUFFLE()
22730 DAG.MaskedVectorIsZero(N0, DemandedLHS)) && in visitVECTOR_SHUFFLE()
22753 VT, DAG.getVectorShuffle(IntVT, DL, DAG.getBitcast(IntVT, N0), in visitVECTOR_SHUFFLE()
22758 VT, DAG.getNode(ISD::AND, DL, IntVT, DAG.getBitcast(IntVT, N0), in visitVECTOR_SHUFFLE()
22773 if (N0.getOpcode() == ISD::BITCAST && N0.hasOneUse() && in visitVECTOR_SHUFFLE()
22777 SDValue BC0 = peekThroughOneUseBitcasts(N0); in visitVECTOR_SHUFFLE()
22953 N0.getOpcode() != ISD::VECTOR_SHUFFLE) { in visitVECTOR_SHUFFLE()
22961 bool HasSameOp0 = N0 == SV0; in visitVECTOR_SHUFFLE()
22963 if (HasSameOp0 || IsSV1Undef || N0 == SV1) in visitVECTOR_SHUFFLE()
22970 if (N0.getOpcode() == ISD::VECTOR_SHUFFLE && in visitVECTOR_SHUFFLE()
22972 cast<ShuffleVectorSDNode>(N0)->isSplat() && in visitVECTOR_SHUFFLE()
23012 unsigned SrcOpcode = N0.getOpcode(); in visitVECTOR_SHUFFLE()
23013 if (TLI.isBinOp(SrcOpcode) && N->isOnlyUserOf(N0.getNode()) && in visitVECTOR_SHUFFLE()
23017 SDValue Op00 = N0.getOperand(0); in visitVECTOR_SHUFFLE()
23018 SDValue Op01 = N0.getOperand(1); in visitVECTOR_SHUFFLE()
23033 SDValue InnerN = Commute ? N1 : N0; in visitVECTOR_SHUFFLE()
23146 SDValue N0 = N->getOperand(0); in visitINSERT_SUBVECTOR() local
23153 return N0; in visitINSERT_SUBVECTOR()
23157 if (N0.isUndef() && N1.getOpcode() == ISD::EXTRACT_SUBVECTOR && in visitINSERT_SUBVECTOR()
23163 if (N0.isUndef() && N1.getOpcode() == ISD::SPLAT_VECTOR) in visitINSERT_SUBVECTOR()
23170 if (N0.isUndef() && N1.getOpcode() == ISD::BITCAST && in visitINSERT_SUBVECTOR()
23184 if (N0.getOpcode() == ISD::BITCAST && N1.getOpcode() == ISD::BITCAST) { in visitINSERT_SUBVECTOR()
23185 SDValue CN0 = N0.getOperand(0); in visitINSERT_SUBVECTOR()
23201 if (N0.getOpcode() == ISD::INSERT_SUBVECTOR && in visitINSERT_SUBVECTOR()
23202 N0.getOperand(1).getValueType() == N1.getValueType() && in visitINSERT_SUBVECTOR()
23203 N0.getOperand(2) == N2) in visitINSERT_SUBVECTOR()
23204 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, N0.getOperand(0), in visitINSERT_SUBVECTOR()
23210 if (N0.isUndef() && N1.getOpcode() == ISD::INSERT_SUBVECTOR && in visitINSERT_SUBVECTOR()
23212 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, N0, in visitINSERT_SUBVECTOR()
23218 if ((N0.isUndef() || N0.getOpcode() == ISD::BITCAST) && in visitINSERT_SUBVECTOR()
23220 SDValue N0Src = peekThroughBitcasts(N0); in visitINSERT_SUBVECTOR()
23224 if ((N0.isUndef() || N0SrcSVT == N1SrcSVT) && in visitINSERT_SUBVECTOR()
23256 if (N0.getOpcode() == ISD::INSERT_SUBVECTOR && N0.hasOneUse() && in visitINSERT_SUBVECTOR()
23257 N1.getValueType() == N0.getOperand(1).getValueType()) { in visitINSERT_SUBVECTOR()
23258 unsigned OtherIdx = N0.getConstantOperandVal(2); in visitINSERT_SUBVECTOR()
23262 N0.getOperand(0), N1, N2); in visitINSERT_SUBVECTOR()
23264 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N0.getNode()), in visitINSERT_SUBVECTOR()
23265 VT, NewOp, N0.getOperand(1), N0.getOperand(2)); in visitINSERT_SUBVECTOR()
23271 if (N0.getOpcode() == ISD::CONCAT_VECTORS && N0.hasOneUse() && in visitINSERT_SUBVECTOR()
23272 N0.getOperand(0).getValueType() == N1.getValueType() && in visitINSERT_SUBVECTOR()
23273 N0.getOperand(0).getValueType().isScalableVector() == in visitINSERT_SUBVECTOR()
23276 SmallVector<SDValue, 8> Ops(N0->op_begin(), N0->op_end()); in visitINSERT_SUBVECTOR()
23289 SDValue N0 = N->getOperand(0); in visitFP_TO_FP16() local
23292 if (N0->getOpcode() == ISD::FP16_TO_FP) in visitFP_TO_FP16()
23293 return N0->getOperand(0); in visitFP_TO_FP16()
23299 SDValue N0 = N->getOperand(0); in visitFP16_TO_FP() local
23302 if (!TLI.shouldKeepZExtForFP16Conv() && N0->getOpcode() == ISD::AND) { in visitFP16_TO_FP()
23303 ConstantSDNode *AndConst = getAsNonOpaqueConstant(N0.getOperand(1)); in visitFP16_TO_FP()
23306 N0.getOperand(0)); in visitFP16_TO_FP()
23314 SDValue N0 = N->getOperand(0); in visitFP_TO_BF16() local
23317 if (N0->getOpcode() == ISD::BF16_TO_FP) in visitFP_TO_BF16()
23318 return N0->getOperand(0); in visitFP_TO_BF16()
23324 SDValue N0 = N->getOperand(0); in visitVECREDUCE() local
23325 EVT VT = N0.getValueType(); in visitVECREDUCE()
23332 DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, VT.getVectorElementType(), N0, in visitVECREDUCE()
23346 DAG.ComputeNumSignBits(N0) == VT.getScalarSizeInBits()) in visitVECREDUCE()
23347 return DAG.getNode(NewOpcode, SDLoc(N), N->getValueType(0), N0); in visitVECREDUCE()
23352 if (N0.getOpcode() == ISD::INSERT_SUBVECTOR && in visitVECREDUCE()
23353 TLI.isTypeLegal(N0.getOperand(1).getValueType())) { in visitVECREDUCE()
23354 SDValue Vec = N0.getOperand(0); in visitVECREDUCE()
23355 SDValue Subvec = N0.getOperand(1); in visitVECREDUCE()
23357 (N0.getOperand(0).isUndef() || isNullOrNullSplat(Vec))) || in visitVECREDUCE()
23359 (N0.getOperand(0).isUndef() || isAllOnesOrAllOnesSplat(Vec)))) in visitVECREDUCE()
23493 SDValue N0 = N->getOperand(0); in scalarizeBinOpOfSplats() local
23504 SDValue Src0 = DAG.getSplatSourceVector(N0, Index0); in scalarizeBinOpOfSplats()
23508 bool IsBothSplatVector = N0.getOpcode() == ISD::SPLAT_VECTOR && in scalarizeBinOpOfSplats()
23524 if (N0.getOpcode() == ISD::BUILD_VECTOR && N0.getOpcode() == N1.getOpcode() && in scalarizeBinOpOfSplats()
23525 count_if(N0->ops(), [](SDValue V) { return !V.isUndef(); }) == 1 && in scalarizeBinOpOfSplats()
23658 SDValue DAGCombiner::SimplifySelect(const SDLoc &DL, SDValue N0, SDValue N1, in SimplifySelect() argument
23660 assert(N0.getOpcode() ==ISD::SETCC && "First argument must be a SetCC node!"); in SimplifySelect()
23662 SDValue SCC = SimplifySelectCC(DL, N0.getOperand(0), N0.getOperand(1), N1, N2, in SimplifySelect()
23663 cast<CondCodeSDNode>(N0.getOperand(2))->get()); in SimplifySelect()
23672 const SDNodeFlags Flags = N0->getFlags(); in SimplifySelect()
23673 SDValue SETCC = DAG.getNode(ISD::SETCC, SDLoc(N0), in SimplifySelect()
23674 N0.getValueType(), in SimplifySelect()
23883 SDValue DAGCombiner::foldSelectCCToShiftAnd(const SDLoc &DL, SDValue N0, in foldSelectCCToShiftAnd() argument
23890 EVT XType = N0.getValueType(); in foldSelectCCToShiftAnd()
23901 if (!(isAllOnesConstant(N1) || (isNullConstant(N1) && N0 == N2))) in foldSelectCCToShiftAnd()
23906 if (!(isNullConstant(N1) || (isOneConstant(N1) && N0 == N2))) in foldSelectCCToShiftAnd()
23914 EVT ShiftAmtTy = getShiftAmountTy(N0.getValueType()); in foldSelectCCToShiftAnd()
23920 SDValue Shift = DAG.getNode(ISD::SRL, DL, XType, N0, ShiftAmt); in foldSelectCCToShiftAnd()
23940 SDValue Shift = DAG.getNode(ISD::SRA, DL, XType, N0, ShiftAmt); in foldSelectCCToShiftAnd()
23956 SDValue N0 = N->getOperand(0); in foldSelectOfBinops() local
23970 if (!N0->hasOneUse() || !N1->hasOneUse() || !N2->hasOneUse()) in foldSelectOfBinops()
23981 DAG.getSelect(DL, VT, N0, N1.getOperand(0), N2.getOperand(0)); in foldSelectOfBinops()
23995 DAG.getSelect(DL, VT, N0, N1.getOperand(1), N2.getOperand(1)); in foldSelectOfBinops()
24008 SDValue N0 = N->getOperand(0); in foldSignChangeInBitcast() local
24013 if (IsFree || N0.getOpcode() != ISD::BITCAST || !N0.hasOneUse()) in foldSignChangeInBitcast()
24016 SDValue Int = N0.getOperand(0); in foldSignChangeInBitcast()
24026 if (N0.getValueType().isVector()) { in foldSignChangeInBitcast()
24029 SignMask = APInt::getSignMask(N0.getScalarValueSizeInBits()); in foldSignChangeInBitcast()
24039 SDLoc DL(N0); in foldSignChangeInBitcast()
24051 const SDLoc &DL, SDValue N0, SDValue N1, SDValue N2, SDValue N3, in convertSelectOfFPConstantsToLoadOffset() argument
24053 if (!TLI.reduceSelectOfFPConstantLoads(N0.getValueType())) in convertSelectOfFPConstantsToLoadOffset()
24092 DAG.getSetCC(DL, getSetCCResultType(N0.getValueType()), N0, N1, CC); in convertSelectOfFPConstantsToLoadOffset()
24105 SDValue DAGCombiner::SimplifySelectCC(const SDLoc &DL, SDValue N0, SDValue N1, in SimplifySelectCC() argument
24111 EVT CmpOpVT = N0.getValueType(); in SimplifySelectCC()
24119 if (SDValue SCC = DAG.FoldSetCC(CmpResVT, N0, N1, CC, DL)) { in SimplifySelectCC()
24129 convertSelectOfFPConstantsToLoadOffset(DL, N0, N1, N2, N3, CC)) in SimplifySelectCC()
24132 if (SDValue V = foldSelectCCToShiftAnd(DL, N0, N1, N2, N3, CC)) in SimplifySelectCC()
24141 if (CC == ISD::SETEQ && N0->getOpcode() == ISD::AND && in SimplifySelectCC()
24142 N0->getValueType(0) == VT && isNullConstant(N1) && isNullConstant(N2)) { in SimplifySelectCC()
24143 SDValue AndLHS = N0->getOperand(0); in SimplifySelectCC()
24144 auto *ConstAndRHS = dyn_cast<ConstantSDNode>(N0->getOperand(1)); in SimplifySelectCC()
24153 SDValue Shl = DAG.getNode(ISD::SHL, SDLoc(N0), VT, AndLHS, ShlAmt); in SimplifySelectCC()
24160 SDValue Shr = DAG.getNode(ISD::SRA, SDLoc(N0), VT, Shl, ShrAmt); in SimplifySelectCC()
24189 SCC = DAG.getSetCC(DL, CmpResVT, N0, N1, CC); in SimplifySelectCC()
24195 SCC = DAG.getSetCC(SDLoc(N0), MVT::i1, N0, N1, CC); in SimplifySelectCC()
24236 N0 == Count.getOperand(0) && in SimplifySelectCC()
24238 return DAG.getNode(ISD::CTTZ, DL, VT, N0); in SimplifySelectCC()
24243 N0 == Count.getOperand(0) && in SimplifySelectCC()
24245 return DAG.getNode(ISD::CTLZ, DL, VT, N0); in SimplifySelectCC()
24258 ISD::SRA, DL, CmpOpVT, N0, in SimplifySelectCC()
24264 if (SDValue S = PerformMinMaxFpToSatCombine(N0, N1, N2, N3, CC, DAG)) in SimplifySelectCC()
24266 if (SDValue S = PerformUMinFpToSatCombine(N0, N1, N2, N3, CC, DAG)) in SimplifySelectCC()
24273 SDValue DAGCombiner::SimplifySetCC(EVT VT, SDValue N0, SDValue N1, in SimplifySetCC() argument
24278 return TLI.SimplifySetCC(VT, N0, N1, Cond, foldBooleans, DagCombineInfo, DL); in SimplifySetCC()