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