@@ -915,20 +915,6 @@ def SReg_64_Encodable : SIRegisterClass<"AMDGPU", [v2i32, i64, v2f32, f64, i1, v
915
915
let Size = 64;
916
916
}
917
917
918
- def SReg_1_XEXEC : SIRegisterClass<"AMDGPU", [i1], 32,
919
- (add SReg_64_XEXEC, SReg_32_XEXEC)> {
920
- let CopyCost = 1;
921
- let isAllocatable = 0;
922
- let HasSGPR = 1;
923
- }
924
-
925
- def SReg_1 : SIRegisterClass<"AMDGPU", [i1], 32,
926
- (add SReg_1_XEXEC, EXEC, EXEC_LO, EXEC_HI)> {
927
- let CopyCost = 1;
928
- let isAllocatable = 0;
929
- let HasSGPR = 1;
930
- }
931
-
932
918
multiclass SRegClass<int numRegs,
933
919
list<ValueType> regTypes,
934
920
SIRegisterTuples regList,
@@ -1208,79 +1194,140 @@ defm AV_512 : AVRegClass<16, VReg_512.RegTypes, (add VGPR_512), (add AGPR_512)>;
1208
1194
defm AV_1024 : AVRegClass<32, VReg_1024.RegTypes, (add VGPR_1024), (add AGPR_1024)>;
1209
1195
}
1210
1196
1197
+ def SReg_1_XEXEC : SIRegisterClassLike<0, false, false, true>,
1198
+ RegClassByHwMode<
1199
+ [DefaultMode_Wave64,
1200
+ AlignedVGPRNoAGPRMode_Wave64,
1201
+ AVAlign2LoadStoreMode,
1202
+ DefaultMode_Wave32,
1203
+ AlignedVGPRNoAGPRMode_Wave32],
1204
+ [SReg_64_XEXEC,
1205
+ SReg_64_XEXEC,
1206
+ SReg_64_XEXEC,
1207
+ SReg_32_XM0_XEXEC, // FIXME: Why do the wave32 cases exclude m0?
1208
+ SReg_32_XM0_XEXEC]
1209
+ >;
1210
+
1211
+ def SReg_1 : SIRegisterClassLike<0, false, false, true>,
1212
+ RegClassByHwMode<
1213
+ [DefaultMode_Wave64,
1214
+ AlignedVGPRNoAGPRMode_Wave64,
1215
+ AVAlign2LoadStoreMode,
1216
+ DefaultMode_Wave32,
1217
+ AlignedVGPRNoAGPRMode_Wave32],
1218
+ [SReg_64,
1219
+ SReg_64,
1220
+ SReg_64,
1221
+ SReg_32,
1222
+ SReg_32]
1223
+ >;
1224
+
1211
1225
//===----------------------------------------------------------------------===//
1212
1226
//
1213
1227
// AlignTarget classes. Artifical classes to swap between
1214
1228
// even-aligned and any-aligned classes depending on subtarget.
1215
1229
//
1216
1230
//===----------------------------------------------------------------------===//
1217
1231
1232
+ // We have 3 orthogonal properties to consider. Unfortunately we need
1233
+ // to define the cross product of these states, minus unused
1234
+ // combinations.
1235
+
1218
1236
def AV_LdSt_32_Target : RegClassByHwMode<
1219
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1220
- [VGPR_32, AV_32, VGPR_32]>, SIRegisterClassLike<32, true, true> {
1237
+ [DefaultMode_Wave64,
1238
+ DefaultMode_Wave32,
1239
+ AVAlign2LoadStoreMode,
1240
+ AlignedVGPRNoAGPRMode_Wave64,
1241
+ AlignedVGPRNoAGPRMode_Wave32],
1242
+ [VGPR_32,
1243
+ VGPR_32,
1244
+ AV_32,
1245
+ VGPR_32,
1246
+ VGPR_32]>,
1247
+ SIRegisterClassLike<32, true, true> {
1221
1248
let DecoderMethod = "decodeAVLdSt";
1222
1249
}
1223
1250
1224
1251
foreach RegSize = [ 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 512, 1024 ] in {
1225
1252
def VReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true>,
1226
1253
RegClassByHwMode<
1227
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1254
+ [DefaultMode_Wave64,
1255
+ DefaultMode_Wave32,
1256
+ AVAlign2LoadStoreMode,
1257
+ AlignedVGPRNoAGPRMode_Wave64,
1258
+ AlignedVGPRNoAGPRMode_Wave32],
1228
1259
[!cast<RegisterClass>("VReg_"#RegSize),
1260
+ !cast<RegisterClass>("VReg_"#RegSize),
1261
+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
1229
1262
!cast<RegisterClass>("VReg_"#RegSize#_Align2),
1230
1263
!cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
1231
1264
let DecoderMethod = "DecodeVReg_"#RegSize#"RegisterClass";
1232
1265
}
1233
1266
1234
1267
def AReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, false, true>,
1235
1268
RegClassByHwMode<
1236
- [DefaultMode, AVAlign2LoadStoreMode, /*Unused combination*/],
1269
+ [DefaultMode_Wave64, /*unused combination*/ AVAlign2LoadStoreMode, /*Unused combination*/ /*Unused combination*/],
1237
1270
[!cast<RegisterClass>("AReg_"#RegSize),
1271
+ /*unused combination*/
1238
1272
!cast<RegisterClass>("AReg_"#RegSize#_Align2)
1273
+ /*Unused combination*/
1239
1274
/*Unused combination*/]> {
1240
1275
let DecoderMethod = "DecodeAReg_"#RegSize#"RegisterClass";
1241
1276
}
1242
1277
1243
1278
def AV_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
1244
1279
RegClassByHwMode<
1245
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1280
+ [DefaultMode_Wave32,
1281
+ DefaultMode_Wave64,
1282
+ AVAlign2LoadStoreMode,
1283
+ AlignedVGPRNoAGPRMode_Wave64,
1284
+ AlignedVGPRNoAGPRMode_Wave32],
1246
1285
[!cast<RegisterClass>("AV_"#RegSize),
1286
+ !cast<RegisterClass>("AV_"#RegSize),
1247
1287
!cast<RegisterClass>("AV_"#RegSize#_Align2),
1288
+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
1248
1289
!cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
1249
1290
let DecoderMethod = "DecodeAV_"#RegSize#"RegisterClass";
1250
1291
}
1251
1292
1252
1293
def AV_LdSt_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
1253
1294
RegClassByHwMode<
1254
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1295
+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
1255
1296
[!cast<RegisterClass>("VReg_"#RegSize),
1297
+ !cast<RegisterClass>("VReg_"#RegSize),
1256
1298
!cast<RegisterClass>("AV_"#RegSize#_Align2),
1299
+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
1257
1300
!cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
1258
1301
let DecoderMethod = "decodeAVLdSt";
1259
1302
}
1260
1303
1261
1304
def AV_LdSt_#RegSize#_Align2 : SIRegisterClassLike<RegSize, true, true>,
1262
1305
RegClassByHwMode<
1263
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1306
+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
1264
1307
[!cast<RegisterClass>("VReg_"#RegSize#_Align2),
1308
+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
1265
1309
!cast<RegisterClass>("AV_"#RegSize#_Align2),
1310
+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
1266
1311
!cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
1267
1312
let DecoderMethod = "decodeAVLdSt";
1268
1313
}
1269
1314
1270
1315
def AV_LdSt_#RegSize#_Align1 : SIRegisterClassLike<RegSize, true, true>,
1271
1316
RegClassByHwMode<
1272
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1317
+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
1273
1318
[!cast<RegisterClass>("VReg_"#RegSize),
1319
+ !cast<RegisterClass>("VReg_"#RegSize),
1274
1320
!cast<RegisterClass>("AV_"#RegSize),
1321
+ !cast<RegisterClass>("VReg_"#RegSize),
1275
1322
!cast<RegisterClass>("VReg_"#RegSize)]> {
1276
1323
let DecoderMethod = "decodeAVLdSt";
1277
1324
}
1278
1325
}
1279
1326
1280
1327
def VS_64_AlignTarget : SIRegisterClassLike<64, true, false, true>,
1281
1328
RegClassByHwMode<
1282
- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1283
- [VS_64, VS_64_Align2, VS_64_Align2]> {
1329
+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
1330
+ [VS_64, VS_64, VS_64_Align2, VS_64_Align2, VS_64_Align2]> {
1284
1331
let DecoderMethod = "decodeSrcRegOrImm9";
1285
1332
}
1286
1333
0 commit comments