Skip to content

Commit 9691592

Browse files
broxigarchentomtor
authored andcommitted
[AMDGPU][True16][CodeGen] atomic load/store i8 in true16 mode (llvm#143044)
Follow up patch from llvm#142822. Update other 16bit atomic load/store pattern in t16 mode
1 parent 6036897 commit 9691592

File tree

3 files changed

+2896
-88
lines changed

3 files changed

+2896
-88
lines changed

llvm/lib/Target/AMDGPU/FLATInstructions.td

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,17 +1537,13 @@ multiclass ScratchFLATLoadPats_D16_t16<string inst, SDPatternOperator node, Valu
15371537
let OtherPredicates = [HasFlatAddressSpace] in {
15381538

15391539
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i32>;
1540-
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i16>;
15411540
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i32>;
1542-
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
15431541
def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_aext_16_flat, i32>;
1544-
def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
15451542
def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_zext_16_flat, i32>;
15461543
def : FlatLoadPat <FLAT_LOAD_UBYTE, extloadi8_flat, i32>;
15471544
def : FlatLoadPat <FLAT_LOAD_UBYTE, zextloadi8_flat, i32>;
15481545
def : FlatLoadPat <FLAT_LOAD_SBYTE, sextloadi8_flat, i32>;
15491546
def : FlatLoadPat <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i32>;
1550-
def : FlatLoadPat <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i16>;
15511547
def : FlatLoadPat <FLAT_LOAD_USHORT, extloadi16_flat, i32>;
15521548
def : FlatLoadPat <FLAT_LOAD_USHORT, zextloadi16_flat, i32>;
15531549
def : FlatLoadPat <FLAT_LOAD_SSHORT, sextloadi16_flat, i32>;
@@ -1560,17 +1556,29 @@ let True16Predicate = p in {
15601556
def : FlatLoadPat <FLAT_LOAD_UBYTE, zextloadi8_flat, i16>;
15611557
def : FlatLoadPat <FLAT_LOAD_SBYTE, sextloadi8_flat, i16>;
15621558
def : FlatLoadPat <FLAT_LOAD_USHORT, load_flat, i16>;
1559+
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i16>;
1560+
def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
1561+
def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
1562+
def : FlatLoadPat <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i16>;
15631563
def : FlatStorePat <FLAT_STORE_BYTE, truncstorei8_flat, i16>;
15641564
def : FlatStorePat <FLAT_STORE_SHORT, store_flat, i16>;
1565+
def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i16>;
1566+
def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i16>;
15651567
}
15661568

15671569
let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts in {
15681570
def : FlatLoadPat_D16_t16<FLAT_LOAD_UBYTE_D16_t16, extloadi8_flat, i16>;
15691571
def : FlatLoadPat_D16_t16<FLAT_LOAD_UBYTE_D16_t16, zextloadi8_flat, i16>;
15701572
def : FlatLoadPat_D16_t16<FLAT_LOAD_SBYTE_D16_t16, sextloadi8_flat, i16>;
15711573
def : FlatLoadPat_D16_t16<FLAT_LOAD_SHORT_D16_t16, load_flat, i16>;
1574+
def : FlatLoadPat_D16_t16<FLAT_LOAD_UBYTE_D16_t16, atomic_load_aext_8_flat, i16>;
1575+
def : FlatLoadPat_D16_t16<FLAT_LOAD_UBYTE_D16_t16, atomic_load_zext_8_flat, i16>;
1576+
def : FlatLoadPat_D16_t16<FLAT_LOAD_SHORT_D16_t16, atomic_load_nonext_16_flat, i16>;
1577+
def : FlatLoadPat_D16_t16<FLAT_LOAD_SBYTE_D16_t16, atomic_load_sext_8_flat, i16>;
15721578
def : FlatStorePat <FLAT_STORE_BYTE_t16, truncstorei8_flat, i16>;
15731579
def : FlatStorePat <FLAT_STORE_SHORT_t16, store_flat, i16>;
1580+
def : FlatStorePat <FLAT_STORE_BYTE_t16, atomic_store_8_flat, i16>;
1581+
def : FlatStorePat <FLAT_STORE_SHORT_t16, atomic_store_16_flat, i16>;
15741582
} // End let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts
15751583

15761584
def : FlatLoadPat <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
@@ -1599,9 +1607,7 @@ def : FlatStorePat <FLAT_STORE_DWORDX4, store_flat, vt>;
15991607
def : FlatStorePat <FLAT_STORE_DWORD, atomic_store_32_flat, i32>;
16001608
def : FlatStorePat <FLAT_STORE_DWORDX2, atomic_store_64_flat, i64>;
16011609
def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i32>;
1602-
def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i16>;
16031610
def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i32>;
1604-
def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i16>;
16051611

16061612
foreach as = [ "flat", "global" ] in {
16071613
defm : FlatAtomicPat <"FLAT_ATOMIC_ADD", "atomic_load_add_"#as, i32>;
@@ -1680,9 +1686,7 @@ let OtherPredicates = [HasFlatGlobalInsts] in {
16801686
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, atomic_load_aext_8_global, i32>;
16811687
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, atomic_load_zext_8_global, i32>;
16821688
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_aext_16_global, i32>;
1683-
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_nonext_16_global, i16>;
16841689
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_zext_16_global, i32>;
1685-
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_zext_16_global, i16>;
16861690
defm : GlobalFLATLoadPats <GLOBAL_LOAD_SBYTE, atomic_load_sext_8_global, i32>;
16871691
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, extloadi8_global, i32>;
16881692
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, zextloadi8_global, i32>;
@@ -1702,6 +1706,8 @@ defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, load_global, i16>;
17021706
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, atomic_load_aext_8_global, i16>;
17031707
defm : GlobalFLATLoadPats <GLOBAL_LOAD_UBYTE, atomic_load_zext_8_global, i16>;
17041708
defm : GlobalFLATLoadPats <GLOBAL_LOAD_SBYTE, atomic_load_sext_8_global, i16>;
1709+
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_nonext_16_global, i16>;
1710+
defm : GlobalFLATLoadPats <GLOBAL_LOAD_USHORT, atomic_load_zext_16_global, i16>;
17051711
}
17061712

17071713
let OtherPredicates = [HasFlatGlobalInsts, D16PreservesUnusedBits], True16Predicate = UseRealTrue16Insts in {
@@ -1712,8 +1718,12 @@ defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_SHORT_D16", load_global, i16>;
17121718
defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_UBYTE_D16", atomic_load_aext_8_global, i16>;
17131719
defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_UBYTE_D16", atomic_load_zext_8_global, i16>;
17141720
defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_SBYTE_D16", atomic_load_sext_8_global, i16>;
1721+
defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_SHORT_D16", atomic_load_nonext_16_global, i16>;
1722+
defm : GlobalFLATLoadPats_D16_t16<"GLOBAL_LOAD_SHORT_D16", atomic_load_zext_16_global, i16>;
17151723
defm : GlobalFLATStorePats_D16_t16<"GLOBAL_STORE_BYTE", truncstorei8_global, i16>;
17161724
defm : GlobalFLATStorePats_D16_t16<"GLOBAL_STORE_SHORT", store_global, i16>;
1725+
defm : GlobalFLATStorePats_D16_t16<"GLOBAL_STORE_BYTE", atomic_store_8_global, i16>;
1726+
defm : GlobalFLATStorePats_D16_t16<"GLOBAL_STORE_SHORT", atomic_store_16_global, i16>;
17171727
} // end OtherPredicates = [HasFlatGlobalInsts, D16PreservesUnusedBits], True16Predicate = UseRealTrue16Insts
17181728

17191729
foreach vt = Reg32Types.types in {
@@ -1747,6 +1757,8 @@ foreach p = [NotHasTrue16BitInsts, UseFakeTrue16Insts] in
17471757
let OtherPredicates = [HasFlatGlobalInsts], True16Predicate = p in {
17481758
defm : GlobalFLATStorePats <GLOBAL_STORE_BYTE, truncstorei8_global, i16>;
17491759
defm : GlobalFLATStorePats <GLOBAL_STORE_SHORT, store_global, i16>;
1760+
defm : GlobalFLATStorePats <GLOBAL_STORE_BYTE, atomic_store_8_global, i16>;
1761+
defm : GlobalFLATStorePats <GLOBAL_STORE_SHORT, atomic_store_16_global, i16>;
17501762
}
17511763

17521764
let OtherPredicates = [HasD16LoadStore] in {
@@ -1772,9 +1784,7 @@ defm : GlobalFLATLoadPats_D16 <GLOBAL_LOAD_SHORT_D16, load_d16_lo_global, v2f16>
17721784
}
17731785

17741786
defm : GlobalFLATStorePats <GLOBAL_STORE_BYTE, atomic_store_8_global, i32>;
1775-
defm : GlobalFLATStorePats <GLOBAL_STORE_BYTE, atomic_store_8_global, i16>;
17761787
defm : GlobalFLATStorePats <GLOBAL_STORE_SHORT, atomic_store_16_global, i32>;
1777-
defm : GlobalFLATStorePats <GLOBAL_STORE_SHORT, atomic_store_16_global, i16>;
17781788
defm : GlobalFLATStorePats <GLOBAL_STORE_DWORD, atomic_store_32_global, i32>;
17791789
defm : GlobalFLATStorePats <GLOBAL_STORE_DWORDX2, atomic_store_64_global, i64>;
17801790

0 commit comments

Comments
 (0)