@@ -1275,8 +1275,8 @@ class FlatLoadSaddrPat <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt>
12751275 (inst $saddr, $voffset, $offset, 0)
12761276>;
12771277
1278- class GlobalStoreSaddrPat <FLAT_Pseudo inst, SDPatternOperator node,
1279- ValueType vt> : GCNPat <
1278+ class FlatStoreSaddrPat <FLAT_Pseudo inst, SDPatternOperator node,
1279+ ValueType vt> : GCNPat <
12801280 (node vt:$data, (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset)),
12811281 (inst $voffset, getVregSrcForVT<vt>.ret:$data, $saddr, $offset)
12821282>;
@@ -1485,7 +1485,7 @@ multiclass GlobalFLATStorePats<FLAT_Pseudo inst, SDPatternOperator node,
14851485 let AddedComplexity = 10;
14861486 }
14871487
1488- def : GlobalStoreSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1488+ def : FlatStoreSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
14891489 let AddedComplexity = 11;
14901490 }
14911491}
@@ -1495,7 +1495,7 @@ multiclass GlobalFLATStorePats_D16_t16<string inst, SDPatternOperator node, Valu
14951495 let AddedComplexity = 10;
14961496 }
14971497
1498- def : GlobalStoreSaddrPat <!cast<FLAT_Pseudo>(inst#"_SADDR_t16"), node, vt> {
1498+ def : FlatStoreSaddrPat <!cast<FLAT_Pseudo>(inst#"_SADDR_t16"), node, vt> {
14991499 let AddedComplexity = 11;
15001500 }
15011501}
@@ -1655,6 +1655,24 @@ multiclass FlatLoadPats_D16_t16<FLAT_Pseudo inst, SDPatternOperator node, ValueT
16551655 }
16561656}
16571657
1658+ multiclass FlatStorePats<FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> {
1659+ def : FlatStorePat <inst, node, vt>;
1660+
1661+ def : FlatStoreSaddrPat<!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1662+ let AddedComplexity = 9;
1663+ let SubtargetPredicate = HasFlatGVSMode;
1664+ }
1665+ }
1666+
1667+ multiclass FlatStorePats_t16<FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> {
1668+ def : FlatStorePat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_t16"), node, vt>;
1669+
1670+ def : FlatStoreSaddrPat<!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR_t16"), node, vt> {
1671+ let AddedComplexity = 9;
1672+ let SubtargetPredicate = HasFlatGVSMode;
1673+ }
1674+ }
1675+
16581676let OtherPredicates = [HasFlatAddressSpace] in {
16591677
16601678defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i32>;
@@ -1682,10 +1700,10 @@ let True16Predicate = p in {
16821700 defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
16831701 defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
16841702 defm : FlatLoadPats <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i16>;
1685- def : FlatStorePat <FLAT_STORE_BYTE, truncstorei8_flat, i16>;
1686- def : FlatStorePat <FLAT_STORE_SHORT, store_flat, i16>;
1687- def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i16>;
1688- def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i16>;
1703+ defm : FlatStorePats <FLAT_STORE_BYTE, truncstorei8_flat, i16>;
1704+ defm : FlatStorePats <FLAT_STORE_SHORT, store_flat, i16>;
1705+ defm : FlatStorePats <FLAT_STORE_BYTE, atomic_store_8_flat, i16>;
1706+ defm : FlatStorePats <FLAT_STORE_SHORT, atomic_store_16_flat, i16>;
16891707}
16901708
16911709let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts in {
@@ -1697,39 +1715,40 @@ let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predi
16971715 defm : FlatLoadPats_D16_t16<FLAT_LOAD_UBYTE_D16_t16, atomic_load_zext_8_flat, i16>;
16981716 defm : FlatLoadPats_D16_t16<FLAT_LOAD_SHORT_D16_t16, atomic_load_nonext_16_flat, i16>;
16991717 defm : FlatLoadPats_D16_t16<FLAT_LOAD_SBYTE_D16_t16, atomic_load_sext_8_flat, i16>;
1700- def : FlatStorePat <FLAT_STORE_BYTE_t16 , truncstorei8_flat, i16>;
1701- def : FlatStorePat <FLAT_STORE_SHORT_t16 , store_flat, i16>;
1718+ defm : FlatStorePats_t16 <FLAT_STORE_BYTE , truncstorei8_flat, i16>;
1719+ defm : FlatStorePats_t16 <FLAT_STORE_SHORT , store_flat, i16>;
17021720 def : FlatStorePat <FLAT_STORE_BYTE_t16, atomic_store_8_flat, i16>;
17031721 def : FlatStorePat <FLAT_STORE_SHORT_t16, atomic_store_16_flat, i16>;
17041722} // End let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts
17051723
17061724defm : FlatLoadPats <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
17071725defm : FlatLoadPats <FLAT_LOAD_DWORDX2, atomic_load_nonext_64_flat, i64>;
17081726
1709- def : FlatStorePat <FLAT_STORE_BYTE, truncstorei8_flat, i32>;
1710- def : FlatStorePat <FLAT_STORE_SHORT, truncstorei16_flat, i32>;
1727+ defm : FlatStorePats <FLAT_STORE_BYTE, truncstorei8_flat, i32>;
1728+ defm : FlatStorePats <FLAT_STORE_SHORT, truncstorei16_flat, i32>;
17111729
17121730foreach vt = Reg32Types.types in {
17131731defm : FlatLoadPats <FLAT_LOAD_DWORD, load_flat, vt>;
1714- def : FlatStorePat <FLAT_STORE_DWORD, store_flat, vt>;
1732+ defm : FlatStorePats <FLAT_STORE_DWORD, store_flat, vt>;
17151733}
17161734
17171735foreach vt = VReg_64.RegTypes in {
1718- def : FlatStorePat <FLAT_STORE_DWORDX2, store_flat, vt>;
1736+ defm : FlatStorePats <FLAT_STORE_DWORDX2, store_flat, vt>;
17191737def : FlatLoadPat <FLAT_LOAD_DWORDX2, load_flat, vt>;
17201738}
17211739
1722- def : FlatStorePat <FLAT_STORE_DWORDX3, store_flat, v3i32>;
1740+ defm : FlatStorePats <FLAT_STORE_DWORDX3, store_flat, v3i32>;
17231741
17241742foreach vt = VReg_128.RegTypes in {
17251743defm : FlatLoadPats <FLAT_LOAD_DWORDX4, load_flat, vt>;
1726- def : FlatStorePat <FLAT_STORE_DWORDX4, store_flat, vt>;
1744+ defm : FlatStorePats <FLAT_STORE_DWORDX4, store_flat, vt>;
17271745}
17281746
1729- def : FlatStorePat <FLAT_STORE_DWORD, atomic_store_32_flat, i32>;
1730- def : FlatStorePat <FLAT_STORE_DWORDX2, atomic_store_64_flat, i64>;
1731- def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i32>;
1732- def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i32>;
1747+ defm : FlatStorePats <FLAT_STORE_DWORD, atomic_store_32_flat, i32>;
1748+ defm : FlatStorePats <FLAT_STORE_DWORDX2, atomic_store_64_flat, i64>;
1749+ defm : FlatStorePats <FLAT_STORE_BYTE, atomic_store_8_flat, i32>;
1750+ defm : FlatStorePats <FLAT_STORE_SHORT, atomic_store_16_flat, i32>;
1751+
17331752
17341753foreach as = [ "flat", "global" ] in {
17351754defm : FlatAtomicPat <"FLAT_ATOMIC_ADD", "atomic_load_add_"#as, i32>;
@@ -1780,8 +1799,8 @@ let SubtargetPredicate = isGFX12Plus in {
17801799}
17811800
17821801let OtherPredicates = [HasD16LoadStore] in {
1783- def : FlatStorePat <FLAT_STORE_SHORT_D16_HI, truncstorei16_hi16_flat, i32>;
1784- def : FlatStorePat <FLAT_STORE_BYTE_D16_HI, truncstorei8_hi16_flat, i32>;
1802+ defm : FlatStorePats <FLAT_STORE_SHORT_D16_HI, truncstorei16_hi16_flat, i32>;
1803+ defm : FlatStorePats <FLAT_STORE_BYTE_D16_HI, truncstorei8_hi16_flat, i32>;
17851804}
17861805
17871806let OtherPredicates = [D16PreservesUnusedBits] in {
0 commit comments