@@ -1250,6 +1250,16 @@ class GlobalLoadSaddrPat_D16 <FLAT_Pseudo inst, SDPatternOperator node, ValueTyp
1250
1250
(inst $saddr, $voffset, $offset, 0, $in)
1251
1251
>;
1252
1252
1253
+ class FlatLoadSaddrPat_D16 <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> : GCNPat <
1254
+ (vt (node (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset), vt:$in)),
1255
+ (inst $saddr, $voffset, $offset, (i32 0), $in)
1256
+ >;
1257
+
1258
+ class FlatLoadSaddrPat_D16_t16 <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> : GCNPat <
1259
+ (vt (node (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset))),
1260
+ (inst $saddr, $voffset, $offset, (i32 0))
1261
+ >;
1262
+
1253
1263
class GlobalLoadSaddrPat_D16_t16 <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> : GCNPat <
1254
1264
(vt (node (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset))),
1255
1265
(inst $saddr, $voffset, $offset, (i32 0))
@@ -1260,7 +1270,7 @@ class FlatLoadSignedPat <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt>
1260
1270
(inst $vaddr, $offset)
1261
1271
>;
1262
1272
1263
- class GlobalLoadSaddrPat <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> : GCNPat <
1273
+ class FlatLoadSaddrPat <FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> : GCNPat <
1264
1274
(vt (node (GlobalSAddr (i64 SReg_64:$saddr), (i32 VGPR_32:$voffset), i32:$offset))),
1265
1275
(inst $saddr, $voffset, $offset, 0)
1266
1276
>;
@@ -1444,7 +1454,7 @@ multiclass GlobalFLATLoadPats<FLAT_Pseudo inst, SDPatternOperator node, ValueTyp
1444
1454
let AddedComplexity = 10;
1445
1455
}
1446
1456
1447
- def : GlobalLoadSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1457
+ def : FlatLoadSaddrPat <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1448
1458
let AddedComplexity = 11;
1449
1459
}
1450
1460
}
@@ -1454,7 +1464,7 @@ multiclass GlobalFLATLoadPats_D16<FLAT_Pseudo inst, SDPatternOperator node, Valu
1454
1464
let AddedComplexity = 10;
1455
1465
}
1456
1466
1457
- def : GlobalLoadSaddrPat_D16 <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1467
+ def : FlatLoadSaddrPat_D16 <!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1458
1468
let AddedComplexity = 11;
1459
1469
}
1460
1470
}
@@ -1618,61 +1628,89 @@ multiclass ScratchFLATLoadPats_D16_t16<string inst, SDPatternOperator node, Valu
1618
1628
}
1619
1629
}
1620
1630
1631
+ multiclass FlatLoadPats<FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> {
1632
+ def : FlatLoadPat <inst, node, vt>;
1633
+
1634
+ def : FlatLoadSaddrPat<!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1635
+ let AddedComplexity = 9;
1636
+ let SubtargetPredicate = HasFlatGVSMode;
1637
+ }
1638
+ }
1639
+
1640
+ multiclass FlatLoadPats_D16<FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> {
1641
+ def : FlatLoadPat_D16 <inst, node, vt>;
1642
+
1643
+ def : FlatLoadSaddrPat_D16<!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1644
+ let AddedComplexity = 9;
1645
+ let SubtargetPredicate = HasFlatGVSMode;
1646
+ }
1647
+ }
1648
+
1649
+ multiclass FlatLoadPats_D16_t16<FLAT_Pseudo inst, SDPatternOperator node, ValueType vt> {
1650
+ def : FlatLoadPat_D16_t16 <inst, node, vt>;
1651
+
1652
+ def : FlatLoadSaddrPat_D16_t16<!cast<FLAT_Pseudo>(!cast<string>(inst)#"_SADDR"), node, vt> {
1653
+ let AddedComplexity = 9;
1654
+ let SubtargetPredicate = HasFlatGVSMode;
1655
+ }
1656
+ }
1657
+
1621
1658
let OtherPredicates = [HasFlatAddressSpace] in {
1622
1659
1623
- def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i32>;
1624
- def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i32>;
1625
- def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_aext_16_flat, i32>;
1626
- def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_zext_16_flat, i32>;
1627
- def : FlatLoadPat <FLAT_LOAD_UBYTE, extloadi8_flat, i32>;
1628
- def : FlatLoadPat <FLAT_LOAD_UBYTE, zextloadi8_flat, i32>;
1629
- def : FlatLoadPat <FLAT_LOAD_SBYTE, sextloadi8_flat, i32>;
1630
- def : FlatLoadPat <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i32>;
1631
- def : FlatLoadPat <FLAT_LOAD_USHORT, extloadi16_flat, i32>;
1632
- def : FlatLoadPat <FLAT_LOAD_USHORT, zextloadi16_flat, i32>;
1633
- def : FlatLoadPat <FLAT_LOAD_SSHORT, sextloadi16_flat, i32>;
1634
- def : FlatLoadPat <FLAT_LOAD_SSHORT, atomic_load_sext_16_flat, i32>;
1635
- def : FlatLoadPat <FLAT_LOAD_DWORDX3, load_flat, v3i32>;
1660
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i32>;
1661
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i32>;
1662
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_aext_16_flat, i32>;
1663
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_zext_16_flat, i32>;
1664
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_zext_16_flat, i16>;
1665
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, extloadi8_flat, i32>;
1666
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, zextloadi8_flat, i32>;
1667
+ defm : FlatLoadPats <FLAT_LOAD_SBYTE, sextloadi8_flat, i32>;
1668
+ defm : FlatLoadPats <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i32>;
1669
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, extloadi16_flat, i32>;
1670
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, zextloadi16_flat, i32>;
1671
+ defm : FlatLoadPats <FLAT_LOAD_SSHORT, sextloadi16_flat, i32>;
1672
+ defm : FlatLoadPats <FLAT_LOAD_SSHORT, atomic_load_sext_16_flat, i32>;
1673
+ defm : FlatLoadPats <FLAT_LOAD_DWORDX3, load_flat, v3i32>;
1636
1674
1637
1675
foreach p = [NotHasTrue16BitInsts, UseFakeTrue16Insts] in
1638
1676
let True16Predicate = p in {
1639
- def : FlatLoadPat <FLAT_LOAD_UBYTE, extloadi8_flat, i16>;
1640
- def : FlatLoadPat <FLAT_LOAD_UBYTE, zextloadi8_flat, i16>;
1641
- def : FlatLoadPat <FLAT_LOAD_SBYTE, sextloadi8_flat, i16>;
1642
- def : FlatLoadPat <FLAT_LOAD_USHORT, load_flat, i16>;
1643
- def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i16>;
1644
- def : FlatLoadPat <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
1645
- def : FlatLoadPat <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
1646
- def : FlatLoadPat <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i16>;
1677
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, extloadi8_flat, i16>;
1678
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, zextloadi8_flat, i16>;
1679
+ defm : FlatLoadPats <FLAT_LOAD_SBYTE, sextloadi8_flat, i16>;
1680
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, load_flat, i16>;
1681
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_aext_8_flat, i16>;
1682
+ defm : FlatLoadPats <FLAT_LOAD_UBYTE, atomic_load_zext_8_flat, i16>;
1683
+ defm : FlatLoadPats <FLAT_LOAD_USHORT, atomic_load_nonext_16_flat, i16>;
1684
+ defm : FlatLoadPats <FLAT_LOAD_SBYTE, atomic_load_sext_8_flat, i16>;
1647
1685
def : FlatStorePat <FLAT_STORE_BYTE, truncstorei8_flat, i16>;
1648
1686
def : FlatStorePat <FLAT_STORE_SHORT, store_flat, i16>;
1649
1687
def : FlatStorePat <FLAT_STORE_BYTE, atomic_store_8_flat, i16>;
1650
1688
def : FlatStorePat <FLAT_STORE_SHORT, atomic_store_16_flat, i16>;
1651
1689
}
1652
1690
1653
1691
let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts in {
1654
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, extloadi8_flat, i16>;
1655
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, zextloadi8_flat, i16>;
1656
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_SBYTE_D16_t16, sextloadi8_flat, i16>;
1657
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_SHORT_D16_t16, load_flat, i16>;
1658
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, atomic_load_aext_8_flat, i16>;
1659
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, atomic_load_zext_8_flat, i16>;
1660
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_SHORT_D16_t16, atomic_load_nonext_16_flat, i16>;
1661
- def : FlatLoadPat_D16_t16 <FLAT_LOAD_SBYTE_D16_t16, atomic_load_sext_8_flat, i16>;
1692
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, extloadi8_flat, i16>;
1693
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, zextloadi8_flat, i16>;
1694
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_SBYTE_D16_t16, sextloadi8_flat, i16>;
1695
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_SHORT_D16_t16, load_flat, i16>;
1696
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, atomic_load_aext_8_flat, i16>;
1697
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_UBYTE_D16_t16, atomic_load_zext_8_flat, i16>;
1698
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_SHORT_D16_t16, atomic_load_nonext_16_flat, i16>;
1699
+ defm : FlatLoadPats_D16_t16 <FLAT_LOAD_SBYTE_D16_t16, atomic_load_sext_8_flat, i16>;
1662
1700
def : FlatStorePat <FLAT_STORE_BYTE_t16, truncstorei8_flat, i16>;
1663
1701
def : FlatStorePat <FLAT_STORE_SHORT_t16, store_flat, i16>;
1664
1702
def : FlatStorePat <FLAT_STORE_BYTE_t16, atomic_store_8_flat, i16>;
1665
1703
def : FlatStorePat <FLAT_STORE_SHORT_t16, atomic_store_16_flat, i16>;
1666
1704
} // End let OtherPredicates = [D16PreservesUnusedBits, HasFlatAddressSpace], True16Predicate = UseRealTrue16Insts
1667
1705
1668
- def : FlatLoadPat <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
1669
- def : FlatLoadPat <FLAT_LOAD_DWORDX2, atomic_load_nonext_64_flat, i64>;
1706
+ defm : FlatLoadPats <FLAT_LOAD_DWORD, atomic_load_nonext_32_flat, i32>;
1707
+ defm : FlatLoadPats <FLAT_LOAD_DWORDX2, atomic_load_nonext_64_flat, i64>;
1670
1708
1671
1709
def : FlatStorePat <FLAT_STORE_BYTE, truncstorei8_flat, i32>;
1672
1710
def : FlatStorePat <FLAT_STORE_SHORT, truncstorei16_flat, i32>;
1673
1711
1674
1712
foreach vt = Reg32Types.types in {
1675
- def : FlatLoadPat <FLAT_LOAD_DWORD, load_flat, vt>;
1713
+ defm : FlatLoadPats <FLAT_LOAD_DWORD, load_flat, vt>;
1676
1714
def : FlatStorePat <FLAT_STORE_DWORD, store_flat, vt>;
1677
1715
}
1678
1716
@@ -1684,7 +1722,7 @@ def : FlatLoadPat <FLAT_LOAD_DWORDX2, load_flat, vt>;
1684
1722
def : FlatStorePat <FLAT_STORE_DWORDX3, store_flat, v3i32>;
1685
1723
1686
1724
foreach vt = VReg_128.RegTypes in {
1687
- def : FlatLoadPat <FLAT_LOAD_DWORDX4, load_flat, vt>;
1725
+ defm : FlatLoadPats <FLAT_LOAD_DWORDX4, load_flat, vt>;
1688
1726
def : FlatStorePat <FLAT_STORE_DWORDX4, store_flat, vt>;
1689
1727
}
1690
1728
0 commit comments