@@ -417,10 +417,10 @@ class getBUFVDataRegisterOperandForOp<RegisterOperand Op, bit isTFE> {
417
417
}
418
418
419
419
class getMUBUFInsDA<list<RegisterOperand> vdataList,
420
- list<RegisterClass > vaddrList, bit isTFE, bit hasRestrictedSOffset> {
420
+ list<RegisterClassLike > vaddrList, bit isTFE, bit hasRestrictedSOffset> {
421
421
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;
424
424
425
425
dag SOffset = !if(hasRestrictedSOffset, (ins SReg_32:$soffset), (ins SCSrc_b32:$soffset));
426
426
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
453
453
!if(!eq(addrKind, BUFAddrKind.Offset), getMUBUFInsDA<vdataList, [], isTFE, hasRestrictedSOffset>.ret,
454
454
!if(!eq(addrKind, BUFAddrKind.OffEn), getMUBUFInsDA<vdataList, [VGPR_32], isTFE, hasRestrictedSOffset>.ret,
455
455
!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,
458
458
(ins))))));
459
459
}
460
460
@@ -677,8 +677,8 @@ class MUBUF_Pseudo_Store_Lds<string opName>
677
677
}
678
678
679
679
class 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));
682
682
683
683
dag VData = !if(vdata_in, (ins vdata_op:$vdata_in), (ins vdata_op:$vdata));
684
684
dag Data = !if(!empty(vaddrList), VData, !con(VData, (ins vaddrClass:$vaddr)));
@@ -702,9 +702,9 @@ class getMUBUFAtomicIns<int addrKind,
702
702
!if(!eq(addrKind, BUFAddrKind.IdxEn),
703
703
getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VGPR_32]>.ret,
704
704
!if(!eq(addrKind, BUFAddrKind.BothEn),
705
- getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64 ]>.ret,
705
+ getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64_AlignTarget ]>.ret,
706
706
!if(!eq(addrKind, BUFAddrKind.Addr64),
707
- getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64 ]>.ret,
707
+ getMUBUFAtomicInsDA<vdataClass, vdata_in, hasRestrictedSOffset, [VReg_64_AlignTarget ]>.ret,
708
708
(ins))))));
709
709
}
710
710
@@ -1568,11 +1568,12 @@ multiclass BufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, string
1568
1568
# !if(!eq(RtnMode, "ret"), "", "_noret")
1569
1569
# "_" # vt);
1570
1570
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;
1572
1573
1573
1574
let AddedComplexity = !if(!eq(RtnMode, "ret"), 0, 1) in {
1574
1575
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,
1576
1577
Offset:$offset);
1577
1578
def : GCNPat<
1578
1579
(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
1583
1584
>;
1584
1585
1585
1586
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,
1587
1588
SCSrc_b32:$soffset, Offset:$offset);
1588
1589
def : GCNPat<
1589
1590
(vt (Op (MUBUFAddr64 v4i32:$srsrc, i64:$vaddr, i32:$soffset, i32:$offset),
@@ -1832,7 +1833,7 @@ multiclass SIBufferAtomicCmpSwapPat_Common<ValueType vt, ValueType data_vt, stri
1832
1833
(extract_cpol_set_glc $auxiliary),
1833
1834
(extract_cpol $auxiliary));
1834
1835
defvar SrcRC = getVregSrcForVT<vt>.ret;
1835
- defvar DataRC = getVregSrcForVT <data_vt>.ret.RegClass ;
1836
+ defvar DataRC = getVregClassForVT <data_vt>.ret;
1836
1837
defvar SubLo = !if(!eq(vt, i32), sub0, sub0_sub1);
1837
1838
defvar SubHi = !if(!eq(vt, i32), sub1, sub2_sub3);
1838
1839
@@ -2088,7 +2089,7 @@ defm : MUBUFStore_PatternOffset <"BUFFER_STORE_SHORT", i16, store_global>;
2088
2089
2089
2090
multiclass MUBUFScratchStorePat_Common <string Instr,
2090
2091
ValueType vt, PatFrag st,
2091
- RegisterClass rc = VGPR_32> {
2092
+ RegisterClassLike rc = VGPR_32> {
2092
2093
def : GCNPat <
2093
2094
(st vt:$value, (MUBUFScratchOffen v4i32:$srsrc, i32:$vaddr,
2094
2095
i32:$soffset, i32:$offset)),
@@ -2104,7 +2105,7 @@ multiclass MUBUFScratchStorePat_Common <string Instr,
2104
2105
2105
2106
multiclass MUBUFScratchStorePat <string Instr,
2106
2107
ValueType vt, PatFrag st,
2107
- RegisterClass rc = VGPR_32> {
2108
+ RegisterClassLike rc = VGPR_32> {
2108
2109
let SubtargetPredicate = HasUnrestrictedSOffset in {
2109
2110
defm : MUBUFScratchStorePat_Common<Instr, vt, st, rc>;
2110
2111
}
0 commit comments