@@ -915,20 +915,6 @@ def SReg_64_Encodable : SIRegisterClass<"AMDGPU", [v2i32, i64, v2f32, f64, i1, v
915915 let Size = 64;
916916}
917917
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-
932918multiclass SRegClass<int numRegs,
933919 list<ValueType> regTypes,
934920 SIRegisterTuples regList,
@@ -1208,79 +1194,140 @@ defm AV_512 : AVRegClass<16, VReg_512.RegTypes, (add VGPR_512), (add AGPR_512)>;
12081194defm AV_1024 : AVRegClass<32, VReg_1024.RegTypes, (add VGPR_1024), (add AGPR_1024)>;
12091195}
12101196
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+
12111225//===----------------------------------------------------------------------===//
12121226//
12131227// AlignTarget classes. Artifical classes to swap between
12141228// even-aligned and any-aligned classes depending on subtarget.
12151229//
12161230//===----------------------------------------------------------------------===//
12171231
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+
12181236def 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> {
12211248 let DecoderMethod = "decodeAVLdSt";
12221249}
12231250
12241251foreach RegSize = [ 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 512, 1024 ] in {
12251252 def VReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true>,
12261253 RegClassByHwMode<
1227- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1254+ [DefaultMode_Wave64,
1255+ DefaultMode_Wave32,
1256+ AVAlign2LoadStoreMode,
1257+ AlignedVGPRNoAGPRMode_Wave64,
1258+ AlignedVGPRNoAGPRMode_Wave32],
12281259 [!cast<RegisterClass>("VReg_"#RegSize),
1260+ !cast<RegisterClass>("VReg_"#RegSize),
1261+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12291262 !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12301263 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12311264 let DecoderMethod = "DecodeVReg_"#RegSize#"RegisterClass";
12321265 }
12331266
12341267 def AReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, false, true>,
12351268 RegClassByHwMode<
1236- [DefaultMode, AVAlign2LoadStoreMode, /*Unused combination*/],
1269+ [DefaultMode_Wave64, /*unused combination*/ AVAlign2LoadStoreMode, /*Unused combination*/ /*Unused combination*/],
12371270 [!cast<RegisterClass>("AReg_"#RegSize),
1271+ /*unused combination*/
12381272 !cast<RegisterClass>("AReg_"#RegSize#_Align2)
1273+ /*Unused combination*/
12391274 /*Unused combination*/]> {
12401275 let DecoderMethod = "DecodeAReg_"#RegSize#"RegisterClass";
12411276 }
12421277
12431278 def AV_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
12441279 RegClassByHwMode<
1245- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1280+ [DefaultMode_Wave32,
1281+ DefaultMode_Wave64,
1282+ AVAlign2LoadStoreMode,
1283+ AlignedVGPRNoAGPRMode_Wave64,
1284+ AlignedVGPRNoAGPRMode_Wave32],
12461285 [!cast<RegisterClass>("AV_"#RegSize),
1286+ !cast<RegisterClass>("AV_"#RegSize),
12471287 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1288+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12481289 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12491290 let DecoderMethod = "DecodeAV_"#RegSize#"RegisterClass";
12501291 }
12511292
12521293 def AV_LdSt_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
12531294 RegClassByHwMode<
1254- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1295+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12551296 [!cast<RegisterClass>("VReg_"#RegSize),
1297+ !cast<RegisterClass>("VReg_"#RegSize),
12561298 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1299+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12571300 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12581301 let DecoderMethod = "decodeAVLdSt";
12591302 }
12601303
12611304 def AV_LdSt_#RegSize#_Align2 : SIRegisterClassLike<RegSize, true, true>,
12621305 RegClassByHwMode<
1263- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1306+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12641307 [!cast<RegisterClass>("VReg_"#RegSize#_Align2),
1308+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12651309 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1310+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12661311 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12671312 let DecoderMethod = "decodeAVLdSt";
12681313 }
12691314
12701315 def AV_LdSt_#RegSize#_Align1 : SIRegisterClassLike<RegSize, true, true>,
12711316 RegClassByHwMode<
1272- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1317+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12731318 [!cast<RegisterClass>("VReg_"#RegSize),
1319+ !cast<RegisterClass>("VReg_"#RegSize),
12741320 !cast<RegisterClass>("AV_"#RegSize),
1321+ !cast<RegisterClass>("VReg_"#RegSize),
12751322 !cast<RegisterClass>("VReg_"#RegSize)]> {
12761323 let DecoderMethod = "decodeAVLdSt";
12771324 }
12781325}
12791326
12801327def VS_64_AlignTarget : SIRegisterClassLike<64, true, false, true>,
12811328 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]> {
12841331 let DecoderMethod = "decodeSrcRegOrImm9";
12851332}
12861333
0 commit comments