@@ -1003,14 +1003,10 @@ void NVPTXDAGToDAGISel::SelectAddrSpaceCast(SDNode *N) {
10031003// Helper function template to reduce amount of boilerplate code for
10041004// opcode selection.
10051005static 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,
10081007 std::optional<unsigned > Opcode_i32,
10091008 std::optional<unsigned > Opcode_i64) {
10101009 switch (VT) {
1011- case MVT::i1:
1012- case MVT::i8 :
1013- return Opcode_i8;
10141010 case MVT::f16 :
10151011 case MVT::i16 :
10161012 case MVT::bf16 :
@@ -1078,8 +1074,8 @@ bool NVPTXDAGToDAGISel::tryLoad(SDNode *N) {
10781074 Chain};
10791075
10801076 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);
10831079 if (!Opcode)
10841080 return false ;
10851081
@@ -1164,17 +1160,15 @@ bool NVPTXDAGToDAGISel::tryLoadVector(SDNode *N) {
11641160 default :
11651161 llvm_unreachable (" Unexpected opcode" );
11661162 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);
11701165 break ;
11711166 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);
11751169 break ;
11761170 case NVPTXISD::LoadV8:
1177- Opcode = pickOpcodeForVT (EltVT.SimpleTy , {/* no v8i8 */ }, { /* no v8i16 */ },
1171+ Opcode = pickOpcodeForVT (EltVT.SimpleTy , {/* no v8i16 */ },
11781172 NVPTX::LDV_i32_v8, {/* no v8i64 */ });
11791173 break ;
11801174 }
@@ -1230,22 +1224,21 @@ bool NVPTXDAGToDAGISel::tryLDG(MemSDNode *LD) {
12301224 default :
12311225 llvm_unreachable (" Unexpected opcode" );
12321226 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);
12361229 break ;
12371230 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);
12411234 break ;
12421235 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);
12461239 break ;
12471240 case NVPTXISD::LoadV8:
1248- Opcode = pickOpcodeForVT (TargetVT, {/* no v8i8 */ }, { /* no v8i16 */ },
1241+ Opcode = pickOpcodeForVT (TargetVT, {/* no v8i16 */ },
12491242 NVPTX::LD_GLOBAL_NC_v8i32, {/* no v8i64 */ });
12501243 break ;
12511244 }
@@ -1276,8 +1269,9 @@ bool NVPTXDAGToDAGISel::tryLDU(SDNode *N) {
12761269 break ;
12771270 }
12781271
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 ;
12811275
12821276 // If this is an LDU intrinsic, the address is the third operand. If its an
12831277 // LDU SD node (from custom vector handling), then its the second operand
@@ -1286,32 +1280,28 @@ bool NVPTXDAGToDAGISel::tryLDU(SDNode *N) {
12861280
12871281 SDValue Base, Offset;
12881282 SelectADDR (Addr, Base, Offset);
1289- SDValue Ops[] = {Base, Offset, LD->getChain ()};
1283+ SDValue Ops[] = {getI32Imm (FromTypeWidth, DL), Base, Offset, LD->getChain ()};
12901284
12911285 std::optional<unsigned > Opcode;
12921286 switch (N->getOpcode ()) {
12931287 default :
12941288 llvm_unreachable (" Unexpected opcode" );
12951289 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);
12991292 break ;
13001293 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);
13041296 break ;
13051297 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 */ });
13091300 break ;
13101301 }
13111302 if (!Opcode)
13121303 return false ;
13131304
1314- SDLoc DL (N);
13151305 SDNode *NVPTXLDU = CurDAG->getMachineNode (*Opcode, DL, LD->getVTList (), Ops);
13161306
13171307 ReplaceNode (LD, NVPTXLDU);
@@ -1362,8 +1352,8 @@ bool NVPTXDAGToDAGISel::tryStore(SDNode *N) {
13621352 Chain};
13631353
13641354 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);
13671357 if (!Opcode)
13681358 return false ;
13691359
@@ -1423,16 +1413,16 @@ bool NVPTXDAGToDAGISel::tryStoreVector(SDNode *N) {
14231413 default :
14241414 return false ;
14251415 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);
14281418 break ;
14291419 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);
14321422 break ;
14331423 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 */ });
14361426 break ;
14371427 }
14381428
0 commit comments