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,
1100 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1112 for (
MVT VT : IntVecVTs) {
1123 if (VT.getVectorElementType() == MVT::i64 && !Subtarget.hasStdExtV())
1129 if (Subtarget.hasStdExtZvabd()) {
1178 {ISD::VP_LOAD, ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1179 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER, ISD::VP_SCATTER},
1200 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1205 if (Subtarget.hasStdExtZvkb()) {
1212 if (Subtarget.hasStdExtZvbb()) {
1228 if (VT.getVectorElementType() == MVT::i64) {
1229 if (Subtarget.hasStdExtZvbc())
1232 if (Subtarget.hasStdExtZvbc32e()) {
1234 }
else if (Subtarget.hasStdExtZvbc()) {
1250 for (
MVT VT : VecTupleVTs) {
1271 static const unsigned ZvfhminZvfbfminPromoteOps[] = {
1307 static const unsigned ZvfbfaPromoteOps[] = {
ISD::FDIV,
1325 static const unsigned ZvfhminZvfbfminPromoteVPOps[] = {
1326 ISD::VP_REDUCE_FMIN,
1327 ISD::VP_REDUCE_FMAX,
1328 ISD::VP_REDUCE_FMINIMUM,
1329 ISD::VP_REDUCE_FMAXIMUM};
1332 const auto SetCommonVFPActions = [&](
MVT VT) {
1372 {ISD::VP_LOAD, ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1373 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER, ISD::VP_SCATTER},
1386 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1412 const auto SetCommonVFPExtLoadTruncStoreActions =
1414 for (
auto SmallVT : SmallerVTs) {
1422 const auto SetCommonPromoteToF32Actions = [&](
MVT VT) {
1438 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1449 ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1450 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1477 const auto SetZvfbfaActions = [&](
MVT VT) {
1494 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1512 ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1513 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1534 if (Subtarget.hasVInstructionsF16()) {
1535 for (
MVT VT : F16VecVTs) {
1538 SetCommonVFPActions(VT);
1540 }
else if (Subtarget.hasVInstructionsF16Minimal()) {
1541 for (
MVT VT : F16VecVTs) {
1544 SetCommonPromoteToF32Actions(VT);
1548 if (Subtarget.hasVInstructionsBF16()) {
1549 for (
MVT VT : BF16VecVTs) {
1552 SetZvfbfaActions(VT);
1554 }
else if (Subtarget.hasVInstructionsBF16Minimal()) {
1555 for (
MVT VT : BF16VecVTs) {
1558 SetCommonPromoteToF32Actions(VT);
1562 if (Subtarget.hasStdExtZvfofp8min()) {
1563 for (
MVT VT : BF16VecVTs) {
1570 if (Subtarget.hasVInstructionsF32()) {
1571 for (
MVT VT : F32VecVTs) {
1574 SetCommonVFPActions(VT);
1575 SetCommonVFPExtLoadTruncStoreActions(VT, F16VecVTs);
1576 SetCommonVFPExtLoadTruncStoreActions(VT, BF16VecVTs);
1580 if (Subtarget.hasVInstructionsF64()) {
1581 for (
MVT VT : F64VecVTs) {
1584 SetCommonVFPActions(VT);
1585 SetCommonVFPExtLoadTruncStoreActions(VT, F16VecVTs);
1586 SetCommonVFPExtLoadTruncStoreActions(VT, BF16VecVTs);
1587 SetCommonVFPExtLoadTruncStoreActions(VT, F32VecVTs);
1591 if (Subtarget.useRVVForFixedLengthVectors()) {
1593 if (!useRVVForFixedLengthVectorVT(VT))
1619 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1643 {ISD::VP_REDUCE_AND, ISD::VP_REDUCE_OR, ISD::VP_REDUCE_XOR}, VT,
1694 ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1695 ISD::EXPERIMENTAL_VP_STRIDED_STORE, ISD::VP_GATHER,
1733 if (Subtarget.hasStdExtZvkb())
1736 if (Subtarget.hasStdExtZvbb()) {
1751 if (Subtarget.hasStdExtZvbc())
1754 if (Subtarget.hasStdExtZvbc32e()) {
1756 }
else if (Subtarget.hasStdExtZvbc()) {
1760 if (I64VecVT.
isValid() && useRVVForFixedLengthVectorVT(I64VecVT))
1778 if (!useRVVForFixedLengthVectorVT(VT))
1799 {2, 3, 4, 5, 6, 7, 8}, VT,
Custom);
1805 ISD::VP_SCATTER, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
1806 ISD::EXPERIMENTAL_VP_STRIDED_STORE},
1817 !Subtarget.hasVInstructionsF16()) {
1823 if (Subtarget.hasStdExtZfhmin()) {
1854 if (Subtarget.hasStdExtZvfofp8min())
1856 if (Subtarget.hasStdExtZfbfmin()) {
1863 if (Subtarget.hasVInstructionsBF16()) {
1884 if (Subtarget.hasVInstructionsBF16())
1928 if (Subtarget.is64Bit())
1930 if (Subtarget.hasStdExtZfhminOrZhinxmin())
1932 if (Subtarget.hasStdExtZfbfmin())
1934 if (Subtarget.hasStdExtFOrZfinx())
1936 if (Subtarget.hasStdExtDOrZdinx())
1941 if (Subtarget.hasStdExtZaamo())
1944 if (Subtarget.hasForcedAtomics()) {
1954 if (Subtarget.hasVendorXTHeadMemIdx()) {
1963 if (Subtarget.is64Bit()) {
1970 if (Subtarget.hasVendorXCVmem() && !Subtarget.is64Bit()) {
1981 if (Subtarget.hasStdExtZvdot4a8i() && Subtarget.getELen() >= 64) {
1998 if (Subtarget.useRVVForFixedLengthVectors()) {
2000 if ((VT.getVectorElementType() != MVT::i32 &&
2001 VT.getVectorElementType() != MVT::i64) ||
2002 !useRVVForFixedLengthVectorVT(VT))
2005 unsigned Scale = VT.getVectorElementType() == MVT::i64 ? 8 : 4;
2013 if (Subtarget.hasVendorXAndesBFHCvt() && !Subtarget.hasStdExtZfh()) {
2019 const Align FunctionAlignment(Subtarget.hasStdExtZca() ? 2 : 4);
2031 if (Subtarget.hasStdExtFOrZfinx())
2035 if (Subtarget.hasVInstructions())
2037 if (Subtarget.hasVInstructions() || Subtarget.hasStdExtP())
2040 if ((Subtarget.hasStdExtZbs() && Subtarget.is64Bit()) ||
2041 Subtarget.hasVInstructions() || Subtarget.hasStdExtP())
2044 if (Subtarget.hasStdExtZbkb())
2047 if (Subtarget.hasStdExtFOrZfinx())
2050 if (Subtarget.hasVInstructions())
2065 ISD::EXPERIMENTAL_VP_REVERSE,
2080 if (Subtarget.hasVendorXTHeadMemPair())
2082 if (Subtarget.useRVVForFixedLengthVectors() || Subtarget.hasStdExtP())
2108 Subtarget.getMaxStoresPerMemmove(
true);
2189 auto &
DL =
I.getDataLayout();
2191 auto SetRVVLoadStoreInfo = [&](
unsigned PtrOp,
bool IsStore,
2192 bool IsUnitStrided,
bool UsePtrVal =
false) {
2197 Info.ptrVal =
I.getArgOperand(PtrOp);
2199 Info.fallbackAddressSpace =
2200 I.getArgOperand(PtrOp)->getType()->getPointerAddressSpace();
2204 MemTy =
I.getArgOperand(0)->getType();
2207 MemTy =
I.getType();
2222 Info.align =
DL.getABITypeAlign(MemTy);
2232 if (
I.hasMetadata(LLVMContext::MD_nontemporal))
2239 case Intrinsic::riscv_masked_atomicrmw_xchg:
2240 case Intrinsic::riscv_masked_atomicrmw_add:
2241 case Intrinsic::riscv_masked_atomicrmw_sub:
2242 case Intrinsic::riscv_masked_atomicrmw_nand:
2243 case Intrinsic::riscv_masked_atomicrmw_max:
2244 case Intrinsic::riscv_masked_atomicrmw_min:
2245 case Intrinsic::riscv_masked_atomicrmw_umax:
2246 case Intrinsic::riscv_masked_atomicrmw_umin:
2247 case Intrinsic::riscv_masked_cmpxchg:
2254 Info.memVT = MVT::i32;
2255 Info.ptrVal =
I.getArgOperand(0);
2257 Info.align =
Align(4);
2262 case Intrinsic::riscv_seg2_load_mask:
2263 case Intrinsic::riscv_seg3_load_mask:
2264 case Intrinsic::riscv_seg4_load_mask:
2265 case Intrinsic::riscv_seg5_load_mask:
2266 case Intrinsic::riscv_seg6_load_mask:
2267 case Intrinsic::riscv_seg7_load_mask:
2268 case Intrinsic::riscv_seg8_load_mask:
2269 case Intrinsic::riscv_sseg2_load_mask:
2270 case Intrinsic::riscv_sseg3_load_mask:
2271 case Intrinsic::riscv_sseg4_load_mask:
2272 case Intrinsic::riscv_sseg5_load_mask:
2273 case Intrinsic::riscv_sseg6_load_mask:
2274 case Intrinsic::riscv_sseg7_load_mask:
2275 case Intrinsic::riscv_sseg8_load_mask:
2276 SetRVVLoadStoreInfo( 0,
false,
2279 case Intrinsic::riscv_seg2_store_mask:
2280 case Intrinsic::riscv_seg3_store_mask:
2281 case Intrinsic::riscv_seg4_store_mask:
2282 case Intrinsic::riscv_seg5_store_mask:
2283 case Intrinsic::riscv_seg6_store_mask:
2284 case Intrinsic::riscv_seg7_store_mask:
2285 case Intrinsic::riscv_seg8_store_mask:
2287 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2291 case Intrinsic::riscv_sseg2_store_mask:
2292 case Intrinsic::riscv_sseg3_store_mask:
2293 case Intrinsic::riscv_sseg4_store_mask:
2294 case Intrinsic::riscv_sseg5_store_mask:
2295 case Intrinsic::riscv_sseg6_store_mask:
2296 case Intrinsic::riscv_sseg7_store_mask:
2297 case Intrinsic::riscv_sseg8_store_mask:
2299 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2303 case Intrinsic::riscv_vlm:
2304 SetRVVLoadStoreInfo( 0,
2309 case Intrinsic::riscv_vle:
2310 case Intrinsic::riscv_vle_mask:
2311 case Intrinsic::riscv_vleff:
2312 case Intrinsic::riscv_vleff_mask:
2313 SetRVVLoadStoreInfo( 1,
2318 case Intrinsic::riscv_vsm:
2319 case Intrinsic::riscv_vse:
2320 case Intrinsic::riscv_vse_mask:
2321 SetRVVLoadStoreInfo( 1,
2326 case Intrinsic::riscv_vlse:
2327 case Intrinsic::riscv_vlse_mask:
2328 case Intrinsic::riscv_vloxei:
2329 case Intrinsic::riscv_vloxei_mask:
2330 case Intrinsic::riscv_vluxei:
2331 case Intrinsic::riscv_vluxei_mask:
2332 SetRVVLoadStoreInfo( 1,
2336 case Intrinsic::riscv_vsse:
2337 case Intrinsic::riscv_vsse_mask:
2338 case Intrinsic::riscv_vsoxei:
2339 case Intrinsic::riscv_vsoxei_mask:
2340 case Intrinsic::riscv_vsuxei:
2341 case Intrinsic::riscv_vsuxei_mask:
2342 SetRVVLoadStoreInfo( 1,
2346 case Intrinsic::riscv_vlseg2:
2347 case Intrinsic::riscv_vlseg3:
2348 case Intrinsic::riscv_vlseg4:
2349 case Intrinsic::riscv_vlseg5:
2350 case Intrinsic::riscv_vlseg6:
2351 case Intrinsic::riscv_vlseg7:
2352 case Intrinsic::riscv_vlseg8:
2353 case Intrinsic::riscv_vlseg2ff:
2354 case Intrinsic::riscv_vlseg3ff:
2355 case Intrinsic::riscv_vlseg4ff:
2356 case Intrinsic::riscv_vlseg5ff:
2357 case Intrinsic::riscv_vlseg6ff:
2358 case Intrinsic::riscv_vlseg7ff:
2359 case Intrinsic::riscv_vlseg8ff:
2360 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2364 case Intrinsic::riscv_vlseg2_mask:
2365 case Intrinsic::riscv_vlseg3_mask:
2366 case Intrinsic::riscv_vlseg4_mask:
2367 case Intrinsic::riscv_vlseg5_mask:
2368 case Intrinsic::riscv_vlseg6_mask:
2369 case Intrinsic::riscv_vlseg7_mask:
2370 case Intrinsic::riscv_vlseg8_mask:
2371 case Intrinsic::riscv_vlseg2ff_mask:
2372 case Intrinsic::riscv_vlseg3ff_mask:
2373 case Intrinsic::riscv_vlseg4ff_mask:
2374 case Intrinsic::riscv_vlseg5ff_mask:
2375 case Intrinsic::riscv_vlseg6ff_mask:
2376 case Intrinsic::riscv_vlseg7ff_mask:
2377 case Intrinsic::riscv_vlseg8ff_mask:
2378 SetRVVLoadStoreInfo(
I.arg_size() - 5,
2382 case Intrinsic::riscv_vlsseg2:
2383 case Intrinsic::riscv_vlsseg3:
2384 case Intrinsic::riscv_vlsseg4:
2385 case Intrinsic::riscv_vlsseg5:
2386 case Intrinsic::riscv_vlsseg6:
2387 case Intrinsic::riscv_vlsseg7:
2388 case Intrinsic::riscv_vlsseg8:
2389 case Intrinsic::riscv_vloxseg2:
2390 case Intrinsic::riscv_vloxseg3:
2391 case Intrinsic::riscv_vloxseg4:
2392 case Intrinsic::riscv_vloxseg5:
2393 case Intrinsic::riscv_vloxseg6:
2394 case Intrinsic::riscv_vloxseg7:
2395 case Intrinsic::riscv_vloxseg8:
2396 case Intrinsic::riscv_vluxseg2:
2397 case Intrinsic::riscv_vluxseg3:
2398 case Intrinsic::riscv_vluxseg4:
2399 case Intrinsic::riscv_vluxseg5:
2400 case Intrinsic::riscv_vluxseg6:
2401 case Intrinsic::riscv_vluxseg7:
2402 case Intrinsic::riscv_vluxseg8:
2403 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2407 case Intrinsic::riscv_vlsseg2_mask:
2408 case Intrinsic::riscv_vlsseg3_mask:
2409 case Intrinsic::riscv_vlsseg4_mask:
2410 case Intrinsic::riscv_vlsseg5_mask:
2411 case Intrinsic::riscv_vlsseg6_mask:
2412 case Intrinsic::riscv_vlsseg7_mask:
2413 case Intrinsic::riscv_vlsseg8_mask:
2414 case Intrinsic::riscv_vloxseg2_mask:
2415 case Intrinsic::riscv_vloxseg3_mask:
2416 case Intrinsic::riscv_vloxseg4_mask:
2417 case Intrinsic::riscv_vloxseg5_mask:
2418 case Intrinsic::riscv_vloxseg6_mask:
2419 case Intrinsic::riscv_vloxseg7_mask:
2420 case Intrinsic::riscv_vloxseg8_mask:
2421 case Intrinsic::riscv_vluxseg2_mask:
2422 case Intrinsic::riscv_vluxseg3_mask:
2423 case Intrinsic::riscv_vluxseg4_mask:
2424 case Intrinsic::riscv_vluxseg5_mask:
2425 case Intrinsic::riscv_vluxseg6_mask:
2426 case Intrinsic::riscv_vluxseg7_mask:
2427 case Intrinsic::riscv_vluxseg8_mask:
2428 SetRVVLoadStoreInfo(
I.arg_size() - 6,
2432 case Intrinsic::riscv_vsseg2:
2433 case Intrinsic::riscv_vsseg3:
2434 case Intrinsic::riscv_vsseg4:
2435 case Intrinsic::riscv_vsseg5:
2436 case Intrinsic::riscv_vsseg6:
2437 case Intrinsic::riscv_vsseg7:
2438 case Intrinsic::riscv_vsseg8:
2439 SetRVVLoadStoreInfo(
I.arg_size() - 3,
2443 case Intrinsic::riscv_vsseg2_mask:
2444 case Intrinsic::riscv_vsseg3_mask:
2445 case Intrinsic::riscv_vsseg4_mask:
2446 case Intrinsic::riscv_vsseg5_mask:
2447 case Intrinsic::riscv_vsseg6_mask:
2448 case Intrinsic::riscv_vsseg7_mask:
2449 case Intrinsic::riscv_vsseg8_mask:
2450 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2454 case Intrinsic::riscv_vssseg2:
2455 case Intrinsic::riscv_vssseg3:
2456 case Intrinsic::riscv_vssseg4:
2457 case Intrinsic::riscv_vssseg5:
2458 case Intrinsic::riscv_vssseg6:
2459 case Intrinsic::riscv_vssseg7:
2460 case Intrinsic::riscv_vssseg8:
2461 case Intrinsic::riscv_vsoxseg2:
2462 case Intrinsic::riscv_vsoxseg3:
2463 case Intrinsic::riscv_vsoxseg4:
2464 case Intrinsic::riscv_vsoxseg5:
2465 case Intrinsic::riscv_vsoxseg6:
2466 case Intrinsic::riscv_vsoxseg7:
2467 case Intrinsic::riscv_vsoxseg8:
2468 case Intrinsic::riscv_vsuxseg2:
2469 case Intrinsic::riscv_vsuxseg3:
2470 case Intrinsic::riscv_vsuxseg4:
2471 case Intrinsic::riscv_vsuxseg5:
2472 case Intrinsic::riscv_vsuxseg6:
2473 case Intrinsic::riscv_vsuxseg7:
2474 case Intrinsic::riscv_vsuxseg8:
2475 SetRVVLoadStoreInfo(
I.arg_size() - 4,
2479 case Intrinsic::riscv_vssseg2_mask:
2480 case Intrinsic::riscv_vssseg3_mask:
2481 case Intrinsic::riscv_vssseg4_mask:
2482 case Intrinsic::riscv_vssseg5_mask:
2483 case Intrinsic::riscv_vssseg6_mask:
2484 case Intrinsic::riscv_vssseg7_mask:
2485 case Intrinsic::riscv_vssseg8_mask:
2486 case Intrinsic::riscv_vsoxseg2_mask:
2487 case Intrinsic::riscv_vsoxseg3_mask:
2488 case Intrinsic::riscv_vsoxseg4_mask:
2489 case Intrinsic::riscv_vsoxseg5_mask:
2490 case Intrinsic::riscv_vsoxseg6_mask:
2491 case Intrinsic::riscv_vsoxseg7_mask:
2492 case Intrinsic::riscv_vsoxseg8_mask:
2493 case Intrinsic::riscv_vsuxseg2_mask:
2494 case Intrinsic::riscv_vsuxseg3_mask:
2495 case Intrinsic::riscv_vsuxseg4_mask:
2496 case Intrinsic::riscv_vsuxseg5_mask:
2497 case Intrinsic::riscv_vsuxseg6_mask:
2498 case Intrinsic::riscv_vsuxseg7_mask:
2499 case Intrinsic::riscv_vsuxseg8_mask:
2500 SetRVVLoadStoreInfo(
I.arg_size() - 5,
2504 case Intrinsic::riscv_sf_vlte8:
2505 case Intrinsic::riscv_sf_vlte16:
2506 case Intrinsic::riscv_sf_vlte32:
2507 case Intrinsic::riscv_sf_vlte64:
2509 Info.ptrVal =
I.getArgOperand(1);
2511 case Intrinsic::riscv_sf_vlte8:
2512 Info.memVT = MVT::i8;
2513 Info.align =
Align(1);
2515 case Intrinsic::riscv_sf_vlte16:
2516 Info.memVT = MVT::i16;
2517 Info.align =
Align(2);
2519 case Intrinsic::riscv_sf_vlte32:
2520 Info.memVT = MVT::i32;
2521 Info.align =
Align(4);
2523 case Intrinsic::riscv_sf_vlte64:
2524 Info.memVT = MVT::i64;
2525 Info.align =
Align(8);
2532 case Intrinsic::riscv_sf_vste8:
2533 case Intrinsic::riscv_sf_vste16:
2534 case Intrinsic::riscv_sf_vste32:
2535 case Intrinsic::riscv_sf_vste64:
2537 Info.ptrVal =
I.getArgOperand(1);
2539 case Intrinsic::riscv_sf_vste8:
2540 Info.memVT = MVT::i8;
2541 Info.align =
Align(1);
2543 case Intrinsic::riscv_sf_vste16:
2544 Info.memVT = MVT::i16;
2545 Info.align =
Align(2);
2547 case Intrinsic::riscv_sf_vste32:
2548 Info.memVT = MVT::i32;
2549 Info.align =
Align(4);
2551 case Intrinsic::riscv_sf_vste64:
2552 Info.memVT = MVT::i64;
2553 Info.align =
Align(8);