Lines Matching defs:DL
464 static SDValue lowerVECTOR_SHUFFLE_VREPLVEI(const SDLoc &DL, ArrayRef<int> Mask,
481 return DAG.getNode(LoongArchISD::VREPLVEI, DL, VT, V1,
482 DAG.getConstant(Imm, DL, MVT::i64));
506 static SDValue lowerVECTOR_SHUFFLE_VSHUF4I(const SDLoc &DL, ArrayRef<int> Mask,
550 return DAG.getNode(LoongArchISD::VSHUF4I, DL, VT, V1,
551 DAG.getConstant(Imm, DL, MVT::i64));
569 static SDValue lowerVECTOR_SHUFFLE_VPACKEV(const SDLoc &DL, ArrayRef<int> Mask,
591 return DAG.getNode(LoongArchISD::VPACKEV, DL, VT, V2, V1);
609 static SDValue lowerVECTOR_SHUFFLE_VPACKOD(const SDLoc &DL, ArrayRef<int> Mask,
631 return DAG.getNode(LoongArchISD::VPACKOD, DL, VT, V2, V1);
650 static SDValue lowerVECTOR_SHUFFLE_VILVH(const SDLoc &DL, ArrayRef<int> Mask,
674 return DAG.getNode(LoongArchISD::VILVH, DL, VT, V2, V1);
693 static SDValue lowerVECTOR_SHUFFLE_VILVL(const SDLoc &DL, ArrayRef<int> Mask,
715 return DAG.getNode(LoongArchISD::VILVL, DL, VT, V2, V1);
733 static SDValue lowerVECTOR_SHUFFLE_VPICKEV(const SDLoc &DL, ArrayRef<int> Mask,
757 return DAG.getNode(LoongArchISD::VPICKEV, DL, VT, V2, V1);
775 static SDValue lowerVECTOR_SHUFFLE_VPICKOD(const SDLoc &DL, ArrayRef<int> Mask,
798 return DAG.getNode(LoongArchISD::VPICKOD, DL, VT, V2, V1);
805 static SDValue lowerVECTOR_SHUFFLE_VSHUF(const SDLoc &DL, ArrayRef<int> Mask,
811 Ops.push_back(DAG.getConstant(M, DL, MVT::i64));
814 SDValue MaskVec = DAG.getBuildVector(MaskVecTy, DL, Ops);
823 return DAG.getNode(LoongArchISD::VSHUF, DL, VT, MaskVec, V2, V1);
830 static SDValue lower128BitShuffle(const SDLoc &DL, ArrayRef<int> Mask, MVT VT,
845 if ((Result = lowerVECTOR_SHUFFLE_VREPLVEI(DL, Mask, VT, V1, V2, DAG)))
847 if ((Result = lowerVECTOR_SHUFFLE_VSHUF4I(DL, Mask, VT, V1, V2, DAG)))
857 if ((Result = lowerVECTOR_SHUFFLE_VPACKEV(DL, Mask, VT, V1, V2, DAG)))
859 if ((Result = lowerVECTOR_SHUFFLE_VPACKOD(DL, Mask, VT, V1, V2, DAG)))
861 if ((Result = lowerVECTOR_SHUFFLE_VILVH(DL, Mask, VT, V1, V2, DAG)))
863 if ((Result = lowerVECTOR_SHUFFLE_VILVL(DL, Mask, VT, V1, V2, DAG)))
865 if ((Result = lowerVECTOR_SHUFFLE_VPICKEV(DL, Mask, VT, V1, V2, DAG)))
867 if ((Result = lowerVECTOR_SHUFFLE_VPICKOD(DL, Mask, VT, V1, V2, DAG)))
869 if ((Result = lowerVECTOR_SHUFFLE_VSHUF(DL, Mask, VT, V1, V2, DAG)))
883 static SDValue lowerVECTOR_SHUFFLE_XVREPLVEI(const SDLoc &DL,
907 return DAG.getNode(LoongArchISD::VREPLVEI, DL, VT, V1,
908 DAG.getConstant(Imm, DL, MVT::i64));
915 static SDValue lowerVECTOR_SHUFFLE_XVSHUF4I(const SDLoc &DL, ArrayRef<int> Mask,
922 return lowerVECTOR_SHUFFLE_VSHUF4I(DL, Mask, VT, V1, V2, DAG);
926 static SDValue lowerVECTOR_SHUFFLE_XVPACKEV(const SDLoc &DL, ArrayRef<int> Mask,
929 return lowerVECTOR_SHUFFLE_VPACKEV(DL, Mask, VT, V1, V2, DAG);
933 static SDValue lowerVECTOR_SHUFFLE_XVPACKOD(const SDLoc &DL, ArrayRef<int> Mask,
936 return lowerVECTOR_SHUFFLE_VPACKOD(DL, Mask, VT, V1, V2, DAG);
940 static SDValue lowerVECTOR_SHUFFLE_XVILVH(const SDLoc &DL, ArrayRef<int> Mask,
975 return DAG.getNode(LoongArchISD::VILVH, DL, VT, V2, V1);
979 static SDValue lowerVECTOR_SHUFFLE_XVILVL(const SDLoc &DL, ArrayRef<int> Mask,
1009 return DAG.getNode(LoongArchISD::VILVL, DL, VT, V2, V1);
1013 static SDValue lowerVECTOR_SHUFFLE_XVPICKEV(const SDLoc &DL, ArrayRef<int> Mask,
1044 return DAG.getNode(LoongArchISD::VPICKEV, DL, VT, V2, V1);
1048 static SDValue lowerVECTOR_SHUFFLE_XVPICKOD(const SDLoc &DL, ArrayRef<int> Mask,
1080 return DAG.getNode(LoongArchISD::VPICKOD, DL, VT, V2, V1);
1084 static SDValue lowerVECTOR_SHUFFLE_XVSHUF(const SDLoc &DL, ArrayRef<int> Mask,
1106 MaskAlloc.push_back(DAG.getTargetConstant(0, DL, MVT::i64));
1110 MaskAlloc.push_back(DAG.getTargetConstant(M, DL, MVT::i64));
1118 MaskAlloc.push_back(DAG.getTargetConstant(0, DL, MVT::i64));
1122 MaskAlloc.push_back(DAG.getTargetConstant(M, DL, MVT::i64));
1129 SDValue MaskVec = DAG.getBuildVector(MaskVecTy, DL, MaskAlloc);
1130 return DAG.getNode(LoongArchISD::VSHUF, DL, VT, MaskVec, V2, V1);
1152 static void canonicalizeShuffleVectorByLane(const SDLoc &DL,
1197 V1 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V1,
1198 DAG.getConstant(0b01001110, DL, MVT::i64));
1203 V2 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V2,
1204 DAG.getConstant(0b01001110, DL, MVT::i64));
1216 V1 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V1,
1217 DAG.getConstant(0b11101110, DL, MVT::i64));
1222 V2 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V2,
1223 DAG.getConstant(0b11101110, DL, MVT::i64));
1232 V1 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V1,
1233 DAG.getConstant(0b01000100, DL, MVT::i64));
1238 V2 = DAG.getNode(LoongArchISD::XVPERMI, DL, MVT::v4i64, V2,
1239 DAG.getConstant(0b01000100, DL, MVT::i64));
1255 static SDValue lower256BitShuffle(const SDLoc &DL, ArrayRef<int> Mask, MVT VT,
1270 canonicalizeShuffleVectorByLane(DL, NewMask, VT, V1, V2, DAG);
1275 if ((Result = lowerVECTOR_SHUFFLE_XVREPLVEI(DL, NewMask, VT, V1, V2, DAG)))
1277 if ((Result = lowerVECTOR_SHUFFLE_XVSHUF4I(DL, NewMask, VT, V1, V2, DAG)))
1287 if ((Result = lowerVECTOR_SHUFFLE_XVPACKEV(DL, NewMask, VT, V1, V2, DAG)))
1289 if ((Result = lowerVECTOR_SHUFFLE_XVPACKOD(DL, NewMask, VT, V1, V2, DAG)))
1291 if ((Result = lowerVECTOR_SHUFFLE_XVILVH(DL, NewMask, VT, V1, V2, DAG)))
1293 if ((Result = lowerVECTOR_SHUFFLE_XVILVL(DL, NewMask, VT, V1, V2, DAG)))
1295 if ((Result = lowerVECTOR_SHUFFLE_XVPICKEV(DL, NewMask, VT, V1, V2, DAG)))
1297 if ((Result = lowerVECTOR_SHUFFLE_XVPICKOD(DL, NewMask, VT, V1, V2, DAG)))
1299 if ((Result = lowerVECTOR_SHUFFLE_XVSHUF(DL, NewMask, VT, V1, V2, DAG)))
1313 SDLoc DL(Op);
1335 return DAG.getVectorShuffle(VT, DL, V1, V2, NewMask);
1347 return lower128BitShuffle(DL, OrigMask, VT, V1, V2, DAG);
1350 return lower256BitShuffle(DL, OrigMask, VT, V1, V2, DAG);
1376 SDLoc DL(Op);
1415 SDValue Result = DAG.getConstant(SplatValue, DL, ViaVecTy);
1438 Vector = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, ResTy, Vector,
1440 DAG.getConstant(i, DL, Subtarget.getGRLenVT()));
1474 SDLoc DL(Op);
1483 return DAG.getNode(ISD::MEMBARRIER, DL, MVT::Other, Op.getOperand(0));
1518 SDLoc DL(Op);
1519 SDValue FrameAddr = DAG.getCopyFromReg(DAG.getEntryNode(), DL, FrameReg, VT);
1525 SDValue Ptr = DAG.getNode(ISD::ADD, DL, VT, FrameAddr,
1526 DAG.getIntPtrConstant(Offset, DL));
1528 DAG.getLoad(VT, DL, DAG.getEntryNode(), Ptr, MachinePointerInfo());
1569 SDLoc DL(Op);
1576 return DAG.getStore(Op.getOperand(0), DL, FI, Op.getOperand(1),
1585 SDLoc DL(Op);
1610 makeLibCall(DAG, LC, Op.getValueType(), Op0, CallOptions, DL, Chain);
1619 SDLoc DL(Op);
1635 makeLibCall(DAG, LC, Op.getValueType(), Op0, CallOptions, DL, Chain);
1642 SDLoc DL(Op);
1647 SDValue NewOp0 = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op0);
1648 return DAG.getNode(LoongArchISD::MOVGR2FR_W_LA64, DL, MVT::f32, NewOp0);
1656 SDLoc DL(Op);
1661 DAG.getNode(LoongArchISD::FTINT, DL, MVT::f32, Op.getOperand(0));
1662 return DAG.getNode(LoongArchISD::MOVFR2GR_S_LA64, DL, MVT::i64, Dst);
1666 SDValue Trunc = DAG.getNode(LoongArchISD::FTINT, DL, FPTy, Op.getOperand(0));
1667 return DAG.getNode(ISD::BITCAST, DL, Op.getValueType(), Trunc);
1670 static SDValue getTargetNode(GlobalAddressSDNode *N, SDLoc DL, EVT Ty,
1672 return DAG.getTargetGlobalAddress(N->getGlobal(), DL, Ty, 0, Flags);
1675 static SDValue getTargetNode(BlockAddressSDNode *N, SDLoc DL, EVT Ty,
1681 static SDValue getTargetNode(ConstantPoolSDNode *N, SDLoc DL, EVT Ty,
1687 static SDValue getTargetNode(JumpTableSDNode *N, SDLoc DL, EVT Ty,
1696 SDLoc DL(N);
1698 SDValue Addr = getTargetNode(N, DL, Ty, DAG, 0);
1710 SDValue Tmp = DAG.getConstant(0, DL, Ty);
1714 Load = SDValue(DAG.getMachineNode(LoongArch::PseudoLA_PCREL_LARGE, DL, Ty,
1721 DAG.getMachineNode(LoongArch::PseudoLA_GOT_LARGE, DL, Ty, Tmp, Addr),
1733 DAG.getMachineNode(LoongArch::PseudoLA_PCREL, DL, Ty, Addr), 0);
1738 SDValue(DAG.getMachineNode(LoongArch::PseudoLA_GOT, DL, Ty, Addr), 0);
1793 SDLoc DL(N);
1799 SDValue Tmp = DAG.getConstant(0, DL, Ty);
1800 SDValue Addr = DAG.getTargetGlobalAddress(N->getGlobal(), DL, Ty, 0, 0);
1802 ? SDValue(DAG.getMachineNode(Opc, DL, Ty, Tmp, Addr), 0)
1803 : SDValue(DAG.getMachineNode(Opc, DL, Ty, Addr), 0);
1816 return DAG.getNode(ISD::ADD, DL, Ty, Offset,
1824 SDLoc DL(N);
1830 SDValue Tmp = DAG.getConstant(0, DL, Ty);
1833 SDValue Addr = DAG.getTargetGlobalAddress(N->getGlobal(), DL, Ty, 0, 0);
1834 SDValue Load = Large ? SDValue(DAG.getMachineNode(Opc, DL, Ty, Tmp, Addr), 0)
1835 : SDValue(DAG.getMachineNode(Opc, DL, Ty, Addr), 0);
1846 CLI.setDebugLoc(DL)
1858 SDLoc DL(N);
1864 SDValue Tmp = DAG.getConstant(0, DL, Ty);
1868 SDValue Addr = DAG.getTargetGlobalAddress(GV, DL, Ty, 0, 0);
1869 return Large ? SDValue(DAG.getMachineNode(Opc, DL, Ty, Tmp, Addr), 0)
1870 : SDValue(DAG.getMachineNode(Opc, DL, Ty, Addr), 0);
1950 SDLoc DL(Op);
2239 SDLoc DL(Op);
2264 : DAG.getNode(LoongArchISD::CSRRD, DL, {GRLenVT, MVT::Other},
2265 {Chain, DAG.getConstant(Imm, DL, GRLenVT)});
2272 : DAG.getNode(LoongArchISD::CSRWR, DL, {GRLenVT, MVT::Other},
2274 DAG.getConstant(Imm, DL, GRLenVT)});
2281 : DAG.getNode(LoongArchISD::CSRXCHG, DL, {GRLenVT, MVT::Other},
2283 DAG.getConstant(Imm, DL, GRLenVT)});
2287 LoongArchISD::IOCSRRD_D, DL, {GRLenVT, MVT::Other},
2288 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op.getOperand(2))});
2292 return DAG.getNode(LoongArchISD::NODE, DL, {GRLenVT, MVT::Other}, \
2300 return DAG.getNode(LoongArchISD::CPUCFG, DL, {GRLenVT, MVT::Other},
2315 : DAG.getNode(LoongArchISD::MOVFCSR2GR, DL, {VT, MVT::Other},
2316 {Chain, DAG.getConstant(Imm, DL, GRLenVT)});
2360 SDLoc DL(Op);
2391 : DAG.getNode(LoongArchISD::DBAR, DL, MVT::Other, Chain,
2392 DAG.getConstant(Imm, DL, GRLenVT));
2398 : DAG.getNode(LoongArchISD::IBAR, DL, MVT::Other, Chain,
2399 DAG.getConstant(Imm, DL, GRLenVT));
2405 : DAG.getNode(LoongArchISD::BREAK, DL, MVT::Other, Chain,
2406 DAG.getConstant(Imm, DL, GRLenVT));
2414 : DAG.getNode(LoongArchISD::MOVGR2FCSR, DL, MVT::Other, Chain,
2415 DAG.getConstant(Imm, DL, GRLenVT),
2416 DAG.getNode(ISD::ANY_EXTEND, DL, GRLenVT,
2423 : DAG.getNode(LoongArchISD::SYSCALL, DL, MVT::Other, Chain,
2424 DAG.getConstant(Imm, DL, GRLenVT));
2430 ? DAG.getNode(LoongArchISD::NODE, DL, MVT::Other, Chain, \
2431 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2), \
2432 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op3)) \
2433 : DAG.getNode(LoongArchISD::NODE, DL, MVT::Other, Chain, Op2, \
2443 : DAG.getNode(LoongArchISD::IOCSRWR_D, DL, MVT::Other, Chain,
2445 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64,
2526 SDLoc DL(Op);
2539 SDValue Zero = DAG.getConstant(0, DL, VT);
2540 SDValue One = DAG.getConstant(1, DL, VT);
2541 SDValue MinusGRLen = DAG.getConstant(-(int)Subtarget.getGRLen(), DL, VT);
2542 SDValue GRLenMinus1 = DAG.getConstant(Subtarget.getGRLen() - 1, DL, VT);
2543 SDValue ShamtMinusGRLen = DAG.getNode(ISD::ADD, DL, VT, Shamt, MinusGRLen);
2544 SDValue GRLenMinus1Shamt = DAG.getNode(ISD::XOR, DL, VT, Shamt, GRLenMinus1);
2546 SDValue LoTrue = DAG.getNode(ISD::SHL, DL, VT, Lo, Shamt);
2547 SDValue ShiftRight1Lo = DAG.getNode(ISD::SRL, DL, VT, Lo, One);
2549 DAG.getNode(ISD::SRL, DL, VT, ShiftRight1Lo, GRLenMinus1Shamt);
2550 SDValue ShiftLeftHi = DAG.getNode(ISD::SHL, DL, VT, Hi, Shamt);
2551 SDValue HiTrue = DAG.getNode(ISD::OR, DL, VT, ShiftLeftHi, ShiftRightLo);
2552 SDValue HiFalse = DAG.getNode(ISD::SHL, DL, VT, Lo, ShamtMinusGRLen);
2554 SDValue CC = DAG.getSetCC(DL, VT, ShamtMinusGRLen, Zero, ISD::SETLT);
2556 Lo = DAG.getNode(ISD::SELECT, DL, VT, CC, LoTrue, Zero);
2557 Hi = DAG.getNode(ISD::SELECT, DL, VT, CC, HiTrue, HiFalse);
2560 return DAG.getMergeValues(Parts, DL);
2566 SDLoc DL(Op);
2590 SDValue Zero = DAG.getConstant(0, DL, VT);
2591 SDValue One = DAG.getConstant(1, DL, VT);
2592 SDValue MinusGRLen = DAG.getConstant(-(int)Subtarget.getGRLen(), DL, VT);
2593 SDValue GRLenMinus1 = DAG.getConstant(Subtarget.getGRLen() - 1, DL, VT);
2594 SDValue ShamtMinusGRLen = DAG.getNode(ISD::ADD, DL, VT, Shamt, MinusGRLen);
2595 SDValue GRLenMinus1Shamt = DAG.getNode(ISD::XOR, DL, VT, Shamt, GRLenMinus1);
2597 SDValue ShiftRightLo = DAG.getNode(ISD::SRL, DL, VT, Lo, Shamt);
2598 SDValue ShiftLeftHi1 = DAG.getNode(ISD::SHL, DL, VT, Hi, One);
2600 DAG.getNode(ISD::SHL, DL, VT, ShiftLeftHi1, GRLenMinus1Shamt);
2601 SDValue LoTrue = DAG.getNode(ISD::OR, DL, VT, ShiftRightLo, ShiftLeftHi);
2602 SDValue HiTrue = DAG.getNode(ShiftRightOp, DL, VT, Hi, Shamt);
2603 SDValue LoFalse = DAG.getNode(ShiftRightOp, DL, VT, Hi, ShamtMinusGRLen);
2605 IsSRA ? DAG.getNode(ISD::SRA, DL, VT, Hi, GRLenMinus1) : Zero;
2607 SDValue CC = DAG.getSetCC(DL, VT, ShamtMinusGRLen, Zero, ISD::SETLT);
2609 Lo = DAG.getNode(ISD::SELECT, DL, VT, CC, LoTrue, LoFalse);
2610 Hi = DAG.getNode(ISD::SELECT, DL, VT, CC, HiTrue, HiFalse);
2613 return DAG.getMergeValues(Parts, DL);
2649 SDLoc DL(N);
2657 NewOp0 = DAG.getNode(ExtOpc, DL, MVT::i64, N->getOperand(0));
2658 NewRes = DAG.getNode(WOpcode, DL, MVT::i64, NewOp0);
2662 NewOp0 = DAG.getNode(ExtOpc, DL, MVT::i64, N->getOperand(0));
2663 SDValue NewOp1 = DAG.getNode(ExtOpc, DL, MVT::i64, N->getOperand(1));
2665 SDValue TmpOp = DAG.getConstant(32, DL, MVT::i64);
2666 NewOp1 = DAG.getNode(ISD::SUB, DL, MVT::i64, TmpOp, NewOp1);
2668 NewRes = DAG.getNode(WOpcode, DL, MVT::i64, NewOp0, NewOp1);
2676 return DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), NewRes);
2682 SDLoc DL(N);
2683 SDValue NewOp0 = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(0));
2684 SDValue NewOp1 = DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(1));
2685 SDValue NewWOp = DAG.getNode(N->getOpcode(), DL, MVT::i64, NewOp0, NewOp1);
2686 SDValue NewRes = DAG.getNode(ISD::SIGN_EXTEND_INREG, DL, MVT::i64, NewWOp,
2688 return DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, NewRes);
2715 SDLoc DL(Node);
2719 DAG.getNode(ResOp, DL, Subtarget.getGRLenVT(), Vec,
2720 DAG.getConstant(Imm, DL, Subtarget.getGRLenVT()),
2722 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, Node->getValueType(0),
2731 SDLoc DL(N);
2734 SDValue CB = DAG.getNode(ResOp, DL, Subtarget.getGRLenVT(), Vec);
2736 DAG.getNode(ISD::TRUNCATE, DL, N->getValueType(0), CB.getValue(0)));
2809 SDLoc DL(N);
2849 SDValue Dst = DAG.getNode(LoongArchISD::FTINT, DL, FVT, Src);
2850 Results.push_back(DAG.getNode(ISD::BITCAST, DL, VT, Dst));
2863 makeLibCall(DAG, LC, VT, Src, CallOptions, DL, Chain);
2873 DAG.getNode(LoongArchISD::MOVFR2GR_S_LA64, DL, MVT::i64, Src);
2874 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, Dst));
2884 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, MVT::i32, Tmp1));
2892 SDValue NewSrc = DAG.getNode(ISD::ANY_EXTEND, DL, GRLenVT, Src);
2898 Tmp = DAG.getNode(LoongArchISD::REVB_2H, DL, GRLenVT, NewSrc);
2903 Tmp = DAG.getNode(LoongArchISD::REVB_2W, DL, GRLenVT, NewSrc);
2906 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, Tmp));
2914 SDValue NewSrc = DAG.getNode(ISD::ANY_EXTEND, DL, GRLenVT, Src);
2920 Tmp = DAG.getNode(LoongArchISD::BITREV_4B, DL, GRLenVT, NewSrc);
2923 Tmp = DAG.getNode(LoongArchISD::BITREV_W, DL, GRLenVT, NewSrc);
2926 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, Tmp));
2959 {Chain, DAG.getConstant(Imm, DL, GRLenVT)});
2961 DAG.getNode(ISD::TRUNCATE, DL, VT, MOVFCSR2GRResults.getValue(0)));
2968 LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
2969 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2), \
2970 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(3))}); \
2971 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, NODE.getValue(0))); \
2986 LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
2988 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(3))}); \
2989 Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, NODE.getValue(0))); \
3014 DAG.getNode(LoongArchISD::CSRRD, DL, {GRLenVT, MVT::Other},
3015 {Chain, DAG.getConstant(Imm, DL, GRLenVT)});
3017 DAG.getNode(ISD::TRUNCATE, DL, VT, CSRRDResults.getValue(0)));
3028 DAG.getNode(LoongArchISD::CSRWR, DL, {GRLenVT, MVT::Other},
3029 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2),
3030 DAG.getConstant(Imm, DL, GRLenVT)});
3032 DAG.getNode(ISD::TRUNCATE, DL, VT, CSRWRResults.getValue(0)));
3043 LoongArchISD::CSRXCHG, DL, {GRLenVT, MVT::Other},
3044 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2),
3045 DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(3)),
3046 DAG.getConstant(Imm, DL, GRLenVT)});
3048 DAG.getNode(ISD::TRUNCATE, DL, VT, CSRXCHGResults.getValue(0)));
3055 DAG.getNode(LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
3056 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2)}); \
3058 DAG.getNode(ISD::TRUNCATE, DL, VT, IOCSRRDResults.getValue(0))); \
3068 DAG.getNode(LoongArchISD::CPUCFG, DL, {GRLenVT, MVT::Other},
3069 {Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2)});
3071 DAG.getNode(ISD::TRUNCATE, DL, VT, CPUCFGResults.getValue(0)));
3113 SDLoc DL(N);
3177 SDValue NR0 = DAG.getNode(LoongArchISD::BSTRPICK, DL, ValTy, NewOperand,
3178 DAG.getConstant(msb, DL, GRLenVT),
3179 DAG.getConstant(lsb, DL, GRLenVT));
3185 return DAG.getNode(ISD::SHL, DL, ValTy, NR0,
3186 DAG.getConstant(lsb, DL, GRLenVT));
3204 SDLoc DL(N);
3222 return DAG.getNode(LoongArchISD::BSTRPICK, DL, ValTy,
3224 DAG.getConstant(MaskIdx + MaskLen - 1, DL, GRLenVT),
3225 DAG.getConstant(Shamt, DL, GRLenVT));
3237 SDLoc DL(N);
3266 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0.getOperand(0),
3268 DAG.getConstant((MaskIdx0 + MaskLen0 - 1), DL, GRLenVT),
3269 DAG.getConstant(MaskIdx0, DL, GRLenVT));
3288 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0.getOperand(0),
3290 DAG.getConstant((MaskIdx0 + MaskLen0 - 1), DL, GRLenVT),
3291 DAG.getConstant(MaskIdx0, DL, GRLenVT));
3307 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0.getOperand(0),
3308 DAG.getNode(ISD::SRL, DL, N1->getValueType(0), N1,
3309 DAG.getConstant(MaskIdx0, DL, GRLenVT)),
3313 DL, GRLenVT),
3314 DAG.getConstant(MaskIdx0, DL, GRLenVT));
3330 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0.getOperand(0),
3332 DAG.getConstant((ValBits - 1), DL, GRLenVT),
3333 DAG.getConstant(Shamt, DL, GRLenVT));
3349 LoongArchISD::BSTRINS, DL, ValTy, N0.getOperand(0),
3350 DAG.getConstant(CN1->getSExtValue() >> MaskIdx0, DL, ValTy),
3353 DL, GRLenVT),
3354 DAG.getConstant(MaskIdx0, DL, GRLenVT));
3377 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0,
3379 DAG.getConstant(Shamt + MaskLen - 1, DL, GRLenVT),
3380 DAG.getConstant(Shamt, DL, GRLenVT));
3401 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0,
3403 DAG.getConstant(MaskIdx + MaskLen - 1, DL, GRLenVT),
3404 DAG.getConstant(MaskIdx, DL, GRLenVT));
3432 return DAG.getNode(LoongArchISD::BSTRINS, DL, ValTy, N0,
3433 DAG.getNode(ISD::SRL, DL, N1->getValueType(0),
3435 DAG.getConstant(MaskIdx, DL, GRLenVT)),
3436 DAG.getConstant(MaskIdx + MaskLen - 1, DL, GRLenVT),
3437 DAG.getConstant(MaskIdx, DL, GRLenVT));
3633 SDLoc DL(Node);
3640 return DAG.getNode(ISD::UNDEF, DL, Subtarget.getGRLenVT());
3642 return DAG.getConstant(CImm->getZExtValue(), DL, Subtarget.getGRLenVT());
3648 SDLoc DL(Node);
3657 return DAG.getNode(ISD::UNDEF, DL, ResTy);
3662 DL, ResTy);
3666 SDLoc DL(Node);
3669 SDValue Mask = DAG.getConstant(Vec.getScalarValueSizeInBits() - 1, DL, ResTy);
3670 return DAG.getNode(ISD::AND, DL, ResTy, Vec, Mask);
3674 SDLoc DL(Node);
3676 SDValue One = DAG.getConstant(1, DL, ResTy);
3678 DAG.getNode(ISD::SHL, DL, ResTy, One, truncateVecElts(Node, DAG));
3680 return DAG.getNode(ISD::AND, DL, ResTy, Node->getOperand(1),
3681 DAG.getNOT(DL, Bit, ResTy));
3686 SDLoc DL(Node);
3693 return DAG.getNode(ISD::UNDEF, DL, ResTy);
3697 SDValue Mask = DAG.getConstant(~BitImm, DL, ResTy);
3699 return DAG.getNode(ISD::AND, DL, ResTy, Node->getOperand(1), Mask);
3704 SDLoc DL(Node);
3711 return DAG.getNode(ISD::UNDEF, DL, ResTy);
3715 SDValue BitImm = DAG.getConstant(Imm, DL, ResTy);
3716 return DAG.getNode(ISD::OR, DL, ResTy, Node->getOperand(1), BitImm);
3721 SDLoc DL(Node);
3728 return DAG.getNode(ISD::UNDEF, DL, ResTy);
3732 SDValue BitImm = DAG.getConstant(Imm, DL, ResTy);
3733 return DAG.getNode(ISD::XOR, DL, ResTy, Node->getOperand(1), BitImm);
3740 SDLoc DL(N);
3752 return DAG.getNode(ISD::ADD, DL, N->getValueType(0), N->getOperand(1),
3762 return DAG.getNode(ISD::ADD, DL, N->getValueType(0), N->getOperand(1),
3772 return DAG.getNode(ISD::SUB, DL, N->getValueType(0), N->getOperand(1),
3782 return DAG.getNode(ISD::SUB, DL, N->getValueType(0), N->getOperand(1),
3793 ISD::SUB, DL, N->getValueType(0),
3807 return DAG.getNode(ISD::SMAX, DL, N->getValueType(0), N->getOperand(1),
3817 return DAG.getNode(ISD::UMAX, DL, N->getValueType(0), N->getOperand(1),
3827 return DAG.getNode(ISD::SMAX, DL, N->getValueType(0), N->getOperand(1),
3837 return DAG.getNode(ISD::UMAX, DL, N->getValueType(0), N->getOperand(1),
3847 return DAG.getNode(ISD::SMIN, DL, N->getValueType(0), N->getOperand(1),
3857 return DAG.getNode(ISD::UMIN, DL, N->getValueType(0), N->getOperand(1),
3867 return DAG.getNode(ISD::SMIN, DL, N->getValueType(0), N->getOperand(1),
3877 return DAG.getNode(ISD::UMIN, DL, N->getValueType(0), N->getOperand(1),
3887 return DAG.getNode(ISD::MUL, DL, N->getValueType(0), N->getOperand(1),
3923 return DAG.getNode(ISD::SDIV, DL, N->getValueType(0), N->getOperand(1),
3933 return DAG.getNode(ISD::UDIV, DL, N->getValueType(0), N->getOperand(1),
3943 return DAG.getNode(ISD::SREM, DL, N->getValueType(0), N->getOperand(1),
3953 return DAG.getNode(ISD::UREM, DL, N->getValueType(0), N->getOperand(1),
3957 return DAG.getNode(ISD::AND, DL, N->getValueType(0), N->getOperand(1),
3961 return DAG.getNode(ISD::OR, DL, N->getValueType(0), N->getOperand(1),
3965 return DAG.getNode(ISD::XOR, DL, N->getValueType(0), N->getOperand(1),
3969 SDValue Res = DAG.getNode(ISD::OR, DL, N->getValueType(0), N->getOperand(1),
3971 return DAG.getNOT(DL, Res, Res->getValueType(0));
3975 return DAG.getNode(ISD::AND, DL, N->getValueType(0), N->getOperand(1),
3979 return DAG.getNode(ISD::OR, DL, N->getValueType(0), N->getOperand(1),
3983 return DAG.getNode(ISD::XOR, DL, N->getValueType(0), N->getOperand(1),
3993 return DAG.getNode(ISD::SHL, DL, N->getValueType(0), N->getOperand(1),
3997 return DAG.getNode(ISD::SHL, DL, N->getValueType(0), N->getOperand(1),
4001 return DAG.getNode(ISD::SHL, DL, N->getValueType(0), N->getOperand(1),
4005 return DAG.getNode(ISD::SHL, DL, N->getValueType(0), N->getOperand(1),
4009 return DAG.getNode(ISD::SHL, DL, N->getValueType(0), N->getOperand(1),
4019 return DAG.getNode(ISD::SRL, DL, N->getValueType(0), N->getOperand(1),
4023 return DAG.getNode(ISD::SRL, DL, N->getValueType(0), N->getOperand(1),
4027 return DAG.getNode(ISD::SRL, DL, N->getValueType(0), N->getOperand(1),
4031 return DAG.getNode(ISD::SRL, DL, N->getValueType(0), N->getOperand(1),
4035 return DAG.getNode(ISD::SRL, DL, N->getValueType(0), N->getOperand(1),
4045 return DAG.getNode(ISD::SRA, DL, N->getValueType(0), N->getOperand(1),
4049 return DAG.getNode(ISD::SRA, DL, N->getValueType(0), N->getOperand(1),
4053 return DAG.getNode(ISD::SRA, DL, N->getValueType(0), N->getOperand(1),
4057 return DAG.getNode(ISD::SRA, DL, N->getValueType(0), N->getOperand(1),
4061 return DAG.getNode(ISD::SRA, DL, N->getValueType(0), N->getOperand(1),
4071 return DAG.getNode(ISD::CTLZ, DL, N->getValueType(0), N->getOperand(1));
4080 return DAG.getNode(ISD::CTPOP, DL, N->getValueType(0), N->getOperand(1));
4111 SDValue One = DAG.getConstant(1, DL, VecTy);
4113 ISD::OR, DL, VecTy, N->getOperand(1),
4114 DAG.getNode(ISD::SHL, DL, VecTy, One, truncateVecElts(N, DAG)));
4137 SDValue One = DAG.getConstant(1, DL, VecTy);
4139 ISD::XOR, DL, VecTy, N->getOperand(1),
4140 DAG.getNode(ISD::SHL, DL, VecTy, One, truncateVecElts(N, DAG)));
4158 return DAG.getNode(ISD::FADD, DL, N->getValueType(0), N->getOperand(1),
4164 return DAG.getNode(ISD::FSUB, DL, N->getValueType(0), N->getOperand(1),
4170 return DAG.getNode(ISD::FMUL, DL, N->getValueType(0), N->getOperand(1),
4176 return DAG.getNode(ISD::FDIV, DL, N->getValueType(0), N->getOperand(1),
4182 return DAG.getNode(ISD::FMA, DL, N->getValueType(0), N->getOperand(1),
4212 return DAG.getBuildVector(ResTy, DL, Ops);
4222 return DAG.getNode(LoongArchISD::VREPLVE, DL, N->getValueType(0),
4224 DAG.getNode(ISD::ANY_EXTEND, DL, Subtarget.getGRLenVT(),
4278 DebugLoc DL = MI.getDebugLoc();
4283 BuildMI(MBB, DL, TII.get(LoongArch::BNEZ))
4292 BuildMI(BreakMBB, DL, TII.get(LoongArch::BREAK)).addImm(7 /*BRK_DIVZERO*/);
4372 DebugLoc DL = MI.getDebugLoc();
4391 BuildMI(BB, DL, TII->get(CondOpc), FCC).addReg(MI.getOperand(1).getReg());
4394 BuildMI(BB, DL, TII->get(LoongArch::BCNEZ)).addReg(FCC).addMBB(TrueBB);
4400 BuildMI(FalseBB, DL, TII->get(LoongArch::ADDI_W), RD1)
4403 BuildMI(FalseBB, DL, TII->get(LoongArch::PseudoBR)).addMBB(SinkBB);
4408 BuildMI(TrueBB, DL, TII->get(LoongArch::ADDI_W), RD2)
4414 BuildMI(*SinkBB, SinkBB->begin(), DL, TII->get(LoongArch::PHI),
4446 DebugLoc DL = MI.getDebugLoc();
4457 BuildMI(*BB, MI, DL, TII->get(LoongArch::XVPERMI_Q), ScratchReg1)
4465 BuildMI(*BB, MI, DL, TII->get(LoongArch::COPY), ScratchSubReg1)
4467 BuildMI(*BB, MI, DL, TII->get(InsOp), ScratchSubReg2)
4476 BuildMI(*BB, MI, DL, TII->get(LoongArch::SUBREG_TO_REG), ScratchReg2)
4482 BuildMI(*BB, MI, DL, TII->get(LoongArch::XVPERMI_Q), XDst)
4494 DebugLoc DL = MI.getDebugLoc();
4510 BuildMI(*BB, MI, DL, TII->get(LoongArch::MOVGR2FCSR),
4518 BuildMI(*BB, MI, DL, TII->get(LoongArch::MOVFCSR2GR),
4716 static bool CC_LoongArch(const DataLayout &DL, LoongArchABI::ABI ABI,
4721 unsigned GRLen = DL.getLargestLegalIntTypeSizeInBits();
4772 DL.getTypeAllocSize(OrigTy) == TwoGRLenInBytes) {
4911 const CCValAssign &VA, const SDLoc &DL) {
4920 Val = DAG.getNode(LoongArchISD::MOVGR2FR_W_LA64, DL, MVT::f32, Val);
4922 Val = DAG.getNode(ISD::BITCAST, DL, VA.getValVT(), Val);
4929 const CCValAssign &VA, const SDLoc &DL,
4939 Val = DAG.getCopyFromReg(Chain, DL, VReg, LocVT);
4956 return convertLocVTToValVT(DAG, Val, VA, DL);
4962 const CCValAssign &VA, const SDLoc &DL) {
4982 ExtType, DL, VA.getLocVT(), Chain, FIN,
4987 const CCValAssign &VA, const SDLoc &DL) {
4997 Val = DAG.getNode(LoongArchISD::MOVFR2GR_S_LA64, DL, MVT::i64, Val);
4999 Val = DAG.getNode(ISD::BITCAST, DL, LocVT, Val);
5050 const SmallVectorImpl<ISD::InputArg> &Ins, const SDLoc &DL,
5087 ArgValue = unpackFromRegLoc(DAG, Chain, VA, DL, Ins[i], *this);
5089 ArgValue = unpackFromMemLoc(DAG, Chain, VA, DL);
5093 InVals.push_back(DAG.getLoad(VA.getValVT(), DL, Chain, ArgValue,
5101 SDValue Offset = DAG.getIntPtrConstant(PartOffset, DL);
5102 SDValue Address = DAG.getNode(ISD::ADD, DL, PtrVT, ArgValue, Offset);
5103 InVals.push_back(DAG.getLoad(PartVA.getValVT(), DL, Chain, Address,
5155 SDValue ArgValue = DAG.getCopyFromReg(Chain, DL, Reg, GRLenVT);
5158 SDValue Store = DAG.getStore(Chain, DL, ArgValue, PtrOff,
5172 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, OutChains);
5268 SDLoc &DL = CLI.DL;
5318 SDValue SizeNode = DAG.getConstant(Size, DL, GRLenVT);
5320 Chain = DAG.getMemcpy(Chain, DL, FIPtr, Arg, SizeNode, Alignment,
5328 Chain = DAG.getCALLSEQ_START(Chain, NumBytes, 0, CLI.DL);
5359 SDValue Offset = DAG.getIntPtrConstant(PartOffset, DL);
5370 DAG.getStore(Chain, DL, ArgValue, SpillSlot,
5376 DAG.getNode(ISD::ADD, DL, PtrVT, SpillSlot, PartOffset);
5378 DAG.getStore(Chain, DL, PartValue, Address,
5383 ArgValue = convertValVTToLocVT(DAG, ArgValue, VA, DL);
5400 StackPtr = DAG.getCopyFromReg(Chain, DL, LoongArch::R3, PtrVT);
5402 DAG.getNode(ISD::ADD, DL, PtrVT, StackPtr,
5403 DAG.getIntPtrConstant(VA.getLocMemOffset(), DL));
5407 DAG.getStore(Chain, DL, ArgValue, Address, MachinePointerInfo()));
5413 Chain = DAG.getNode(ISD::TokenFactor, DL, MVT::Other, MemOpChains);
5419 Chain = DAG.getCopyToReg(Chain, DL, Reg.first, Reg.second, Glue);
5431 Callee = DAG.getTargetGlobalAddress(S->getGlobal(), DL, PtrVT, 0, OpFlags);
5482 SDValue Ret = DAG.getNode(Op, DL, NodeTys, Ops);
5487 Chain = DAG.getNode(Op, DL, NodeTys, Ops);
5492 Chain = DAG.getCALLSEQ_END(Chain, NumBytes, 0, Glue, DL);
5504 DAG.getCopyFromReg(Chain, DL, VA.getLocReg(), VA.getLocVT(), Glue);
5509 RetValue = convertLocVTToValVT(DAG, RetValue, VA, DL);
5537 const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL,
5559 SDValue Val = convertValVTToLocVT(DAG, OutVals[i], VA, DL);
5560 Chain = DAG.getCopyToReg(Chain, DL, VA.getLocReg(), Val, Glue);
5573 return DAG.getNode(LoongArchISD::RET, DL, MVT::Other, RetOps);
5613 EVT LoongArchTargetLowering::getSetCCResultType(const DataLayout &DL,
5617 return getPointerTy(DL);
5784 const DataLayout &DL = AI->getDataLayout();
5786 DL.getTypeStoreSizeInBits(AI->getValOperand()->getType());
6062 bool LoongArchTargetLowering::isLegalAddressingMode(const DataLayout &DL,