@@ -1870,5 +1870,149 @@ define void @caller_void_func_i32_v2float_inreg(i32 inreg %arg0, <2 x float> inr
1870
1870
ret void
1871
1871
}
1872
1872
1873
+ define void @void_func_bf16_inreg (bfloat inreg %arg0 ) #0 {
1874
+ ; GFX9-LABEL: void_func_bf16_inreg:
1875
+ ; GFX9: ; %bb.0:
1876
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1877
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1878
+ ; GFX9-NEXT: global_store_short_d16_hi v[0:1], v0, off
1879
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1880
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1881
+ ;
1882
+ ; GFX11-LABEL: void_func_bf16_inreg:
1883
+ ; GFX11: ; %bb.0:
1884
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1885
+ ; GFX11-NEXT: v_mov_b32_e32 v0, s0
1886
+ ; GFX11-NEXT: global_store_d16_hi_b16 v[0:1], v0, off
1887
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1888
+ store bfloat %arg0 , ptr addrspace (1 ) undef
1889
+ ret void
1890
+ }
1891
+
1892
+ define void @void_func_v2bf16_inreg (<2 x bfloat> inreg %arg0 ) #0 {
1893
+ ; GFX9-LABEL: void_func_v2bf16_inreg:
1894
+ ; GFX9: ; %bb.0:
1895
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1896
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1897
+ ; GFX9-NEXT: global_store_dword v[0:1], v0, off
1898
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1899
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1900
+ ;
1901
+ ; GFX11-LABEL: void_func_v2bf16_inreg:
1902
+ ; GFX11: ; %bb.0:
1903
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1904
+ ; GFX11-NEXT: v_mov_b32_e32 v0, s0
1905
+ ; GFX11-NEXT: global_store_b32 v[0:1], v0, off
1906
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1907
+ store <2 x bfloat> %arg0 , ptr addrspace (1 ) undef
1908
+ ret void
1909
+ }
1910
+
1911
+ define void @void_func_v3bf16_inreg (<3 x bfloat> inreg %arg0 ) #0 {
1912
+ ; GFX9-LABEL: void_func_v3bf16_inreg:
1913
+ ; GFX9: ; %bb.0:
1914
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1915
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s5
1916
+ ; GFX9-NEXT: global_store_short v[0:1], v0, off
1917
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1918
+ ; GFX9-NEXT: global_store_dword v[0:1], v0, off
1919
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1920
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1921
+ ;
1922
+ ; GFX11-LABEL: void_func_v3bf16_inreg:
1923
+ ; GFX11: ; %bb.0:
1924
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1925
+ ; GFX11-NEXT: v_dual_mov_b32 v0, s1 :: v_dual_mov_b32 v1, s0
1926
+ ; GFX11-NEXT: s_clause 0x1
1927
+ ; GFX11-NEXT: global_store_b16 v[0:1], v0, off
1928
+ ; GFX11-NEXT: global_store_b32 v[0:1], v1, off
1929
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1930
+ store <3 x bfloat> %arg0 , ptr addrspace (1 ) undef
1931
+ ret void
1932
+ }
1933
+
1934
+ define void @void_func_v4bf16_inreg (<4 x bfloat> inreg %arg0 ) #0 {
1935
+ ; GFX9-LABEL: void_func_v4bf16_inreg:
1936
+ ; GFX9: ; %bb.0:
1937
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1938
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1939
+ ; GFX9-NEXT: v_mov_b32_e32 v1, s5
1940
+ ; GFX9-NEXT: global_store_dwordx2 v[0:1], v[0:1], off
1941
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1942
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1943
+ ;
1944
+ ; GFX11-LABEL: void_func_v4bf16_inreg:
1945
+ ; GFX11: ; %bb.0:
1946
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1947
+ ; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1948
+ ; GFX11-NEXT: global_store_b64 v[0:1], v[0:1], off
1949
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1950
+ store <4 x bfloat> %arg0 , ptr addrspace (1 ) undef
1951
+ ret void
1952
+ }
1953
+
1954
+ define void @void_func_v8bf16_inreg (<8 x bfloat> inreg %arg0 ) #0 {
1955
+ ; GFX9-LABEL: void_func_v8bf16_inreg:
1956
+ ; GFX9: ; %bb.0:
1957
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1958
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1959
+ ; GFX9-NEXT: v_mov_b32_e32 v1, s5
1960
+ ; GFX9-NEXT: v_mov_b32_e32 v2, s6
1961
+ ; GFX9-NEXT: v_mov_b32_e32 v3, s7
1962
+ ; GFX9-NEXT: global_store_dwordx4 v[0:1], v[0:3], off
1963
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1964
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1965
+ ;
1966
+ ; GFX11-LABEL: void_func_v8bf16_inreg:
1967
+ ; GFX11: ; %bb.0:
1968
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1969
+ ; GFX11-NEXT: v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1970
+ ; GFX11-NEXT: v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s3
1971
+ ; GFX11-NEXT: global_store_b128 v[0:1], v[0:3], off
1972
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
1973
+ store <8 x bfloat> %arg0 , ptr addrspace (1 ) undef
1974
+ ret void
1975
+ }
1976
+
1977
+ define void @void_func_v16bf16_inreg (<16 x bfloat> inreg %arg0 ) #0 {
1978
+ ; GFX9-LABEL: void_func_v16bf16_inreg:
1979
+ ; GFX9: ; %bb.0:
1980
+ ; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1981
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s8
1982
+ ; GFX9-NEXT: v_mov_b32_e32 v1, s9
1983
+ ; GFX9-NEXT: v_mov_b32_e32 v2, s10
1984
+ ; GFX9-NEXT: v_mov_b32_e32 v3, s11
1985
+ ; GFX9-NEXT: global_store_dwordx4 v[0:1], v[0:3], off
1986
+ ; GFX9-NEXT: s_nop 0
1987
+ ; GFX9-NEXT: v_mov_b32_e32 v0, s4
1988
+ ; GFX9-NEXT: v_mov_b32_e32 v1, s5
1989
+ ; GFX9-NEXT: v_mov_b32_e32 v2, s6
1990
+ ; GFX9-NEXT: v_mov_b32_e32 v3, s7
1991
+ ; GFX9-NEXT: global_store_dwordx4 v[0:1], v[0:3], off
1992
+ ; GFX9-NEXT: s_waitcnt vmcnt(0)
1993
+ ; GFX9-NEXT: s_setpc_b64 s[30:31]
1994
+ ;
1995
+ ; GFX11-LABEL: void_func_v16bf16_inreg:
1996
+ ; GFX11: ; %bb.0:
1997
+ ; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1998
+ ; GFX11-NEXT: v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
1999
+ ; GFX11-NEXT: v_dual_mov_b32 v2, s6 :: v_dual_mov_b32 v3, s7
2000
+ ; GFX11-NEXT: v_dual_mov_b32 v4, s0 :: v_dual_mov_b32 v5, s1
2001
+ ; GFX11-NEXT: v_dual_mov_b32 v6, s2 :: v_dual_mov_b32 v7, s3
2002
+ ; GFX11-NEXT: s_clause 0x1
2003
+ ; GFX11-NEXT: global_store_b128 v[0:1], v[0:3], off
2004
+ ; GFX11-NEXT: global_store_b128 v[0:1], v[4:7], off
2005
+ ; GFX11-NEXT: s_setpc_b64 s[30:31]
2006
+ store <16 x bfloat> %arg0 , ptr addrspace (1 ) undef
2007
+ ret void
2008
+ }
2009
+
1873
2010
attributes #0 = { nounwind }
1874
2011
attributes #1 = { nounwind noinline }
2012
+
2013
+
2014
+
2015
+
2016
+
2017
+
2018
+
0 commit comments