Skip to content

Commit 26b0b27

Browse files
authored
[AMDGPU] Select flat GVS stores on gfx1250 (#149203)
1 parent 86c63e6 commit 26b0b27

File tree

2 files changed

+1159
-22
lines changed

2 files changed

+1159
-22
lines changed

llvm/lib/Target/AMDGPU/FLATInstructions.td

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
16581676
let OtherPredicates = [HasFlatAddressSpace] in {
16591677

16601678
defm : 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

16911709
let 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

17061724
defm : FlatLoadPats <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
17071725
defm : 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

17121730
foreach vt = Reg32Types.types in {
17131731
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>;
17151733
}
17161734

17171735
foreach vt = VReg_64.RegTypes in {
1718-
def : FlatStorePat <FLAT_STORE_DWORDX2, store_flat, vt>;
1736+
defm : FlatStorePats <FLAT_STORE_DWORDX2, store_flat, vt>;
17191737
def : 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

17241742
foreach vt = VReg_128.RegTypes in {
17251743
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>;
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

17341753
foreach as = [ "flat", "global" ] in {
17351754
defm : FlatAtomicPat <"FLAT_ATOMIC_ADD", "atomic_load_add_"#as, i32>;
@@ -1780,8 +1799,8 @@ let SubtargetPredicate = isGFX12Plus in {
17801799
}
17811800

17821801
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>;
17851804
}
17861805

17871806
let OtherPredicates = [D16PreservesUnusedBits] in {

0 commit comments

Comments
 (0)