@@ -1787,45 +1787,46 @@ def FLAT_STORE_DWORDX2_ci : FLAT_Real_ci <0x1d, FLAT_STORE_DWORDX2>;
1787
1787
def FLAT_STORE_DWORDX4_ci : FLAT_Real_ci <0x1e, FLAT_STORE_DWORDX4>;
1788
1788
def FLAT_STORE_DWORDX3_ci : FLAT_Real_ci <0x1f, FLAT_STORE_DWORDX3>;
1789
1789
1790
- multiclass FLAT_Real_Atomics_ci <bits<7> op, FLAT_Pseudo ps> {
1790
+ multiclass FLAT_Real_Atomics_ci <bits<7> op> {
1791
+ defvar ps = !cast<FLAT_Pseudo>(NAME);
1791
1792
def _ci : FLAT_Real_ci<op, !cast<FLAT_Pseudo>(ps.PseudoInstr)>;
1792
1793
def _RTN_ci : FLAT_Real_ci<op, !cast<FLAT_Pseudo>(ps.PseudoInstr # "_RTN")>;
1793
1794
}
1794
1795
1795
- defm FLAT_ATOMIC_SWAP : FLAT_Real_Atomics_ci <0x30, FLAT_ATOMIC_SWAP >;
1796
- defm FLAT_ATOMIC_CMPSWAP : FLAT_Real_Atomics_ci <0x31, FLAT_ATOMIC_CMPSWAP >;
1797
- defm FLAT_ATOMIC_ADD : FLAT_Real_Atomics_ci <0x32, FLAT_ATOMIC_ADD >;
1798
- defm FLAT_ATOMIC_SUB : FLAT_Real_Atomics_ci <0x33, FLAT_ATOMIC_SUB >;
1799
- defm FLAT_ATOMIC_SMIN : FLAT_Real_Atomics_ci <0x35, FLAT_ATOMIC_SMIN >;
1800
- defm FLAT_ATOMIC_UMIN : FLAT_Real_Atomics_ci <0x36, FLAT_ATOMIC_UMIN >;
1801
- defm FLAT_ATOMIC_SMAX : FLAT_Real_Atomics_ci <0x37, FLAT_ATOMIC_SMAX >;
1802
- defm FLAT_ATOMIC_UMAX : FLAT_Real_Atomics_ci <0x38, FLAT_ATOMIC_UMAX >;
1803
- defm FLAT_ATOMIC_AND : FLAT_Real_Atomics_ci <0x39, FLAT_ATOMIC_AND >;
1804
- defm FLAT_ATOMIC_OR : FLAT_Real_Atomics_ci <0x3a, FLAT_ATOMIC_OR >;
1805
- defm FLAT_ATOMIC_XOR : FLAT_Real_Atomics_ci <0x3b, FLAT_ATOMIC_XOR >;
1806
- defm FLAT_ATOMIC_INC : FLAT_Real_Atomics_ci <0x3c, FLAT_ATOMIC_INC >;
1807
- defm FLAT_ATOMIC_DEC : FLAT_Real_Atomics_ci <0x3d, FLAT_ATOMIC_DEC >;
1808
- defm FLAT_ATOMIC_SWAP_X2 : FLAT_Real_Atomics_ci <0x50, FLAT_ATOMIC_SWAP_X2 >;
1809
- defm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_Real_Atomics_ci <0x51, FLAT_ATOMIC_CMPSWAP_X2 >;
1810
- defm FLAT_ATOMIC_ADD_X2 : FLAT_Real_Atomics_ci <0x52, FLAT_ATOMIC_ADD_X2 >;
1811
- defm FLAT_ATOMIC_SUB_X2 : FLAT_Real_Atomics_ci <0x53, FLAT_ATOMIC_SUB_X2 >;
1812
- defm FLAT_ATOMIC_SMIN_X2 : FLAT_Real_Atomics_ci <0x55, FLAT_ATOMIC_SMIN_X2 >;
1813
- defm FLAT_ATOMIC_UMIN_X2 : FLAT_Real_Atomics_ci <0x56, FLAT_ATOMIC_UMIN_X2 >;
1814
- defm FLAT_ATOMIC_SMAX_X2 : FLAT_Real_Atomics_ci <0x57, FLAT_ATOMIC_SMAX_X2 >;
1815
- defm FLAT_ATOMIC_UMAX_X2 : FLAT_Real_Atomics_ci <0x58, FLAT_ATOMIC_UMAX_X2 >;
1816
- defm FLAT_ATOMIC_AND_X2 : FLAT_Real_Atomics_ci <0x59, FLAT_ATOMIC_AND_X2 >;
1817
- defm FLAT_ATOMIC_OR_X2 : FLAT_Real_Atomics_ci <0x5a, FLAT_ATOMIC_OR_X2 >;
1818
- defm FLAT_ATOMIC_XOR_X2 : FLAT_Real_Atomics_ci <0x5b, FLAT_ATOMIC_XOR_X2 >;
1819
- defm FLAT_ATOMIC_INC_X2 : FLAT_Real_Atomics_ci <0x5c, FLAT_ATOMIC_INC_X2 >;
1820
- defm FLAT_ATOMIC_DEC_X2 : FLAT_Real_Atomics_ci <0x5d, FLAT_ATOMIC_DEC_X2 >;
1796
+ defm FLAT_ATOMIC_SWAP : FLAT_Real_Atomics_ci <0x30>;
1797
+ defm FLAT_ATOMIC_CMPSWAP : FLAT_Real_Atomics_ci <0x31>;
1798
+ defm FLAT_ATOMIC_ADD : FLAT_Real_Atomics_ci <0x32>;
1799
+ defm FLAT_ATOMIC_SUB : FLAT_Real_Atomics_ci <0x33>;
1800
+ defm FLAT_ATOMIC_SMIN : FLAT_Real_Atomics_ci <0x35>;
1801
+ defm FLAT_ATOMIC_UMIN : FLAT_Real_Atomics_ci <0x36>;
1802
+ defm FLAT_ATOMIC_SMAX : FLAT_Real_Atomics_ci <0x37>;
1803
+ defm FLAT_ATOMIC_UMAX : FLAT_Real_Atomics_ci <0x38>;
1804
+ defm FLAT_ATOMIC_AND : FLAT_Real_Atomics_ci <0x39>;
1805
+ defm FLAT_ATOMIC_OR : FLAT_Real_Atomics_ci <0x3a>;
1806
+ defm FLAT_ATOMIC_XOR : FLAT_Real_Atomics_ci <0x3b>;
1807
+ defm FLAT_ATOMIC_INC : FLAT_Real_Atomics_ci <0x3c>;
1808
+ defm FLAT_ATOMIC_DEC : FLAT_Real_Atomics_ci <0x3d>;
1809
+ defm FLAT_ATOMIC_SWAP_X2 : FLAT_Real_Atomics_ci <0x50>;
1810
+ defm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_Real_Atomics_ci <0x51>;
1811
+ defm FLAT_ATOMIC_ADD_X2 : FLAT_Real_Atomics_ci <0x52>;
1812
+ defm FLAT_ATOMIC_SUB_X2 : FLAT_Real_Atomics_ci <0x53>;
1813
+ defm FLAT_ATOMIC_SMIN_X2 : FLAT_Real_Atomics_ci <0x55>;
1814
+ defm FLAT_ATOMIC_UMIN_X2 : FLAT_Real_Atomics_ci <0x56>;
1815
+ defm FLAT_ATOMIC_SMAX_X2 : FLAT_Real_Atomics_ci <0x57>;
1816
+ defm FLAT_ATOMIC_UMAX_X2 : FLAT_Real_Atomics_ci <0x58>;
1817
+ defm FLAT_ATOMIC_AND_X2 : FLAT_Real_Atomics_ci <0x59>;
1818
+ defm FLAT_ATOMIC_OR_X2 : FLAT_Real_Atomics_ci <0x5a>;
1819
+ defm FLAT_ATOMIC_XOR_X2 : FLAT_Real_Atomics_ci <0x5b>;
1820
+ defm FLAT_ATOMIC_INC_X2 : FLAT_Real_Atomics_ci <0x5c>;
1821
+ defm FLAT_ATOMIC_DEC_X2 : FLAT_Real_Atomics_ci <0x5d>;
1821
1822
1822
1823
// CI Only flat instructions
1823
- defm FLAT_ATOMIC_FCMPSWAP : FLAT_Real_Atomics_ci <0x3e, FLAT_ATOMIC_FCMPSWAP >;
1824
- defm FLAT_ATOMIC_FMIN : FLAT_Real_Atomics_ci <0x3f, FLAT_ATOMIC_FMIN >;
1825
- defm FLAT_ATOMIC_FMAX : FLAT_Real_Atomics_ci <0x40, FLAT_ATOMIC_FMAX >;
1826
- defm FLAT_ATOMIC_FCMPSWAP_X2 : FLAT_Real_Atomics_ci <0x5e, FLAT_ATOMIC_FCMPSWAP_X2 >;
1827
- defm FLAT_ATOMIC_FMIN_X2 : FLAT_Real_Atomics_ci <0x5f, FLAT_ATOMIC_FMIN_X2 >;
1828
- defm FLAT_ATOMIC_FMAX_X2 : FLAT_Real_Atomics_ci <0x60, FLAT_ATOMIC_FMAX_X2 >;
1824
+ defm FLAT_ATOMIC_FCMPSWAP : FLAT_Real_Atomics_ci <0x3e>;
1825
+ defm FLAT_ATOMIC_FMIN : FLAT_Real_Atomics_ci <0x3f>;
1826
+ defm FLAT_ATOMIC_FMAX : FLAT_Real_Atomics_ci <0x40>;
1827
+ defm FLAT_ATOMIC_FCMPSWAP_X2 : FLAT_Real_Atomics_ci <0x5e>;
1828
+ defm FLAT_ATOMIC_FMIN_X2 : FLAT_Real_Atomics_ci <0x5f>;
1829
+ defm FLAT_ATOMIC_FMAX_X2 : FLAT_Real_Atomics_ci <0x60>;
1829
1830
1830
1831
1831
1832
//===----------------------------------------------------------------------===//
@@ -1925,8 +1926,9 @@ def FLAT_LOAD_SBYTE_D16_HI_vi : FLAT_Real_vi <0x23, FLAT_LOAD_SBYTE_D16_HI>;
1925
1926
def FLAT_LOAD_SHORT_D16_vi : FLAT_Real_vi <0x24, FLAT_LOAD_SHORT_D16>;
1926
1927
def FLAT_LOAD_SHORT_D16_HI_vi : FLAT_Real_vi <0x25, FLAT_LOAD_SHORT_D16_HI>;
1927
1928
1928
- multiclass FLAT_Real_Atomics_vi <bits<7> op, FLAT_Pseudo ps,
1929
+ multiclass FLAT_Real_Atomics_vi <bits<7> op,
1929
1930
bit has_sccb = !cast<FLAT_Pseudo>(NAME).has_sccb> {
1931
+ defvar ps = !cast<FLAT_Pseudo>(NAME);
1930
1932
def _vi : FLAT_Real_vi<op, !cast<FLAT_Pseudo>(ps.PseudoInstr), has_sccb>;
1931
1933
def _RTN_vi : FLAT_Real_vi<op, !cast<FLAT_Pseudo>(ps.PseudoInstr # "_RTN"), has_sccb>;
1932
1934
}
@@ -1939,32 +1941,32 @@ multiclass FLAT_Global_Real_Atomics_vi<bits<7> op,
1939
1941
}
1940
1942
1941
1943
1942
- defm FLAT_ATOMIC_SWAP : FLAT_Real_Atomics_vi <0x40, FLAT_ATOMIC_SWAP >;
1943
- defm FLAT_ATOMIC_CMPSWAP : FLAT_Real_Atomics_vi <0x41, FLAT_ATOMIC_CMPSWAP >;
1944
- defm FLAT_ATOMIC_ADD : FLAT_Real_Atomics_vi <0x42, FLAT_ATOMIC_ADD >;
1945
- defm FLAT_ATOMIC_SUB : FLAT_Real_Atomics_vi <0x43, FLAT_ATOMIC_SUB >;
1946
- defm FLAT_ATOMIC_SMIN : FLAT_Real_Atomics_vi <0x44, FLAT_ATOMIC_SMIN >;
1947
- defm FLAT_ATOMIC_UMIN : FLAT_Real_Atomics_vi <0x45, FLAT_ATOMIC_UMIN >;
1948
- defm FLAT_ATOMIC_SMAX : FLAT_Real_Atomics_vi <0x46, FLAT_ATOMIC_SMAX >;
1949
- defm FLAT_ATOMIC_UMAX : FLAT_Real_Atomics_vi <0x47, FLAT_ATOMIC_UMAX >;
1950
- defm FLAT_ATOMIC_AND : FLAT_Real_Atomics_vi <0x48, FLAT_ATOMIC_AND >;
1951
- defm FLAT_ATOMIC_OR : FLAT_Real_Atomics_vi <0x49, FLAT_ATOMIC_OR >;
1952
- defm FLAT_ATOMIC_XOR : FLAT_Real_Atomics_vi <0x4a, FLAT_ATOMIC_XOR >;
1953
- defm FLAT_ATOMIC_INC : FLAT_Real_Atomics_vi <0x4b, FLAT_ATOMIC_INC >;
1954
- defm FLAT_ATOMIC_DEC : FLAT_Real_Atomics_vi <0x4c, FLAT_ATOMIC_DEC >;
1955
- defm FLAT_ATOMIC_SWAP_X2 : FLAT_Real_Atomics_vi <0x60, FLAT_ATOMIC_SWAP_X2 >;
1956
- defm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_Real_Atomics_vi <0x61, FLAT_ATOMIC_CMPSWAP_X2 >;
1957
- defm FLAT_ATOMIC_ADD_X2 : FLAT_Real_Atomics_vi <0x62, FLAT_ATOMIC_ADD_X2 >;
1958
- defm FLAT_ATOMIC_SUB_X2 : FLAT_Real_Atomics_vi <0x63, FLAT_ATOMIC_SUB_X2 >;
1959
- defm FLAT_ATOMIC_SMIN_X2 : FLAT_Real_Atomics_vi <0x64, FLAT_ATOMIC_SMIN_X2 >;
1960
- defm FLAT_ATOMIC_UMIN_X2 : FLAT_Real_Atomics_vi <0x65, FLAT_ATOMIC_UMIN_X2 >;
1961
- defm FLAT_ATOMIC_SMAX_X2 : FLAT_Real_Atomics_vi <0x66, FLAT_ATOMIC_SMAX_X2 >;
1962
- defm FLAT_ATOMIC_UMAX_X2 : FLAT_Real_Atomics_vi <0x67, FLAT_ATOMIC_UMAX_X2 >;
1963
- defm FLAT_ATOMIC_AND_X2 : FLAT_Real_Atomics_vi <0x68, FLAT_ATOMIC_AND_X2 >;
1964
- defm FLAT_ATOMIC_OR_X2 : FLAT_Real_Atomics_vi <0x69, FLAT_ATOMIC_OR_X2 >;
1965
- defm FLAT_ATOMIC_XOR_X2 : FLAT_Real_Atomics_vi <0x6a, FLAT_ATOMIC_XOR_X2 >;
1966
- defm FLAT_ATOMIC_INC_X2 : FLAT_Real_Atomics_vi <0x6b, FLAT_ATOMIC_INC_X2 >;
1967
- defm FLAT_ATOMIC_DEC_X2 : FLAT_Real_Atomics_vi <0x6c, FLAT_ATOMIC_DEC_X2 >;
1944
+ defm FLAT_ATOMIC_SWAP : FLAT_Real_Atomics_vi <0x40>;
1945
+ defm FLAT_ATOMIC_CMPSWAP : FLAT_Real_Atomics_vi <0x41>;
1946
+ defm FLAT_ATOMIC_ADD : FLAT_Real_Atomics_vi <0x42>;
1947
+ defm FLAT_ATOMIC_SUB : FLAT_Real_Atomics_vi <0x43>;
1948
+ defm FLAT_ATOMIC_SMIN : FLAT_Real_Atomics_vi <0x44>;
1949
+ defm FLAT_ATOMIC_UMIN : FLAT_Real_Atomics_vi <0x45>;
1950
+ defm FLAT_ATOMIC_SMAX : FLAT_Real_Atomics_vi <0x46>;
1951
+ defm FLAT_ATOMIC_UMAX : FLAT_Real_Atomics_vi <0x47>;
1952
+ defm FLAT_ATOMIC_AND : FLAT_Real_Atomics_vi <0x48>;
1953
+ defm FLAT_ATOMIC_OR : FLAT_Real_Atomics_vi <0x49>;
1954
+ defm FLAT_ATOMIC_XOR : FLAT_Real_Atomics_vi <0x4a>;
1955
+ defm FLAT_ATOMIC_INC : FLAT_Real_Atomics_vi <0x4b>;
1956
+ defm FLAT_ATOMIC_DEC : FLAT_Real_Atomics_vi <0x4c>;
1957
+ defm FLAT_ATOMIC_SWAP_X2 : FLAT_Real_Atomics_vi <0x60>;
1958
+ defm FLAT_ATOMIC_CMPSWAP_X2 : FLAT_Real_Atomics_vi <0x61>;
1959
+ defm FLAT_ATOMIC_ADD_X2 : FLAT_Real_Atomics_vi <0x62>;
1960
+ defm FLAT_ATOMIC_SUB_X2 : FLAT_Real_Atomics_vi <0x63>;
1961
+ defm FLAT_ATOMIC_SMIN_X2 : FLAT_Real_Atomics_vi <0x64>;
1962
+ defm FLAT_ATOMIC_UMIN_X2 : FLAT_Real_Atomics_vi <0x65>;
1963
+ defm FLAT_ATOMIC_SMAX_X2 : FLAT_Real_Atomics_vi <0x66>;
1964
+ defm FLAT_ATOMIC_UMAX_X2 : FLAT_Real_Atomics_vi <0x67>;
1965
+ defm FLAT_ATOMIC_AND_X2 : FLAT_Real_Atomics_vi <0x68>;
1966
+ defm FLAT_ATOMIC_OR_X2 : FLAT_Real_Atomics_vi <0x69>;
1967
+ defm FLAT_ATOMIC_XOR_X2 : FLAT_Real_Atomics_vi <0x6a>;
1968
+ defm FLAT_ATOMIC_INC_X2 : FLAT_Real_Atomics_vi <0x6b>;
1969
+ defm FLAT_ATOMIC_DEC_X2 : FLAT_Real_Atomics_vi <0x6c>;
1968
1970
1969
1971
defm GLOBAL_LOAD_UBYTE : FLAT_Real_AllAddr_vi <0x10>;
1970
1972
defm GLOBAL_LOAD_SBYTE : FLAT_Real_AllAddr_vi <0x11>;
@@ -2060,9 +2062,9 @@ let SubtargetPredicate = isGFX8GFX9NotGFX940 in {
2060
2062
}
2061
2063
2062
2064
let SubtargetPredicate = isGFX90AOnly in {
2063
- defm FLAT_ATOMIC_ADD_F64 : FLAT_Real_Atomics_vi<0x4f, FLAT_ATOMIC_ADD_F64, 0>;
2064
- defm FLAT_ATOMIC_MIN_F64 : FLAT_Real_Atomics_vi<0x50, FLAT_ATOMIC_MIN_F64, 0>;
2065
- defm FLAT_ATOMIC_MAX_F64 : FLAT_Real_Atomics_vi<0x51, FLAT_ATOMIC_MAX_F64, 0>;
2065
+ defm FLAT_ATOMIC_ADD_F64 : FLAT_Real_Atomics_vi<0x4f, 0>;
2066
+ defm FLAT_ATOMIC_MIN_F64 : FLAT_Real_Atomics_vi<0x50, 0>;
2067
+ defm FLAT_ATOMIC_MAX_F64 : FLAT_Real_Atomics_vi<0x51, 0>;
2066
2068
defm GLOBAL_ATOMIC_ADD_F64 : FLAT_Global_Real_Atomics_vi<0x4f, 0>;
2067
2069
defm GLOBAL_ATOMIC_MIN_F64 : FLAT_Global_Real_Atomics_vi<0x50, 0>;
2068
2070
defm GLOBAL_ATOMIC_MAX_F64 : FLAT_Global_Real_Atomics_vi<0x51, 0>;
@@ -2073,7 +2075,8 @@ multiclass FLAT_Real_AllAddr_gfx940<bits<7> op> {
2073
2075
def _SADDR_gfx940 : FLAT_Real_gfx940<op, !cast<FLAT_Pseudo>(NAME#"_SADDR")>;
2074
2076
}
2075
2077
2076
- multiclass FLAT_Real_Atomics_gfx940 <bits<7> op, FLAT_Pseudo ps> {
2078
+ multiclass FLAT_Real_Atomics_gfx940 <bits<7> op> {
2079
+ defvar ps = !cast<FLAT_Pseudo>(NAME);
2077
2080
def _gfx940 : FLAT_Real_gfx940<op, !cast<FLAT_Pseudo>(ps.PseudoInstr)>;
2078
2081
def _RTN_gfx940 : FLAT_Real_gfx940<op, !cast<FLAT_Pseudo>(ps.PseudoInstr # "_RTN")>;
2079
2082
}
@@ -2089,15 +2092,15 @@ let SubtargetPredicate = isGFX940Plus in {
2089
2092
defm GLOBAL_ATOMIC_ADD_F32 : FLAT_Global_Real_Atomics_gfx940 <0x04d>;
2090
2093
defm GLOBAL_ATOMIC_PK_ADD_F16 : FLAT_Global_Real_Atomics_gfx940 <0x04e>;
2091
2094
2092
- defm FLAT_ATOMIC_ADD_F64 : FLAT_Real_Atomics_gfx940<0x4f, FLAT_ATOMIC_ADD_F64 >;
2093
- defm FLAT_ATOMIC_MIN_F64 : FLAT_Real_Atomics_gfx940<0x50, FLAT_ATOMIC_MIN_F64 >;
2094
- defm FLAT_ATOMIC_MAX_F64 : FLAT_Real_Atomics_gfx940<0x51, FLAT_ATOMIC_MAX_F64 >;
2095
+ defm FLAT_ATOMIC_ADD_F64 : FLAT_Real_Atomics_gfx940<0x4f>;
2096
+ defm FLAT_ATOMIC_MIN_F64 : FLAT_Real_Atomics_gfx940<0x50>;
2097
+ defm FLAT_ATOMIC_MAX_F64 : FLAT_Real_Atomics_gfx940<0x51>;
2095
2098
defm GLOBAL_ATOMIC_ADD_F64 : FLAT_Global_Real_Atomics_gfx940<0x4f>;
2096
2099
defm GLOBAL_ATOMIC_MIN_F64 : FLAT_Global_Real_Atomics_gfx940<0x50>;
2097
2100
defm GLOBAL_ATOMIC_MAX_F64 : FLAT_Global_Real_Atomics_gfx940<0x51>;
2098
- defm FLAT_ATOMIC_ADD_F32 : FLAT_Real_Atomics_vi<0x4d, FLAT_ATOMIC_ADD_F32 >;
2099
- defm FLAT_ATOMIC_PK_ADD_F16 : FLAT_Real_Atomics_vi<0x4e, FLAT_ATOMIC_PK_ADD_F16 >;
2100
- defm FLAT_ATOMIC_PK_ADD_BF16 : FLAT_Real_Atomics_vi<0x52, FLAT_ATOMIC_PK_ADD_BF16 >;
2101
+ defm FLAT_ATOMIC_ADD_F32 : FLAT_Real_Atomics_vi<0x4d>;
2102
+ defm FLAT_ATOMIC_PK_ADD_F16 : FLAT_Real_Atomics_vi<0x4e>;
2103
+ defm FLAT_ATOMIC_PK_ADD_BF16 : FLAT_Real_Atomics_vi<0x52>;
2101
2104
defm GLOBAL_ATOMIC_PK_ADD_BF16 : FLAT_Global_Real_Atomics_vi<0x52>;
2102
2105
} // End SubtargetPredicate = isGFX940Plus
2103
2106
0 commit comments