142 !Subtarget.hasStdExtF()) {
143 errs() <<
"Hard-float 'f' ABI can't be used for a target that "
144 "doesn't support the F instruction set extension (ignoring "
148 !Subtarget.hasStdExtD()) {
149 errs() <<
"Hard-float 'd' ABI can't be used for a target that "
150 "doesn't support the D instruction set extension (ignoring "
169 MVT XLenVT = Subtarget.getXLenVT();
174 if (Subtarget.hasStdExtZfhmin())
176 if (Subtarget.hasStdExtZfbfmin() || Subtarget.hasVendorXAndesBFHCvt())
178 if (Subtarget.hasStdExtF())
180 if (Subtarget.hasStdExtD())
182 if (Subtarget.hasStdExtZhinxmin())
184 if (Subtarget.hasStdExtZfinx())
186 if (Subtarget.hasStdExtZdinx()) {
187 if (Subtarget.is64Bit())
194 MVT::nxv1i1, MVT::nxv2i1, MVT::nxv4i1, MVT::nxv8i1,
195 MVT::nxv16i1, MVT::nxv32i1, MVT::nxv64i1};
197 MVT::nxv1i8, MVT::nxv2i8, MVT::nxv4i8, MVT::nxv8i8, MVT::nxv16i8,
198 MVT::nxv32i8, MVT::nxv64i8, MVT::nxv1i16, MVT::nxv2i16, MVT::nxv4i16,
199 MVT::nxv8i16, MVT::nxv16i16, MVT::nxv32i16, MVT::nxv1i32, MVT::nxv2i32,
200 MVT::nxv4i32, MVT::nxv8i32, MVT::nxv16i32, MVT::nxv1i64, MVT::nxv2i64,
201 MVT::nxv4i64, MVT::nxv8i64};
203 MVT::nxv1f16, MVT::nxv2f16, MVT::nxv4f16,
204 MVT::nxv8f16, MVT::nxv16f16, MVT::nxv32f16};
206 MVT::nxv1bf16, MVT::nxv2bf16, MVT::nxv4bf16,
207 MVT::nxv8bf16, MVT::nxv16bf16, MVT::nxv32bf16};
209 MVT::nxv1f32, MVT::nxv2f32, MVT::nxv4f32, MVT::nxv8f32, MVT::nxv16f32};
211 MVT::nxv1f64, MVT::nxv2f64, MVT::nxv4f64, MVT::nxv8f64};
213 MVT::riscv_nxv1i8x2, MVT::riscv_nxv1i8x3, MVT::riscv_nxv1i8x4,
214 MVT::riscv_nxv1i8x5, MVT::riscv_nxv1i8x6, MVT::riscv_nxv1i8x7,
215 MVT::riscv_nxv1i8x8, MVT::riscv_nxv2i8x2, MVT::riscv_nxv2i8x3,
216 MVT::riscv_nxv2i8x4, MVT::riscv_nxv2i8x5, MVT::riscv_nxv2i8x6,
217 MVT::riscv_nxv2i8x7, MVT::riscv_nxv2i8x8, MVT::riscv_nxv4i8x2,
218 MVT::riscv_nxv4i8x3, MVT::riscv_nxv4i8x4, MVT::riscv_nxv4i8x5,
219 MVT::riscv_nxv4i8x6, MVT::riscv_nxv4i8x7, MVT::riscv_nxv4i8x8,
220 MVT::riscv_nxv8i8x2, MVT::riscv_nxv8i8x3, MVT::riscv_nxv8i8x4,
221 MVT::riscv_nxv8i8x5, MVT::riscv_nxv8i8x6, MVT::riscv_nxv8i8x7,
222 MVT::riscv_nxv8i8x8, MVT::riscv_nxv16i8x2, MVT::riscv_nxv16i8x3,
223 MVT::riscv_nxv16i8x4, MVT::riscv_nxv32i8x2};
225 if (Subtarget.hasVInstructions()) {
226 auto addRegClassForRVV = [
this](
MVT VT) {
230 if (VT.getVectorMinNumElements() < MinElts)
233 unsigned Size = VT.getSizeInBits().getKnownMinValue();
236 RC = &RISCV::VRRegClass;
238 RC = &RISCV::VRM2RegClass;
240 RC = &RISCV::VRM4RegClass;
242 RC = &RISCV::VRM8RegClass;
249 for (
MVT VT : BoolVecVTs)
250 addRegClassForRVV(VT);
251 for (
MVT VT : IntVecVTs) {
252 if (VT.getVectorElementType() == MVT::i64 &&
253 !Subtarget.hasVInstructionsI64())
255 addRegClassForRVV(VT);
258 if (Subtarget.hasVInstructionsF16Minimal() ||
259 Subtarget.hasVendorXAndesVPackFPH())
260 for (
MVT VT : F16VecVTs)
261 addRegClassForRVV(VT);
263 if (Subtarget.hasVInstructionsBF16Minimal() ||
264 Subtarget.hasVendorXAndesVBFHCvt())
265 for (
MVT VT : BF16VecVTs)
266 addRegClassForRVV(VT);
268 if (Subtarget.hasVInstructionsF32())
269 for (
MVT VT : F32VecVTs)
270 addRegClassForRVV(VT);
272 if (Subtarget.hasVInstructionsF64())
273 for (
MVT VT : F64VecVTs)
274 addRegClassForRVV(VT);
276 if (Subtarget.useRVVForFixedLengthVectors()) {
277 auto addRegClassForFixedVectors = [
this](
MVT VT) {
284 if (useRVVForFixedLengthVectorVT(VT))
285 addRegClassForFixedVectors(VT);
288 if (useRVVForFixedLengthVectorVT(VT))
289 addRegClassForFixedVectors(VT);
327 if (Subtarget.hasStdExtP()) {
328 if (Subtarget.is64Bit()) {
365 if (!(Subtarget.hasVendorXCValu() && !Subtarget.is64Bit())) {
375 if (!Subtarget.hasVendorXTHeadBb() && !Subtarget.hasVendorXqcibm() &&
376 !Subtarget.hasVendorXAndesPerf())
381 if (!Subtarget.hasStdExtZbb() && !Subtarget.hasVendorXTHeadBb() &&
382 !Subtarget.hasVendorXqcibm() && !Subtarget.hasVendorXAndesPerf() &&
383 !(Subtarget.hasVendorXCValu() && !Subtarget.is64Bit()))
386 if (Subtarget.hasStdExtZilsd() && !Subtarget.is64Bit()) {
391 if (Subtarget.is64Bit()) {
399 }
else if (Subtarget.hasStdExtP()) {
404 if (!Subtarget.hasStdExtZmmul()) {
406 }
else if (Subtarget.is64Bit()) {
413 if (!Subtarget.hasStdExtM()) {
416 }
else if (Subtarget.is64Bit()) {
418 {MVT::i8, MVT::i16, MVT::i32},
Custom);
426 if (!Subtarget.hasStdExtP() || !Subtarget.hasStdExtZmmul() ||
433 if (Subtarget.hasStdExtZbb() || Subtarget.hasStdExtZbkb()) {
434 if (Subtarget.is64Bit())
436 }
else if (Subtarget.hasVendorXTHeadBb()) {
437 if (Subtarget.is64Bit())
440 }
else if (Subtarget.hasVendorXCVbitmanip() && !Subtarget.is64Bit()) {
446 if (Subtarget.hasStdExtP())
452 if (Subtarget.hasREVLike()) {
458 if (Subtarget.hasStdExtZbkb())
462 if (Subtarget.hasStdExtZbb() ||
463 (Subtarget.hasVendorXCValu() && !Subtarget.is64Bit())) {
468 if (Subtarget.hasCTZLike()) {
469 if (Subtarget.is64Bit())
475 if (!Subtarget.hasCPOPLike()) {
478 if (Subtarget.is64Bit())
485 if (Subtarget.hasCLZLike()) {
489 if (Subtarget.is64Bit() &&
490 (Subtarget.hasStdExtZbb() || Subtarget.hasStdExtP()))
493 if (Subtarget.hasVendorXCVbitmanip() && !Subtarget.is64Bit())
498 if (Subtarget.hasStdExtP()) {
500 if (Subtarget.is64Bit())
504 if (Subtarget.hasStdExtP() ||
505 (Subtarget.hasVendorXCValu() && !Subtarget.is64Bit())) {
507 if (Subtarget.is64Bit())
509 }
else if (Subtarget.hasShortForwardBranchIALU()) {
512 }
else if (Subtarget.is64Bit()) {
516 if (!Subtarget.useMIPSCCMovInsn() && !Subtarget.hasVendorXTHeadCondMov())
519 if ((Subtarget.hasStdExtP() || Subtarget.hasVendorXqcia()) &&
520 !Subtarget.is64Bit()) {
523 }
else if (Subtarget.hasStdExtP() && Subtarget.is64Bit()) {
526 }
else if (!Subtarget.hasStdExtZbb() && Subtarget.is64Bit()) {
531 if ((Subtarget.hasStdExtP() || Subtarget.hasVendorXqcia()) &&
532 !Subtarget.is64Bit()) {
539 if (Subtarget.hasStdExtP() && !Subtarget.is64Bit()) {
545 if (Subtarget.hasStdExtZbc() || Subtarget.hasStdExtZbkc()) {
547 if (Subtarget.hasStdExtZbc())
549 }
else if (Subtarget.hasStdExtZvbc() && Subtarget.is64Bit()) {
556 static const unsigned FPLegalNodeTypes[] = {
572 static const unsigned FPOpToLibCall[] = {
ISD::FREM};
574 static const unsigned FPRndMode[] = {
578 static const unsigned ZfhminZfbfminPromoteOps[] = {
590 if (Subtarget.hasStdExtP()) {
591 static const MVT P32VecVTs[] = {MVT::v2i16, MVT::v4i8};
592 static const MVT P64VecVTs[] = {MVT::v2i32, MVT::v4i16, MVT::v8i8};
594 if (Subtarget.is64Bit()) {
601 {MVT::v2i16, MVT::v4i8},
Custom);
634 if (VT != MVT::v2i32)
636 if (VT.getVectorElementType() != MVT::i8) {
659 if (!Subtarget.is64Bit())
665 if (!Subtarget.is64Bit()) {
670 for (
MVT VT : P64VecVTs) {
693 {MVT::v4i16, MVT::v8i8},
Legal);
704 {MVT::v4i16, MVT::v8i8},
Custom);
711 {MVT::v4i16, MVT::v8i8},
Custom);
716 {MVT::v4i16, MVT::v2i32},
Legal);
732 {MVT::v4i16, MVT::v2i32},
Legal);
740 {MVT::v2i8, MVT::v4i8, MVT::v2i16, MVT::v4i16, MVT::v2i32},
Legal);
743 if (Subtarget.hasStdExtZfbfmin()) {
758 if (Subtarget.hasStdExtZfhminOrZhinxmin()) {
759 if (Subtarget.hasStdExtZfhOrZhinx()) {
766 if (Subtarget.hasStdExtZfa())
782 if (!Subtarget.hasStdExtD()) {
802 Subtarget.hasStdExtZfh() && Subtarget.hasStdExtZfa() ?
Legal :
Promote);
818 if (Subtarget.is64Bit())
822 if (Subtarget.hasStdExtFOrZfinx()) {
845 if (Subtarget.hasStdExtZfa()) {
854 if (Subtarget.hasStdExtFOrZfinx() && Subtarget.is64Bit())
857 if (Subtarget.hasStdExtDOrZdinx()) {
860 if (!Subtarget.is64Bit())
863 if (Subtarget.hasStdExtZdinx() && !Subtarget.hasStdExtZilsd() &&
864 !Subtarget.is64Bit()) {
869 if (Subtarget.hasStdExtZfa()) {
875 if (Subtarget.is64Bit())
905 if (Subtarget.is64Bit()) {
912 if (Subtarget.hasStdExtFOrZfinx()) {
938 if (Subtarget.is64Bit())
948 if (Subtarget.is64Bit()) {
955 if (Subtarget.is64Bit())
958 if (Subtarget.hasVendorXMIPSCBOP())
963 if (Subtarget.hasStdExtZalrsc()) {
965 if (Subtarget.hasStdExtZabha() && Subtarget.hasStdExtZacas())
969 }
else if (Subtarget.hasForcedAtomics()) {
984 if (Subtarget.hasVInstructions()) {
993 {MVT::i8, MVT::i16},
Custom);
994 if (Subtarget.is64Bit())
1004 static const unsigned IntegerVPOps[] = {
1005 ISD::VP_SDIV, ISD::VP_UDIV, ISD::VP_SREM,
1006 ISD::VP_UREM, ISD::VP_REDUCE_ADD, ISD::VP_REDUCE_AND,
1007 ISD::VP_REDUCE_OR, ISD::VP_REDUCE_XOR, ISD::VP_REDUCE_SMAX,
1008 ISD::VP_REDUCE_SMIN, ISD::VP_REDUCE_UMAX, ISD::VP_REDUCE_UMIN,
1010 ISD::EXPERIMENTAL_VP_REVERSE, ISD::EXPERIMENTAL_VP_SPLICE,
1011 ISD::VP_CTTZ_ELTS, ISD::VP_CTTZ_ELTS_ZERO_POISON};
1013 static const unsigned FloatingPointVPOps[] = {
1014 ISD::VP_REDUCE_FADD, ISD::VP_REDUCE_SEQ_FADD,
1015 ISD::VP_REDUCE_FMIN, ISD::VP_REDUCE_FMAX, ISD::VP_MERGE,
1016 ISD::VP_REDUCE_FMINIMUM, ISD::VP_REDUCE_FMAXIMUM};
1018 static const unsigned IntegerVecReduceOps[] = {
1023 static const unsigned FloatingPointVecReduceOps[] = {
1027 static const unsigned FloatingPointLibCallOps[] = {
1031 if (!Subtarget.is64Bit()) {
1040 ISD::VP_REDUCE_OR, ISD::VP_REDUCE_XOR,
1041 ISD::VP_REDUCE_SMAX, ISD::VP_REDUCE_SMIN,
1042 ISD::VP_REDUCE_UMAX, ISD::VP_REDUCE_UMIN},
1046 for (
MVT VT : BoolVecVTs) {
1067 ISD::VP_CTTZ_ELTS, ISD::VP_CTTZ_ELTS_ZERO_POISON},
1075 {ISD::VP_REDUCE_AND, ISD::VP_REDUCE_OR, ISD::VP_REDUCE_XOR}, VT,
1111 for (
MVT VT : IntVecVTs) {
1122 if (VT.getVectorElementType() == MVT::i64 && !Subtarget.hasStdExtV())
1128 if (Subtarget.hasStdExtZvabd()) {
1177 {ISD::VP_LOAD, ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1178 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER, ISD::VP_SCATTER},
1203 if (Subtarget.hasStdExtZvkb()) {
1210 if (Subtarget.hasStdExtZvbb()) {
1226 if (VT.getVectorElementType() == MVT::i64) {
1227 if (Subtarget.hasStdExtZvbc())
1230 if (Subtarget.hasStdExtZvbc32e()) {
1232 }
else if (Subtarget.hasStdExtZvbc()) {
1248 for (
MVT VT : VecTupleVTs) {
1269 static const unsigned ZvfhminZvfbfminPromoteOps[] = {
1305 static const unsigned ZvfbfaPromoteOps[] = {
ISD::FDIV,
1323 static const unsigned ZvfhminZvfbfminPromoteVPOps[] = {
1324 ISD::VP_REDUCE_FMIN,
1325 ISD::VP_REDUCE_FMAX,
1326 ISD::VP_REDUCE_FMINIMUM,
1327 ISD::VP_REDUCE_FMAXIMUM};
1330 const auto SetCommonVFPActions = [&](
MVT VT) {
1370 {ISD::VP_LOAD, ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1371 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER, ISD::VP_SCATTER},
1409 const auto SetCommonVFPExtLoadTruncStoreActions =
1411 for (
auto SmallVT : SmallerVTs) {
1419 const auto SetCommonPromoteToF32Actions = [&](
MVT VT) {
1444 ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1445 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1472 const auto SetZvfbfaActions = [&](
MVT VT) {
1505 ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1506 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1527 if (Subtarget.hasVInstructionsF16()) {
1528 for (
MVT VT : F16VecVTs) {
1531 SetCommonVFPActions(VT);
1533 }
else if (Subtarget.hasVInstructionsF16Minimal()) {
1534 for (
MVT VT : F16VecVTs) {
1537 SetCommonPromoteToF32Actions(VT);
1541 if (Subtarget.hasVInstructionsBF16()) {
1542 for (
MVT VT : BF16VecVTs) {
1545 SetZvfbfaActions(VT);
1547 }
else if (Subtarget.hasVInstructionsBF16Minimal()) {
1548 for (
MVT VT : BF16VecVTs) {
1551 SetCommonPromoteToF32Actions(VT);
1555 if (Subtarget.hasVInstructionsF32()) {
1556 for (
MVT VT : F32VecVTs) {
1559 SetCommonVFPActions(VT);
1560 SetCommonVFPExtLoadTruncStoreActions(VT, F16VecVTs);
1561 SetCommonVFPExtLoadTruncStoreActions(VT, BF16VecVTs);
1565 if (Subtarget.hasVInstructionsF64()) {
1566 for (
MVT VT : F64VecVTs) {
1569 SetCommonVFPActions(VT);
1570 SetCommonVFPExtLoadTruncStoreActions(VT, F16VecVTs);
1571 SetCommonVFPExtLoadTruncStoreActions(VT, BF16VecVTs);
1572 SetCommonVFPExtLoadTruncStoreActions(VT, F32VecVTs);
1576 if (Subtarget.useRVVForFixedLengthVectors()) {
1578 if (!useRVVForFixedLengthVectorVT(VT))
1627 {ISD::VP_REDUCE_AND, ISD::VP_REDUCE_OR, ISD::VP_REDUCE_XOR}, VT,
1678 ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1679 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1717 if (Subtarget.hasStdExtZvkb())
1720 if (Subtarget.hasStdExtZvbb()) {
1735 if (Subtarget.hasStdExtZvbc())
1738 if (Subtarget.hasStdExtZvbc32e()) {
1740 }
else if (Subtarget.hasStdExtZvbc()) {
1744 if (I64VecVT.
isValid() && useRVVForFixedLengthVectorVT(I64VecVT))
1762 if (!useRVVForFixedLengthVectorVT(VT))
1788 ISD::VP_SCATTER, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1789 ISD::EXPERIMENTAL_VP_STRIDED_STORE},
1800 !Subtarget.hasVInstructionsF16()) {
1806 if (Subtarget.hasStdExtZfhmin()) {
1837 if (Subtarget.hasStdExtZfbfmin()) {
1844 if (Subtarget.hasVInstructionsBF16()) {
1865 if (Subtarget.hasVInstructionsBF16())
1909 if (Subtarget.is64Bit())
1911 if (Subtarget.hasStdExtZfhminOrZhinxmin())
1913 if (Subtarget.hasStdExtZfbfmin())
1915 if (Subtarget.hasStdExtFOrZfinx())
1917 if (Subtarget.hasStdExtDOrZdinx())
1922 if (Subtarget.hasStdExtZaamo())
1925 if (Subtarget.hasForcedAtomics()) {
1935 if (Subtarget.hasVendorXTHeadMemIdx()) {
1944 if (Subtarget.is64Bit()) {
1951 if (Subtarget.hasVendorXCVmem() && !Subtarget.is64Bit()) {
1962 if (Subtarget.hasStdExtZvdot4a8i() && Subtarget.getELen() >= 64) {
1979 if (Subtarget.useRVVForFixedLengthVectors()) {
1981 if ((VT.getVectorElementType() != MVT::i32 &&
1982 VT.getVectorElementType() != MVT::i64) ||
1983 !useRVVForFixedLengthVectorVT(VT))
1986 unsigned Scale = VT.getVectorElementType() == MVT::i64 ? 8 : 4;
1994 if (Subtarget.hasVendorXAndesBFHCvt() && !Subtarget.hasStdExtZfh()) {
2000 const Align FunctionAlignment(Subtarget.hasStdExtZca() ? 2 : 4);
2012 if (Subtarget.hasStdExtFOrZfinx())
2016 if (Subtarget.hasVInstructions())
2018 if (Subtarget.hasVInstructions() || Subtarget.hasStdExtP())
2021 if ((Subtarget.hasStdExtZbs() && Subtarget.is64Bit()) ||
2022 Subtarget.hasVInstructions() || Subtarget.hasStdExtP())
2025 if (Subtarget.hasStdExtZbkb())
2028 if (Subtarget.hasStdExtFOrZfinx())
2031 if (Subtarget.hasVInstructions())
2046 ISD::EXPERIMENTAL_VP_REVERSE,
2061 if (Subtarget.hasVendorXTHeadMemPair())
2063 if (Subtarget.useRVVForFixedLengthVectors() || Subtarget.hasStdExtP())
2089 Subtarget.getMaxStoresPerMemmove(
true);
2170 auto &
DL =
I.getDataLayout();
2172 auto SetRVVLoadStoreInfo = [&](
unsigned PtrOp,
bool IsStore,
2173 bool IsUnitStrided,
bool UsePtrVal =
false) {
2178 Info.ptrVal =
I.getArgOperand(PtrOp);
2180 Info.fallbackAddressSpace =
2181 I.getArgOperand(PtrOp)->getType()->getPointerAddressSpace();
2185 MemTy =
I.getArgOperand(0)->getType();
2188 MemTy =
I.getType();
2203 Info.align =
DL.getABITypeAlign(MemTy);
2213 if (
I.hasMetadata(LLVMContext::MD_nontemporal))
2220 case Intrinsic::riscv_masked_atomicrmw_xchg:
2221 case Intrinsic::riscv_masked_atomicrmw_add:
2222 case Intrinsic::riscv_masked_atomicrmw_sub:
2223 case Intrinsic::riscv_masked_atomicrmw_nand:
2224 case Intrinsic::riscv_masked_atomicrmw_max:
2225 case Intrinsic::riscv_masked_atomicrmw_min:
2226 case Intrinsic::riscv_masked_atomicrmw_umax:
2227 case Intrinsic::riscv_masked_atomicrmw_umin:
2228 case Intrinsic::riscv_masked_cmpxchg:
2235 Info.memVT = MVT::i32;
2236 Info.ptrVal =
I.getArgOperand(0);
2238 Info.align =
Align(4);
2243 case Intrinsic::riscv_seg2_load_mask:
2244 case Intrinsic::riscv_seg3_load_mask:
2245 case Intrinsic::riscv_seg4_load_mask:
2246 case Intrinsic::riscv_seg5_load_mask:
2247 case Intrinsic::riscv_seg6_load_mask:
2248 case Intrinsic::riscv_seg7_load_mask:
2249 case Intrinsic::riscv_seg8_load_mask:
2250 case Intrinsic::riscv_sseg2_load_mask:
2251 case Intrinsic::riscv_sseg3_load_mask:
2252 case Intrinsic::riscv_sseg4_load_mask:
2253 case Intrinsic::riscv_sseg5_load_mask:
2254 case Intrinsic::riscv_sseg6_load_mask:
2255 case Intrinsic::riscv_sseg7_load_mask:
2256 case Intrinsic::riscv_sseg8_load_mask:
2257 SetRVVLoadStoreInfo( 0,
false,
2260 case Intrinsic::riscv_seg2_store_mask:
2261 case Intrinsic::riscv_seg3_store_mask:
2262 case Intrinsic::riscv_seg4_store_mask:
2263 case Intrinsic::riscv_seg5_store_mask:
2264 case Intrinsic::riscv_seg6_store_mask:
2265 case Intrinsic::riscv_seg7_store_mask:
2266 case Intrinsic::riscv_seg8_store_mask:
2268 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2272 case Intrinsic::riscv_sseg2_store_mask:
2273 case Intrinsic::riscv_sseg3_store_mask:
2274 case Intrinsic::riscv_sseg4_store_mask:
2275 case Intrinsic::riscv_sseg5_store_mask:
2276 case Intrinsic::riscv_sseg6_store_mask:
2277 case Intrinsic::riscv_sseg7_store_mask:
2278 case Intrinsic::riscv_sseg8_store_mask:
2280 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2284 case Intrinsic::riscv_vlm:
2285 SetRVVLoadStoreInfo( 0,
2290 case Intrinsic::riscv_vle:
2291 case Intrinsic::riscv_vle_mask:
2292 case Intrinsic::riscv_vleff:
2293 case Intrinsic::riscv_vleff_mask:
2294 SetRVVLoadStoreInfo( 1,
2299 case Intrinsic::riscv_vsm:
2300 case Intrinsic::riscv_vse:
2301 case Intrinsic::riscv_vse_mask:
2302 SetRVVLoadStoreInfo( 1,
2307 case Intrinsic::riscv_vlse:
2308 case Intrinsic::riscv_vlse_mask:
2309 case Intrinsic::riscv_vloxei:
2310 case Intrinsic::riscv_vloxei_mask:
2311 case Intrinsic::riscv_vluxei:
2312 case Intrinsic::riscv_vluxei_mask:
2313 SetRVVLoadStoreInfo( 1,
2317 case Intrinsic::riscv_vsse:
2318 case Intrinsic::riscv_vsse_mask:
2319 case Intrinsic::riscv_vsoxei:
2320 case Intrinsic::riscv_vsoxei_mask:
2321 case Intrinsic::riscv_vsuxei:
2322 case Intrinsic::riscv_vsuxei_mask:
2323 SetRVVLoadStoreInfo( 1,
2327 case Intrinsic::riscv_vlseg2:
2328 case Intrinsic::riscv_vlseg3:
2329 case Intrinsic::riscv_vlseg4:
2330 case Intrinsic::riscv_vlseg5:
2331 case Intrinsic::riscv_vlseg6:
2332 case Intrinsic::riscv_vlseg7:
2333 case Intrinsic::riscv_vlseg8:
2334 case Intrinsic::riscv_vlseg2ff:
2335 case Intrinsic::riscv_vlseg3ff:
2336 case Intrinsic::riscv_vlseg4ff:
2337 case Intrinsic::riscv_vlseg5ff:
2338 case Intrinsic::riscv_vlseg6ff:
2339 case Intrinsic::riscv_vlseg7ff:
2340 case Intrinsic::riscv_vlseg8ff:
2341 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2345 case Intrinsic::riscv_vlseg2_mask:
2346 case Intrinsic::riscv_vlseg3_mask:
2347 case Intrinsic::riscv_vlseg4_mask:
2348 case Intrinsic::riscv_vlseg5_mask:
2349 case Intrinsic::riscv_vlseg6_mask:
2350 case Intrinsic::riscv_vlseg7_mask:
2351 case Intrinsic::riscv_vlseg8_mask:
2352 case Intrinsic::riscv_vlseg2ff_mask:
2353 case Intrinsic::riscv_vlseg3ff_mask:
2354 case Intrinsic::riscv_vlseg4ff_mask:
2355 case Intrinsic::riscv_vlseg5ff_mask:
2356 case Intrinsic::riscv_vlseg6ff_mask:
2357 case Intrinsic::riscv_vlseg7ff_mask:
2358 case Intrinsic::riscv_vlseg8ff_mask:
2359 SetRVVLoadStoreInfo(
I.arg_size() - 5,
2363 case Intrinsic::riscv_vlsseg2:
2364 case Intrinsic::riscv_vlsseg3:
2365 case Intrinsic::riscv_vlsseg4:
2366 case Intrinsic::riscv_vlsseg5:
2367 case Intrinsic::riscv_vlsseg6:
2368 case Intrinsic::riscv_vlsseg7:
2369 case Intrinsic::riscv_vlsseg8:
2370 case Intrinsic::riscv_vloxseg2:
2371 case Intrinsic::riscv_vloxseg3:
2372 case Intrinsic::riscv_vloxseg4:
2373 case Intrinsic::riscv_vloxseg5:
2374 case Intrinsic::riscv_vloxseg6:
2375 case Intrinsic::riscv_vloxseg7:
2376 case Intrinsic::riscv_vloxseg8:
2377 case Intrinsic::riscv_vluxseg2:
2378 case Intrinsic::riscv_vluxseg3:
2379 case Intrinsic::riscv_vluxseg4:
2380 case Intrinsic::riscv_vluxseg5:
2381 case Intrinsic::riscv_vluxseg6:
2382 case Intrinsic::riscv_vluxseg7:
2383 case Intrinsic::riscv_vluxseg8:
2384 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2388 case Intrinsic::riscv_vlsseg2_mask:
2389 case Intrinsic::riscv_vlsseg3_mask:
2390 case Intrinsic::riscv_vlsseg4_mask:
2391 case Intrinsic::riscv_vlsseg5_mask:
2392 case Intrinsic::riscv_vlsseg6_mask:
2393 case Intrinsic::riscv_vlsseg7_mask:
2394 case Intrinsic::riscv_vlsseg8_mask:
2395 case Intrinsic::riscv_vloxseg2_mask:
2396 case Intrinsic::riscv_vloxseg3_mask:
2397 case Intrinsic::riscv_vloxseg4_mask:
2398 case Intrinsic::riscv_vloxseg5_mask:
2399 case Intrinsic::riscv_vloxseg6_mask:
2400 case Intrinsic::riscv_vloxseg7_mask:
2401 case Intrinsic::riscv_vloxseg8_mask:
2402 case Intrinsic::riscv_vluxseg2_mask:
2403 case Intrinsic::riscv_vluxseg3_mask:
2404 case Intrinsic::riscv_vluxseg4_mask:
2405 case Intrinsic::riscv_vluxseg5_mask:
2406 case Intrinsic::riscv_vluxseg6_mask:
2407 case Intrinsic::riscv_vluxseg7_mask:
2408 case Intrinsic::riscv_vluxseg8_mask:
2409 SetRVVLoadStoreInfo(
I.arg_size() - 6,
2413 case Intrinsic::riscv_vsseg2:
2414 case Intrinsic::riscv_vsseg3:
2415 case Intrinsic::riscv_vsseg4:
2416 case Intrinsic::riscv_vsseg5:
2417 case Intrinsic::riscv_vsseg6:
2418 case Intrinsic::riscv_vsseg7:
2419 case Intrinsic::riscv_vsseg8:
2420 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2424 case Intrinsic::riscv_vsseg2_mask:
2425 case Intrinsic::riscv_vsseg3_mask:
2426 case Intrinsic::riscv_vsseg4_mask:
2427 case Intrinsic::riscv_vsseg5_mask:
2428 case Intrinsic::riscv_vsseg6_mask:
2429 case Intrinsic::riscv_vsseg7_mask:
2430 case Intrinsic::riscv_vsseg8_mask:
2431 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2435 case Intrinsic::riscv_vssseg2:
2436 case Intrinsic::riscv_vssseg3:
2437 case Intrinsic::riscv_vssseg4:
2438 case Intrinsic::riscv_vssseg5:
2439 case Intrinsic::riscv_vssseg6:
2440 case Intrinsic::riscv_vssseg7:
2441 case Intrinsic::riscv_vssseg8:
2442 case Intrinsic::riscv_vsoxseg2:
2443 case Intrinsic::riscv_vsoxseg3:
2444 case Intrinsic::riscv_vsoxseg4:
2445 case Intrinsic::riscv_vsoxseg5:
2446 case Intrinsic::riscv_vsoxseg6:
2447 case Intrinsic::riscv_vsoxseg7:
2448 case Intrinsic::riscv_vsoxseg8:
2449 case Intrinsic::riscv_vsuxseg2:
2450 case Intrinsic::riscv_vsuxseg3:
2451 case Intrinsic::riscv_vsuxseg4:
2452 case Intrinsic::riscv_vsuxseg5:
2453 case Intrinsic::riscv_vsuxseg6:
2454 case Intrinsic::riscv_vsuxseg7:
2455 case Intrinsic::riscv_vsuxseg8:
2456 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2460 case Intrinsic::riscv_vssseg2_mask:
2461 case Intrinsic::riscv_vssseg3_mask:
2462 case Intrinsic::riscv_vssseg4_mask:
2463 case Intrinsic::riscv_vssseg5_mask:
2464 case Intrinsic::riscv_vssseg6_mask:
2465 case Intrinsic::riscv_vssseg7_mask:
2466 case Intrinsic::riscv_vssseg8_mask:
2467 case Intrinsic::riscv_vsoxseg2_mask:
2468 case Intrinsic::riscv_vsoxseg3_mask:
2469 case Intrinsic::riscv_vsoxseg4_mask:
2470 case Intrinsic::riscv_vsoxseg5_mask:
2471 case Intrinsic::riscv_vsoxseg6_mask:
2472 case Intrinsic::riscv_vsoxseg7_mask:
2473 case Intrinsic::riscv_vsoxseg8_mask:
2474 case Intrinsic::riscv_vsuxseg2_mask:
2475 case Intrinsic::riscv_vsuxseg3_mask:
2476 case Intrinsic::riscv_vsuxseg4_mask:
2477 case Intrinsic::riscv_vsuxseg5_mask:
2478 case Intrinsic::riscv_vsuxseg6_mask:
2479 case Intrinsic::riscv_vsuxseg7_mask:
2480 case Intrinsic::riscv_vsuxseg8_mask:
2481 SetRVVLoadStoreInfo(
I.arg_size() - 5,
2485 case Intrinsic::riscv_sf_vlte8:
2486 case Intrinsic::riscv_sf_vlte16:
2487 case Intrinsic::riscv_sf_vlte32:
2488 case Intrinsic::riscv_sf_vlte64:
2490 Info.ptrVal =
I.getArgOperand(1);
2492 case Intrinsic::riscv_sf_vlte8:
2493 Info.memVT = MVT::i8;
2494 Info.align =
Align(1);
2496 case Intrinsic::riscv_sf_vlte16:
2497 Info.memVT = MVT::i16;
2498 Info.align =
Align(2);
2500 case Intrinsic::riscv_sf_vlte32:
2501 Info.memVT = MVT::i32;
2502 Info.align =
Align(4);
2504 case Intrinsic::riscv_sf_vlte64:
2505 Info.memVT = MVT::i64;
2506 Info.align =
Align(8);
2513 case Intrinsic::riscv_sf_vste8:
2514 case Intrinsic::riscv_sf_vste16:
2515 case Intrinsic::riscv_sf_vste32:
2516 case Intrinsic::riscv_sf_vste64:
2518 Info.ptrVal =
I.getArgOperand(1);
2520 case Intrinsic::riscv_sf_vste8:
2521 Info.memVT = MVT::i8;
2522 Info.align =
Align(1);
2524 case Intrinsic::riscv_sf_vste16:
2525 Info.memVT = MVT::i16;
2526 Info.align =
Align(2);
2528 case Intrinsic::riscv_sf_vste32:
2529 Info.memVT = MVT::i32;
2530 Info.align =
Align(4);
2532 case Intrinsic::riscv_sf_vste64:
2533 Info.memVT = MVT::i64;
2534 Info.align =
Align(8);