@@ -1306,22 +1306,29 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
1306
1306
// expansion to a build_vector of 0s.
1307
1307
setOperationAction(ISD::UNDEF, VT, Custom);
1308
1308
1309
+ setOperationAction({ISD::CONCAT_VECTORS, ISD::INSERT_SUBVECTOR,
1310
+ ISD::EXTRACT_SUBVECTOR},
1311
+ VT, Custom);
1312
+
1313
+ // FIXME: mload, mstore, mgather, mscatter, vp_load/store,
1314
+ // vp_stride_load/store, vp_gather/scatter can be hoisted to here.
1315
+ setOperationAction({ISD::LOAD, ISD::STORE}, VT, Custom);
1316
+
1317
+ setOperationAction({ISD::FP_ROUND, ISD::FP_EXTEND}, VT, Custom);
1318
+ setOperationAction({ISD::STRICT_FP_ROUND, ISD::STRICT_FP_EXTEND}, VT,
1319
+ Custom);
1320
+
1309
1321
if (VT.getVectorElementType() == MVT::f16 &&
1310
1322
!Subtarget.hasVInstructionsF16()) {
1311
- setOperationAction({ISD::FP_ROUND, ISD::FP_EXTEND}, VT, Custom);
1312
- setOperationAction({ISD::STRICT_FP_ROUND, ISD::STRICT_FP_EXTEND}, VT,
1313
- Custom);
1314
1323
setOperationAction({ISD::VP_FP_ROUND, ISD::VP_FP_EXTEND}, VT, Custom);
1315
1324
setOperationAction(
1316
1325
{ISD::VP_MERGE, ISD::VP_SELECT, ISD::VSELECT, ISD::SELECT}, VT,
1317
1326
Custom);
1318
1327
setOperationAction({ISD::SINT_TO_FP, ISD::UINT_TO_FP,
1319
1328
ISD::VP_SINT_TO_FP, ISD::VP_UINT_TO_FP},
1320
1329
VT, Custom);
1321
- setOperationAction({ISD::CONCAT_VECTORS, ISD::INSERT_SUBVECTOR,
1322
- ISD::EXTRACT_SUBVECTOR, ISD::VECTOR_SHUFFLE},
1323
- VT, Custom);
1324
- setOperationAction({ISD::LOAD, ISD::STORE}, VT, Custom);
1330
+ setOperationAction(ISD::VECTOR_SHUFFLE, VT, Custom);
1331
+ // FIXME: We should prefer BUILD_VECTOR over SPLAT_VECTOR.
1325
1332
setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1326
1333
MVT F32VecVT = MVT::getVectorVT(MVT::f32, VT.getVectorElementCount());
1327
1334
// Don't promote f16 vector operations to f32 if f32 vector type is
@@ -1335,35 +1342,22 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
1335
1342
}
1336
1343
1337
1344
if (VT.getVectorElementType() == MVT::bf16) {
1338
- setOperationAction({ISD::FP_ROUND, ISD::FP_EXTEND}, VT, Custom);
1339
1345
setOperationAction({ISD::VP_FP_ROUND, ISD::VP_FP_EXTEND}, VT, Custom);
1340
- setOperationAction({ISD::STRICT_FP_ROUND, ISD::STRICT_FP_EXTEND}, VT,
1341
- Custom);
1342
- setOperationAction({ISD::CONCAT_VECTORS, ISD::INSERT_SUBVECTOR,
1343
- ISD::EXTRACT_SUBVECTOR},
1344
- VT, Custom);
1345
- setOperationAction({ISD::LOAD, ISD::STORE}, VT, Custom);
1346
- if (Subtarget.hasStdExtZfbfmin())
1347
- setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1346
+ // FIXME: We should prefer BUILD_VECTOR over SPLAT_VECTOR.
1347
+ setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1348
1348
setOperationAction(
1349
1349
{ISD::VP_MERGE, ISD::VP_SELECT, ISD::VSELECT, ISD::SELECT}, VT,
1350
1350
Custom);
1351
1351
// TODO: Promote to fp32.
1352
1352
continue;
1353
1353
}
1354
1354
1355
- // We use EXTRACT_SUBVECTOR as a "cast" from scalable to fixed.
1356
- setOperationAction({ISD::INSERT_SUBVECTOR, ISD::EXTRACT_SUBVECTOR}, VT,
1357
- Custom);
1358
-
1359
- setOperationAction({ISD::BUILD_VECTOR, ISD::CONCAT_VECTORS,
1360
- ISD::VECTOR_SHUFFLE, ISD::INSERT_VECTOR_ELT,
1361
- ISD::EXTRACT_VECTOR_ELT},
1355
+ setOperationAction({ISD::BUILD_VECTOR, ISD::VECTOR_SHUFFLE,
1356
+ ISD::INSERT_VECTOR_ELT, ISD::EXTRACT_VECTOR_ELT},
1362
1357
VT, Custom);
1363
1358
1364
- setOperationAction({ISD::LOAD, ISD::STORE, ISD::MLOAD, ISD::MSTORE,
1365
- ISD::MGATHER, ISD::MSCATTER},
1366
- VT, Custom);
1359
+ setOperationAction(
1360
+ {ISD::MLOAD, ISD::MSTORE, ISD::MGATHER, ISD::MSCATTER}, VT, Custom);
1367
1361
1368
1362
setOperationAction({ISD::VP_LOAD, ISD::VP_STORE,
1369
1363
ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
@@ -1377,8 +1371,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
1377
1371
ISD::IS_FPCLASS, ISD::FMAXIMUM, ISD::FMINIMUM},
1378
1372
VT, Custom);
1379
1373
1380
- setOperationAction({ISD::FP_ROUND, ISD::FP_EXTEND}, VT, Custom);
1381
-
1382
1374
setOperationAction({ISD::FTRUNC, ISD::FCEIL, ISD::FFLOOR, ISD::FROUND,
1383
1375
ISD::FROUNDEVEN, ISD::FRINT, ISD::FNEARBYINT},
1384
1376
VT, Custom);
@@ -1395,8 +1387,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
1395
1387
1396
1388
setOperationAction(FloatingPointVPOps, VT, Custom);
1397
1389
1398
- setOperationAction({ISD::STRICT_FP_EXTEND, ISD::STRICT_FP_ROUND}, VT,
1399
- Custom);
1400
1390
setOperationAction(
1401
1391
{ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
1402
1392
ISD::STRICT_FDIV, ISD::STRICT_FSQRT, ISD::STRICT_FMA,
0 commit comments