@@ -896,20 +896,6 @@ def SReg_64_Encodable : SIRegisterClass<"AMDGPU", [v2i32, i64, v2f32, f64, i1, v
896896 let Size = 64;
897897}
898898
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-
913899multiclass SRegClass<int numRegs,
914900 list<ValueType> regTypes,
915901 SIRegisterTuples regList,
@@ -1205,79 +1191,140 @@ defm AV_512 : AVRegClass<16, VReg_512.RegTypes, (add VGPR_512), (add AGPR_512)>;
12051191defm AV_1024 : AVRegClass<32, VReg_1024.RegTypes, (add VGPR_1024), (add AGPR_1024)>;
12061192}
12071193
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+
12081222//===----------------------------------------------------------------------===//
12091223//
12101224// AlignTarget classes. Artifical classes to swap between
12111225// even-aligned and any-aligned classes depending on subtarget.
12121226//
12131227//===----------------------------------------------------------------------===//
12141228
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+
12151233def 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> {
12181245 let DecoderMethod = "decodeAVLdSt";
12191246}
12201247
12211248foreach RegSize = [ 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 512, 1024 ] in {
12221249 def VReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true>,
12231250 RegClassByHwMode<
1224- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1251+ [DefaultMode_Wave64,
1252+ DefaultMode_Wave32,
1253+ AVAlign2LoadStoreMode,
1254+ AlignedVGPRNoAGPRMode_Wave64,
1255+ AlignedVGPRNoAGPRMode_Wave32],
12251256 [!cast<RegisterClass>("VReg_"#RegSize),
1257+ !cast<RegisterClass>("VReg_"#RegSize),
1258+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12261259 !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12271260 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12281261 let DecoderMethod = "DecodeVReg_"#RegSize#"RegisterClass";
12291262 }
12301263
12311264 def AReg_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, false, true>,
12321265 RegClassByHwMode<
1233- [DefaultMode, AVAlign2LoadStoreMode, /*Unused combination*/],
1266+ [DefaultMode_Wave64, /*unused combination*/ AVAlign2LoadStoreMode, /*Unused combination*/ /*Unused combination*/],
12341267 [!cast<RegisterClass>("AReg_"#RegSize),
1268+ /*unused combination*/
12351269 !cast<RegisterClass>("AReg_"#RegSize#_Align2)
1270+ /*Unused combination*/
12361271 /*Unused combination*/]> {
12371272 let DecoderMethod = "DecodeAReg_"#RegSize#"RegisterClass";
12381273 }
12391274
12401275 def AV_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
12411276 RegClassByHwMode<
1242- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode],
1277+ [DefaultMode_Wave32,
1278+ DefaultMode_Wave64,
1279+ AVAlign2LoadStoreMode,
1280+ AlignedVGPRNoAGPRMode_Wave64,
1281+ AlignedVGPRNoAGPRMode_Wave32],
12431282 [!cast<RegisterClass>("AV_"#RegSize),
1283+ !cast<RegisterClass>("AV_"#RegSize),
12441284 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1285+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12451286 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12461287 let DecoderMethod = "DecodeAV_"#RegSize#"RegisterClass";
12471288 }
12481289
12491290 def AV_LdSt_#RegSize#_AlignTarget : SIRegisterClassLike<RegSize, true, true>,
12501291 RegClassByHwMode<
1251- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1292+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12521293 [!cast<RegisterClass>("VReg_"#RegSize),
1294+ !cast<RegisterClass>("VReg_"#RegSize),
12531295 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1296+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12541297 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12551298 let DecoderMethod = "decodeAVLdSt";
12561299 }
12571300
12581301 def AV_LdSt_#RegSize#_Align2 : SIRegisterClassLike<RegSize, true, true>,
12591302 RegClassByHwMode<
1260- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1303+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12611304 [!cast<RegisterClass>("VReg_"#RegSize#_Align2),
1305+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12621306 !cast<RegisterClass>("AV_"#RegSize#_Align2),
1307+ !cast<RegisterClass>("VReg_"#RegSize#_Align2),
12631308 !cast<RegisterClass>("VReg_"#RegSize#_Align2)]> {
12641309 let DecoderMethod = "decodeAVLdSt";
12651310 }
12661311
12671312 def AV_LdSt_#RegSize#_Align1 : SIRegisterClassLike<RegSize, true, true>,
12681313 RegClassByHwMode<
1269- [DefaultMode, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode ],
1314+ [DefaultMode_Wave64, DefaultMode_Wave32, AVAlign2LoadStoreMode, AlignedVGPRNoAGPRMode_Wave64, AlignedVGPRNoAGPRMode_Wave32 ],
12701315 [!cast<RegisterClass>("VReg_"#RegSize),
1316+ !cast<RegisterClass>("VReg_"#RegSize),
12711317 !cast<RegisterClass>("AV_"#RegSize),
1318+ !cast<RegisterClass>("VReg_"#RegSize),
12721319 !cast<RegisterClass>("VReg_"#RegSize)]> {
12731320 let DecoderMethod = "decodeAVLdSt";
12741321 }
12751322}
12761323
12771324def VS_64_AlignTarget : SIRegisterClassLike<64, true, false, true>,
12781325 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]> {
12811328 let DecoderMethod = "decodeSrcRegOrImm9";
12821329}
12831330
0 commit comments