|
reference, declaration → definition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
|
References
lib/CodeGen/SelectionDAG/DAGCombiner.cpp 220 ForCodeSize = DAG.getMachineFunction().getFunction().hasOptSize();
687 SelectionDAG &getDAG() const { return DAG; }
693 return TLI.getShiftAmountTy(LHSTy, DAG.getDataLayout(), LegalTypes);
705 return TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
705 return TLI.getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
790 DAG.DeleteNode(N);
922 Type *AccessTy = VT.getTypeForEVT(*DAG.getContext());
923 if (!TLI.isLegalAddressingMode(DAG.getDataLayout(), AM, AccessTy, AS))
928 if (!TLI.isLegalAddressingMode(DAG.getDataLayout(), AM, AccessTy, AS))
949 if (SDNode *C1 = DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1))) {
950 if (SDNode *C2 = DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
952 if (SDValue OpNode = DAG.FoldConstantArithmetic(Opc, DL, VT, C1, C2))
953 return DAG.getNode(Opc, DL, VT, N0.getOperand(0), OpNode);
959 SDValue OpNode = DAG.getNode(Opc, SDLoc(N0), VT, N0.getOperand(0), N1);
962 return DAG.getNode(Opc, DL, VT, OpNode, N0.getOperand(1));
993 LLVM_DEBUG(dbgs() << "\nReplacing.1 "; N->dump(&DAG); dbgs() << "\nWith: ";
994 To[0].getNode()->dump(&DAG);
1002 DAG.ReplaceAllUsesWith(N, To);
1026 DAG.ReplaceAllUsesOfValueWith(TLO.Old, TLO.New);
1043 TargetLowering::TargetLoweringOpt TLO(DAG, LegalTypes, LegalOperations);
1053 LLVM_DEBUG(dbgs() << "\nReplacing.2 "; TLO.Old.getNode()->dump(&DAG);
1054 dbgs() << "\nWith: "; TLO.New.getNode()->dump(&DAG);
1067 TargetLowering::TargetLoweringOpt TLO(DAG, LegalTypes, LegalOperations);
1078 LLVM_DEBUG(dbgs() << "\nReplacing.2 "; TLO.Old.getNode()->dump(&DAG);
1079 dbgs() << "\nWith: "; TLO.New.getNode()->dump(&DAG);
1089 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, DL, VT, SDValue(ExtLoad, 0));
1091 LLVM_DEBUG(dbgs() << "\nReplacing.9 "; Load->dump(&DAG); dbgs() << "\nWith: ";
1092 Trunc.getNode()->dump(&DAG); dbgs() << '\n');
1094 DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 0), Trunc);
1095 DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 1), SDValue(ExtLoad, 1));
1109 return DAG.getExtLoad(ExtType, DL, PVT,
1119 return DAG.getNode(ISD::AssertSext, DL, PVT, Op0, Op.getOperand(1));
1123 return DAG.getNode(ISD::AssertZext, DL, PVT, Op0, Op.getOperand(1));
1128 return DAG.getNode(ExtOpc, DL, PVT, Op);
1134 return DAG.getNode(ISD::ANY_EXTEND, DL, PVT, Op);
1150 return DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, NewOp.getValueType(), NewOp,
1151 DAG.getValueType(OldVT));
1165 return DAG.getZeroExtendInReg(NewOp, DL, OldVT);
1191 LLVM_DEBUG(dbgs() << "\nPromoting "; Op.getNode()->dump(&DAG));
1203 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, NN0, NN1));
1203 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, NN0, NN1));
1256 LLVM_DEBUG(dbgs() << "\nPromoting "; Op.getNode()->dump(&DAG));
1273 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, N0, N1));
1273 DAG.getNode(ISD::TRUNCATE, DL, VT, DAG.getNode(Opc, DL, PVT, N0, N1));
1307 LLVM_DEBUG(dbgs() << "\nPromoting "; Op.getNode()->dump(&DAG));
1308 return DAG.getNode(Op.getOpcode(), SDLoc(Op), VT, Op.getOperand(0));
1342 SDValue NewLD = DAG.getExtLoad(ExtType, DL, PVT,
1345 SDValue Result = DAG.getNode(ISD::TRUNCATE, DL, VT, NewLD);
1347 LLVM_DEBUG(dbgs() << "\nPromoting "; N->dump(&DAG); dbgs() << "\nTo: ";
1348 Result.getNode()->dump(&DAG); dbgs() << '\n');
1350 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result);
1351 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), NewLD.getValue(1));
1381 DAG.DeleteNode(N);
1402 for (SDNode &Node : DAG.allnodes())
1408 HandleSDNode Dummy(DAG.getRoot());
1424 bool NIsValid = DAG.LegalizeOp(N, UpdatedNodes);
1434 LLVM_DEBUG(dbgs() << "\nCombining: "; N->dump(&DAG));
1462 LLVM_DEBUG(dbgs() << " ... into: "; RV.getNode()->dump(&DAG));
1465 DAG.ReplaceAllUsesWith(N, RV.getNode());
1469 DAG.ReplaceAllUsesWith(N, &RV);
1484 DAG.setRoot(Dummy.getValue());
1485 DAG.RemoveDeadNodes();
1635 DagCombineInfo(DAG, Level, false, this);
1680 SDNode *CSENode = DAG.getNodeIfExists(N->getOpcode(), N->getVTList(), Ops,
1870 Result = DAG.getEntryNode();
1879 Result = DAG.getTokenFactor(SDLoc(N), PrunedOps);
1881 Result = DAG.getTokenFactor(SDLoc(N), Ops);
1903 DAG.ReplaceAllUsesWith(N, Ops.data());
1975 SDValue NewCT = SelOpNo ? DAG.getNode(BinOpcode, DL, VT, CBO, CT)
1976 : DAG.getNode(BinOpcode, DL, VT, CT, CBO);
1982 SDValue NewCF = SelOpNo ? DAG.getNode(BinOpcode, DL, VT, CBO, CF)
1983 : DAG.getNode(BinOpcode, DL, VT, CF, CBO);
1989 SDValue SelectOp = DAG.getSelect(DL, VT, Sel.getOperand(0), NewCT, NewCF);
2099 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
2101 if (!DAG.isConstantIntBuildVectorOrConstantInt(N1))
2102 return DAG.getNode(ISD::ADD, DL, VT, N1, N0);
2104 return DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, N0.getNode(),
2116 SDValue Sub = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N1.getNode(),
2119 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), Sub);
2125 SDValue Add = DAG.FoldConstantArithmetic(ISD::ADD, DL, VT, N1.getNode(),
2128 return DAG.getNode(ISD::SUB, DL, VT, Add, N0.getOperand(1));
2142 SDValue Not = DAG.getNOT(DL, X, X.getValueType());
2143 return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Not);
2151 DAG.haveNoCommonBitsSet(N0.getOperand(0), N0.getOperand(1))) {
2152 SDValue Add0 = DAG.getNode(ISD::ADD, DL, VT, N1, N0.getOperand(1));
2153 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), Add0);
2167 return DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1));
2171 return DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(1));
2184 return DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(0),
2190 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0),
2196 return DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(0),
2202 return DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(0),
2209 return DAG.getNode(N1.getOpcode(), DL, VT, N1.getOperand(0).getOperand(0),
2220 return DAG.getNode(ISD::SUB, DL, VT,
2221 DAG.getNode(ISD::ADD, SDLoc(N0), VT, N00, N10),
2222 DAG.getNode(ISD::ADD, SDLoc(N1), VT, N01, N11));
2233 return DAG.getNode(ISD::USUBSAT, DL, VT, N0.getOperand(0),
2243 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT),
2243 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT),
2261 return DAG.getNode(ISD::SUB, DL, VT, A, Xor.getOperand(0));
2270 SDValue Not = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(0),
2271 DAG.getAllOnesConstant(DL, VT));
2272 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(1), Not);
2279 SDValue Xor = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1), N1);
2280 return DAG.getNode(ISD::ADD, DL, VT, Xor, N0.getOperand(0));
2301 if (SDValue V = foldAddSubBoolOfMaskedVal(N, DAG))
2304 if (SDValue V = foldAddSubOfSignBit(N, DAG))
2309 DAG.haveNoCommonBitsSet(N0, N1))
2310 return DAG.getNode(ISD::OR, DL, VT, N0, N1);
2335 return DAG.getAllOnesConstant(DL, VT);
2337 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
2339 if (!DAG.isConstantIntBuildVectorOrConstantInt(N1))
2340 return DAG.getNode(Opcode, DL, VT, N1, N0);
2342 return DAG.FoldConstantArithmetic(Opcode, DL, VT, N0.getNode(),
2352 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never)
2353 return DAG.getNode(ISD::ADD, DL, VT, N0, N1);
2426 return DAG.getNode(ISD::SUB, DL, VT, N0,
2427 DAG.getNode(ISD::SHL, DL, VT,
2431 if (SDValue V = foldAddSubMasked1(true, N0, N1, DAG, DL))
2440 SDValue Not = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(0),
2441 DAG.getAllOnesConstant(DL, VT));
2442 return DAG.getNode(ISD::SUB, DL, VT, N1, Not);
2450 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), N1);
2451 return DAG.getNode(ISD::SUB, DL, VT, Add, N0.getOperand(1));
2457 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N1, N0.getOperand(1));
2458 return DAG.getNode(ISD::ADD, DL, VT, Sub, N0.getOperand(0));
2467 SDValue ZExt = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0));
2468 return DAG.getNode(ISD::SUB, DL, VT, N1, ZExt);
2475 SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
2476 DAG.getConstant(1, DL, VT));
2477 return DAG.getNode(ISD::SUB, DL, VT, N0, ZExt);
2484 return DAG.getNode(ISD::ADDCARRY, DL, N1->getVTList(),
2490 return DAG.getNode(ISD::ADDCARRY, DL,
2491 DAG.getVTList(VT, Carry.getValueType()), N0,
2492 DAG.getConstant(0, DL, VT), Carry);
2505 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2506 DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2512 return DAG.getNode(ISD::ADDC, DL, N->getVTList(), N1, N0);
2516 return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE,
2520 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never)
2521 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2522 DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
2598 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2599 DAG.getUNDEF(CarryVT));
2602 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
2603 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
2604 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0);
2608 return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT));
2612 if (DAG.computeOverflowKind(N0, N1) == SelectionDAG::OFK_Never)
2613 return CombineTo(N, DAG.getNode(ISD::ADD, DL, VT, N0, N1),
2614 DAG.getConstant(0, DL, CarryVT));
2618 SDValue Sub = DAG.getNode(ISD::USUBO, DL, N->getVTList(),
2619 DAG.getConstant(0, DL, VT), N0.getOperand(0));
2621 flipBoolean(Sub.getValue(1), DL, DAG, TLI));
2643 SDValue One = DAG.getConstant(1, SDLoc(N), Y.getValueType());
2644 if (DAG.computeOverflowKind(Y, One) == SelectionDAG::OFK_Never)
2645 return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0, Y,
2652 return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0,
2653 DAG.getConstant(0, SDLoc(N), VT), Carry);
2667 return DAG.getNode(ISD::ADDE, SDLoc(N), N->getVTList(),
2672 return DAG.getNode(ISD::ADDC, SDLoc(N), N->getVTList(), N0, N1);
2687 return DAG.getNode(ISD::ADDCARRY, DL, N->getVTList(), N1, N0, CarryIn);
2693 return DAG.getNode(ISD::UADDO, DL, N->getVTList(), N0, N1);
2700 SDValue CarryExt = DAG.getBoolExtOrTrunc(CarryIn, DL, VT, CarryVT);
2702 return CombineTo(N, DAG.getNode(ISD::AND, DL, VT, CarryExt,
2703 DAG.getConstant(1, DL, VT)),
2704 DAG.getConstant(0, DL, CarryVT));
2807 if (SDValue NotC = extractBooleanFlip(CarryIn, DAG, TLI, true)) {
2809 SDValue Sub = DAG.getNode(ISD::SUBCARRY, DL, N->getVTList(), N1,
2812 flipBoolean(Sub.getValue(1), DL, DAG, TLI));
2823 return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(),
2833 if (auto R = combineADDCARRYDiamond(*this, DAG, N0, Y, CarryIn, N))
2835 if (auto R = combineADDCARRYDiamond(*this, DAG, N0, CarryIn, Y, N))
2872 return tryFoldToZero(DL, TLI, VT, DAG, LegalOperations);
2873 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
2874 DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
2876 return DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N0.getNode(),
2887 return DAG.getNode(ISD::ADD, DL, VT, N0,
2888 DAG.getConstant(-N1C->getAPIntValue(), DL, VT));
2902 return DAG.getNode(NewSh, DL, VT, N1.getOperand(0), N1.getOperand(1));
2910 if (DAG.MaskedValueIsZero(N1, ~APInt::getSignMask(BitWidth))) {
2923 return DAG.getNode(ISD::XOR, DL, VT, N1, N0);
2927 return DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(1));
2945 SDValue NewC = DAG.FoldConstantArithmetic(
2948 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), NewC);
2956 SDValue NewC = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N0.getNode(),
2959 return DAG.getNode(ISD::SUB, DL, VT, NewC, N1.getOperand(0));
2967 SDValue NewC = DAG.FoldConstantArithmetic(
2970 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), NewC);
2977 SDValue NewC = DAG.FoldConstantArithmetic(
2980 return DAG.getNode(ISD::SUB, DL, VT, NewC, N0.getOperand(1));
2988 return DAG.getNode(N0.getOperand(1).getOpcode(), DL, VT, N0.getOperand(0),
2994 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0),
3000 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0),
3005 return DAG.getNode(ISD::ADD, DL, VT, N0,
3006 DAG.getNode(ISD::SUB, DL, VT, N1.getOperand(1),
3013 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT,
3016 return DAG.getNode(ISD::ADD, DL, VT, N0, Mul);
3020 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT,
3023 return DAG.getNode(ISD::ADD, DL, VT, N0, Mul);
3033 if (SDValue V = foldAddSubBoolOfMaskedVal(N, DAG))
3036 if (SDValue V = foldAddSubOfSignBit(N, DAG))
3039 if (SDValue V = foldAddSubMasked1(false, N0, N1, DAG, SDLoc(N)))
3044 SDValue Xor = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1),
3045 DAG.getAllOnesConstant(DL, VT));
3046 return DAG.getNode(ISD::ADD, DL, VT, Xor, N0.getOperand(0));
3054 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(0));
3055 return DAG.getNode(ISD::ADD, DL, VT, Add, DAG.getConstant(1, DL, VT));
3055 return DAG.getNode(ISD::ADD, DL, VT, Add, DAG.getConstant(1, DL, VT));
3062 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1);
3063 return DAG.getNode(ISD::ADD, DL, VT, Sub, N0.getOperand(1));
3068 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(0));
3069 return DAG.getNode(ISD::SUB, DL, VT, Sub, N1.getOperand(1));
3075 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1);
3076 return DAG.getNode(ISD::SUB, DL, VT, Sub, N0.getOperand(1));
3081 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1), N1);
3082 return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), Add);
3092 SDValue SExt = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, N1.getOperand(0));
3093 return DAG.getNode(ISD::ADD, DL, VT, N0, SExt);
3105 return DAG.getNode(ISD::ABS, SDLoc(N), VT, S0);
3115 return DAG.getGlobalAddress(GA->getGlobal(), SDLoc(N1C), VT,
3121 return DAG.getConstant((uint64_t)GA->getOffset() - GB->getOffset(),
3129 SDValue ZExt = DAG.getNode(ISD::AND, DL, VT, N1.getOperand(0),
3130 DAG.getConstant(1, DL, VT));
3131 return DAG.getNode(ISD::ADD, DL, VT, N0, ZExt);
3142 SDValue SRA = DAG.getNode(ISD::SRA, DL, VT, N1.getOperand(0), ShAmt);
3143 return DAG.getNode(ISD::ADD, DL, VT, N0, SRA);
3151 SDValue Zero = DAG.getConstant(0, DL, VT);
3152 SDValue NegX = DAG.getNode(ISD::SUB, DL, VT, Zero, X);
3153 return DAG.getNode(ISD::ADDCARRY, DL,
3154 DAG.getVTList(VT, Carry.getValueType()), NegX, Zero,
3179 return DAG.getConstant(0, DL, VT);
3183 return DAG.getConstant(0, DL, VT);
3185 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
3186 DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
3188 return DAG.FoldConstantArithmetic(N->getOpcode(), DL, VT, N0.getNode(),
3207 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1),
3208 DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
3212 return CombineTo(N, DAG.getConstant(0, DL, VT),
3213 DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
3217 return CombineTo(N, N0, DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
3221 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0),
3222 DAG.getNode(ISD::CARRY_FALSE, DL, MVT::Glue));
3238 return CombineTo(N, DAG.getNode(ISD::SUB, DL, VT, N0, N1),
3239 DAG.getUNDEF(CarryVT));
3243 return CombineTo(N, DAG.getConstant(0, DL, VT),
3244 DAG.getConstant(0, DL, CarryVT));
3250 return DAG.getNode(ISD::SADDO, DL, N->getVTList(), N0,
3251 DAG.getConstant(-N1C->getAPIntValue(), DL, VT));
3256 return CombineTo(N, N0, DAG.getConstant(0, DL, CarryVT));
3260 return CombineTo(N, DAG.getNode(ISD::XOR, DL, VT, N1, N0),
3261 DAG.getConstant(0, DL, CarryVT));
3273 return DAG.getNode(ISD::SUBC, SDLoc(N), N->getVTList(), N0, N1);
3287 return DAG.getNode(ISD::USUBO, SDLoc(N), N->getVTList(), N0, N1);
3303 return DAG.getConstant(0, SDLoc(N), VT);
3306 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
3307 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
3308 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0, Scale);
3312 return DAG.getConstant(0, SDLoc(N), VT);
3324 return DAG.getConstant(0, SDLoc(N), VT);
3359 return DAG.FoldConstantArithmetic(ISD::MUL, SDLoc(N), VT,
3363 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
3364 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
3365 return DAG.getNode(ISD::MUL, SDLoc(N), VT, N1, N0);
3379 return DAG.getNode(ISD::SUB, DL, VT,
3380 DAG.getConstant(0, DL, VT), N0);
3384 DAG.isKnownToBeAPowerOfTwo(N1) &&
3389 SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ShiftVT);
3390 return DAG.getNode(ISD::SHL, DL, VT, N0, Trunc);
3398 return DAG.getNode(ISD::SUB, DL, VT,
3399 DAG.getConstant(0, DL, VT),
3400 DAG.getNode(ISD::SHL, DL, VT, N0,
3401 DAG.getConstant(Log2Val, DL,
3412 if (N1IsConst && TLI.decomposeMulByConstant(*DAG.getContext(), VT, N1)) {
3430 DAG.getNode(ISD::SHL, DL, VT, N0, DAG.getConstant(ShAmt, DL, VT));
3430 DAG.getNode(ISD::SHL, DL, VT, N0, DAG.getConstant(ShAmt, DL, VT));
3431 SDValue R = DAG.getNode(MathOp, DL, VT, Shl, N0);
3433 R = DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), R);
3433 R = DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), R);
3442 SDValue C3 = DAG.getNode(ISD::SHL, SDLoc(N), VT, N1, N0.getOperand(1));
3444 return DAG.getNode(ISD::MUL, SDLoc(N), VT, N0.getOperand(0), C3);
3464 SDValue Mul = DAG.getNode(ISD::MUL, SDLoc(N), VT, Sh.getOperand(0), Y);
3465 return DAG.getNode(ISD::SHL, SDLoc(N), VT, Mul, Sh.getOperand(1));
3470 if (DAG.isConstantIntBuildVectorOrConstantInt(N1) &&
3472 DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1)) &&
3474 return DAG.getNode(ISD::ADD, SDLoc(N), VT,
3475 DAG.getNode(ISD::MUL, SDLoc(N0), VT,
3477 DAG.getNode(ISD::MUL, SDLoc(N1), VT,
3559 SDVTList VTs = DAG.getVTList(VT, VT);
3560 combined = DAG.getNode(DivRemOpc, SDLoc(Node), VTs, Op0, Op1);
3640 return DAG.FoldConstantArithmetic(ISD::SDIV, DL, VT, N0C, N1C);
3643 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), N0);
3643 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), N0);
3646 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3646 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3647 DAG.getConstant(1, DL, VT),
3648 DAG.getConstant(0, DL, VT));
3650 if (SDValue V = simplifyDivRem(N, DAG))
3658 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
3658 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
3659 return DAG.getNode(ISD::UDIV, DL, N1.getValueType(), N0, N1);
3664 if (SDNode *RemNode = DAG.getNodeIfExists(ISD::SREM, N->getVTList(),
3666 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, V, N1);
3667 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul);
3678 AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
3715 SDValue Bits = DAG.getConstant(BitWidth, DL, ShiftAmtTy);
3716 SDValue C1 = DAG.getNode(ISD::CTTZ, DL, VT, N1);
3717 C1 = DAG.getZExtOrTrunc(C1, DL, ShiftAmtTy);
3718 SDValue Inexact = DAG.getNode(ISD::SUB, DL, ShiftAmtTy, Bits, C1);
3723 SDValue Sign = DAG.getNode(ISD::SRA, DL, VT, N0,
3724 DAG.getConstant(BitWidth - 1, DL, ShiftAmtTy));
3728 SDValue Srl = DAG.getNode(ISD::SRL, DL, VT, Sign, Inexact);
3730 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, Srl);
3732 SDValue Sra = DAG.getNode(ISD::SRA, DL, VT, Add, C1);
3737 SDValue One = DAG.getConstant(1, DL, VT);
3738 SDValue AllOnes = DAG.getAllOnesConstant(DL, VT);
3739 SDValue IsOne = DAG.getSetCC(DL, CCVT, N1, One, ISD::SETEQ);
3740 SDValue IsAllOnes = DAG.getSetCC(DL, CCVT, N1, AllOnes, ISD::SETEQ);
3741 SDValue IsOneOrAllOnes = DAG.getNode(ISD::OR, DL, CCVT, IsOne, IsAllOnes);
3742 Sra = DAG.getSelect(DL, VT, IsOneOrAllOnes, N0, Sra);
3746 SDValue Zero = DAG.getConstant(0, DL, VT);
3747 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, Zero, Sra);
3750 SDValue IsNeg = DAG.getSetCC(DL, CCVT, N1, Zero, ISD::SETLT);
3751 SDValue Res = DAG.getSelect(DL, VT, IsNeg, Sub, Sra);
3758 AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
3784 if (SDValue Folded = DAG.FoldConstantArithmetic(ISD::UDIV, DL, VT,
3789 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3789 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3790 DAG.getConstant(1, DL, VT),
3791 DAG.getConstant(0, DL, VT));
3793 if (SDValue V = simplifyDivRem(N, DAG))
3802 if (SDNode *RemNode = DAG.getNodeIfExists(ISD::UREM, N->getVTList(),
3804 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, V, N1);
3805 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul);
3816 AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
3830 DAG.isKnownToBeAPowerOfTwo(N1)) {
3835 SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ShiftVT);
3837 return DAG.getNode(ISD::SRL, DL, VT, N0, Trunc);
3844 DAG.isKnownToBeAPowerOfTwo(N10)) {
3849 SDValue Trunc = DAG.getZExtOrTrunc(LogBase2, DL, ADDVT);
3851 SDValue Add = DAG.getNode(ISD::ADD, DL, ADDVT, N1.getOperand(1), Trunc);
3853 return DAG.getNode(ISD::SRL, DL, VT, N0, Add);
3858 AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
3882 if (SDValue Folded = DAG.FoldConstantArithmetic(Opcode, DL, VT, N0C, N1C))
3886 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3886 return DAG.getSelect(DL, VT, DAG.getSetCC(DL, CCVT, N0, N1, ISD::SETEQ),
3887 DAG.getConstant(0, DL, VT), N0);
3889 if (SDValue V = simplifyDivRem(N, DAG))
3898 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
3898 if (DAG.SignBitIsZero(N1) && DAG.SignBitIsZero(N0))
3899 return DAG.getNode(ISD::UREM, DL, VT, N0, N1);
3901 SDValue NegOne = DAG.getAllOnesConstant(DL, VT);
3902 if (DAG.isKnownToBeAPowerOfTwo(N1)) {
3904 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne);
3906 return DAG.getNode(ISD::AND, DL, VT, N0, Add);
3909 DAG.isKnownToBeAPowerOfTwo(N1.getOperand(0))) {
3911 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N1, NegOne);
3913 return DAG.getNode(ISD::AND, DL, VT, N0, Add);
3917 AttributeList Attr = DAG.getMachineFunction().getFunction().getAttributes();
3926 if (DAG.isKnownNeverZero(N1) && !TLI.isIntDivCheap(VT, Attr)) {
3932 if (SDNode *DivNode = DAG.getNodeIfExists(DivOpcode, N->getVTList(),
3935 SDValue Mul = DAG.getNode(ISD::MUL, DL, VT, OptimizedDiv, N1);
3936 SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, Mul);
3961 return DAG.getConstant(0, DL, VT);
3969 return DAG.getNode(ISD::SRA, DL, N0.getValueType(), N0,
3970 DAG.getConstant(N0.getScalarValueSizeInBits() - 1, DL,
3975 return DAG.getConstant(0, DL, VT);
3982 EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
3984 N0 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N0);
3985 N1 = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N1);
3986 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
3987 N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
3988 DAG.getConstant(SimpleSize, DL,
3990 return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
4008 return DAG.getConstant(0, DL, VT);
4016 return DAG.getConstant(0, DL, N0.getValueType());
4019 return DAG.getConstant(0, DL, VT);
4023 DAG.isKnownToBeAPowerOfTwo(N1) && hasOperation(ISD::SRL, VT)) {
4026 SDValue SRLAmt = DAG.getNode(
4027 ISD::SUB, DL, VT, DAG.getConstant(NumEltBits, DL, VT), LogBase2);
4029 SDValue Trunc = DAG.getZExtOrTrunc(SRLAmt, DL, ShiftVT);
4030 return DAG.getNode(ISD::SRL, DL, VT, N0, Trunc);
4038 EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
4040 N0 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N0);
4041 N1 = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N1);
4042 N1 = DAG.getNode(ISD::MUL, DL, NewVT, N0, N1);
4043 N1 = DAG.getNode(ISD::SRL, DL, NewVT, N1,
4044 DAG.getConstant(SimpleSize, DL,
4046 return DAG.getNode(ISD::TRUNCATE, DL, VT, N1);
4062 SDValue Res = DAG.getNode(LoOp, SDLoc(N), N->getValueType(0), N->ops());
4070 SDValue Res = DAG.getNode(HiOp, SDLoc(N), N->getValueType(1), N->ops());
4080 SDValue Lo = DAG.getNode(LoOp, SDLoc(N), N->getValueType(0), N->ops());
4090 SDValue Hi = DAG.getNode(HiOp, SDLoc(N), N->getValueType(1), N->ops());
4114 EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
4116 SDValue Lo = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(0));
4117 SDValue Hi = DAG.getNode(ISD::SIGN_EXTEND, DL, NewVT, N->getOperand(1));
4118 Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
4120 Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
4121 DAG.getConstant(SimpleSize, DL,
4123 Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
4125 Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
4142 SDValue Zero = DAG.getConstant(0, DL, VT);
4148 SDValue Zero = DAG.getConstant(0, DL, VT);
4157 EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), SimpleSize*2);
4159 SDValue Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(0));
4160 SDValue Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, NewVT, N->getOperand(1));
4161 Lo = DAG.getNode(ISD::MUL, DL, NewVT, Lo, Hi);
4163 Hi = DAG.getNode(ISD::SRL, DL, NewVT, Lo,
4164 DAG.getConstant(SimpleSize, DL,
4166 Hi = DAG.getNode(ISD::TRUNCATE, DL, VT, Hi);
4168 Lo = DAG.getNode(ISD::TRUNCATE, DL, VT, Lo);
4186 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
4187 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
4188 return DAG.getNode(N->getOpcode(), DL, N->getVTList(), N1, N0);
4192 return CombineTo(N, DAG.getConstant(0, DL, VT),
4193 DAG.getConstant(0, DL, CarryVT));
4198 return DAG.getNode(IsSigned ? ISD::SADDO : ISD::UADDO, DL,
4218 return DAG.FoldConstantArithmetic(N->getOpcode(), SDLoc(N), VT, N0C, N1C);
4221 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
4222 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
4223 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N1, N0);
4228 const TargetLowering &TLI = DAG.getTargetLoweringInfo();
4230 (N0.isUndef() || DAG.SignBitIsZero(N0)) &&
4231 (N1.isUndef() || DAG.SignBitIsZero(N1))) {
4241 return DAG.getNode(AltOpcode, SDLoc(N), VT, N0, N1);
4290 SDValue Logic = DAG.getNode(LogicOpcode, DL, XVT, X, Y);
4291 return DAG.getNode(HandOpcode, DL, VT, Logic);
4312 SDValue Logic = DAG.getNode(LogicOpcode, DL, XVT, X, Y);
4313 return DAG.getNode(HandOpcode, DL, VT, Logic);
4324 SDValue Logic = DAG.getNode(LogicOpcode, DL, XVT, X, Y);
4325 return DAG.getNode(HandOpcode, DL, VT, Logic, N0.getOperand(1));
4333 SDValue Logic = DAG.getNode(LogicOpcode, DL, XVT, X, Y);
4334 return DAG.getNode(HandOpcode, DL, VT, Logic);
4350 SDValue Logic = DAG.getNode(LogicOpcode, DL, XVT, X, Y);
4351 return DAG.getNode(HandOpcode, DL, VT, Logic);
4385 ShOp = tryFoldToZero(DL, TLI, VT, DAG, LegalOperations);
4389 SDValue Logic = DAG.getNode(LogicOpcode, DL, VT,
4391 return DAG.getVectorShuffle(VT, DL, Logic, ShOp, SVN0->getMask());
4398 ShOp = tryFoldToZero(DL, TLI, VT, DAG, LegalOperations);
4402 SDValue Logic = DAG.getNode(LogicOpcode, DL, VT, N0.getOperand(1),
4404 return DAG.getVectorShuffle(VT, DL, ShOp, Logic, SVN0->getMask());
4457 SDValue Or = DAG.getNode(ISD::OR, SDLoc(N0), OpVT, LL, RL);
4459 return DAG.getSetCC(DL, VT, Or, LR, CC1);
4476 SDValue And = DAG.getNode(ISD::AND, SDLoc(N0), OpVT, LL, RL);
4478 return DAG.getSetCC(DL, VT, And, LR, CC1);
4488 SDValue One = DAG.getConstant(1, DL, OpVT);
4489 SDValue Two = DAG.getConstant(2, DL, OpVT);
4490 SDValue Add = DAG.getNode(ISD::ADD, SDLoc(N0), OpVT, LL, One);
4492 return DAG.getSetCC(DL, VT, Add, Two, ISD::SETUGE);
4502 SDValue XorL = DAG.getNode(ISD::XOR, SDLoc(N0), OpVT, LL, LR);
4503 SDValue XorR = DAG.getNode(ISD::XOR, SDLoc(N1), OpVT, RL, RR);
4504 SDValue Or = DAG.getNode(ISD::OR, DL, OpVT, XorL, XorR);
4505 SDValue Zero = DAG.getConstant(0, DL, OpVT);
4506 return DAG.getSetCC(DL, VT, Or, Zero, CC1);
4526 SDValue OffsetC = DAG.getConstant(-C1Val, DL, OpVT);
4527 SDValue Add = DAG.getNode(ISD::ADD, DL, OpVT, LL, OffsetC);
4528 SDValue MaskC = DAG.getConstant(~(C0Val - C1Val), DL, OpVT);
4529 SDValue And = DAG.getNode(ISD::AND, DL, OpVT, Add, MaskC);
4530 SDValue Zero = DAG.getConstant(0, DL, OpVT);
4531 return DAG.getSetCC(DL, VT, And, Zero, CC0);
4552 return DAG.getSetCC(DL, VT, LL, LR, NewCC);
4568 return DAG.getConstant(0, DL, VT);
4588 if (DAG.MaskedValueIsZero(N0.getOperand(1), Mask)) {
4593 DAG.getNode(ISD::ADD, DL0, VT,
4594 N0.getOperand(0), DAG.getConstant(ADDC, DL, VT));
4620 EVT HalfVT = EVT::getIntegerVT(*DAG.getContext(), Size / 2);
4640 EVT ShiftVT = TLI.getShiftAmountTy(HalfVT, DAG.getDataLayout());
4641 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, HalfVT,
4644 SDValue NewMask = DAG.getConstant(AndMask.trunc(Size / 2), SL, HalfVT);
4645 SDValue ShiftK = DAG.getConstant(ShiftBits, SL, ShiftVT);
4646 SDValue Shift = DAG.getNode(ISD::SRL, SL, HalfVT, Trunc, ShiftK);
4647 SDValue And = DAG.getNode(ISD::AND, SL, HalfVT, Shift, NewMask);
4648 return DAG.getNode(ISD::ZERO_EXTEND, SL, VT, And);
4664 ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
4718 !TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), MemVT,
4718 !TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), MemVT,
4815 EVT ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
4974 SDValue T0 = DAG.getNode(InnerShift, DL, VT, X, Y);
4976 SDValue T1 = DAG.getNode(OuterShift, DL, VT, T0, Y);
5051 return DAG.getConstant(APInt::getNullValue(N0.getScalarValueSizeInBits()),
5055 return DAG.getConstant(APInt::getNullValue(N1.getScalarValueSizeInBits()),
5069 return DAG.FoldConstantArithmetic(ISD::AND, SDLoc(N), VT, N0C, N1C);
5071 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
5072 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
5073 return DAG.getNode(ISD::AND, SDLoc(N), VT, N1, N0);
5079 if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
5081 return DAG.getConstant(0, SDLoc(N), VT);
5107 if (DAG.MaskedValueIsZero(N0Op0, Mask)) {
5108 SDValue Zext = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N),
5206 NewLoad = DAG.getLoad(Load->getAddressingMode(), ISD::ZEXTLOAD,
5236 DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 0), Res);
5246 if (BackwardsPropagateMask(N, DAG)) {
5274 return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT, SubRHS.getOperand(0));
5295 if (DAG.MaskedValueIsZero(N1, ExtBits) &&
5299 DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(N0), VT, LN0->getChain(),
5318 if (SDValue V = combineShiftAnd1ToBitTest(N, DAG))
5422 !DAG.MaskedValueIsZero(
5427 SDValue Res = DAG.getNode(ISD::BSWAP, SDLoc(N), VT, N00);
5430 Res = DAG.getNode(ISD::SRL, DL, VT, Res,
5431 DAG.getConstant(OpSizeInBits - 16, DL,
5587 SDValue BSwap = DAG.getNode(ISD::BSWAP, DL, VT,
5592 SDValue ShAmt = DAG.getConstant(16, DL, getShiftAmountTy(VT));
5594 return DAG.getNode(ISD::ROTL, DL, VT, BSwap, ShAmt);
5596 return DAG.getNode(ISD::ROTR, DL, VT, BSwap, ShAmt);
5597 return DAG.getNode(ISD::OR, DL, VT,
5598 DAG.getNode(ISD::SHL, DL, VT, BSwap, ShAmt),
5599 DAG.getNode(ISD::SRL, DL, VT, BSwap, ShAmt));
5610 return DAG.getAllOnesConstant(DL, VT);
5630 if (DAG.MaskedValueIsZero(N0.getOperand(0), RHSMask&~LHSMask) &&
5631 DAG.MaskedValueIsZero(N1.getOperand(0), LHSMask&~RHSMask)) {
5632 SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT,
5634 return DAG.getNode(ISD::AND, DL, VT, X,
5635 DAG.getConstant(LHSMask | RHSMask, DL, VT));
5647 SDValue X = DAG.getNode(ISD::OR, SDLoc(N0), VT,
5649 return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), X);
5695 return DAG.getAllOnesConstant(SDLoc(N), N0.getValueType());
5698 return DAG.getAllOnesConstant(SDLoc(N), N1.getValueType());
5756 Mask, DAG);
5768 return DAG.FoldConstantArithmetic(ISD::OR, SDLoc(N), VT, N0C, N1C);
5770 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
5771 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
5772 return DAG.getNode(ISD::OR, SDLoc(N), VT, N1, N0);
5784 if (N1C && DAG.MaskedValueIsZero(N0, ~N1C->getAPIntValue()))
5807 if (SDValue COR = DAG.FoldConstantArithmetic(
5809 SDValue IOR = DAG.getNode(ISD::OR, SDLoc(N0), VT, N0.getOperand(0), N1);
5811 return DAG.getNode(ISD::AND, SDLoc(N), VT, COR, IOR);
5815 if (SDValue Combined = visitORCommutative(DAG, N0, N1, N))
5817 if (SDValue Combined = visitORCommutative(DAG, N1, N0, N))
5838 DAG.haveNoCommonBitsSet(N0, N1))
6124 if (matchRotateSub(InnerPos, InnerNeg, VT.getScalarSizeInBits(), DAG)) {
6126 return DAG.getNode(HasPos ? PosOpcode : NegOpcode, DL, VT, Shifted,
6153 return DAG.getNode(ISD::TRUNCATE, SDLoc(LHS), LHS.getValueType(), Rot);
6160 matchRotateHalf(DAG, LHS, LHSShift, LHSMask);
6164 matchRotateHalf(DAG, RHS, RHSShift, RHSMask);
6181 extractShiftForRotate(DAG, LHSShift, RHS, RHSMask, DL))
6186 extractShiftForRotate(DAG, RHSShift, LHS, LHSMask, DL))
6221 SDValue Rot = DAG.getNode(HasROTL ? ISD::ROTL : ISD::ROTR, DL, VT,
6226 SDValue AllOnes = DAG.getAllOnesConstant(DL, VT);
6230 SDValue RHSBits = DAG.getNode(ISD::SRL, DL, VT, AllOnes, RHSShiftAmt);
6231 Mask = DAG.getNode(ISD::AND, DL, VT, Mask,
6232 DAG.getNode(ISD::OR, DL, VT, LHSMask, RHSBits));
6235 SDValue LHSBits = DAG.getNode(ISD::SHL, DL, VT, AllOnes, LHSShiftAmt);
6236 Mask = DAG.getNode(ISD::AND, DL, VT, Mask,
6237 DAG.getNode(ISD::OR, DL, VT, RHSMask, LHSBits));
6240 Rot = DAG.getNode(ISD::AND, DL, VT, Rot, Mask);
6490 *DAG.getContext(), Width * N->getMemoryVT().getSizeInBits());
6494 const TargetLowering &TLI = DAG.getTargetLoweringInfo();
6551 BaseIndexOffset Ptr = BaseIndexOffset::match(Store, DAG);
6555 else if (!Base->equalBaseIndex(Ptr, DAG, ByteOffsetFromBase))
6583 bool NeedsBswap = DAG.getDataLayout().isBigEndian() != *IsBigEndian;
6594 TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VT,
6594 TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(), VT,
6602 CombinedValue = DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT,
6607 CombinedValue = DAG.getNode(ISD::BSWAP, SDLoc(N), VT, CombinedValue);
6610 DAG.getStore(Chain, SDLoc(N), CombinedValue, FirstStore->getBasePtr(),
6614 DAG.ReplaceAllUsesWith(N, NewStore.getNode());
6658 const TargetLowering &TLI = DAG.getTargetLoweringInfo();
6665 bool IsBigEndianTarget = DAG.getDataLayout().isBigEndian();
6706 BaseIndexOffset Ptr = BaseIndexOffset::match(L, DAG);
6710 else if (!Base->equalBaseIndex(Ptr, DAG, ByteOffsetFromBase))
6758 bool Allowed = TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(),
6758 bool Allowed = TLI.allowsMemoryAccess(*DAG.getContext(), DAG.getDataLayout(),
6764 DAG.getLoad(VT, SDLoc(N), Chain, FirstLoad->getBasePtr(),
6769 DAG.ReplaceAllUsesOfValueWith(SDValue(L, 1), SDValue(NewLoad.getNode(), 1));
6771 return NeedsBswap ? DAG.getNode(ISD::BSWAP, SDLoc(N), VT, NewLoad) : NewLoad;
6842 SDValue NotX = DAG.getNOT(DL, X, VT);
6843 SDValue LHS = DAG.getNode(ISD::AND, DL, VT, NotX, M);
6844 SDValue NotLHS = DAG.getNOT(DL, LHS, VT);
6845 SDValue RHS = DAG.getNode(ISD::OR, DL, VT, M, Y);
6846 return DAG.getNode(ISD::AND, DL, VT, NotLHS, RHS);
6849 SDValue LHS = DAG.getNode(ISD::AND, DL, VT, X, M);
6850 SDValue NotM = DAG.getNOT(DL, M, VT);
6851 SDValue RHS = DAG.getNode(ISD::AND, DL, VT, Y, NotM);
6853 return DAG.getNode(ISD::OR, DL, VT, LHS, RHS);
6876 return DAG.getConstant(0, DL, VT);
6886 return DAG.FoldConstantArithmetic(ISD::XOR, DL, VT, N0C, N1C);
6888 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
6889 !DAG.isConstantIntBuildVectorOrConstantInt(N1))
6890 return DAG.getNode(ISD::XOR, DL, VT, N1, N0);
6914 return DAG.getSetCC(SDLoc(N0), VT, LHS, RHS, NotCC);
6916 return DAG.getSelectCC(SDLoc(N0), LHS, RHS, N0.getOperand(2),
6927 V = DAG.getNode(ISD::XOR, DL0, V.getValueType(), V,
6928 DAG.getConstant(1, DL0, V.getValueType()));
6930 return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, V);
6939 N00 = DAG.getNode(ISD::XOR, SDLoc(N00), VT, N00, N1); // N00 = ~N00
6940 N01 = DAG.getNode(ISD::XOR, SDLoc(N01), VT, N01, N1); // N01 = ~N01
6942 return DAG.getNode(NewOpcode, DL, VT, N00, N01);
6951 N00 = DAG.getNode(ISD::XOR, SDLoc(N00), VT, N00, N1); // N00 = ~N00
6952 N01 = DAG.getNode(ISD::XOR, SDLoc(N01), VT, N01, N1); // N01 = ~N01
6954 return DAG.getNode(NewOpcode, DL, VT, N00, N01);
6963 return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1),
6964 DAG.getAllOnesConstant(DL, VT));
6970 SDValue NotX = DAG.getNOT(SDLoc(X), X, VT);
6972 return DAG.getNode(ISD::AND, DL, VT, NotX, N1);
6990 SDValue Not = DAG.getNOT(DL, N0.getOperand(0), VT);
6991 return DAG.getNode(N0Opcode, DL, VT, Not, N0.getOperand(1));
7008 return DAG.getNode(ISD::ABS, DL, VT, S0);
7015 return tryFoldToZero(DL, TLI, VT, DAG, LegalOperations);
7037 return DAG.getNode(ISD::ROTL, DL, VT, DAG.getConstant(~1, DL, VT),
7037 return DAG.getNode(ISD::ROTL, DL, VT, DAG.getConstant(~1, DL, VT),
7146 if (SDValue R = combineShiftOfShiftedLogic(N, DAG))
7191 SDValue NewRHS = DAG.getNode(N->getOpcode(), DL, VT, LHS.getOperand(1),
7195 SDValue NewShift = DAG.getNode(N->getOpcode(), DL, VT, LHS.getOperand(0),
7197 return DAG.getNode(LHS.getOpcode(), DL, VT, NewShift, NewRHS);
7212 SDValue Trunc00 = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, N00);
7213 SDValue Trunc01 = DAG.getNode(ISD::TRUNCATE, DL, TruncVT, N01);
7216 return DAG.getNode(ISD::AND, DL, TruncVT, Trunc00, Trunc01);
7237 if (DAG.MaskedValueIsZero(N1, ModuloMask))
7246 return DAG.getNode(N->getOpcode(), dl, VT, N0,
7247 DAG.getConstant(RotAmt, dl, N1.getValueType()));
7255 return DAG.getNode(N->getOpcode(), dl, VT, N0, NewOp1);
7261 SDNode *C1 = DAG.isConstantIntBuildVectorOrConstantInt(N1);
7262 SDNode *C2 = DAG.isConstantIntBuildVectorOrConstantInt(N0.getOperand(1));
7268 DAG.FoldConstantArithmetic(CombineOp, dl, ShiftVT, C1, C2)) {
7269 SDValue BitsizeC = DAG.getConstant(Bitsize, dl, ShiftVT);
7270 SDValue CombinedShiftNorm = DAG.FoldConstantArithmetic(
7273 return DAG.getNode(N->getOpcode(), dl, VT, N0->getOperand(0),
7284 if (SDValue V = DAG.simplifyShift(N0, N1))
7308 if (SDValue C = DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N), VT,
7310 return DAG.getNode(ISD::AND, SDLoc(N), VT, N00, C);
7322 return DAG.FoldConstantArithmetic(ISD::SHL, SDLoc(N), VT, N0C, N1C);
7328 if (DAG.MaskedValueIsZero(SDValue(N, 0),
7330 return DAG.getConstant(0, SDLoc(N), VT);
7336 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, NewOp1);
7353 return DAG.getConstant(0, SDLoc(N), VT);
7364 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1));
7365 return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0), Sum);
7394 return DAG.getConstant(0, SDLoc(N), VT);
7408 SDValue Ext = DAG.getNode(N0.getOpcode(), DL, VT, N0Op0.getOperand(0));
7409 SDValue Sum = DAG.getZExtOrTrunc(InnerShiftAmt, DL, ShiftVT);
7410 Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, Sum, N1);
7411 return DAG.getNode(ISD::SHL, DL, VT, Ext, Sum);
7434 SDValue NewSHL = DAG.getZExtOrTrunc(N1, DL, InnerShiftAmtVT);
7435 NewSHL = DAG.getNode(ISD::SHL, DL, N0Op0.getValueType(), N0Op0, NewSHL);
7437 return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N0), VT, NewSHL);
7451 return DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0),
7452 DAG.getConstant(C2 - C1, DL, ShiftVT));
7453 return DAG.getNode(N0.getOpcode(), DL, VT, N0.getOperand(0),
7454 DAG.getConstant(C1 - C2, DL, ShiftVT));
7475 Shift = DAG.getNode(ISD::SHL, DL, VT, N0.getOperand(0),
7476 DAG.getConstant(c2 - c1, DL, ShiftVT));
7480 Shift = DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0),
7481 DAG.getConstant(c1 - c2, DL, ShiftVT));
7484 return DAG.getNode(ISD::AND, DL, VT, Shift,
7485 DAG.getConstant(Mask, DL, VT));
7494 SDValue AllBits = DAG.getAllOnesConstant(DL, VT);
7495 SDValue HiBitsMask = DAG.getNode(ISD::SHL, DL, VT, AllBits, N1);
7496 return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), HiBitsMask);
7508 SDValue Shl0 = DAG.getNode(ISD::SHL, SDLoc(N0), VT, N0.getOperand(0), N1);
7509 SDValue Shl1 = DAG.getNode(ISD::SHL, SDLoc(N1), VT, N0.getOperand(1), N1);
7512 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, Shl0, Shl1);
7519 SDValue Shl = DAG.getNode(ISD::SHL, SDLoc(N1), VT, N0.getOperand(1), N1);
7521 return DAG.getNode(ISD::MUL, SDLoc(N), VT, N0.getOperand(0), Shl);
7534 if (SDValue V = DAG.simplifyShift(N0, N1))
7543 if (DAG.ComputeNumSignBits(N0) == OpSizeInBits)
7557 return DAG.FoldConstantArithmetic(ISD::SRA, SDLoc(N), VT, N0C, N1C);
7566 EVT ExtVT = EVT::getIntegerVT(*DAG.getContext(), LowBits);
7568 ExtVT = EVT::getVectorVT(*DAG.getContext(),
7572 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
7573 N0.getOperand(0), DAG.getValueType(ExtVT));
7591 ShiftValues.push_back(DAG.getConstant(ShiftSum, DL, ShiftSVT));
7597 ShiftValue = DAG.getBuildVector(ShiftVT, DL, ShiftValues);
7600 return DAG.getNode(ISD::SRA, DL, VT, N0.getOperand(0), ShiftValue);
7613 LLVMContext &Ctx = *DAG.getContext();
7632 SDValue Amt = DAG.getConstant(ShiftAmt, DL,
7634 SDValue Shift = DAG.getNode(ISD::SRL, DL, VT,
7636 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, DL, TruncVT,
7638 return DAG.getNode(ISD::SIGN_EXTEND, DL,
7654 LLVMContext &Ctx = *DAG.getContext();
7666 SDValue Trunc = DAG.getZExtOrTrunc(Shl.getOperand(0), DL, TruncVT);
7667 SDValue ShiftC = DAG.getConstant(AddC->getAPIntValue().lshr(ShiftAmt).
7669 SDValue Add = DAG.getNode(ISD::ADD, DL, TruncVT, Trunc, ShiftC);
7670 return DAG.getSExtOrTrunc(Add, DL, VT);
7679 return DAG.getNode(ISD::SRA, SDLoc(N), VT, N0, NewOp1);
7697 SDValue Amt = DAG.getConstant(N1C->getZExtValue() + TruncBits, DL,
7700 DAG.getNode(ISD::SRA, DL, LargeVT, N0Op0.getOperand(0), Amt);
7701 return DAG.getNode(ISD::TRUNCATE, DL, VT, SRA);
7712 if (DAG.SignBitIsZero(N0))
7713 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, N1);
7725 if (SDValue V = DAG.simplifyShift(N0, N1))
7742 return DAG.FoldConstantArithmetic(ISD::SRL, SDLoc(N), VT, N0C, N1C);
7748 if (N1C && DAG.MaskedValueIsZero(SDValue(N, 0),
7750 return DAG.getConstant(0, SDLoc(N), VT);
7762 return DAG.getConstant(0, SDLoc(N), VT);
7774 SDValue Sum = DAG.getNode(ISD::ADD, DL, ShiftVT, N1, N0.getOperand(1));
7775 return DAG.getNode(ISD::SRL, DL, VT, N0.getOperand(0), Sum);
7793 return DAG.getConstant(0, DL, VT);
7794 return DAG.getNode(ISD::TRUNCATE, DL, VT,
7795 DAG.getNode(ISD::SRL, DL, InnerShiftVT,
7797 DAG.getConstant(c1 + c2, DL,
7809 DAG.getNode(ISD::SRL, DL, VT, DAG.getAllOnesConstant(DL, VT), N1);
7809 DAG.getNode(ISD::SRL, DL, VT, DAG.getAllOnesConstant(DL, VT), N1);
7811 return DAG.getNode(ISD::AND, DL, VT, N0.getOperand(0), Mask);
7821 return DAG.getUNDEF(VT);
7826 SDValue SmallShift = DAG.getNode(ISD::SRL, DL0, SmallVT,
7828 DAG.getConstant(ShiftAmt, DL0,
7833 return DAG.getNode(ISD::AND, DL, VT,
7834 DAG.getNode(ISD::ANY_EXTEND, DL, VT, SmallShift),
7835 DAG.getConstant(Mask, DL, VT));
7843 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0.getOperand(0), N1);
7849 KnownBits Known = DAG.computeKnownBits(N0.getOperand(0));
7853 if (Known.One.getBoolValue()) return DAG.getConstant(0, SDLoc(N0), VT);
7858 if (UnknownBits == 0) return DAG.getConstant(1, SDLoc(N0), VT);
7871 Op = DAG.getNode(ISD::SRL, DL, VT, Op,
7872 DAG.getConstant(ShAmt, DL,
7878 return DAG.getNode(ISD::XOR, DL, VT,
7879 Op, DAG.getConstant(1, DL, VT));
7887 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N0, NewOp1);
7947 if (DAG.MaskedValueIsZero(
7962 return DAG.getNode(N->getOpcode(), SDLoc(N), VT, N0, N1,
7963 DAG.getConstant(RotAmt, SDLoc(N), ShAmtTy));
7975 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N1,
7976 DAG.getConstant(IsFSHL ? BitWidth - ShAmt : ShAmt,
7979 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0,
7980 DAG.getConstant(IsFSHL ? ShAmt : BitWidth - ShAmt,
7990 if (IsUndefOrZero(N0) && !IsFSHL && DAG.MaskedValueIsZero(N2, ~ModuloBits))
7991 return DAG.getNode(ISD::SRL, SDLoc(N), VT, N1, N2);
7992 if (IsUndefOrZero(N1) && IsFSHL && DAG.MaskedValueIsZero(N2, ~ModuloBits))
7993 return DAG.getNode(ISD::SHL, SDLoc(N), VT, N0, N2);
8002 return DAG.getNode(RotOpc, SDLoc(N), VT, N0, N2);
8016 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8017 return DAG.getNode(ISD::ABS, SDLoc(N), VT, N0);
8022 if (DAG.SignBitIsZero(N0))
8032 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8033 return DAG.getNode(ISD::BSWAP, SDLoc(N), VT, N0);
8045 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8046 return DAG.getNode(ISD::BITREVERSE, SDLoc(N), VT, N0);
8058 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8059 return DAG.getNode(ISD::CTLZ, SDLoc(N), VT, N0);
8063 if (DAG.isKnownNeverZero(N0))
8064 return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, SDLoc(N), VT, N0);
8075 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8076 return DAG.getNode(ISD::CTLZ_ZERO_UNDEF, SDLoc(N), VT, N0);
8085 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8086 return DAG.getNode(ISD::CTTZ, SDLoc(N), VT, N0);
8090 if (DAG.isKnownNeverZero(N0))
8091 return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, SDLoc(N), VT, N0);
8102 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8103 return DAG.getNode(ISD::CTTZ_ZERO_UNDEF, SDLoc(N), VT, N0);
8112 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
8113 return DAG.getNode(ISD::CTPOP, SDLoc(N), VT, N0);
8238 SDValue NotCond = DAG.getNOT(DL, Cond, MVT::i1);
8240 NotCond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, NotCond);
8245 SDValue NotCond = DAG.getNOT(DL, Cond, MVT::i1);
8247 NotCond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, NotCond);
8253 Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
8259 Cond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Cond);
8273 Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
8274 return DAG.getNode(ISD::ADD, DL, VT, Cond, N2);
8279 Cond = DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Cond);
8280 return DAG.getNode(ISD::ADD, DL, VT, Cond, N2);
8286 Cond = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Cond);
8287 SDValue ShAmtC = DAG.getConstant(C1Val.exactLogBase2(), DL, VT);
8288 return DAG.getNode(ISD::SHL, DL, VT, Cond, ShAmtC);
8291 if (SDValue V = foldSelectOfConstantsUsingSra(N, DAG))
8314 DAG.getNode(ISD::XOR, DL, CondVT, Cond, DAG.getConstant(1, DL, CondVT));
8314 DAG.getNode(ISD::XOR, DL, CondVT, Cond, DAG.getConstant(1, DL, CondVT));
8317 return DAG.getZExtOrTrunc(NotCond, DL, VT);
8332 if (SDValue V = DAG.simplifySelect(N0, N1, N2))
8338 return DAG.getNode(ISD::OR, DL, VT, N0, N2);
8345 SDValue NOTNode = DAG.getNOT(SDLoc(N0), N0, VT);
8347 return DAG.getNode(ISD::AND, DL, VT, NOTNode, N2);
8351 SDValue NOTNode = DAG.getNOT(SDLoc(N0), N0, VT);
8353 return DAG.getNode(ISD::OR, DL, VT, NOTNode, N1);
8358 return DAG.getNode(ISD::AND, DL, VT, N0, N1);
8374 TLI.shouldNormalizeToSelectSequence(*DAG.getContext(), VT);
8381 DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond1, N1, N2, Flags);
8383 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0,
8393 SDValue InnerSelect = DAG.getNode(ISD::SELECT, DL, N1.getValueType(),
8396 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Cond0, N1,
8411 SDValue And = DAG.getNode(ISD::AND, DL, N0.getValueType(), N0, N1_0);
8412 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), And, N1_1,
8417 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1_1,
8430 SDValue Or = DAG.getNode(ISD::OR, DL, N0.getValueType(), N0, N2_0);
8431 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Or, N1,
8436 return DAG.getNode(ISD::SELECT, DL, N1.getValueType(), Combined, N1,
8443 if (SDValue F = extractBooleanFlip(N0, DAG, TLI, false)) {
8444 SDValue SelectOp = DAG.getSelect(DL, VT, F, N2, N1);
8458 if (N0.hasOneUse() && isLegalToCombineMinNumMaxNum(DAG, N1, N2, TLI))
8460 CC, TLI, DAG))
8486 SDVTList VTs = DAG.getVTList(VT, VT0);
8487 SDValue UAO = DAG.getNode(ISD::UADDO, DL, VTs, Cond0, N2.getOperand(1));
8488 return DAG.getSelect(DL, VT, UAO.getValue(1), N1, UAO.getValue(0));
8498 SDValue SelectNode = DAG.getNode(ISD::SELECT_CC, DL, VT, Cond0, Cond1, N1,
8655 SDValue ExtendedCond = DAG.getNode(ExtendOpcode, DL, VT, Cond);
8656 return DAG.getNode(ISD::ADD, DL, VT, ExtendedCond, N2);
8663 SDValue ZextCond = DAG.getZExtOrTrunc(Cond, DL, VT);
8664 SDValue ShAmtC = DAG.getConstant(Pow2C.exactLogBase2(), DL, VT);
8665 return DAG.getNode(ISD::SHL, DL, VT, ZextCond, ShAmtC);
8668 if (SDValue V = foldSelectOfConstantsUsingSra(N, DAG))
8685 if (SDValue V = DAG.simplifySelect(N0, N1, N2))
8689 if (SDValue F = extractBooleanFlip(N0, DAG, TLI, false))
8690 return DAG.getSelect(DL, VT, F, N2, N1);
8713 return DAG.getNode(ISD::ABS, DL, VT, LHS);
8715 SDValue Shift = DAG.getNode(ISD::SRA, DL, VT, LHS,
8716 DAG.getConstant(VT.getScalarSizeInBits() - 1,
8718 SDValue Add = DAG.getNode(ISD::ADD, DL, VT, LHS, Shift);
8721 return DAG.getNode(ISD::XOR, DL, VT, Add, Shift);
8730 if (N0.hasOneUse() && isLegalToCombineMinNumMaxNum(DAG, LHS, RHS, TLI)) {
8732 combineMinNumMaxNum(DL, VT, LHS, RHS, N1, N2, CC, TLI, DAG))
8758 SDValue WideLHS = DAG.getNode(ExtOpcode, DL, WideVT, LHS);
8759 SDValue WideRHS = DAG.getNode(ExtOpcode, DL, WideVT, RHS);
8761 SDValue WideSetCC = DAG.getSetCC(DL, WideSetCCVT, WideLHS, WideRHS, CC);
8762 return DAG.getSelect(DL, N1.getValueType(), WideSetCC, N1, N2);
8783 if (SDValue CV = ConvertSelectToConcatVector(N, DAG))
8821 SDValue SelectOp = DAG.getNode(
8875 return DAG.getNode(ISD::SETCC, SDLoc(N), N->getVTList(), LHS, RHS, Cond);
9046 Ops.push_back(DAG.getNode(ExtType, DL, ExtLoad->getValueType(0), SOp));
9050 CombineTo(SetCC, DAG.getNode(ISD::SETCC, DL, SetCC->getValueType(0), Ops));
9104 SplitDstVT = DAG.GetSplitDestVTs(SplitDstVT).first;
9105 SplitSrcVT = DAG.GetSplitDestVTs(SplitSrcVT).first;
9125 SDValue SplitLoad = DAG.getExtLoad(
9130 BasePtr = DAG.getNode(ISD::ADD, DL, BasePtr.getValueType(), BasePtr,
9131 DAG.getConstant(Stride, DL, BasePtr.getValueType()));
9137 SDValue NewChain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, Chains);
9138 SDValue NewValue = DAG.getNode(ISD::CONCAT_VECTORS, DL, DstVT, Loads);
9148 DAG.getNode(ISD::TRUNCATE, SDLoc(N0), N0.getValueType(), NewValue);
9202 SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(Load), VT,
9207 SDValue Shift = DAG.getNode(N1.getOpcode(), DL1, VT, ExtLoad,
9213 SDValue And = DAG.getNode(N0.getOpcode(), DL0, VT, Shift,
9214 DAG.getConstant(Mask, DL0, VT));
9219 DAG.ReplaceAllUsesOfValueWith(SDValue(Load, 1), ExtLoad.getValue(1));
9221 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(Load),
9268 CastA = DAG.getNode(CastOpcode, DL, VT, A, Cast->getOperand(1));
9269 CastB = DAG.getNode(CastOpcode, DL, VT, B, Cast->getOperand(1));
9271 CastA = DAG.getNode(CastOpcode, DL, VT, A);
9272 CastB = DAG.getNode(CastOpcode, DL, VT, B);
9274 return DAG.getNode(ISD::VSELECT, DL, VT, SetCC, CastA, CastB);
9415 if (SDValue Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes))
9421 return DAG.getNode(ISD::SIGN_EXTEND, DL, VT, N0.getOperand(0));
9442 unsigned NumSignBits = DAG.ComputeNumSignBits(Op);
9453 return DAG.getNode(ISD::SIGN_EXTEND, DL, VT, Op);
9458 return DAG.getNode(ISD::TRUNCATE, DL, VT, Op);
9465 Op = DAG.getNode(ISD::ANY_EXTEND, SDLoc(N0), VT, Op);
9467 Op = DAG.getNode(ISD::TRUNCATE, SDLoc(N0), VT, Op);
9468 return DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, VT, Op,
9469 DAG.getValueType(N0.getValueType()));
9475 tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0,
9480 tryToFoldExtOfMaskedLoad(DAG, TLI, VT, N, N0, ISD::SEXTLOAD,
9491 DAG, *this, TLI, VT, LegalOperations, N, N0, ISD::SEXTLOAD))
9509 SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(LN00), VT,
9515 SDValue And = DAG.getNode(N0.getOpcode(), DL, VT,
9516 ExtLoad, DAG.getConstant(Mask, DL, VT));
9524 DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
9528 DAG.ReplaceAllUsesOfValueWith(SDValue(LN00, 1), ExtLoad.getValue(1));
9530 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(LN00),
9539 if (SDValue V = foldExtendedSignBitTest(N, DAG, LegalOperations))
9566 return DAG.getSetCC(DL, VT, N00, N01, CC);
9573 SDValue VsetCC = DAG.getSetCC(DL, MatchingVecType, N00, N01, CC);
9574 return DAG.getSExtOrTrunc(VsetCC, DL, VT);
9592 ? DAG.getAllOnesConstant(DL, VT)
9593 : DAG.getBoolConstant(true, DL, VT, N00VT);
9594 SDValue Zero = DAG.getConstant(0, DL, VT);
9607 SDValue SetCC = DAG.getSetCC(DL, SetCCVT, N00, N01, CC);
9608 return DAG.getSelect(DL, VT, SetCC, ExtTrueVal, Zero);
9615 DAG.SignBitIsZero(N0))
9616 return DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0);
9627 SDValue Zext = DAG.getZExtOrTrunc(N0.getOperand(1).getOperand(0), DL, VT);
9628 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), Zext);
9628 return DAG.getNode(ISD::SUB, DL, VT, DAG.getConstant(0, DL, VT), Zext);
9636 SDValue Zext = DAG.getZExtOrTrunc(N0.getOperand(0).getOperand(0), DL, VT);
9637 return DAG.getNode(ISD::ADD, DL, VT, Zext, DAG.getAllOnesConstant(DL, VT));
9637 return DAG.getNode(ISD::ADD, DL, VT, Zext, DAG.getAllOnesConstant(DL, VT));
9703 if (SDValue Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes))
9709 return DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N), VT,
9717 if (isTruncateOf(DAG, N0, Op, Known)) {
9726 return DAG.getZExtOrTrunc(Op, SDLoc(N), VT);
9752 Op = DAG.getZeroExtendInReg(Op, SDLoc(N), MinVT.getScalarType());
9754 SDValue ZExtOrTrunc = DAG.getZExtOrTrunc(Op, SDLoc(N), VT);
9756 DAG.transferDbgValues(N0, ZExtOrTrunc);
9762 SDValue Op = DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT);
9764 SDValue And = DAG.getZeroExtendInReg(Op, SDLoc(N), MinVT.getScalarType());
9767 DAG.transferDbgValues(N0, And);
9781 X = DAG.getAnyExtOrTrunc(X, SDLoc(X), VT);
9785 return DAG.getNode(ISD::AND, DL, VT,
9786 X, DAG.getConstant(Mask, DL, VT));
9791 tryToFoldExtOfLoad(DAG, *this, TLI, VT, LegalOperations, N, N0,
9796 tryToFoldExtOfMaskedLoad(DAG, TLI, VT, N, N0, ISD::ZEXTLOAD,
9833 SDValue ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, SDLoc(LN00), VT,
9840 SDValue And = DAG.getNode(N0.getOpcode(), DL, VT,
9841 ExtLoad, DAG.getConstant(Mask, DL, VT));
9849 DAG.getNode(ISD::TRUNCATE, DL, N0.getValueType(), And);
9853 DAG.ReplaceAllUsesOfValueWith(SDValue(LN00, 1), ExtLoad.getValue(1));
9855 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(LN00),
9871 DAG, *this, TLI, VT, LegalOperations, N, N0, ISD::ZEXTLOAD))
9874 if (SDValue V = foldExtendedSignBitTest(N, DAG, LegalOperations))
9891 SDValue VecOnes = DAG.getConstant(1, DL, VT);
9894 SDValue VSetCC = DAG.getNode(ISD::SETCC, DL, VT, N0.getOperand(0),
9896 return DAG.getNode(ISD::AND, DL, VT, VSetCC, VecOnes);
9904 DAG.getNode(ISD::SETCC, DL, MatchingVectorType, N0.getOperand(0),
9906 return DAG.getNode(ISD::AND, DL, VT, DAG.getSExtOrTrunc(VsetCC, DL, VT),
9906 return DAG.getNode(ISD::AND, DL, VT, DAG.getSExtOrTrunc(VsetCC, DL, VT),
9913 DL, N0.getOperand(0), N0.getOperand(1), DAG.getConstant(1, DL, VT),
9914 DAG.getConstant(0, DL, VT),
9939 ShAmt = DAG.getNode(ISD::ZERO_EXTEND, DL, MVT::i32, ShAmt);
9941 return DAG.getNode(N0.getOpcode(), DL, VT,
9942 DAG.getNode(ISD::ZERO_EXTEND, DL, VT, N0.getOperand(0)),
9949 if (SDValue NewCtPop = widenCtPop(N, DAG))
9959 if (SDValue Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes))
9968 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0));
9986 return DAG.getAnyExtOrTrunc(N0.getOperand(0), SDLoc(N), VT);
9997 X = DAG.getAnyExtOrTrunc(X, DL, VT);
10000 return DAG.getNode(ISD::AND, DL, VT,
10001 X, DAG.getConstant(Mask, DL, VT));
10018 SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, SDLoc(N), VT,
10027 DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
10030 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SDLoc(N0),
10047 SDValue ExtLoad = DAG.getExtLoad(ExtType, SDLoc(N),
10051 DAG.ReplaceAllUsesOfValueWith(SDValue(LN0, 1), ExtLoad.getValue(1));
10074 return DAG.getSetCC(SDLoc(N), VT, N0.getOperand(0),
10083 DAG.getSetCC(SDLoc(N), MatchingVectorType, N0.getOperand(0),
10086 return DAG.getAnyExtOrTrunc(VsetCC, SDLoc(N), VT);
10092 DL, N0.getOperand(0), N0.getOperand(1), DAG.getConstant(1, DL, VT),
10093 DAG.getConstant(0, DL, VT),
10098 if (SDValue NewCtPop = widenCtPop(N, DAG))
10130 SDValue MinAssertVTVal = DAG.getValueType(MinAssertVT);
10131 SDValue NewAssert = DAG.getNode(Opcode, DL, BigA.getValueType(),
10133 return DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), NewAssert);
10150 SDValue NewAssert = DAG.getNode(Opcode, DL, BigA.getValueType(),
10152 return DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), NewAssert);
10199 ExtVT = EVT::getIntegerVT(*DAG.getContext(), MemoryWidth - ShiftAmt);
10201 ExtVT = EVT::getIntegerVT(*DAG.getContext(),
10222 ExtVT = EVT::getIntegerVT(*DAG.getContext(), ActiveBits);
10263 EVT MaskedVT = EVT::getIntegerVT(*DAG.getContext(),
10304 if (DAG.getDataLayout().isBigEndian())
10314 SDValue NewPtr = DAG.getNode(ISD::ADD, DL,
10316 DAG.getConstant(PtrOff, DL, PtrType),
10322 Load = DAG.getLoad(VT, DL, LN0->getChain(), NewPtr,
10326 Load = DAG.getExtLoad(ExtType, DL, VT, LN0->getChain(), NewPtr,
10333 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1));
10346 Result = DAG.getConstant(0, DL, VT);
10348 Result = DAG.getNode(ISD::SHL, DL, VT,
10349 Result, DAG.getConstant(ShLeftAmt, DL, ShImmTy));
10355 if (DAG.getDataLayout().isBigEndian())
10362 SDValue ShiftC = DAG.getConstant(ShAmt, DL, VT);
10363 Result = DAG.getNode(ISD::SHL, DL, VT, Result, ShiftC);
10364 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result);
10380 return DAG.getUNDEF(VT);
10383 if (DAG.isConstantIntBuildVectorOrConstantInt(N0))
10384 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT, N0, N1);
10387 if (DAG.ComputeNumSignBits(N0) >= VTBits-EVTBits+1)
10393 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
10404 (N00Bits - DAG.ComputeNumSignBits(N00)) < EVTBits) &&
10406 return DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, N00);
10416 return DAG.getNode(ISD::SIGN_EXTEND_VECTOR_INREG, SDLoc(N), VT,
10426 return DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, N00, N1);
10430 if (DAG.MaskedValueIsZero(N0, APInt::getOneBitSet(VTBits, EVTBits - 1)))
10431 return DAG.getZeroExtendInReg(N0, SDLoc(N), EVT.getScalarType());
10451 unsigned InSignBits = DAG.ComputeNumSignBits(N0.getOperand(0));
10453 return DAG.getNode(ISD::SRA, SDLoc(N), VT, N0.getOperand(0),
10469 SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(N), VT,
10485 SDValue ExtLoad = DAG.getExtLoad(ISD::SEXTLOAD, SDLoc(N), VT,
10498 return DAG.getNode(ISD::SIGN_EXTEND_INREG, SDLoc(N), VT,
10510 return DAG.getUNDEF(VT);
10512 if (SDValue Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes))
10526 return DAG.getUNDEF(VT);
10528 if (SDValue Res = tryToFoldExtendOfConstant(N, TLI, DAG, LegalTypes))
10541 bool isLE = DAG.getDataLayout().isLittleEndian();
10549 return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0));
10552 if (DAG.isConstantIntBuildVectorOrConstantInt(N0)) {
10553 SDValue C = DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0);
10564 return DAG.getNode(N0.getOpcode(), SDLoc(N), VT, N0.getOperand(0));
10567 return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, N0.getOperand(0));
10596 EVT NVT = EVT::getVectorVT(*DAG.getContext(), TrTy, SizeRatio * NumElem);
10602 EVT IndexTy = TLI.getVectorIdxTy(DAG.getDataLayout());
10606 return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, TrTy,
10607 DAG.getBitcast(NVT, N0.getOperand(0)),
10608 DAG.getConstant(Index, DL, IndexTy));
10618 SDValue TruncOp0 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(1));
10619 SDValue TruncOp1 = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(2));
10620 return DAG.getNode(ISD::SELECT, SDLoc(N), VT, Cond, TruncOp0, TruncOp1);
10629 KnownBits Known = DAG.computeKnownBits(Amt);
10633 EVT AmtVT = TLI.getShiftAmountTy(VT, DAG.getDataLayout());
10635 SDValue Trunc = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(0));
10637 Amt = DAG.getZExtOrTrunc(Amt, SL, AmtVT);
10640 return DAG.getNode(ISD::SHL, SL, VT, Trunc, Amt);
10651 SDValue TruncOp = DAG.getNode(ISD::TRUNCATE, DL, SVT, Op);
10654 return DAG.getBuildVector(VT, DL, TruncOps);
10683 return DAG.getBuildVector(VT, SDLoc(N), Opnds);
10695 if (SDValue Shorter = DAG.GetDemandedBits(N0, Mask))
10696 return DAG.getNode(ISD::TRUNCATE, SDLoc(N), VT, Shorter);
10711 SDValue NewLoad = DAG.getExtLoad(LN0->getExtensionType(), SDLoc(LN0),
10715 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLoad.getValue(1));
10739 VTs.push_back(EVT::getVectorVT(*DAG.getContext(),
10745 return DAG.getUNDEF(VT);
10752 Opnds.push_back(DAG.getUNDEF(VTs[i]));
10755 SDValue NV = DAG.getNode(ISD::TRUNCATE, SDLoc(V), VTs[i], V);
10759 return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Opnds);
10775 EVT IdxVT = TLI.getVectorIdxTy(DAG.getDataLayout());
10777 return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, SL, VT, VecSrc,
10778 DAG.getConstant(Idx, SL, IdxVT));
10796 auto X = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(0));
10797 auto Y = DAG.getNode(ISD::TRUNCATE, SL, VT, N0.getOperand(1));
10798 auto VTs = DAG.getVTList(VT, N0->getValueType(1));
10799 return DAG.getNode(N0.getOpcode(), SL, VTs, X, Y, N0.getOperand(2));
10813 return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N0->getOperand(0)), VT,
10840 SDValue NarrowL = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(0));
10841 SDValue NarrowR = DAG.getNode(ISD::TRUNCATE, DL, VT, N0.getOperand(1));
10842 return DAG.getNode(N0.getOpcode(), DL, VT, NarrowL, NarrowR);
10868 if (DAG.getDataLayout().isBigEndian())
10877 DAG.areNonVolatileConsecutiveLoads(LD2, LD1, LD1Bytes, 1)) {
10879 unsigned NewAlign = DAG.getDataLayout().getABITypeAlignment(
10880 VT.getTypeForEVT(*DAG.getContext()));
10884 return DAG.getLoad(VT, SDLoc(N), LD1->getChain(), LD1->getBasePtr(),
10955 return DAG.getUNDEF(VT);
10982 SDValue C = DAG.getBitcast(VT, N0);
10990 return DAG.getBitcast(VT, N0.getOperand(0));
10996 TLI.hasBigEndianPartOrdering(N0.getValueType(), DAG.getDataLayout()) ==
10997 TLI.hasBigEndianPartOrdering(VT, DAG.getDataLayout()) &&
11007 if (TLI.isLoadBitCastBeneficial(N0.getValueType(), VT, DAG,
11010 DAG.getLoad(VT, SDLoc(N), LN0->getChain(), LN0->getBasePtr(),
11013 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), Load.getValue(1));
11018 if (SDValue V = foldBitcastedFPLogic(N, DAG, TLI))
11037 SDValue NewConv = DAG.getBitcast(VT, N0.getOperand(0));
11043 SDValue SignBit = DAG.getConstant(
11052 DAG.getNode(ISD::EXTRACT_ELEMENT, SDLoc(NewConv), MVT::i64, NewConv,
11053 DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
11053 DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
11056 FlipBit = DAG.getNode(ISD::AND, SDLoc(N0), MVT::i64, Hi, SignBit);
11060 DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit);
11062 return DAG.getNode(ISD::XOR, DL, VT, NewConv, FlipBits);
11066 return DAG.getNode(ISD::XOR, DL, VT,
11067 NewConv, DAG.getConstant(SignBit, DL, VT));
11069 return DAG.getNode(ISD::AND, DL, VT,
11070 NewConv, DAG.getConstant(~SignBit, DL, VT));
11088 EVT IntXVT = EVT::getIntegerVT(*DAG.getContext(), OrigXWidth);
11090 SDValue X = DAG.getBitcast(IntXVT, N0.getOperand(1));
11096 X = DAG.getNode(ISD::SIGN_EXTEND, SDLoc(N), VT, X);
11102 X = DAG.getNode(ISD::SRL, DL,
11104 DAG.getConstant(OrigXWidth-VTWidth, DL,
11107 X = DAG.getNode(ISD::TRUNCATE, SDLoc(X), VT, X);
11113 SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0));
11115 SDValue X = DAG.getBitcast(VT, N0.getOperand(1));
11117 SDValue XorResult = DAG.getNode(ISD::XOR, SDLoc(N0), VT, Cst, X);
11119 SDValue XorResult64 = DAG.getNode(
11121 DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
11121 DAG.getIntPtrConstant(getPPCf128HiElementSelector(DAG),
11125 DAG.getNode(ISD::AND, SDLoc(XorResult64), MVT::i64, XorResult64,
11126 DAG.getConstant(SignBit, SDLoc(XorResult64), MVT::i64));
11129 DAG.getNode(ISD::BUILD_PAIR, SDLoc(N0), VT, FlipBit, FlipBit);
11131 return DAG.getNode(ISD::XOR, SDLoc(N), VT, Cst, FlipBits);
11134 X = DAG.getNode(ISD::AND, SDLoc(X), VT,
11135 X, DAG.getConstant(SignBit, SDLoc(X), VT));
11138 SDValue Cst = DAG.getBitcast(VT, N0.getOperand(0));
11139 Cst = DAG.getNode(ISD::AND, SDLoc(Cst), VT,
11140 Cst, DAG.getConstant(~SignBit, SDLoc(Cst), VT));
11143 return DAG.getNode(ISD::OR, SDLoc(N), VT, X, Cst);
11170 return DAG.getBitcast(VT, Op);
11190 TLI.buildLegalVectorShuffle(VT, SDLoc(N), SV0, SV1, NewMask, DAG);
11223 Op = DAG.getNode(ISD::TRUNCATE, SDLoc(BV), SrcEltVT, Op);
11224 Ops.push_back(DAG.getBitcast(DstEltVT, Op));
11227 EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
11229 return DAG.getBuildVector(VT, SDLoc(BV), Ops);
11238 EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), SrcEltVT.getSizeInBits());
11246 EVT TmpVT = EVT::getIntegerVT(*DAG.getContext(), DstEltVT.getSizeInBits());
11264 bool isLE = DAG.getDataLayout().isLittleEndian();
11279 Ops.push_back(DAG.getUNDEF(DstEltVT));
11281 Ops.push_back(DAG.getConstant(NewBits, DL, DstEltVT));
11284 EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT, Ops.size());
11285 return DAG.getBuildVector(VT, DL, Ops);
11291 EVT VT = EVT::getVectorVT(*DAG.getContext(), DstEltVT,
11297 Ops.append(NumOutputsPerInput, DAG.getUNDEF(DstEltVT));
11306 Ops.push_back(DAG.getConstant(ThisVal, DL, DstEltVT));
11311 if (DAG.getDataLayout().isBigEndian())
11315 return DAG.getBuildVector(VT, DL, Ops);
11330 const TargetOptions &Options = DAG.getTarget().Options;
11352 const SelectionDAGTargetInfo *STI = DAG.getSubtarget().getSelectionDAGInfo();
11376 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11383 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11394 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11395 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11397 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11408 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11409 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11411 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11423 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11425 DAG.getNode(PreferredFusedOpcode, SL, VT,
11436 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11438 DAG.getNode(PreferredFusedOpcode, SL, VT,
11450 return DAG.getNode(PreferredFusedOpcode, SL, VT, X, Y,
11451 DAG.getNode(PreferredFusedOpcode, SL, VT,
11452 DAG.getNode(ISD::FP_EXTEND, SL, VT, U),
11453 DAG.getNode(ISD::FP_EXTEND, SL, VT, V),
11477 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11478 DAG.getNode(ISD::FP_EXTEND, SL, VT, X),
11479 DAG.getNode(ISD::FP_EXTEND, SL, VT, Y),
11480 DAG.getNode(PreferredFusedOpcode, SL, VT,
11481 DAG.getNode(ISD::FP_EXTEND, SL, VT, U),
11482 DAG.getNode(ISD::FP_EXTEND, SL, VT, V),
11542 const TargetOptions &Options = DAG.getTarget().Options;
11564 const SelectionDAGTargetInfo *STI = DAG.getSubtarget().getSelectionDAGInfo();
11582 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11584 DAG.getNode(ISD::FNEG, SL, VT, N1), Flags);
11590 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11591 DAG.getNode(ISD::FNEG, SL, VT,
11601 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11602 DAG.getNode(ISD::FNEG, SL, VT, N00), N01,
11603 DAG.getNode(ISD::FNEG, SL, VT, N1), Flags);
11614 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11615 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11617 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11619 DAG.getNode(ISD::FNEG, SL, VT, N1), Flags);
11630 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11631 DAG.getNode(ISD::FNEG, SL, VT,
11632 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11634 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11652 return DAG.getNode(ISD::FNEG, SL, VT,
11653 DAG.getNode(PreferredFusedOpcode, SL, VT,
11654 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11656 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11675 return DAG.getNode(ISD::FNEG, SL, VT,
11676 DAG.getNode(PreferredFusedOpcode, SL, VT,
11677 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11679 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11693 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11695 DAG.getNode(PreferredFusedOpcode, SL, VT,
11698 DAG.getNode(ISD::FNEG, SL, VT,
11708 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11709 DAG.getNode(ISD::FNEG, SL, VT,
11712 DAG.getNode(PreferredFusedOpcode, SL, VT,
11713 DAG.getNode(ISD::FNEG, SL, VT, N20),
11726 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11728 DAG.getNode(PreferredFusedOpcode, SL, VT,
11729 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11731 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11733 DAG.getNode(ISD::FNEG, SL, VT,
11751 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11752 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11754 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11756 DAG.getNode(PreferredFusedOpcode, SL, VT,
11757 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11759 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11761 DAG.getNode(ISD::FNEG, SL, VT,
11776 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11777 DAG.getNode(ISD::FNEG, SL, VT, N1.getOperand(0)),
11779 DAG.getNode(PreferredFusedOpcode, SL, VT,
11780 DAG.getNode(ISD::FNEG, SL, VT,
11781 DAG.getNode(ISD::FP_EXTEND, SL,
11783 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11805 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11806 DAG.getNode(ISD::FNEG, SL, VT,
11807 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11809 DAG.getNode(ISD::FP_EXTEND, SL, VT, N101),
11810 DAG.getNode(PreferredFusedOpcode, SL, VT,
11811 DAG.getNode(ISD::FNEG, SL, VT,
11812 DAG.getNode(ISD::FP_EXTEND, SL,
11814 DAG.getNode(ISD::FP_EXTEND, SL, VT,
11836 const TargetOptions &Options = DAG.getTarget().Options;
11868 return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
11871 return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
11872 DAG.getNode(ISD::FNEG, SL, VT, Y), Flags);
11891 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11892 DAG.getNode(ISD::FNEG, SL, VT, X.getOperand(1)), Y,
11895 return DAG.getNode(PreferredFusedOpcode, SL, VT,
11896 DAG.getNode(ISD::FNEG, SL, VT, X.getOperand(1)), Y,
11897 DAG.getNode(ISD::FNEG, SL, VT, Y), Flags);
11901 return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
11902 DAG.getNode(ISD::FNEG, SL, VT, Y), Flags);
11904 return DAG.getNode(PreferredFusedOpcode, SL, VT, X.getOperand(0), Y,
11926 const TargetOptions &Options = DAG.getTarget().Options;
11936 return DAG.getNode(ISD::FADD, DL, VT, N0, N1, Flags);
11940 return DAG.getNode(ISD::FADD, DL, VT, N1, N0, Flags);
11953 TLI.isNegatibleForFree(N1, DAG, LegalOperations, ForCodeSize) == 2)
11954 return DAG.getNode(
11956 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize), Flags);
11960 TLI.isNegatibleForFree(N0, DAG, LegalOperations, ForCodeSize) == 2)
11961 return DAG.getNode(
11963 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize), Flags);
11975 SDValue Add = DAG.getNode(ISD::FADD, DL, VT, B, B, Flags);
11976 return DAG.getNode(ISD::FSUB, DL, VT, N1, Add, Flags);
11981 SDValue Add = DAG.getNode(ISD::FADD, DL, VT, B, B, Flags);
11982 return DAG.getNode(ISD::FSUB, DL, VT, N0, Add, Flags);
11993 return DAG.getConstantFP(0.0, DL, VT);
11997 return DAG.getConstantFP(0.0, DL, VT);
12009 SDValue NewC = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1), N1, Flags);
12010 return DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(0), NewC, Flags);
12023 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1),
12024 DAG.getConstantFP(1.0, DL, VT), Flags);
12025 return DAG.getNode(ISD::FMUL, DL, VT, N1, NewCFP, Flags);
12032 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N0.getOperand(1),
12033 DAG.getConstantFP(2.0, DL, VT), Flags);
12034 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), NewCFP, Flags);
12044 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1),
12045 DAG.getConstantFP(1.0, DL, VT), Flags);
12046 return DAG.getNode(ISD::FMUL, DL, VT, N0, NewCFP, Flags);
12053 SDValue NewCFP = DAG.getNode(ISD::FADD, DL, VT, N1.getOperand(1),
12054 DAG.getConstantFP(2.0, DL, VT), Flags);
12055 return DAG.getNode(ISD::FMUL, DL, VT, N1.getOperand(0), NewCFP, Flags);
12064 return DAG.getNode(ISD::FMUL, DL, VT,
12065 N1, DAG.getConstantFP(3.0, DL, VT), Flags);
12074 return DAG.getNode(ISD::FMUL, DL, VT,
12075 N0, DAG.getConstantFP(3.0, DL, VT), Flags);
12084 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0),
12085 DAG.getConstantFP(4.0, DL, VT), Flags);
12105 const TargetOptions &Options = DAG.getTarget().Options;
12115 return DAG.getNode(ISD::FSUB, DL, VT, N0, N1, Flags);
12131 return DAG.getConstantFP(0.0f, DL, VT);
12142 if (TLI.isNegatibleForFree(N1, DAG, LegalOperations, ForCodeSize))
12143 return TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize);
12145 return DAG.getNode(ISD::FNEG, DL, VT, N1, Flags);
12154 return DAG.getNode(ISD::FNEG, DL, VT, N1->getOperand(1), Flags);
12157 return DAG.getNode(ISD::FNEG, DL, VT, N1->getOperand(0), Flags);
12161 if (TLI.isNegatibleForFree(N1, DAG, LegalOperations, ForCodeSize))
12162 return DAG.getNode(
12164 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize), Flags);
12179 TLI.isNegatibleForFree(X, DAG, LegalOperations, ForCodeSize))
12181 TLI.isNegatibleForFree(Y, DAG, LegalOperations, ForCodeSize))
12197 const TargetOptions &Options = DAG.getTarget().Options;
12209 return DAG.getNode(ISD::FMUL, DL, VT, N0, N1, Flags);
12214 return DAG.getNode(ISD::FMUL, DL, VT, N1, N0, Flags);
12236 SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, N01, N1, Flags);
12237 return DAG.getNode(ISD::FMUL, DL, VT, N00, MulConsts, Flags);
12245 const SDValue Two = DAG.getConstantFP(2.0, DL, VT);
12246 SDValue MulConsts = DAG.getNode(ISD::FMUL, DL, VT, Two, N1, Flags);
12247 return DAG.getNode(ISD::FMUL, DL, VT, N0.getOperand(0), MulConsts, Flags);
12253 return DAG.getNode(ISD::FADD, DL, VT, N0, N0, Flags);
12258 return DAG.getNode(ISD::FNEG, DL, VT, N0);
12263 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize);
12265 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize);
12266 return DAG.getNode(ISD::FMUL, DL, VT, NegN0, NegN1, Flags);
12305 return DAG.getNode(ISD::FNEG, DL, VT,
12306 DAG.getNode(ISD::FABS, DL, VT, X));
12308 return DAG.getNode(ISD::FABS, DL, VT, X);
12332 const TargetOptions &Options = DAG.getTarget().Options;
12342 return DAG.getNode(ISD::FMA, DL, VT, N0, N1, N2);
12348 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize);
12350 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize);
12351 return DAG.getNode(ISD::FMA, DL, VT, NegN0, NegN1, N2, Flags);
12362 return DAG.getNode(ISD::FADD, SDLoc(N), VT, N1, N2);
12364 return DAG.getNode(ISD::FADD, SDLoc(N), VT, N0, N2);
12369 return DAG.getNode(ISD::FMA, SDLoc(N), VT, N1, N0, N2);
12376 return DAG.getNode(ISD::FMUL, DL, VT, N0,
12377 DAG.getNode(ISD::FADD, DL, VT, N1, N2.getOperand(1),
12385 return DAG.getNode(ISD::FMA, DL, VT,
12387 DAG.getNode(ISD::FMUL, DL, VT, N1, N0.getOperand(1),
12398 return DAG.getNode(ISD::FADD, DL, VT, N0, N2);
12402 SDValue RHSNeg = DAG.getNode(ISD::FNEG, DL, VT, N0);
12405 return DAG.getNode(ISD::FADD, DL, VT, N2, RHSNeg);
12413 return DAG.getNode(ISD::FMA, DL, VT, N0.getOperand(0),
12414 DAG.getNode(ISD::FNEG, DL, VT, N1, Flags), N2);
12421 return DAG.getNode(ISD::FMUL, DL, VT, N0,
12422 DAG.getNode(ISD::FADD, DL, VT, N1,
12423 DAG.getConstantFP(1.0, DL, VT), Flags),
12429 return DAG.getNode(ISD::FMUL, DL, VT, N0,
12430 DAG.getNode(ISD::FADD, DL, VT, N1,
12431 DAG.getConstantFP(-1.0, DL, VT), Flags),
12450 bool UnsafeMath = DAG.getTarget().Options.UnsafeFPMath;
12470 if (VT.isVector() && DAG.isSplatValue(N1))
12494 SDValue FPOne = DAG.getConstantFP(1.0, DL, VT);
12495 SDValue Reciprocal = DAG.getNode(ISD::FDIV, DL, VT, FPOne, N1, Flags);
12501 SDValue NewNode = DAG.getNode(ISD::FMUL, SDLoc(U), VT, Dividend,
12520 const TargetOptions &Options = DAG.getTarget().Options;
12530 return DAG.getNode(ISD::FDIV, SDLoc(N), VT, N0, N1, Flags);
12554 return DAG.getNode(ISD::FMUL, DL, VT, N0,
12555 DAG.getConstantFP(Recip, DL, VT), Flags);
12562 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
12567 RV = DAG.getNode(ISD::FP_EXTEND, SDLoc(N1), VT, RV);
12569 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
12575 RV = DAG.getNode(ISD::FP_ROUND, SDLoc(N1), VT, RV, N1.getOperand(1));
12577 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
12595 RV = DAG.getNode(ISD::FDIV, SDLoc(N1), VT, RV, OtherOp, Flags);
12597 return DAG.getNode(ISD::FMUL, DL, VT, N0, RV, Flags);
12609 return DAG.getNode(
12611 TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize),
12612 TLI.getNegatedExpression(N1, DAG, LegalOperations, ForCodeSize), Flags);
12626 return DAG.getNode(ISD::FREM, SDLoc(N), VT, N0, N1, N->getFlags());
12636 if (!DAG.getTarget().Options.UnsafeFPMath &&
12641 if (TLI.isFsqrtCheap(N0, DAG))
12673 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1);
12681 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
12684 return DAG.getNode(ISD::FNEG, SDLoc(N), VT,
12685 DAG.getNode(ISD::FABS, SDLoc(N0), VT, N0));
12694 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0.getOperand(0), N1);
12698 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
12702 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(1));
12707 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT, N0, N1.getOperand(0));
12737 if (!DAG.getLibInfo().has(LibFunc_cbrt) ||
12738 (!DAG.getTargetLoweringInfo().isOperationExpand(ISD::FPOW, VT) &&
12739 DAG.getTargetLoweringInfo().isOperationExpand(ISD::FCBRT, VT)))
12742 return DAG.getNode(ISD::FCBRT, SDLoc(N), VT, N->getOperand(0), Flags);
12767 if (!DAG.getTargetLoweringInfo().isOperationLegalOrCustom(ISD::FSQRT, VT))
12772 if (DAG.getMachineFunction().getFunction().hasOptSize())
12777 SDValue Sqrt = DAG.getNode(ISD::FSQRT, DL, VT, N->getOperand(0), Flags);
12778 SDValue SqrtSqrt = DAG.getNode(ISD::FSQRT, DL, VT, Sqrt, Flags);
12782 return DAG.getNode(ISD::FMUL, DL, VT, Sqrt, SqrtSqrt, Flags);
12830 return DAG.getConstantFP(0.0, SDLoc(N), VT);
12833 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
12837 return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0);
12844 if (DAG.SignBitIsZero(N0))
12845 return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0);
12858 DAG.getConstantFP(-1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12858 DAG.getConstantFP(-1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12860 return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
12872 DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12872 DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12874 return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
12878 if (SDValue FTrunc = foldFPToIntToFP(N, DAG, TLI))
12891 return DAG.getConstantFP(0.0, SDLoc(N), VT);
12894 if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
12898 return DAG.getNode(ISD::UINT_TO_FP, SDLoc(N), VT, N0);
12905 if (DAG.SignBitIsZero(N0))
12906 return DAG.getNode(ISD::SINT_TO_FP, SDLoc(N), VT, N0);
12918 DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12918 DAG.getConstantFP(1.0, DL, VT), DAG.getConstantFP(0.0, DL, VT),
12920 return DAG.getNode(ISD::SELECT_CC, DL, VT, Ops);
12924 if (SDValue FTrunc = foldFPToIntToFP(N, DAG, TLI))
12978 return DAG.getUNDEF(VT);
12982 return DAG.getNode(ISD::FP_TO_SINT, SDLoc(N), VT, N0);
12984 return FoldIntToFPToInt(N, DAG);
12993 return DAG.getUNDEF(VT);
12997 return DAG.getNode(ISD::FP_TO_UINT, SDLoc(N), VT, N0);
12999 return FoldIntToFPToInt(N, DAG);
13010 return DAG.getNode(ISD::FP_ROUND, SDLoc(N), VT, N0, N1);
13036 if (DAG.getTarget().Options.UnsafeFPMath || N0IsTrunc) {
13038 return DAG.getNode(ISD::FP_ROUND, DL, VT, N0.getOperand(0),
13039 DAG.getIntPtrConstant(NIsTrunc && N0IsTrunc, DL));
13045 SDValue Tmp = DAG.getNode(ISD::FP_ROUND, SDLoc(N0), VT,
13048 return DAG.getNode(ISD::FCOPYSIGN, SDLoc(N), VT,
13069 return DAG.getNode(ISD::FP_EXTEND, SDLoc(N), VT, N0);
13074 return DAG.getNode(ISD::FP16_TO_FP, SDLoc(N), VT, N0.getOperand(0));
13083 return DAG.getNode(ISD::FP_ROUND, SDLoc(N), VT,
13085 return DAG.getNode(ISD::FP_EXTEND, SDLoc(N), VT, In);
13092 SDValue ExtLoad = DAG.getExtLoad(ISD::EXTLOAD, SDLoc(N), VT,
13098 DAG.getNode(ISD::FP_ROUND, SDLoc(N0),
13100 DAG.getIntPtrConstant(1, SDLoc(N0))),
13117 return DAG.getNode(ISD::FCEIL, SDLoc(N), VT, N0);
13128 return DAG.getNode(ISD::FTRUNC, SDLoc(N), VT, N0);
13152 return DAG.getNode(ISD::FFLOOR, SDLoc(N), VT, N0);
13164 return DAG.getNode(ISD::FNEG, SDLoc(N), VT, N0);
13166 if (TLI.isNegatibleForFree(N0, DAG, LegalOperations, ForCodeSize))
13167 return TLI.getNegatedExpression(N0, DAG, LegalOperations, ForCodeSize);
13188 Int = DAG.getNode(ISD::XOR, DL0, IntVT, Int,
13189 DAG.getConstant(SignMask, DL0, IntVT));
13191 return DAG.getBitcast(VT, Int);
13205 return DAG.getNode(
13207 DAG.getNode(ISD::FNEG, SDLoc(N), VT, N0.getOperand(1)),
13238 return visitFMinMax(DAG, N, minnum);
13242 return visitFMinMax(DAG, N, maxnum);
13246 return visitFMinMax(DAG, N, minimum);
13250 return visitFMinMax(DAG, N, maximum);
13259 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0);
13268 return DAG.getNode(ISD::FABS, SDLoc(N), VT, N0.getOperand(0));
13286 Int = DAG.getNode(ISD::AND, DL, IntVT, Int,
13287 DAG.getConstant(SignMask, DL, IntVT));
13289 return DAG.getBitcast(N->getValueType(0), Int);
13312 return DAG.getNode(ISD::BR_CC, SDLoc(N), MVT::Other,
13319 return DAG.getNode(ISD::BRCOND, SDLoc(N), MVT::Other, Chain, NewN1, N2);
13363 return DAG.getSetCC(DL, getSetCCResultType(Op0.getValueType()),
13364 Op0, DAG.getConstant(0, DL, Op0.getValueType()),
13413 return DAG.getSetCC(SDLoc(TheXor), SetCCVT, Op0, Op1,
13441 return DAG.getNode(ISD::BR_CC, SDLoc(N), MVT::Other,
13539 if (!TLI.getPreIndexedAddressParts(N, BasePtr, Offset, AM, DAG))
13638 if (!canFoldInAddressingMode(Ptr.getNode(), Use, DAG, TLI))
13647 Result = DAG.getIndexedLoad(SDValue(N,0), SDLoc(N),
13650 Result = DAG.getIndexedStore(SDValue(N,0), SDLoc(N),
13654 LLVM_DEBUG(dbgs() << "\nReplacing.4 "; N->dump(&DAG); dbgs() << "\nWith: ";
13655 Result.getNode()->dump(&DAG); dbgs() << '\n');
13658 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0));
13659 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2));
13661 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1));
13710 SDValue NewOp1 = DAG.getConstant(CNV, DL, CN->getValueType(0));
13713 SDValue NewUse = DAG.getNode(Opcode,
13716 DAG.ReplaceAllUsesOfValueWith(SDValue(OtherUses[i], 0), NewUse);
13721 DAG.ReplaceAllUsesOfValueWith(Ptr, Result.getValue(isLoad ? 1 : 0));
13771 if (TLI.getPostIndexedAddressParts(N, Op, BasePtr, Offset, AM, DAG)) {
13797 if (!canFoldInAddressingMode(Use, UseUse, DAG, TLI))
13821 ? DAG.getIndexedLoad(SDValue(N,0), SDLoc(N),
13823 : DAG.getIndexedStore(SDValue(N,0), SDLoc(N),
13827 LLVM_DEBUG(dbgs() << "\nReplacing.5 "; N->dump(&DAG);
13828 dbgs() << "\nWith: "; Result.getNode()->dump(&DAG);
13832 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(0));
13833 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Result.getValue(2));
13835 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Result.getValue(1));
13842 DAG.ReplaceAllUsesOfValueWith(SDValue(Op, 0),
13868 Inc = DAG.getConstant(*ConstInc->getConstantIntValue(), SDLoc(Inc),
13874 return DAG.getNode(Opc, SDLoc(LD), BP.getSimpleValueType(), BP, Inc);
13891 Val = DAG.getNode(ISD::FTRUNC, SDLoc(ST), STMemType, Val);
13896 Val = DAG.getNode(ISD::TRUNCATE, SDLoc(ST), STMemType, Val);
13900 Val = DAG.getBitcast(STMemType, Val);
13916 Val = DAG.getBitcast(LDType, Val);
13919 Val = DAG.getNode(ISD::ANY_EXTEND, SDLoc(LD), LDType, Val);
13922 Val = DAG.getNode(ISD::SIGN_EXTEND, SDLoc(LD), LDType, Val);
13925 Val = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(LD), LDType, Val);
13946 BaseIndexOffset BasePtrLD = BaseIndexOffset::match(LD, DAG);
13947 BaseIndexOffset BasePtrST = BaseIndexOffset::match(ST, DAG);
13949 if (!BasePtrST.equalBaseIndex(BasePtrLD, DAG, Offset))
13956 if (DAG.getDataLayout().isBigEndian())
13970 SDValue Idx = DAG.getNode(Opc, SDLoc(LD), LD->getOperand(1).getValueType(),
13991 DAG.getConstant(APInt::getLowBitsSet(STType.getSizeInBits(),
13994 auto Val = DAG.getNode(ISD::AND, SDLoc(LD), LDType, ST->getValue(), Mask);
14014 Val = DAG.getNode(ISD::TRUNCATE, SDLoc(LD), LDMemType, Val);
14048 LLVM_DEBUG(dbgs() << "\nReplacing.6 "; N->dump(&DAG);
14049 dbgs() << "\nWith chain: "; Chain.getNode()->dump(&DAG);
14052 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Chain);
14072 SDValue Undef = DAG.getUNDEF(N->getValueType(0));
14080 Index = DAG.getUNDEF(N->getValueType(1));
14081 LLVM_DEBUG(dbgs() << "\nReplacing.7 "; N->dump(&DAG);
14082 dbgs() << "\nWith: "; Undef.getNode()->dump(&DAG);
14085 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Undef);
14086 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Index);
14087 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 2), Chain);
14101 if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
14103 SDValue NewLoad = DAG.getExtLoad(
14124 ReplLoad = DAG.getLoad(N->getValueType(0), SDLoc(LD),
14127 ReplLoad = DAG.getExtLoad(LD->getExtensionType(), SDLoc(LD),
14134 SDValue Token = DAG.getNode(ISD::TokenFactor, SDLoc(N),
14652 LoadedSlice LS(User, LD, Shift, &DAG);
14693 SDValue Chain = DAG.getNode(ISD::TokenFactor, SDLoc(LD), MVT::Other,
14695 DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Chain);
14898 EVT NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
14906 NewVT = EVT::getIntegerVT(*DAG.getContext(), NewBW);
14924 if (DAG.getDataLayout().isBigEndian())
14928 Type *NewVTTy = NewVT.getTypeForEVT(*DAG.getContext());
14929 if (NewAlign < DAG.getDataLayout().getABITypeAlignment(NewVTTy))
14932 SDValue NewPtr = DAG.getNode(ISD::ADD, SDLoc(LD),
14934 DAG.getConstant(PtrOff, SDLoc(LD),
14937 DAG.getLoad(NewVT, SDLoc(N0), LD->getChain(), NewPtr,
14940 SDValue NewVal = DAG.getNode(Opc, SDLoc(Value), NewVT, NewLD,
14941 DAG.getConstant(NewImm, SDLoc(Value),
14944 DAG.getStore(Chain, SDLoc(N), NewVal, NewPtr,
14951 DAG.ReplaceAllUsesOfValueWith(N0.getValue(1), NewLD.getValue(1));
14978 EVT IntVT = EVT::getIntegerVT(*DAG.getContext(), VT.getSizeInBits());
14987 Type *IntVTTy = IntVT.getTypeForEVT(*DAG.getContext());
14988 unsigned ABIAlign = DAG.getDataLayout().getABITypeAlignment(IntVTTy);
14993 DAG.getLoad(IntVT, SDLoc(Value), LD->getChain(), LD->getBasePtr(),
14997 DAG.getStore(ST->getChain(), SDLoc(N), NewLD, ST->getBasePtr(),
15003 DAG.ReplaceAllUsesOfValueWith(Value.getValue(1), NewLD.getValue(1));
15075 DAG.isConstantIntBuildVectorOrConstantInt(OtherOp->getOperand(1)) &&
15102 return DAG.getTokenFactor(StoreDL, Chains);
15123 StoreTy = EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(), Elts);
15125 StoreTy = EVT::getIntegerVT(*DAG.getContext(), SizeInBits);
15140 EVT::getIntegerVT(*DAG.getContext(), MemVT.getSizeInBits());
15145 Val = DAG.getConstant(C->getAPIntValue()
15151 Val = DAG.getBitcast(MemVT, Val);
15155 StoredVal = DAG.getNode(MemVT.isVector() ? ISD::CONCAT_VECTORS
15175 Val = DAG.getBitcast(MemVT, Val);
15181 Val = DAG.getNode(OpC, SDLoc(Val), MemVT, Vec, Idx);
15188 StoredVal = DAG.getNode(MemVT.isVector() ? ISD::CONCAT_VECTORS
15201 bool IsLE = DAG.getDataLayout().isLittleEndian();
15227 StoredVal = DAG.getConstant(StoreInt, DL, StoreTy);
15236 NewStore = DAG.getStore(NewChain, DL, StoredVal, FirstInChain->getBasePtr(),
15241 TLI.getTypeToTransformTo(*DAG.getContext(), StoredVal.getValueType());
15245 DAG.getConstant(C->getAPIntValue().zextOrTrunc(LegalizedStoreSize), DL,
15247 NewStore = DAG.getTruncStore(
15267 BaseIndexOffset BasePtr = BaseIndexOffset::match(St, DAG);
15288 LBasePtr = BaseIndexOffset::match(Ld, DAG);
15319 BaseIndexOffset LPtr = BaseIndexOffset::match(OtherLd, DAG);
15333 if (!(LBasePtr.equalBaseIndex(LPtr, DAG)))
15354 Ptr = BaseIndexOffset::match(Other, DAG);
15355 return (BasePtr.equalBaseIndex(Ptr, DAG, Offset));
15496 bool NoVectors = DAG.getMachineFunction().getFunction().hasFnAttribute(
15579 LLVMContext &Context = *DAG.getContext();
15580 const DataLayout &DL = DAG.getDataLayout();
15617 TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
15629 TLI.canMergeStoresTo(FirstStoreAS, LegalizedStoredValTy, DAG) &&
15649 TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) &&
15713 EVT::getVectorVT(*DAG.getContext(), MemVT.getScalarType(), Elts);
15721 TLI.canMergeStoresTo(FirstStoreAS, Ty, DAG) &&
15783 BaseIndexOffset LdPtr = BaseIndexOffset::match(Ld, DAG);
15788 if (!LdBasePtr.equalBaseIndex(LdPtr, DAG, LdOffset))
15852 TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
15866 TLI.canMergeStoresTo(FirstStoreAS, StoreTy, DAG) &&
15880 TLI.canMergeStoresTo(FirstStoreAS, LegalizedStoredValTy, DAG) &&
15974 DAG.getLoad(JointMemOpVT, LoadDL, FirstLoad->getChain(),
15977 NewStore = DAG.getStore(
15982 TLI.getTypeToTransformTo(*DAG.getContext(), JointMemOpVT);
15983 NewLoad = DAG.getExtLoad(ISD::EXTLOAD, LoadDL, ExtendedTy,
15987 NewStore = DAG.getTruncStore(NewStoreChain, StoreDL, NewLoad,
15997 DAG.ReplaceAllUsesOfValueWith(SDValue(Ld, 1),
16025 ReplStore = DAG.getTruncStore(BetterChain, SL, ST->getValue(),
16029 ReplStore = DAG.getStore(BetterChain, SL, ST->getValue(), ST->getBasePtr(),
16034 SDValue Token = DAG.getNode(ISD::TokenFactor, SL,
16074 Tmp = DAG.getConstant((uint32_t)CFP->getValueAPF().
16077 return DAG.getStore(Chain, DL, Tmp, Ptr, ST->getMemOperand());
16086 Tmp = DAG.getConstant(CFP->getValueAPF().bitcastToAPInt().
16088 return DAG.getStore(Chain, DL, Tmp,
16098 SDValue Lo = DAG.getConstant(Val & 0xFFFFFFFF, SDLoc(CFP), MVT::i32);
16099 SDValue Hi = DAG.getConstant(Val >> 32, SDLoc(CFP), MVT::i32);
16100 if (DAG.getDataLayout().isBigEndian())
16107 SDValue St0 = DAG.getStore(Chain, DL, Lo, Ptr, ST->getPointerInfo(),
16109 Ptr = DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
16110 DAG.getConstant(4, DL, Ptr.getValueType()));
16112 SDValue St1 = DAG.getStore(Chain, DL, Hi, Ptr,
16115 return DAG.getNode(ISD::TokenFactor, DL, MVT::Other,
16143 DAG, *ST->getMemOperand())) {
16144 return DAG.getStore(Chain, SDLoc(N), Value.getOperand(0), Ptr,
16156 if (unsigned Align = DAG.InferPtrAlignment(Ptr)) {
16159 DAG.getTruncStore(Chain, SDLoc(N), Value, Ptr, ST->getPointerInfo(),
16202 if (SDValue Shorter = DAG.GetDemandedBits(Value, TruncDemandedBits))
16203 return DAG.getTruncStore(Chain, SDLoc(N), Shorter, Ptr, ST->getMemoryVT(),
16246 const BaseIndexOffset STBase = BaseIndexOffset::match(ST, DAG);
16247 const BaseIndexOffset ChainBase = BaseIndexOffset::match(ST1, DAG);
16254 if (STBase.contains(DAG, STBitSize, ChainBase, ChainBitSize)) {
16264 if (ChainBase.contains(DAG, ChainBitSize, STBase, STBitSize,
16272 if (!DAG.getDataLayout().isBigEndian()) {
16275 DAG.getConstant(Val, SDLoc(C), ChainValue.getValueType(),
16277 SDNode *NewST1 = DAG.UpdateNodeOperands(
16295 return DAG.getTruncStore(Chain, SDLoc(N), Value.getOperand(0),
16368 const BaseIndexOffset StoreBase = BaseIndexOffset::match(ST, DAG);
16371 if (LifetimeEndBase.contains(DAG, LifetimeEnd->getSize() * 8, StoreBase,
16476 EVT VT = EVT::getIntegerVT(*DAG.getContext(), HalfValBitSize);
16477 Lo = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Lo.getOperand(0));
16478 Hi = DAG.getNode(ISD::ZERO_EXTEND, DL, VT, Hi.getOperand(0));
16483 SDValue St0 = DAG.getStore(Chain, DL, Lo, Ptr, ST->getPointerInfo(),
16486 DAG.getNode(ISD::ADD, DL, Ptr.getValueType(), Ptr,
16487 DAG.getConstant(HalfValBitSize / 8, DL, Ptr.getValueType()));
16490 DAG.getStore(St0, DL, Hi, Ptr,
16533 Y, NewMask, DAG);
16570 EVT ShufVT = EVT::getVectorVT(*DAG.getContext(), SubVecEltVT, NumMaskVals);
16577 SmallVector<SDValue, 8> ConcatOps(ExtendRatio, DAG.getUNDEF(SubVecVT));
16579 SDValue PaddedSubV = DAG.getNode(ISD::CONCAT_VECTORS, DL, ShufVT, ConcatOps);
16582 SDValue DestVecBC = DAG.getBitcast(ShufVT, DestVec);
16583 SDValue Shuf = DAG.getVectorShuffle(ShufVT, DL, DestVecBC, PaddedSubV, Mask);
16587 return DAG.getBitcast(VT, Shuf);
16611 return DAG.getBuildVector(VT, DL, Ops);
16633 SDValue NewOp = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, VT,
16636 return DAG.getNode(ISD::INSERT_VECTOR_ELT, SDLoc(InVec.getNode()),
16655 Ops.append(NumElts, DAG.getUNDEF(InVal.getValueType()));
16666 Ops[Elt] = OpVT.isInteger() ? DAG.getAnyExtOrTrunc(InVal, DL, OpVT) : InVal;
16670 return DAG.getBuildVector(VT, DL, Ops);
16681 unsigned NewAlign = DAG.getDataLayout().getABITypeAlignment(
16682 VecEltVT.getTypeForEVT(*DAG.getContext()));
16702 Offset = DAG.getConstant(PtrOff, DL, PtrType);
16705 Offset = DAG.getZExtOrTrunc(EltNo, DL, PtrType);
16706 Offset = DAG.getNode(
16708 DAG.getConstant(VecEltVT.getStoreSize(), DL, PtrType));
16713 NewPtr = DAG.getNode(ISD::ADD, DL, PtrType, NewPtr, Offset);
16730 Load = DAG.getExtLoad(ExtType, SDLoc(EVE), ResultVT,
16736 Load = DAG.getLoad(VecEltVT, SDLoc(EVE), OriginalLoad->getChain(), NewPtr,
16741 Load = DAG.getNode(ISD::TRUNCATE, SDLoc(EVE), ResultVT, Load);
16743 Load = DAG.getBitcast(ResultVT, Load);
16748 DAG.ReplaceAllUsesOfValuesWith(From, To, 2);
16800 return DAG.getUNDEF(ScalarVT);
16810 return VecVT.isInteger() ? DAG.getAnyExtOrTrunc(Elt, DL, ScalarVT) : Elt;
16821 return DAG.getSExtOrTrunc(InOp, DL, ScalarVT);
16830 return DAG.getUNDEF(ScalarVT);
16853 bool IsLE = DAG.getDataLayout().isLittleEndian();
16859 return DAG.getNode(ISD::TRUNCATE, DL, ScalarVT, BCSrc);
16879 return DAG.getAnyExtOrTrunc(X, DL, ScalarVT);
16884 if (SDValue BO = scalarizeExtractedBinop(N, DAG, LegalOperations))
16900 return DAG.getUNDEF(ScalarVT);
16915 InOp = DAG.getSExtOrTrunc(InOp, DL, ScalarVT);
16928 EVT IndexTy = TLI.getVectorIdxTy(DAG.getDataLayout());
16929 return DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, ScalarVT, SVInVec,
16930 DAG.getConstant(OrigElt, DL, IndexTy));
17037 Index = DAG.getConstant(Elt, DL, Index.getValueType());
17048 return DAG.getUNDEF(LVT);
17120 bool isLE = DAG.getDataLayout().isLittleEndian();
17123 SDValue Filler = AllAnyExt ? DAG.getUNDEF(SourceType):
17124 DAG.getConstant(0, DL, SourceType);
17137 In = DAG.getUNDEF(SourceType);
17148 EVT VecVT = EVT::getVectorVT(*DAG.getContext(), SourceType, NewBVElems);
17158 SDValue BV = DAG.getBuildVector(VecVT, DL, Ops);
17163 return DAG.getBitcast(VT, BV);
17170 MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
17171 SDValue ZeroIdx = DAG.getConstant(0, DL, IdxTy);
17192 SmallVector<SDValue, 2> ConcatOps(NumConcats, DAG.getUNDEF(InVT1));
17194 ConcatOps[1] = VecIn2 ? VecIn2 : DAG.getUNDEF(InVT1);
17195 VecIn1 = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, ConcatOps);
17204 VecIn2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1,
17205 DAG.getConstant(NumElems, DL, IdxTy));
17206 VecIn1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, VecIn1, ZeroIdx);
17225 VecIn2 = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, InVT1,
17226 DAG.getUNDEF(InVT1), VecIn2, ZeroIdx);
17237 SmallVector<SDValue, 2> ConcatOps(2, DAG.getUNDEF(InVT2));
17239 VecIn2 = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, ConcatOps);
17272 VecIn2 = VecIn2.getNode() ? VecIn2 : DAG.getUNDEF(InVT1);
17275 SDValue Shuffle = DAG.getVectorShuffle(InVT1, DL, VecIn1, VecIn2, Mask);
17277 Shuffle = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Shuffle, ZeroIdx);
17370 if (SDValue V = reduceBuildVecToShuffleWithZero(N, DAG))
17446 MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
17461 EVT SplitVT = EVT::getVectorVT(*DAG.getContext(),
17464 SDValue VecIn2 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SplitVT, Vec,
17465 DAG.getConstant(SplitSize, DL, IdxTy));
17466 SDValue VecIn1 = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, SplitVT, Vec,
17467 DAG.getConstant(0, DL, IdxTy));
17518 Shuffles.push_back(VT.isInteger() ? DAG.getConstant(0, DL, VT)
17519 : DAG.getConstantFP(0.0, DL, VT));
17545 Shuffles.push_back(DAG.getUNDEF(VT));
17549 Shuffles[CurSize] = DAG.getUNDEF(VT);
17567 DAG.getVectorShuffle(VT, DL, Shuffles[Left], Shuffles[Right], Mask);
17605 EVT InVT = EVT::getVectorVT(*DAG.getContext(), InSVT, NumElems);
17618 In = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, InVT, In,
17620 return DAG.getNode(FoundZeroExtend ? ISD::ZERO_EXTEND : ISD::ANY_EXTEND, DL,
17629 return DAG.getUNDEF(VT);
17645 EVT NewVT = EVT::getVectorVT(*DAG.getContext(),
17649 SDValue Concat = DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N),
17651 return DAG.getBitcast(VT, Concat);
17661 return DAG.getNode(ISD::SPLAT_VECTOR, SDLoc(N), VT, V);
17689 return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N), N->getValueType(0),
17850 return DAG.getUNDEF(VT);
17864 Ops.resize(NumOps, DAG.getUNDEF(Ops[0].getValueType()));
17865 return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Ops);
17902 EVT NVT = EVT::getVectorVT(*DAG.getContext(), SclTy, VNTNumElms);
17906 SDValue Res = DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), NVT, Scalar);
17907 return DAG.getBitcast(VT, Res);
17941 Opnds.append(NumElts, DAG.getUNDEF(MinVT));
17950 DAG.getNode(ISD::TRUNCATE, SDLoc(N), MinVT, Op.getOperand(i)));
17957 return DAG.getBuildVector(VT, SDLoc(N), Opnds);
17961 if (SDValue V = combineConcatVectorOfScalars(N, DAG))
17966 if (SDValue V = combineConcatVectorOfExtracts(N, DAG))
18228 return DAG.getUNDEF(NVT);
18231 if (SDValue NarrowLoad = narrowExtractedVectorLoad(N, DAG))
18242 return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N), NVT, V.getOperand(0),
18258 EVT NewExtVT = EVT::getVectorVT(*DAG.getContext(), SrcVT.getScalarType(),
18263 SDValue NewIndex = DAG.getIntPtrConstant(IndexValScaled, DL);
18264 SDValue NewExtract = DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, NewExtVT,
18266 return DAG.getBitcast(NVT, NewExtract);
18300 : EVT::getVectorVT(*DAG.getContext(),
18313 Src = DAG.getNode(ISD::TRUNCATE, SDLoc(N), InVT, Src);
18314 return DAG.getBitcast(NVT, Src);
18318 SDValue BuildVec = DAG.getBuildVector(
18320 return DAG.getBitcast(NVT, BuildVec);
18344 return DAG.getBitcast(NVT, V.getOperand(1));
18345 return DAG.getNode(
18347 DAG.getBitcast(N->getOperand(0).getValueType(), V.getOperand(0)),
18352 if (SDValue NarrowBOp = narrowExtractedVectorBinOp(N, DAG))
18855 return DAG.getUNDEF(VT);
18867 return DAG.getVectorShuffle(VT, SDLoc(N), N0, DAG.getUNDEF(VT), NewMask);
18867 return DAG.getVectorShuffle(VT, SDLoc(N), N0, DAG.getUNDEF(VT), NewMask);
18872 return DAG.getCommutedVectorShuffle(*SVN);
18887 return DAG.getVectorShuffle(VT, SDLoc(N), N0, N1, NewMask);
18890 if (SDValue InsElt = replaceShuffleOfInsert(SVN, DAG))
18894 if (SDValue V = combineShuffleOfSplatVal(SVN, DAG))
18908 SDValue Index = DAG.getIntPtrConstant(SplatIndex, DL);
18909 SDValue ExtL = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, L, Index);
18910 SDValue ExtR = DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, EltVT, R, Index);
18911 SDValue NewBO = DAG.getNode(N0.getOpcode(), DL, EltVT, ExtL, ExtR,
18913 SDValue Insert = DAG.getNode(ISD::SCALAR_TO_VECTOR, DL, VT, NewBO);
18915 return DAG.getVectorShuffle(VT, DL, Insert, DAG.getUNDEF(VT), ZeroMask);
18915 return DAG.getVectorShuffle(VT, DL, Insert, DAG.getUNDEF(VT), ZeroMask);
18956 SDValue NewBV = DAG.getBuildVector(V->getValueType(0), SDLoc(N), Ops);
18961 NewBV = DAG.getBitcast(VT, NewBV);
18976 if (SDValue V = combineShuffleToVectorExtend(SVN, DAG, TLI, LegalOperations))
18980 if (SDValue V = combineTruncationShuffle(SVN, DAG))
18988 if (SDValue V = partitionShuffleOfConcats(N, DAG))
18995 if (SDValue Res = combineShuffleOfScalars(SVN, DAG, TLI))
19054 SV0 = DAG.getBitcast(ScaleVT, SV0);
19055 SV1 = DAG.getBitcast(ScaleVT, SV1);
19056 return DAG.getBitcast(
19057 VT, DAG.getVectorShuffle(ScaleVT, SDLoc(N), SV0, SV1, NewMask));
19082 return DAG.getCommutedVectorShuffle(*SVN);
19168 return DAG.getUNDEF(VT);
19171 SV0 = DAG.getUNDEF(VT);
19173 SV1 = DAG.getUNDEF(VT);
19182 return TLI.buildLegalVectorShuffle(VT, SDLoc(N), SV0, SV1, Mask, DAG);
19185 if (SDValue V = foldShuffleOfConcatUndefs(SVN, DAG))
19211 DAG.getNode(ISD::TRUNCATE, SDLoc(InVal), VT.getScalarType(), InVal);
19212 return DAG.getNode(ISD::SCALAR_TO_VECTOR, SDLoc(N), VT, Val);
19218 DAG.getUNDEF(InVecT), NewMask, DAG);
19218 DAG.getUNDEF(InVecT), NewMask, DAG);
19226 MVT IdxTy = TLI.getVectorIdxTy(DAG.getDataLayout());
19227 SDValue ZeroIdx = DAG.getConstant(0, SDLoc(N), IdxTy);
19229 EVT::getVectorVT(*DAG.getContext(), InVecT.getVectorElementType(),
19231 return DAG.getNode(ISD::EXTRACT_SUBVECTOR, SDLoc(N), SubVT,
19269 return DAG.getBitcast(VT, N1.getOperand(0).getOperand(0));
19284 SDValue NewINSERT = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N),
19286 return DAG.getBitcast(VT, NewINSERT);
19296 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, N0.getOperand(0),
19304 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT, N0,
19326 MVT IdxVT = TLI.getVectorIdxTy(DAG.getDataLayout());
19327 LLVMContext &Ctx = *DAG.getContext();
19333 NewIdx = DAG.getConstant(InsIdx * Scale, DL, IdxVT);
19338 NewIdx = DAG.getConstant(InsIdx / Scale, DL, IdxVT);
19342 SDValue Res = DAG.getBitcast(NewVT, N0Src);
19343 Res = DAG.getNode(ISD::INSERT_SUBVECTOR, DL, NewVT, Res, N1Src, NewIdx);
19344 return DAG.getBitcast(VT, Res);
19359 SDValue NewOp = DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N), VT,
19362 return DAG.getNode(ISD::INSERT_SUBVECTOR, SDLoc(N0.getNode()),
19376 return DAG.getNode(ISD::CONCAT_VECTORS, SDLoc(N), VT, Ops);
19403 return DAG.getNode(ISD::FP16_TO_FP, SDLoc(N), N->getValueType(0),
19419 SDValue Res = DAG.getNode(
19421 DAG.getConstant(0, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
19421 DAG.getConstant(0, dl, TLI.getVectorIdxTy(DAG.getDataLayout())));
19423 Res = DAG.getNode(ISD::ANY_EXTEND, dl, N->getValueType(0), Res);
19434 DAG.ComputeNumSignBits(N0) == VT.getScalarSizeInBits())
19435 return DAG.getNode(NewOpcode, SDLoc(N), N->getValueType(0), N0);
19490 if (DAG.getDataLayout().isBigEndian()) {
19508 EVT ClearSVT = EVT::getIntegerVT(*DAG.getContext(), NumSubBits);
19509 EVT ClearVT = EVT::getVectorVT(*DAG.getContext(), ClearSVT, NumSubElts);
19513 SDValue Zero = DAG.getConstant(0, DL, ClearVT);
19514 return DAG.getBitcast(VT, DAG.getVectorShuffle(ClearVT, DL,
19514 return DAG.getBitcast(VT, DAG.getVectorShuffle(ClearVT, DL,
19515 DAG.getBitcast(ClearVT, LHS),
19591 if (SDValue Fold = DAG.FoldConstantVectorArithmetic(
19611 SDValue NewBinOp = DAG.getNode(Opcode, DL, VT, LHS.getOperand(0),
19614 return DAG.getVectorShuffle(VT, DL, NewBinOp, UndefV, Shuf0->getMask());
19635 DAG.getNode(Opcode, DL, VT, DAG.getUNDEF(VT), DAG.getUNDEF(VT));
19635 DAG.getNode(Opcode, DL, VT, DAG.getUNDEF(VT), DAG.getUNDEF(VT));
19635 DAG.getNode(Opcode, DL, VT, DAG.getUNDEF(VT), DAG.getUNDEF(VT));
19636 SDValue NarrowBO = DAG.getNode(Opcode, DL, NarrowVT, X, Y);
19637 return DAG.getNode(ISD::INSERT_SUBVECTOR, DL, VT, VecC, NarrowBO, Z);
19666 ConcatOps.push_back(DAG.getNode(Opcode, DL, NarrowVT, LHS.getOperand(i),
19670 return DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, ConcatOps);
19674 if (SDValue V = scalarizeBinOpOfSplats(N, DAG))
19695 SDValue SETCC = DAG.getNode(ISD::SETCC, SDLoc(N0),
19700 SDValue SelectNode = DAG.getSelect(SDLoc(SCC), SCC.getValueType(), SETCC,
19836 Addr = DAG.getSelect(SDLoc(TheSelect),
19858 Addr = DAG.getNode(ISD::SELECT_CC, SDLoc(TheSelect),
19878 Load = DAG.getLoad(TheSelect->getValueType(0), SDLoc(TheSelect),
19883 Load = DAG.getExtLoad(
19940 SDValue ShiftAmt = DAG.getConstant(ShCt, DL, ShiftAmtTy);
19941 SDValue Shift = DAG.getNode(ISD::SRL, DL, XType, N0, ShiftAmt);
19945 Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
19950 Shift = DAG.getNOT(DL, Shift, AType);
19952 return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
19955 SDValue ShiftAmt = DAG.getConstant(XType.getSizeInBits() - 1, DL, ShiftAmtTy);
19956 SDValue Shift = DAG.getNode(ISD::SRA, DL, XType, N0, ShiftAmt);
19960 Shift = DAG.getNode(ISD::TRUNCATE, DL, AType, Shift);
19965 Shift = DAG.getNOT(DL, Shift, AType);
19967 return DAG.getNode(ISD::AND, DL, AType, Shift, N2);
20002 const DataLayout &TD = DAG.getDataLayout();
20006 SDValue CPIdx = DAG.getConstantPool(CA, TLI.getPointerTy(DAG.getDataLayout()),
20006 SDValue CPIdx = DAG.getConstantPool(CA, TLI.getPointerTy(DAG.getDataLayout()),
20012 SDValue Zero = DAG.getIntPtrConstant(0, DL);
20014 SDValue One = DAG.getIntPtrConstant(EltSize, SDLoc(FV));
20016 DAG.getSetCC(DL, getSetCCResultType(N0.getValueType()), N0, N1, CC);
20018 SDValue CstOffset = DAG.getSelect(DL, Zero.getValueType(), Cond, One, Zero);
20020 CPIdx = DAG.getNode(ISD::ADD, DL, CPIdx.getValueType(), CPIdx, CstOffset);
20022 return DAG.getLoad(TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
20022 return DAG.getLoad(TV->getValueType(0), DL, DAG.getEntryNode(), CPIdx,
20024 DAG.getMachineFunction()), Alignment);
20043 if (SDValue SCC = DAG.FoldSetCC(CmpResVT, N0, N1, CC, DL)) {
20078 DAG.getConstant(AndMask.countLeadingZeros(), SDLoc(AndLHS),
20080 SDValue Shl = DAG.getNode(ISD::SHL, SDLoc(N0), VT, AndLHS, ShlAmt);
20085 DAG.getConstant(AndMask.getBitWidth() - 1, SDLoc(Shl),
20087 SDValue Shr = DAG.getNode(ISD::SRA, SDLoc(N0), VT, Shl, ShrAmt);
20089 return DAG.getNode(ISD::AND, DL, VT, Shr, N3);
20115 SCC = DAG.getSetCC(DL, CmpResVT, N0, N1, CC);
20117 Temp = DAG.getZeroExtendInReg(SCC, SDLoc(N2), VT);
20119 Temp = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N2), VT, SCC);
20121 SCC = DAG.getSetCC(SDLoc(N0), MVT::i1, N0, N1, CC);
20122 Temp = DAG.getNode(ISD::ZERO_EXTEND, SDLoc(N2), VT, SCC);
20132 return DAG.getNode(ISD::SHL, DL, N2.getValueType(), Temp,
20133 DAG.getConstant(N2C->getAPIntValue().logBase2(),
20161 return DAG.getNode(ISD::CTTZ, DL, VT, N0);
20168 return DAG.getNode(ISD::CTLZ, DL, VT, N0);
20181 DagCombineInfo(DAG, Level, false, this);
20192 if (DAG.getMachineFunction().getFunction().hasMinSize())
20196 if (SDValue S = TLI.BuildSDIV(N, DAG, LegalOperations, Built)) {
20217 if (SDValue S = TLI.BuildSDIVPow2(N, C->getAPIntValue(), DAG, Built)) {
20233 if (DAG.getMachineFunction().getFunction().hasMinSize())
20237 if (SDValue S = TLI.BuildUDIV(N, DAG, LegalOperations, Built)) {
20251 SDValue Ctlz = DAG.getNode(ISD::CTLZ, DL, VT, V);
20252 SDValue Base = DAG.getConstant(EltBits - 1, DL, VT);
20253 SDValue LogBase2 = DAG.getNode(ISD::SUB, DL, VT, Base, Ctlz);
20276 MachineFunction &MF = DAG.getMachineFunction();
20284 if (SDValue Est = TLI.getRecipEstimate(Op, DAG, Enabled, Iterations)) {
20289 SDValue FPOne = DAG.getConstantFP(1.0, DL, VT);
20297 MulEst = DAG.getNode(ISD::FMUL, DL, VT, N, Est, Flags);
20301 SDValue NewEst = DAG.getNode(ISD::FMUL, DL, VT, Op, MulEst, Flags);
20304 NewEst = DAG.getNode(ISD::FSUB, DL, VT,
20308 NewEst = DAG.getNode(ISD::FMUL, DL, VT, Est, NewEst, Flags);
20311 Est = DAG.getNode(ISD::FADD, DL, VT, MulEst, NewEst, Flags);
20316 Est = DAG.getNode(ISD::FMUL, DL, VT, Est, N, Flags);
20337 SDValue ThreeHalves = DAG.getConstantFP(1.5, DL, VT);
20341 SDValue HalfArg = DAG.getNode(ISD::FMUL, DL, VT, ThreeHalves, Arg, Flags);
20342 HalfArg = DAG.getNode(ISD::FSUB, DL, VT, HalfArg, Arg, Flags);
20346 SDValue NewEst = DAG.getNode(ISD::FMUL, DL, VT, Est, Est, Flags);
20347 NewEst = DAG.getNode(ISD::FMUL, DL, VT, HalfArg, NewEst, Flags);
20348 NewEst = DAG.getNode(ISD::FSUB, DL, VT, ThreeHalves, NewEst, Flags);
20349 Est = DAG.getNode(ISD::FMUL, DL, VT, Est, NewEst, Flags);
20354 Est = DAG.getNode(ISD::FMUL, DL, VT, Est, Arg, Flags);
20369 SDValue MinusThree = DAG.getConstantFP(-3.0, DL, VT);
20370 SDValue MinusHalf = DAG.getConstantFP(-0.5, DL, VT);
20379 SDValue AE = DAG.getNode(ISD::FMUL, DL, VT, Arg, Est, Flags);
20380 SDValue AEE = DAG.getNode(ISD::FMUL, DL, VT, AE, Est, Flags);
20381 SDValue RHS = DAG.getNode(ISD::FADD, DL, VT, AEE, MinusThree, Flags);
20389 LHS = DAG.getNode(ISD::FMUL, DL, VT, Est, MinusHalf, Flags);
20392 LHS = DAG.getNode(ISD::FMUL, DL, VT, AE, MinusHalf, Flags);
20395 Est = DAG.getNode(ISD::FMUL, DL, VT, LHS, RHS, Flags);
20415 MachineFunction &MF = DAG.getMachineFunction();
20426 TLI.getSqrtEstimate(Op, DAG, Enabled, Iterations, UseOneConstNR,
20441 const Function &F = DAG.getMachineFunction().getFunction();
20445 const fltSemantics &FltSem = DAG.EVTToAPFloatSemantics(VT);
20447 SDValue NormC = DAG.getConstantFP(SmallestNorm, DL, VT);
20448 SDValue FPZero = DAG.getConstantFP(0.0, DL, VT);
20449 SDValue Fabs = DAG.getNode(ISD::FABS, DL, VT, Op);
20450 SDValue IsDenorm = DAG.getSetCC(DL, CCVT, Fabs, NormC, ISD::SETLT);
20451 Est = DAG.getNode(SelOpcode, DL, VT, IsDenorm, FPZero, Est);
20454 SDValue FPZero = DAG.getConstantFP(0.0, DL, VT);
20455 SDValue IsZero = DAG.getSetCC(DL, CCVT, Op, FPZero, ISD::SETEQ);
20456 Est = DAG.getNode(SelOpcode, DL, VT, IsZero, FPZero, Est);
20539 DAG, IsAlias))
20577 : DAG.getSubtarget().useAA();
20580 CombinerAAOnlyFunc != DAG.getMachineFunction().getName())
20723 return DAG.getEntryNode();
20730 return DAG.getTokenFactor(SDLoc(N), Aliases);
20767 const BaseIndexOffset BasePtr = BaseIndexOffset::match(St, DAG);
20789 const BaseIndexOffset Ptr = BaseIndexOffset::match(Chain, DAG);
20792 if (!BasePtr.equalBaseIndex(Ptr, DAG, Offset))
20821 S = cast<StoreSDNode>(DAG.UpdateNodeOperands(
20831 NewST = DAG.getTruncStore(BetterChain, SDLoc(St), St->getValue(),
20835 NewST = DAG.getStore(BetterChain, SDLoc(St), St->getValue(),
20850 SDValue TF = DAG.getTokenFactor(SDLoc(STChain), TFOps);
20865 const BaseIndexOffset BasePtr = BaseIndexOffset::match(St, DAG);