@@ -1003,14 +1003,10 @@ void NVPTXDAGToDAGISel::SelectAddrSpaceCast(SDNode *N) {
1003
1003
// Helper function template to reduce amount of boilerplate code for
1004
1004
// opcode selection.
1005
1005
static std::optional<unsigned >
1006
- pickOpcodeForVT (MVT::SimpleValueType VT, std::optional<unsigned > Opcode_i8,
1007
- std::optional<unsigned > Opcode_i16,
1006
+ pickOpcodeForVT (MVT::SimpleValueType VT, std::optional<unsigned > Opcode_i16,
1008
1007
std::optional<unsigned > Opcode_i32,
1009
1008
std::optional<unsigned > Opcode_i64) {
1010
1009
switch (VT) {
1011
- case MVT::i1:
1012
- case MVT::i8 :
1013
- return Opcode_i8;
1014
1010
case MVT::f16 :
1015
1011
case MVT::i16 :
1016
1012
case MVT::bf16 :
@@ -1078,8 +1074,8 @@ bool NVPTXDAGToDAGISel::tryLoad(SDNode *N) {
1078
1074
Chain};
1079
1075
1080
1076
const MVT::SimpleValueType TargetVT = LD->getSimpleValueType (0 ).SimpleTy ;
1081
- const std::optional<unsigned > Opcode = pickOpcodeForVT (
1082
- TargetVT, NVPTX::LD_i8 , NVPTX::LD_i16, NVPTX::LD_i32, NVPTX::LD_i64);
1077
+ const std::optional<unsigned > Opcode =
1078
+ pickOpcodeForVT ( TargetVT, NVPTX::LD_i16, NVPTX::LD_i32, NVPTX::LD_i64);
1083
1079
if (!Opcode)
1084
1080
return false ;
1085
1081
@@ -1164,17 +1160,15 @@ bool NVPTXDAGToDAGISel::tryLoadVector(SDNode *N) {
1164
1160
default :
1165
1161
llvm_unreachable (" Unexpected opcode" );
1166
1162
case NVPTXISD::LoadV2:
1167
- Opcode =
1168
- pickOpcodeForVT (EltVT.SimpleTy , NVPTX::LDV_i8_v2, NVPTX::LDV_i16_v2,
1169
- NVPTX::LDV_i32_v2, NVPTX::LDV_i64_v2);
1163
+ Opcode = pickOpcodeForVT (EltVT.SimpleTy , NVPTX::LDV_i16_v2,
1164
+ NVPTX::LDV_i32_v2, NVPTX::LDV_i64_v2);
1170
1165
break ;
1171
1166
case NVPTXISD::LoadV4:
1172
- Opcode =
1173
- pickOpcodeForVT (EltVT.SimpleTy , NVPTX::LDV_i8_v4, NVPTX::LDV_i16_v4,
1174
- NVPTX::LDV_i32_v4, NVPTX::LDV_i64_v4);
1167
+ Opcode = pickOpcodeForVT (EltVT.SimpleTy , NVPTX::LDV_i16_v4,
1168
+ NVPTX::LDV_i32_v4, NVPTX::LDV_i64_v4);
1175
1169
break ;
1176
1170
case NVPTXISD::LoadV8:
1177
- Opcode = pickOpcodeForVT (EltVT.SimpleTy , {/* no v8i8 */ }, { /* no v8i16 */ },
1171
+ Opcode = pickOpcodeForVT (EltVT.SimpleTy , {/* no v8i16 */ },
1178
1172
NVPTX::LDV_i32_v8, {/* no v8i64 */ });
1179
1173
break ;
1180
1174
}
@@ -1230,22 +1224,21 @@ bool NVPTXDAGToDAGISel::tryLDG(MemSDNode *LD) {
1230
1224
default :
1231
1225
llvm_unreachable (" Unexpected opcode" );
1232
1226
case ISD::LOAD:
1233
- Opcode = pickOpcodeForVT (TargetVT, NVPTX::LD_GLOBAL_NC_i8,
1234
- NVPTX::LD_GLOBAL_NC_i16, NVPTX::LD_GLOBAL_NC_i32,
1235
- NVPTX::LD_GLOBAL_NC_i64);
1227
+ Opcode = pickOpcodeForVT (TargetVT, NVPTX::LD_GLOBAL_NC_i16,
1228
+ NVPTX::LD_GLOBAL_NC_i32, NVPTX::LD_GLOBAL_NC_i64);
1236
1229
break ;
1237
1230
case NVPTXISD::LoadV2:
1238
- Opcode = pickOpcodeForVT (
1239
- TargetVT, NVPTX::LD_GLOBAL_NC_v2i8 , NVPTX::LD_GLOBAL_NC_v2i16,
1240
- NVPTX::LD_GLOBAL_NC_v2i32, NVPTX::LD_GLOBAL_NC_v2i64);
1231
+ Opcode =
1232
+ pickOpcodeForVT ( TargetVT, NVPTX::LD_GLOBAL_NC_v2i16,
1233
+ NVPTX::LD_GLOBAL_NC_v2i32, NVPTX::LD_GLOBAL_NC_v2i64);
1241
1234
break ;
1242
1235
case NVPTXISD::LoadV4:
1243
- Opcode = pickOpcodeForVT (
1244
- TargetVT, NVPTX::LD_GLOBAL_NC_v4i8 , NVPTX::LD_GLOBAL_NC_v4i16,
1245
- NVPTX::LD_GLOBAL_NC_v4i32, NVPTX::LD_GLOBAL_NC_v4i64);
1236
+ Opcode =
1237
+ pickOpcodeForVT ( TargetVT, NVPTX::LD_GLOBAL_NC_v4i16,
1238
+ NVPTX::LD_GLOBAL_NC_v4i32, NVPTX::LD_GLOBAL_NC_v4i64);
1246
1239
break ;
1247
1240
case NVPTXISD::LoadV8:
1248
- Opcode = pickOpcodeForVT (TargetVT, {/* no v8i8 */ }, { /* no v8i16 */ },
1241
+ Opcode = pickOpcodeForVT (TargetVT, {/* no v8i16 */ },
1249
1242
NVPTX::LD_GLOBAL_NC_v8i32, {/* no v8i64 */ });
1250
1243
break ;
1251
1244
}
@@ -1276,8 +1269,9 @@ bool NVPTXDAGToDAGISel::tryLDU(SDNode *N) {
1276
1269
break ;
1277
1270
}
1278
1271
1279
- const MVT::SimpleValueType SelectVT =
1280
- MVT::getIntegerVT (LD->getMemoryVT ().getSizeInBits () / NumElts).SimpleTy ;
1272
+ SDLoc DL (N);
1273
+ const unsigned FromTypeWidth = LD->getMemoryVT ().getSizeInBits () / NumElts;
1274
+ const MVT::SimpleValueType TargetVT = LD->getSimpleValueType (0 ).SimpleTy ;
1281
1275
1282
1276
// If this is an LDU intrinsic, the address is the third operand. If its an
1283
1277
// LDU SD node (from custom vector handling), then its the second operand
@@ -1286,32 +1280,28 @@ bool NVPTXDAGToDAGISel::tryLDU(SDNode *N) {
1286
1280
1287
1281
SDValue Base, Offset;
1288
1282
SelectADDR (Addr, Base, Offset);
1289
- SDValue Ops[] = {Base, Offset, LD->getChain ()};
1283
+ SDValue Ops[] = {getI32Imm (FromTypeWidth, DL), Base, Offset, LD->getChain ()};
1290
1284
1291
1285
std::optional<unsigned > Opcode;
1292
1286
switch (N->getOpcode ()) {
1293
1287
default :
1294
1288
llvm_unreachable (" Unexpected opcode" );
1295
1289
case ISD::INTRINSIC_W_CHAIN:
1296
- Opcode =
1297
- pickOpcodeForVT (SelectVT, NVPTX::LDU_GLOBAL_i8, NVPTX::LDU_GLOBAL_i16,
1298
- NVPTX::LDU_GLOBAL_i32, NVPTX::LDU_GLOBAL_i64);
1290
+ Opcode = pickOpcodeForVT (TargetVT, NVPTX::LDU_GLOBAL_i16,
1291
+ NVPTX::LDU_GLOBAL_i32, NVPTX::LDU_GLOBAL_i64);
1299
1292
break ;
1300
1293
case NVPTXISD::LDUV2:
1301
- Opcode = pickOpcodeForVT (SelectVT, NVPTX::LDU_GLOBAL_v2i8,
1302
- NVPTX::LDU_GLOBAL_v2i16, NVPTX::LDU_GLOBAL_v2i32,
1303
- NVPTX::LDU_GLOBAL_v2i64);
1294
+ Opcode = pickOpcodeForVT (TargetVT, NVPTX::LDU_GLOBAL_v2i16,
1295
+ NVPTX::LDU_GLOBAL_v2i32, NVPTX::LDU_GLOBAL_v2i64);
1304
1296
break ;
1305
1297
case NVPTXISD::LDUV4:
1306
- Opcode = pickOpcodeForVT (SelectVT, NVPTX::LDU_GLOBAL_v4i8,
1307
- NVPTX::LDU_GLOBAL_v4i16, NVPTX::LDU_GLOBAL_v4i32,
1308
- {/* no v4i64 */ });
1298
+ Opcode = pickOpcodeForVT (TargetVT, NVPTX::LDU_GLOBAL_v4i16,
1299
+ NVPTX::LDU_GLOBAL_v4i32, {/* no v4i64 */ });
1309
1300
break ;
1310
1301
}
1311
1302
if (!Opcode)
1312
1303
return false ;
1313
1304
1314
- SDLoc DL (N);
1315
1305
SDNode *NVPTXLDU = CurDAG->getMachineNode (*Opcode, DL, LD->getVTList (), Ops);
1316
1306
1317
1307
ReplaceNode (LD, NVPTXLDU);
@@ -1362,8 +1352,8 @@ bool NVPTXDAGToDAGISel::tryStore(SDNode *N) {
1362
1352
Chain};
1363
1353
1364
1354
const std::optional<unsigned > Opcode =
1365
- pickOpcodeForVT (Value.getSimpleValueType ().SimpleTy , NVPTX::ST_i8 ,
1366
- NVPTX::ST_i16, NVPTX:: ST_i32, NVPTX::ST_i64);
1355
+ pickOpcodeForVT (Value.getSimpleValueType ().SimpleTy , NVPTX::ST_i16 ,
1356
+ NVPTX::ST_i32, NVPTX::ST_i64);
1367
1357
if (!Opcode)
1368
1358
return false ;
1369
1359
@@ -1423,16 +1413,16 @@ bool NVPTXDAGToDAGISel::tryStoreVector(SDNode *N) {
1423
1413
default :
1424
1414
return false ;
1425
1415
case NVPTXISD::StoreV2:
1426
- Opcode = pickOpcodeForVT (EltVT, NVPTX::STV_i8_v2 , NVPTX::STV_i16_v2 ,
1427
- NVPTX::STV_i32_v2, NVPTX:: STV_i64_v2);
1416
+ Opcode = pickOpcodeForVT (EltVT, NVPTX::STV_i16_v2 , NVPTX::STV_i32_v2 ,
1417
+ NVPTX::STV_i64_v2);
1428
1418
break ;
1429
1419
case NVPTXISD::StoreV4:
1430
- Opcode = pickOpcodeForVT (EltVT, NVPTX::STV_i8_v4 , NVPTX::STV_i16_v4 ,
1431
- NVPTX::STV_i32_v4, NVPTX:: STV_i64_v4);
1420
+ Opcode = pickOpcodeForVT (EltVT, NVPTX::STV_i16_v4 , NVPTX::STV_i32_v4 ,
1421
+ NVPTX::STV_i64_v4);
1432
1422
break ;
1433
1423
case NVPTXISD::StoreV8:
1434
- Opcode = pickOpcodeForVT (EltVT, {/* no v8i8 */ }, { /* no v8i16 */ } ,
1435
- NVPTX::STV_i32_v8, {/* no v8i64 */ });
1424
+ Opcode = pickOpcodeForVT (EltVT, {/* no v8i16 */ }, NVPTX::STV_i32_v8 ,
1425
+ {/* no v8i64 */ });
1436
1426
break ;
1437
1427
}
1438
1428
0 commit comments