@@ -1275,8 +1275,8 @@ class FlatLoadSaddrPat <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt>
1275
1275
(inst $saddr, $voffset, $offset, 0)
1276
1276
>;
1277
1277
1278
- class GlobalStoreSaddrPat <FLAT_Pseudo inst, SDPatternOperator node,
1279
- ValueType vt> : GCNPat <
1278
+ class FlatStoreSaddrPat <FLAT_Pseudo inst, SDPatternOperator node,
1279
+ ValueType vt> : GCNPat <
1280
1280
(node vt:$data, (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset)),
1281
1281
(inst $voffset, getVregSrcForVT<vt>.ret:$data, $saddr, $offset)
1282
1282
>;
@@ -1485,7 +1485,7 @@ multiclass GlobalFLATStorePats<FLAT_Pseudo inst, SDPatternOperator node,
1485
1485
let AddedComplexity = 10;
1486
1486
}
1487
1487
1488
- def : GlobalStoreSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1488
+ def : FlatStoreSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1489
1489
let AddedComplexity = 11;
1490
1490
}
1491
1491
}
@@ -1495,7 +1495,7 @@ multiclass GlobalFLATStorePats_D16_t16<string inst, SDPatternOperator node, Valu
1495
1495
let AddedComplexity = 10;
1496
1496
}
1497
1497
1498
- def : GlobalStoreSaddrPat <!cast<FLAT_Pseudo>(inst#"_SADDR_t16"), node, vt> {
1498
+ def : FlatStoreSaddrPat <!cast<FLAT_Pseudo>(inst#"_SADDR_t16"), node, vt> {
1499
1499
let AddedComplexity = 11;
1500
1500
}
1501
1501
}
@@ -1655,6 +1655,24 @@ multiclass FlatLoadPats_D16_t16<FLAT_Pseudo inst, SDPatternOperator node, ValueT
1655
1655
}
1656
1656
}
1657
1657
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
+
1658
1676
let OtherPredicates = [HasFlatAddressSpace] in {
1659
1677
1660
1678
defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i32>;
@@ -1682,10 +1700,10 @@ let True16Predicate = p in {
1682
1700
defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
1683
1701
defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
1684
1702
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>;
1689
1707
}
1690
1708
1691
1709
let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts in {
@@ -1697,39 +1715,40 @@ let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predi
1697
1715
defm : FlatLoadPats_D16_t16<FLAT_LOAD_UBYTE_D16_t16, atomic_load_zext_8_flat, i16>;
1698
1716
defm : FlatLoadPats_D16_t16<FLAT_LOAD_SHORT_D16_t16, atomic_load_nonext_16_flat, i16>;
1699
1717
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>;
1702
1720
def : FlatStorePat <FLAT_STORE_BYTE_t16, atomic_store_8_flat, i16>;
1703
1721
def : FlatStorePat <FLAT_STORE_SHORT_t16, atomic_store_16_flat, i16>;
1704
1722
} // End let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts
1705
1723
1706
1724
defm : FlatLoadPats <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
1707
1725
defm : FlatLoadPats <FLAT_LOAD_DWORDX2, atomic_load_nonext_64_flat, i64>;
1708
1726
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>;
1711
1729
1712
1730
foreach vt = Reg32Types.types in {
1713
1731
defm : 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>;
1715
1733
}
1716
1734
1717
1735
foreach vt = VReg_64.RegTypes in {
1718
- def : FlatStorePat <FLAT_STORE_DWORDX2, store_flat, vt>;
1736
+ defm : FlatStorePats <FLAT_STORE_DWORDX2, store_flat, vt>;
1719
1737
def : FlatLoadPat <FLAT_LOAD_DWORDX2, load_flat, vt>;
1720
1738
}
1721
1739
1722
- def : FlatStorePat <FLAT_STORE_DWORDX3, store_flat, v3i32>;
1740
+ defm : FlatStorePats <FLAT_STORE_DWORDX3, store_flat, v3i32>;
1723
1741
1724
1742
foreach vt = VReg_128.RegTypes in {
1725
1743
defm : 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>;
1727
1745
}
1728
1746
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
+
1733
1752
1734
1753
foreach as = [ "flat", "global" ] in {
1735
1754
defm : FlatAtomicPat <"FLAT_ATOMIC_ADD", "atomic_load_add_"#as, i32>;
@@ -1780,8 +1799,8 @@ let SubtargetPredicate = isGFX12Plus in {
1780
1799
}
1781
1800
1782
1801
let 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>;
1785
1804
}
1786
1805
1787
1806
let OtherPredicates = [D16PreservesUnusedBits] in {
0 commit comments