@@ -1015,33 +1015,29 @@ void NVPTXDAGToDAGISel::SelectAddrSpaceCast(SDNode *N) {
1015
1015
1016
1016
// Helper function template to reduce amount of boilerplate code for
1017
1017
// opcode selection.
1018
- static std::optional<unsigned > pickOpcodeForVT (
1019
- MVT::SimpleValueType VT, std::optional<unsigned > Opcode_i8,
1020
- std::optional< unsigned > Opcode_i16, std::optional<unsigned > Opcode_i32 ,
1021
- std::optional< unsigned > Opcode_i64, std::optional<unsigned > Opcode_f32 ,
1022
- std::optional<unsigned > Opcode_f64 ) {
1018
+ static std::optional<unsigned >
1019
+ pickOpcodeForVT ( MVT::SimpleValueType VT, std::optional<unsigned > Opcode_i8,
1020
+ std::optional<unsigned > Opcode_i16 ,
1021
+ std::optional<unsigned > Opcode_i32 ,
1022
+ std::optional<unsigned > Opcode_i64 ) {
1023
1023
switch (VT) {
1024
1024
case MVT::i1:
1025
1025
case MVT::i8 :
1026
1026
return Opcode_i8;
1027
- case MVT::i16 :
1028
- return Opcode_i16;
1029
- case MVT::i32 :
1030
- return Opcode_i32;
1031
- case MVT::i64 :
1032
- return Opcode_i64;
1033
1027
case MVT::f16 :
1028
+ case MVT::i16 :
1034
1029
case MVT::bf16 :
1035
1030
return Opcode_i16;
1036
1031
case MVT::v2f16:
1037
1032
case MVT::v2bf16:
1038
1033
case MVT::v2i16:
1039
1034
case MVT::v4i8:
1040
- return Opcode_i32;
1035
+ case MVT:: i32 :
1041
1036
case MVT::f32 :
1042
- return Opcode_f32;
1037
+ return Opcode_i32;
1038
+ case MVT::i64 :
1043
1039
case MVT::f64 :
1044
- return Opcode_f64 ;
1040
+ return Opcode_i64 ;
1045
1041
default :
1046
1042
return std::nullopt;
1047
1043
}
@@ -1101,9 +1097,8 @@ bool NVPTXDAGToDAGISel::tryLoad(SDNode *N) {
1101
1097
Chain};
1102
1098
1103
1099
const MVT::SimpleValueType TargetVT = LD->getSimpleValueType (0 ).SimpleTy ;
1104
- const std::optional<unsigned > Opcode =
1105
- pickOpcodeForVT (TargetVT, NVPTX::LD_i8, NVPTX::LD_i16, NVPTX::LD_i32,
1106
- NVPTX::LD_i64, NVPTX::LD_f32, NVPTX::LD_f64);
1100
+ const std::optional<unsigned > Opcode = pickOpcodeForVT (
1101
+ TargetVT, NVPTX::LD_i8, NVPTX::LD_i16, NVPTX::LD_i32, NVPTX::LD_i64);
1107
1102
if (!Opcode)
1108
1103
return false ;
1109
1104
@@ -1203,22 +1198,19 @@ bool NVPTXDAGToDAGISel::tryLoadVector(SDNode *N) {
1203
1198
default :
1204
1199
return false ;
1205
1200
case NVPTXISD::LoadV2:
1206
- Opcode =
1207
- pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::LDV_i8_v2,
1208
- NVPTX::LDV_i16_v2, NVPTX::LDV_i32_v2, NVPTX::LDV_i64_v2,
1209
- NVPTX::LDV_f32_v2, NVPTX::LDV_f64_v2);
1201
+ Opcode = pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::LDV_i8_v2,
1202
+ NVPTX::LDV_i16_v2, NVPTX::LDV_i32_v2,
1203
+ NVPTX::LDV_i64_v2);
1210
1204
break ;
1211
1205
case NVPTXISD::LoadV4:
1212
- Opcode =
1213
- pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::LDV_i8_v4,
1214
- NVPTX::LDV_i16_v4, NVPTX::LDV_i32_v4, NVPTX::LDV_i64_v4,
1215
- NVPTX::LDV_f32_v4, NVPTX::LDV_f64_v4);
1206
+ Opcode = pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::LDV_i8_v4,
1207
+ NVPTX::LDV_i16_v4, NVPTX::LDV_i32_v4,
1208
+ NVPTX::LDV_i64_v4);
1216
1209
break ;
1217
1210
case NVPTXISD::LoadV8:
1218
1211
Opcode =
1219
1212
pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , {/* no v8i8 */ },
1220
- {/* no v8i16 */ }, NVPTX::LDV_i32_v8, {/* no v8i64 */ },
1221
- NVPTX::LDV_f32_v8, {/* no v8f64 */ });
1213
+ {/* no v8i16 */ }, NVPTX::LDV_i32_v8, {/* no v8i64 */ });
1222
1214
break ;
1223
1215
}
1224
1216
if (!Opcode)
@@ -1286,48 +1278,42 @@ bool NVPTXDAGToDAGISel::tryLDGLDU(SDNode *N) {
1286
1278
Opcode = pickOpcodeForVT (
1287
1279
EltVT.getSimpleVT ().SimpleTy , NVPTX::INT_PTX_LDG_GLOBAL_i8,
1288
1280
NVPTX::INT_PTX_LDG_GLOBAL_i16, NVPTX::INT_PTX_LDG_GLOBAL_i32,
1289
- NVPTX::INT_PTX_LDG_GLOBAL_i64, NVPTX::INT_PTX_LDG_GLOBAL_f32,
1290
- NVPTX::INT_PTX_LDG_GLOBAL_f64);
1281
+ NVPTX::INT_PTX_LDG_GLOBAL_i64);
1291
1282
break ;
1292
1283
case ISD::INTRINSIC_W_CHAIN:
1293
1284
Opcode = pickOpcodeForVT (
1294
1285
EltVT.getSimpleVT ().SimpleTy , NVPTX::INT_PTX_LDU_GLOBAL_i8,
1295
1286
NVPTX::INT_PTX_LDU_GLOBAL_i16, NVPTX::INT_PTX_LDU_GLOBAL_i32,
1296
- NVPTX::INT_PTX_LDU_GLOBAL_i64, NVPTX::INT_PTX_LDU_GLOBAL_f32,
1297
- NVPTX::INT_PTX_LDU_GLOBAL_f64);
1287
+ NVPTX::INT_PTX_LDU_GLOBAL_i64);
1298
1288
break ;
1299
1289
case NVPTXISD::LoadV2:
1300
1290
Opcode = pickOpcodeForVT (
1301
1291
EltVT.getSimpleVT ().SimpleTy , NVPTX::INT_PTX_LDG_G_v2i8_ELE,
1302
1292
NVPTX::INT_PTX_LDG_G_v2i16_ELE, NVPTX::INT_PTX_LDG_G_v2i32_ELE,
1303
- NVPTX::INT_PTX_LDG_G_v2i64_ELE, NVPTX::INT_PTX_LDG_G_v2f32_ELE,
1304
- NVPTX::INT_PTX_LDG_G_v2f64_ELE);
1293
+ NVPTX::INT_PTX_LDG_G_v2i64_ELE);
1305
1294
break ;
1306
1295
case NVPTXISD::LDUV2:
1307
1296
Opcode = pickOpcodeForVT (
1308
1297
EltVT.getSimpleVT ().SimpleTy , NVPTX::INT_PTX_LDU_G_v2i8_ELE,
1309
1298
NVPTX::INT_PTX_LDU_G_v2i16_ELE, NVPTX::INT_PTX_LDU_G_v2i32_ELE,
1310
- NVPTX::INT_PTX_LDU_G_v2i64_ELE, NVPTX::INT_PTX_LDU_G_v2f32_ELE,
1311
- NVPTX::INT_PTX_LDU_G_v2f64_ELE);
1299
+ NVPTX::INT_PTX_LDU_G_v2i64_ELE);
1312
1300
break ;
1313
1301
case NVPTXISD::LoadV4:
1314
1302
Opcode = pickOpcodeForVT (
1315
1303
EltVT.getSimpleVT ().SimpleTy , NVPTX::INT_PTX_LDG_G_v4i8_ELE,
1316
1304
NVPTX::INT_PTX_LDG_G_v4i16_ELE, NVPTX::INT_PTX_LDG_G_v4i32_ELE,
1317
- NVPTX::INT_PTX_LDG_G_v4i64_ELE, NVPTX::INT_PTX_LDG_G_v4f32_ELE,
1318
- NVPTX::INT_PTX_LDG_G_v4f64_ELE);
1305
+ NVPTX::INT_PTX_LDG_G_v4i64_ELE);
1319
1306
break ;
1320
1307
case NVPTXISD::LDUV4:
1321
- Opcode = pickOpcodeForVT (
1322
- EltVT. getSimpleVT (). SimpleTy , NVPTX::INT_PTX_LDU_G_v4i8_ELE,
1323
- NVPTX::INT_PTX_LDU_G_v4i16_ELE, NVPTX::INT_PTX_LDU_G_v4i32_ELE ,
1324
- { /* no v4i64 */ }, NVPTX::INT_PTX_LDU_G_v4f32_ELE , {/* no v4f64 */ });
1308
+ Opcode = pickOpcodeForVT (EltVT. getSimpleVT (). SimpleTy ,
1309
+ NVPTX::INT_PTX_LDU_G_v4i8_ELE,
1310
+ NVPTX::INT_PTX_LDU_G_v4i16_ELE ,
1311
+ NVPTX::INT_PTX_LDU_G_v4i32_ELE , {/* no v4i64 */ });
1325
1312
break ;
1326
1313
case NVPTXISD::LoadV8:
1327
1314
Opcode = pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , {/* no v8i8 */ },
1328
1315
{/* no v8i16 */ }, NVPTX::INT_PTX_LDG_G_v8i32_ELE,
1329
- {/* no v8i64 */ }, NVPTX::INT_PTX_LDG_G_v8f32_ELE,
1330
- {/* no v8f64 */ });
1316
+ {/* no v8i64 */ });
1331
1317
break ;
1332
1318
}
1333
1319
if (!Opcode)
@@ -1421,9 +1407,8 @@ bool NVPTXDAGToDAGISel::tryStore(SDNode *N) {
1421
1407
1422
1408
const MVT::SimpleValueType SourceVT =
1423
1409
Value.getNode ()->getSimpleValueType (0 ).SimpleTy ;
1424
- const std::optional<unsigned > Opcode =
1425
- pickOpcodeForVT (SourceVT, NVPTX::ST_i8, NVPTX::ST_i16, NVPTX::ST_i32,
1426
- NVPTX::ST_i64, NVPTX::ST_f32, NVPTX::ST_f64);
1410
+ const std::optional<unsigned > Opcode = pickOpcodeForVT (
1411
+ SourceVT, NVPTX::ST_i8, NVPTX::ST_i16, NVPTX::ST_i32, NVPTX::ST_i64);
1427
1412
if (!Opcode)
1428
1413
return false ;
1429
1414
@@ -1486,22 +1471,19 @@ bool NVPTXDAGToDAGISel::tryStoreVector(SDNode *N) {
1486
1471
default :
1487
1472
return false ;
1488
1473
case NVPTXISD::StoreV2:
1489
- Opcode =
1490
- pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::STV_i8_v2,
1491
- NVPTX::STV_i16_v2, NVPTX::STV_i32_v2, NVPTX::STV_i64_v2,
1492
- NVPTX::STV_f32_v2, NVPTX::STV_f64_v2);
1474
+ Opcode = pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::STV_i8_v2,
1475
+ NVPTX::STV_i16_v2, NVPTX::STV_i32_v2,
1476
+ NVPTX::STV_i64_v2);
1493
1477
break ;
1494
1478
case NVPTXISD::StoreV4:
1495
- Opcode =
1496
- pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::STV_i8_v4,
1497
- NVPTX::STV_i16_v4, NVPTX::STV_i32_v4, NVPTX::STV_i64_v4,
1498
- NVPTX::STV_f32_v4, NVPTX::STV_f64_v4);
1479
+ Opcode = pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , NVPTX::STV_i8_v4,
1480
+ NVPTX::STV_i16_v4, NVPTX::STV_i32_v4,
1481
+ NVPTX::STV_i64_v4);
1499
1482
break ;
1500
1483
case NVPTXISD::StoreV8:
1501
1484
Opcode =
1502
1485
pickOpcodeForVT (EltVT.getSimpleVT ().SimpleTy , {/* no v8i8 */ },
1503
- {/* no v8i16 */ }, NVPTX::STV_i32_v8, {/* no v8i64 */ },
1504
- NVPTX::STV_f32_v8, {/* no v8f64 */ });
1486
+ {/* no v8i16 */ }, NVPTX::STV_i32_v8, {/* no v8i64 */ });
1505
1487
break ;
1506
1488
}
1507
1489
@@ -1550,21 +1532,18 @@ bool NVPTXDAGToDAGISel::tryLoadParam(SDNode *Node) {
1550
1532
case 1 :
1551
1533
Opcode = pickOpcodeForVT (MemVT.getSimpleVT ().SimpleTy ,
1552
1534
NVPTX::LoadParamMemI8, NVPTX::LoadParamMemI16,
1553
- NVPTX::LoadParamMemI32, NVPTX::LoadParamMemI64,
1554
- NVPTX::LoadParamMemF32, NVPTX::LoadParamMemF64);
1535
+ NVPTX::LoadParamMemI32, NVPTX::LoadParamMemI64);
1555
1536
break ;
1556
1537
case 2 :
1557
1538
Opcode =
1558
1539
pickOpcodeForVT (MemVT.getSimpleVT ().SimpleTy , NVPTX::LoadParamMemV2I8,
1559
1540
NVPTX::LoadParamMemV2I16, NVPTX::LoadParamMemV2I32,
1560
- NVPTX::LoadParamMemV2I64, NVPTX::LoadParamMemV2F32,
1561
- NVPTX::LoadParamMemV2F64);
1541
+ NVPTX::LoadParamMemV2I64);
1562
1542
break ;
1563
1543
case 4 :
1564
1544
Opcode = pickOpcodeForVT (MemVT.getSimpleVT ().SimpleTy ,
1565
1545
NVPTX::LoadParamMemV4I8, NVPTX::LoadParamMemV4I16,
1566
- NVPTX::LoadParamMemV4I32, {/* no v4i64 */ },
1567
- NVPTX::LoadParamMemV4F32, {/* no v4f64 */ });
1546
+ NVPTX::LoadParamMemV4I32, {/* no v4i64 */ });
1568
1547
break ;
1569
1548
}
1570
1549
if (!Opcode)
@@ -1628,8 +1607,7 @@ bool NVPTXDAGToDAGISel::tryStoreRetval(SDNode *N) {
1628
1607
case 1 :
1629
1608
Opcode = pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1630
1609
NVPTX::StoreRetvalI8, NVPTX::StoreRetvalI16,
1631
- NVPTX::StoreRetvalI32, NVPTX::StoreRetvalI64,
1632
- NVPTX::StoreRetvalF32, NVPTX::StoreRetvalF64);
1610
+ NVPTX::StoreRetvalI32, NVPTX::StoreRetvalI64);
1633
1611
if (Opcode == NVPTX::StoreRetvalI8) {
1634
1612
// Fine tune the opcode depending on the size of the operand.
1635
1613
// This helps to avoid creating redundant COPY instructions in
@@ -1649,14 +1627,12 @@ bool NVPTXDAGToDAGISel::tryStoreRetval(SDNode *N) {
1649
1627
case 2 :
1650
1628
Opcode = pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1651
1629
NVPTX::StoreRetvalV2I8, NVPTX::StoreRetvalV2I16,
1652
- NVPTX::StoreRetvalV2I32, NVPTX::StoreRetvalV2I64,
1653
- NVPTX::StoreRetvalV2F32, NVPTX::StoreRetvalV2F64);
1630
+ NVPTX::StoreRetvalV2I32, NVPTX::StoreRetvalV2I64);
1654
1631
break ;
1655
1632
case 4 :
1656
1633
Opcode = pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1657
1634
NVPTX::StoreRetvalV4I8, NVPTX::StoreRetvalV4I16,
1658
- NVPTX::StoreRetvalV4I32, {/* no v4i64 */ },
1659
- NVPTX::StoreRetvalV4F32, {/* no v4f64 */ });
1635
+ NVPTX::StoreRetvalV4I32, {/* no v4i64 */ });
1660
1636
break ;
1661
1637
}
1662
1638
if (!Opcode)
@@ -1827,14 +1803,12 @@ bool NVPTXDAGToDAGISel::tryStoreParam(SDNode *N) {
1827
1803
// Use immediate version of store param
1828
1804
Opcode = pickOpcodeForVT (MemTy, NVPTX::StoreParamI8_i,
1829
1805
NVPTX::StoreParamI16_i, NVPTX::StoreParamI32_i,
1830
- NVPTX::StoreParamI64_i, NVPTX::StoreParamF32_i,
1831
- NVPTX::StoreParamF64_i);
1806
+ NVPTX::StoreParamI64_i);
1832
1807
} else
1833
1808
Opcode =
1834
1809
pickOpcodeForVT (Mem->getMemoryVT ().getSimpleVT ().SimpleTy ,
1835
1810
NVPTX::StoreParamI8_r, NVPTX::StoreParamI16_r,
1836
- NVPTX::StoreParamI32_r, NVPTX::StoreParamI64_r,
1837
- NVPTX::StoreParamF32_r, NVPTX::StoreParamF64_r);
1811
+ NVPTX::StoreParamI32_r, NVPTX::StoreParamI64_r);
1838
1812
if (Opcode == NVPTX::StoreParamI8_r) {
1839
1813
// Fine tune the opcode depending on the size of the operand.
1840
1814
// This helps to avoid creating redundant COPY instructions in
0 commit comments