@@ -417,10 +417,10 @@ class getBUFVDataRegisterOperandForOp<RegisterOperand Op, bit isTFE> {
417417}
418418
419419class getMUBUFInsDA<list<RegisterOperand> vdataList,
420- list<RegisterClass > vaddrList, bit isTFE, bit hasRestrictedSOffset> {
420+ list<RegisterClassLike > vaddrList, bit isTFE, bit hasRestrictedSOffset> {
421421 RegisterOperand vdataClass = !if(!empty(vdataList), ?, !head(vdataList));
422- RegisterClass vaddrClass = !if(!empty(vaddrList), ?, !head(vaddrList));
423- RegisterOperand vdata_op = getBUFVDataRegisterOperandForOp< vdataClass, isTFE>.ret;
422+ RegisterClassLike vaddrClass = !if(!empty(vaddrList), ?, !head(vaddrList));
423+ RegisterOperand vdata_op = getBUFVDataRegisterOperand<!cast<SIRegisterClassLike>( vdataClass.RegClass).Size , isTFE>.ret;
424424
425425 dag SOffset = !if(hasRestrictedSOffset, (ins SReg_32:$soffset), (ins SCSrc_b32:$soffset));
426426 dag NonVaddrInputs = !con((ins SReg_128_XNULL:$srsrc), SOffset, (ins Offset:$offset, CPol_0:$cpol, i1imm_0:$swz));
@@ -453,8 +453,8 @@ class getMUBUFIns<int addrKind, list<RegisterOperand> vdataList, bit isTFE, bit
453453 !if(!eq(addrKind, BUFAddrKind.Offset), getMUBUFInsDA<vdataList, [], isTFE, hasRestrictedSOffset>.ret,
454454 !if(!eq(addrKind, BUFAddrKind.OffEn), getMUBUFInsDA<vdataList, [VGPR_32], isTFE, hasRestrictedSOffset>.ret,
455455 !if(!eq(addrKind, BUFAddrKind.IdxEn), getMUBUFInsDA<vdataList, [VGPR_32], isTFE, hasRestrictedSOffset>.ret,
456- !if(!eq(addrKind, BUFAddrKind.BothEn), getMUBUFInsDA<vdataList, [VReg_64 ], isTFE, hasRestrictedSOffset>.ret,
457- !if(!eq(addrKind, BUFAddrKind.Addr64), getMUBUFInsDA<vdataList, [VReg_64 ], isTFE, hasRestrictedSOffset>.ret,
456+ !if(!eq(addrKind, BUFAddrKind.BothEn), getMUBUFInsDA<vdataList, [VReg_64_AlignTarget ], isTFE, hasRestrictedSOffset>.ret,
457+ !if(!eq(addrKind, BUFAddrKind.Addr64), getMUBUFInsDA<vdataList, [VReg_64_AlignTarget ], isTFE, hasRestrictedSOffset>.ret,
458458 (ins))))));
459459}
460460
@@ -677,8 +677,8 @@ class MUBUF_Pseudo_Store_Lds<string opName>
677677}
678678
679679class getMUBUFAtomicInsDA<RegisterOperand vdata_op, bit vdata_in, bit hasRestrictedSOffset,
680- list<RegisterClass > vaddrList=[]> {
681- RegisterClass vaddrClass = !if(!empty(vaddrList), ?, !head(vaddrList));
680+ list<RegisterClassLike > vaddrList=[]> {
681+ RegisterClassLike vaddrClass = !if(!empty(vaddrList), ?, !head(vaddrList));
682682
683683 dag VData = !if(vdata_in, (ins vdata_op:$vdata_in), (ins vdata_op:$vdata));
684684 dag Data = !if(!empty(vaddrList), VData, !con(VData, (ins vaddrClass:$vaddr)));
@@ -702,9 +702,9 @@ class getMUBUFAtomicIns<int addrKind,
702702 !if(!eq(addrKind, BUFAddrKind.IdxEn),
703703 getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VGPR_32]>.ret,
704704 !if(!eq(addrKind, BUFAddrKind.BothEn),
705- getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64 ]>.ret,
705+ getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64_AlignTarget ]>.ret,
706706 !if(!eq(addrKind, BUFAddrKind.Addr64),
707- getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64 ]>.ret,
707+ getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64_AlignTarget ]>.ret,
708708 (ins))))));
709709}
710710
@@ -1568,11 +1568,12 @@ multiclass BufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, string
15681568 # !if(!eq(RtnMode, "ret"), "", "_noret")
15691569 # "_" # vt);
15701570 defvar InstSuffix = !if(!eq(RtnMode, "ret"), "_RTN", "");
1571- defvar data_vt_RC = getVregSrcForVT<data_vt>.ret.RegClass;
1571+ defvar data_op = getVregSrcForVT<data_vt>.ret;
1572+ defvar data_vt_RC = getVregClassForVT<data_vt>.ret;
15721573
15731574 let AddedComplexity = !if(!eq(RtnMode, "ret"), 0, 1) in {
15741575 defvar OffsetResDag = (!cast<MUBUF_Pseudo>(Inst # "_OFFSET" # InstSuffix)
1575- data_vt_RC :$vdata_in, SReg_128:$srsrc, SCSrc_b32:$soffset,
1576+ data_op :$vdata_in, SReg_128:$srsrc, SCSrc_b32:$soffset,
15761577 Offset:$offset);
15771578 def : GCNPat<
15781579 (vt (Op (MUBUFOffset v4i32:$srsrc, i32:$soffset, i32:$offset), data_vt:$vdata_in)),
@@ -1583,7 +1584,7 @@ multiclass BufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, string
15831584 >;
15841585
15851586 defvar Addr64ResDag = (!cast<MUBUF_Pseudo>(Inst # "_ADDR64" # InstSuffix)
1586- data_vt_RC :$vdata_in, VReg_64:$vaddr, SReg_128:$srsrc,
1587+ data_op :$vdata_in, VReg_64:$vaddr, SReg_128:$srsrc,
15871588 SCSrc_b32:$soffset, Offset:$offset);
15881589 def : GCNPat<
15891590 (vt (Op (MUBUFAddr64 v4i32:$srsrc, i64:$vaddr, i32:$soffset, i32:$offset),
@@ -1832,7 +1833,7 @@ multiclass SIBufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, stri
18321833 (extract_cpol_set_glc $auxiliary),
18331834 (extract_cpol $auxiliary));
18341835 defvar SrcRC = getVregSrcForVT<vt>.ret;
1835- defvar DataRC = getVregSrcForVT <data_vt>.ret.RegClass ;
1836+ defvar DataRC = getVregClassForVT <data_vt>.ret;
18361837 defvar SubLo = !if(!eq(vt, i32), sub0, sub0_sub1);
18371838 defvar SubHi = !if(!eq(vt, i32), sub1, sub2_sub3);
18381839
@@ -2088,7 +2089,7 @@ defm : MUBUFStore_PatternOffset <"BUFFER_STORE_SHORT", i16, store_global>;
20882089
20892090multiclass MUBUFScratchStorePat_Common <string Instr,
20902091 ValueType vt, PatFrag st,
2091- RegisterClass rc = VGPR_32> {
2092+ RegisterClassLike rc = VGPR_32> {
20922093 def : GCNPat <
20932094 (st vt:$value, (MUBUFScratchOffen v4i32:$srsrc, i32:$vaddr,
20942095 i32:$soffset, i32:$offset)),
@@ -2104,7 +2105,7 @@ multiclass MUBUFScratchStorePat_Common <string Instr,
21042105
21052106multiclass MUBUFScratchStorePat <string Instr,
21062107 ValueType vt, PatFrag st,
2107- RegisterClass rc = VGPR_32> {
2108+ RegisterClassLike rc = VGPR_32> {
21082109 let SubtargetPredicate = HasUnrestrictedSOffset in {
21092110 defm : MUBUFScratchStorePat_Common<Instr, vt, st, rc>;
21102111 }
0 commit comments