[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.smfmac.gfx950.ll
blob0a330e91f82068d5f1a94fc444585eb2133a7f9f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx950 -global-isel=0 < %s | FileCheck -enable-var-scope --check-prefixes=GCN,SDAG %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx950 -global-isel=1 < %s | FileCheck -enable-var-scope --check-prefixes=GCN,GISEL %s
5 declare i32 @llvm.amdgcn.workitem.id.x()
7 ; --------------------------------------------------------------------
8 ; llvm.amdgcn.smfmac.f32.16x16x64.f16
9 ; --------------------------------------------------------------------
11 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half>, <16 x half>, <4 x float>, i32, i32 immarg, i32 immarg)
13 define amdgpu_kernel void @test_smfmac_f32_16x16x64_f16__vgpr(ptr addrspace(1) %arg, <8 x half> %a, <16 x half> %b, i32 %idx) #0 {
14 ; SDAG-LABEL: test_smfmac_f32_16x16x64_f16__vgpr:
15 ; SDAG:       ; %bb.0: ; %bb
16 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
17 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
18 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
19 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
20 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
21 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
22 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
23 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
24 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
25 ; SDAG-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
26 ; SDAG-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
27 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
28 ; SDAG-NEXT:    v_mov_b64_e32 v[0:1], s[8:9]
29 ; SDAG-NEXT:    v_mov_b64_e32 v[2:3], s[10:11]
30 ; SDAG-NEXT:    v_mov_b64_e32 v[4:5], s[12:13]
31 ; SDAG-NEXT:    v_mov_b64_e32 v[6:7], s[14:15]
32 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
33 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
34 ; SDAG-NEXT:    s_nop 0
35 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_f16 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
36 ; SDAG-NEXT:    s_nop 6
37 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
38 ; SDAG-NEXT:    s_endpgm
40 ; GISEL-LABEL: test_smfmac_f32_16x16x64_f16__vgpr:
41 ; GISEL:       ; %bb.0: ; %bb
42 ; GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
43 ; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
44 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
45 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
46 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
47 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
48 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
49 ; GISEL-NEXT:    s_load_dword s16, s[4:5], 0x64
50 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
51 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
52 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
53 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[8:9]
54 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[10:11]
55 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[12:13]
56 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[14:15]
57 ; GISEL-NEXT:    v_mov_b32_e32 v16, s16
58 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
59 ; GISEL-NEXT:    s_nop 0
60 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_f16 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
61 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
62 ; GISEL-NEXT:    s_nop 5
63 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[6:7]
64 ; GISEL-NEXT:    s_endpgm
65 bb:
66   %id = call i32 @llvm.amdgcn.workitem.id.x()
67   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
68   %in.1 = load <4 x float>, ptr addrspace(1) %gep
69   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half> %a, <16 x half> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
70   store <4 x float> %mai.1, ptr addrspace(1) %arg
71   ret void
74 define <4 x float> @test_smfmac_f32_16x16x64_f16(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3) {
75 ; SDAG-LABEL: test_smfmac_f32_16x16x64_f16:
76 ; SDAG:       ; %bb.0:
77 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
78 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
79 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
80 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
81 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
82 ; SDAG-NEXT:    s_nop 1
83 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_f16 a[0:3], v[0:3], v[4:11], v16
84 ; SDAG-NEXT:    s_nop 6
85 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
86 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
87 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
88 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
89 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
91 ; GISEL-LABEL: test_smfmac_f32_16x16x64_f16:
92 ; GISEL:       ; %bb.0:
93 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_f16 v[12:15], v[0:3], v[4:11], v16
95 ; GISEL-NEXT:    s_nop 6
96 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
97 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
98 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
99 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
100 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
101   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
102   ret <4 x float> %result
105 define <4 x float> @test_smfmac_f32_16x16x64_f16__flags0(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3) {
106 ; SDAG-LABEL: test_smfmac_f32_16x16x64_f16__flags0:
107 ; SDAG:       ; %bb.0:
108 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
109 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
110 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
111 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
112 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
113 ; SDAG-NEXT:    s_nop 1
114 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_f16 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
115 ; SDAG-NEXT:    s_nop 6
116 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
117 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
118 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
119 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
120 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
122 ; GISEL-LABEL: test_smfmac_f32_16x16x64_f16__flags0:
123 ; GISEL:       ; %bb.0:
124 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
125 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_f16 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
126 ; GISEL-NEXT:    s_nop 6
127 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
128 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
129 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
130 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
131 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
132   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
133   ret <4 x float> %result
136 define <4 x float> @test_smfmac_f32_16x16x64_f16__flags1(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3) {
137 ; SDAG-LABEL: test_smfmac_f32_16x16x64_f16__flags1:
138 ; SDAG:       ; %bb.0:
139 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
140 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
141 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
142 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
143 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
144 ; SDAG-NEXT:    s_nop 1
145 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_f16 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
146 ; SDAG-NEXT:    s_nop 6
147 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
148 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
149 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
150 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
151 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
153 ; GISEL-LABEL: test_smfmac_f32_16x16x64_f16__flags1:
154 ; GISEL:       ; %bb.0:
155 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
156 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_f16 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
157 ; GISEL-NEXT:    s_nop 6
158 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
159 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
160 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
161 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
162 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
163   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
164   ret <4 x float> %result
167 define <4 x float> @test_smfmac_f32_16x16x64_f16__sgpr(<8 x half> inreg %arg0, <16 x half> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
168 ; SDAG-LABEL: test_smfmac_f32_16x16x64_f16__sgpr:
169 ; SDAG:       ; %bb.0:
170 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
171 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
172 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
173 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
174 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
175 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
176 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
177 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
178 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
179 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
180 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
181 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
182 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
183 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
184 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
185 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
186 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
187 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
188 ; SDAG-NEXT:    s_nop 1
189 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_f16 a[0:3], v[8:11], v[0:7], v12
190 ; SDAG-NEXT:    s_nop 6
191 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
192 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
193 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
194 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
195 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
197 ; GISEL-LABEL: test_smfmac_f32_16x16x64_f16__sgpr:
198 ; GISEL:       ; %bb.0:
199 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
200 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
201 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
202 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
203 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
204 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
205 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
206 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
207 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
208 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
209 ; GISEL-NEXT:    s_nop 1
210 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_f16 v[0:3], v[12:15], v[4:11], v16
211 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
212   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.f16(<8 x half> %arg0, <16 x half> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
213   ret <4 x float> %result
216 ; --------------------------------------------------------------------
217 ; llvm.amdgcn.smfmac.f32.32x32x32.f16
218 ; --------------------------------------------------------------------
220 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half>, <16 x half>, <16 x float>, i32, i32 immarg, i32 immarg)
222 define amdgpu_kernel void @test_smfmac_f32_32x32x32_f16__vgpr(ptr addrspace(1) %arg, <8 x half> %a, <16 x half> %b, i32 %idx) #0 {
223 ; SDAG-LABEL: test_smfmac_f32_32x32x32_f16__vgpr:
224 ; SDAG:       ; %bb.0: ; %bb
225 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
226 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
227 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
228 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
229 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
230 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[6:7] offset:48
231 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[6:7] offset:32
232 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[6:7] offset:16
233 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[6:7]
234 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
235 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
236 ; SDAG-NEXT:    v_mov_b64_e32 v[26:27], s[2:3]
237 ; SDAG-NEXT:    v_mov_b64_e32 v[24:25], s[0:1]
238 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
239 ; SDAG-NEXT:    v_mov_b64_e32 v[22:23], s[14:15]
240 ; SDAG-NEXT:    v_mov_b64_e32 v[20:21], s[12:13]
241 ; SDAG-NEXT:    v_mov_b64_e32 v[18:19], s[10:11]
242 ; SDAG-NEXT:    v_mov_b64_e32 v[16:17], s[8:9]
243 ; SDAG-NEXT:    v_mov_b32_e32 v28, s16
244 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
245 ; SDAG-NEXT:    s_nop 0
246 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
247 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
248 ; SDAG-NEXT:    s_nop 7
249 ; SDAG-NEXT:    s_nop 1
250 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7] offset:32
251 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[6:7] offset:48
252 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[6:7]
253 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[6:7] offset:16
254 ; SDAG-NEXT:    s_endpgm
256 ; GISEL-LABEL: test_smfmac_f32_32x32x32_f16__vgpr:
257 ; GISEL:       ; %bb.0: ; %bb
258 ; GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
259 ; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
260 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
261 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
262 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
263 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[6:7]
264 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[6:7] offset:16
265 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[6:7] offset:32
266 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[6:7] offset:48
267 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
268 ; GISEL-NEXT:    s_load_dword s16, s[4:5], 0x64
269 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[2:3]
270 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[0:1]
271 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
272 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[14:15]
273 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[12:13]
274 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[10:11]
275 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[8:9]
276 ; GISEL-NEXT:    v_mov_b32_e32 v28, s16
277 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
278 ; GISEL-NEXT:    s_nop 0
279 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
280 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
281 ; GISEL-NEXT:    s_nop 7
282 ; GISEL-NEXT:    s_nop 1
283 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[6:7]
284 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[6:7] offset:16
285 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7] offset:32
286 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[6:7] offset:48
287 ; GISEL-NEXT:    s_endpgm
289   %id = call i32 @llvm.amdgcn.workitem.id.x()
290   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
291   %in.1 = load <16 x float>, ptr addrspace(1) %gep
292   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half> %a, <16 x half> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
293   store <16 x float> %mai.1, ptr addrspace(1) %arg
294   ret void
297 define <16 x float> @test_smfmac_f32_32x32x32_f16(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3) {
298 ; SDAG-LABEL: test_smfmac_f32_32x32x32_f16:
299 ; SDAG:       ; %bb.0:
300 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
301 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
302 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
303 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
304 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
305 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
306 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
307 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
308 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
309 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
310 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
311 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
312 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
313 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
314 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
315 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
316 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
317 ; SDAG-NEXT:    s_nop 1
318 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_f16 a[0:15], v[0:3], v[4:11], v28
319 ; SDAG-NEXT:    s_nop 7
320 ; SDAG-NEXT:    s_nop 2
321 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
322 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
323 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
324 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
325 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
326 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
327 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
328 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
329 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
330 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
331 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
332 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
333 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
334 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
335 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
336 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
337 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
339 ; GISEL-LABEL: test_smfmac_f32_32x32x32_f16:
340 ; GISEL:       ; %bb.0:
341 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
342 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
343 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
344 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
345 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
346 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
347 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
348 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
349 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
350 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
351 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
352 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
353 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
354 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
355 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
356 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
357 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
358 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
359 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
360 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
361 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
362 ; GISEL-NEXT:    s_nop 1
363 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[48:51], v[30:37], v28
364 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
365   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
366   ret <16 x float> %result
369 define <16 x float> @test_smfmac_f32_32x32x32_f16__flags0(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3) {
370 ; SDAG-LABEL: test_smfmac_f32_32x32x32_f16__flags0:
371 ; SDAG:       ; %bb.0:
372 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
373 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
374 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
375 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
376 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
377 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
378 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
379 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
380 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
381 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
382 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
383 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
384 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
385 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
386 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
387 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
388 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
389 ; SDAG-NEXT:    s_nop 1
390 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_f16 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
391 ; SDAG-NEXT:    s_nop 7
392 ; SDAG-NEXT:    s_nop 2
393 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
394 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
395 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
396 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
397 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
398 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
399 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
400 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
401 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
402 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
403 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
404 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
405 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
406 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
407 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
408 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
409 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
411 ; GISEL-LABEL: test_smfmac_f32_32x32x32_f16__flags0:
412 ; GISEL:       ; %bb.0:
413 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
415 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
416 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
417 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
418 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
419 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
420 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
421 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
422 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
423 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
424 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
425 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
426 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
427 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
428 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
429 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
430 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
431 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
432 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
433 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
434 ; GISEL-NEXT:    s_nop 1
435 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
436 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
437   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
438   ret <16 x float> %result
441 define <16 x float> @test_smfmac_f32_32x32x32_f16__flags1(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3) {
442 ; SDAG-LABEL: test_smfmac_f32_32x32x32_f16__flags1:
443 ; SDAG:       ; %bb.0:
444 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
445 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
446 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
447 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
448 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
449 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
450 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
451 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
452 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
453 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
454 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
455 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
456 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
457 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
458 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
459 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
460 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
461 ; SDAG-NEXT:    s_nop 1
462 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_f16 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
463 ; SDAG-NEXT:    s_nop 7
464 ; SDAG-NEXT:    s_nop 2
465 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
466 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
467 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
468 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
469 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
470 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
471 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
472 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
473 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
474 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
475 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
476 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
477 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
478 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
479 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
480 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
481 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
483 ; GISEL-LABEL: test_smfmac_f32_32x32x32_f16__flags1:
484 ; GISEL:       ; %bb.0:
485 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
486 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
487 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
488 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
489 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
490 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
491 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
492 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
493 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
494 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
495 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
496 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
497 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
498 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
499 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
500 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
501 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
502 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
503 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
504 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
505 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
506 ; GISEL-NEXT:    s_nop 1
507 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
508 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
509   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
510   ret <16 x float> %result
513 define <16 x float> @test_smfmac_f32_32x32x32_f16__sgpr(<8 x half> inreg %arg0, <16 x half> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
514 ; SDAG-LABEL: test_smfmac_f32_32x32x32_f16__sgpr:
515 ; SDAG:       ; %bb.0:
516 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
517 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
518 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
519 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
520 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
521 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
522 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
523 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
524 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
525 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
526 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
527 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
528 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
529 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
530 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
531 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
532 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
533 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
534 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
535 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
536 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
537 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
538 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
539 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
540 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
541 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
542 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
543 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
544 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
545 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
546 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
547 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
548 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
549 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
550 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
551 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
552 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
553 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
554 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
555 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
556 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
557 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
558 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
559 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
560 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
561 ; SDAG-NEXT:    s_nop 1
562 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_f16 a[0:15], v[28:31], v[0:7], v10
563 ; SDAG-NEXT:    s_nop 7
564 ; SDAG-NEXT:    s_nop 2
565 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
566 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
567 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
568 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
569 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
570 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
571 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
572 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
573 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
574 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
575 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
576 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
577 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
578 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
579 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
580 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
581 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
583 ; GISEL-LABEL: test_smfmac_f32_32x32x32_f16__sgpr:
584 ; GISEL:       ; %bb.0:
585 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
586 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
587 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
588 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
589 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
590 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
591 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
592 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
593 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
594 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
595 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
596 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
597 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
598 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
599 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
600 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
601 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
602 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
603 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
604 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
605 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
606 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
607 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
608 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
609 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
610 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
611 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
612 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
613 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
614 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
615 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
616 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
617 ; GISEL-NEXT:    s_nop 1
618 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_f16 v[0:15], v[34:37], v[48:55], v16
619 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
620   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.f16(<8 x half> %arg0, <16 x half> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
621   ret <16 x float> %result
624 ; --------------------------------------------------------------------
625 ; llvm.amdgcn.smfmac.f32.16x16x64.bf16
626 ; --------------------------------------------------------------------
628 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat>, <16 x bfloat>, <4 x float>, i32, i32 immarg, i32 immarg)
630 define amdgpu_kernel void @test_smfmac_f32_16x16x64_bf16__vgpr(ptr addrspace(1) %arg, <8 x bfloat> %a, <16 x bfloat> %b, i32 %idx) #0 {
631 ; SDAG-LABEL: test_smfmac_f32_16x16x64_bf16__vgpr:
632 ; SDAG:       ; %bb.0: ; %bb
633 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
634 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
635 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
636 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
637 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
638 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
639 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
640 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
641 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
642 ; SDAG-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
643 ; SDAG-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
644 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
645 ; SDAG-NEXT:    v_mov_b64_e32 v[0:1], s[8:9]
646 ; SDAG-NEXT:    v_mov_b64_e32 v[2:3], s[10:11]
647 ; SDAG-NEXT:    v_mov_b64_e32 v[4:5], s[12:13]
648 ; SDAG-NEXT:    v_mov_b64_e32 v[6:7], s[14:15]
649 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
650 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
651 ; SDAG-NEXT:    s_nop 0
652 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_bf16 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
653 ; SDAG-NEXT:    s_nop 6
654 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
655 ; SDAG-NEXT:    s_endpgm
657 ; GISEL-LABEL: test_smfmac_f32_16x16x64_bf16__vgpr:
658 ; GISEL:       ; %bb.0: ; %bb
659 ; GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
660 ; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
661 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
662 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
663 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
664 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
665 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
666 ; GISEL-NEXT:    s_load_dword s16, s[4:5], 0x64
667 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
668 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
669 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
670 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[8:9]
671 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[10:11]
672 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[12:13]
673 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[14:15]
674 ; GISEL-NEXT:    v_mov_b32_e32 v16, s16
675 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
676 ; GISEL-NEXT:    s_nop 0
677 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_bf16 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
678 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
679 ; GISEL-NEXT:    s_nop 5
680 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[6:7]
681 ; GISEL-NEXT:    s_endpgm
683   %id = call i32 @llvm.amdgcn.workitem.id.x()
684   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
685   %in.1 = load <4 x float>, ptr addrspace(1) %gep
686   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat> %a, <16 x bfloat> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
687   store <4 x float> %mai.1, ptr addrspace(1) %arg
688   ret void
691 define <4 x float> @test_smfmac_f32_16x16x64_bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3) {
692 ; SDAG-LABEL: test_smfmac_f32_16x16x64_bf16:
693 ; SDAG:       ; %bb.0:
694 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
695 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
696 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
697 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
698 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
699 ; SDAG-NEXT:    s_nop 1
700 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_bf16 a[0:3], v[0:3], v[4:11], v16
701 ; SDAG-NEXT:    s_nop 6
702 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
703 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
704 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
705 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
706 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
708 ; GISEL-LABEL: test_smfmac_f32_16x16x64_bf16:
709 ; GISEL:       ; %bb.0:
710 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
711 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
712 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v1
713 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v2
714 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v3
715 ; GISEL-NEXT:    v_mov_b32_sdwa v0, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
716 ; GISEL-NEXT:    v_mov_b32_sdwa v1, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
717 ; GISEL-NEXT:    v_mov_b32_sdwa v2, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
718 ; GISEL-NEXT:    v_mov_b32_sdwa v3, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
719 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v4
720 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v5
721 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v6
722 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v7
723 ; GISEL-NEXT:    v_lshrrev_b32_e32 v21, 16, v8
724 ; GISEL-NEXT:    v_lshrrev_b32_e32 v22, 16, v9
725 ; GISEL-NEXT:    v_lshrrev_b32_e32 v23, 16, v10
726 ; GISEL-NEXT:    v_lshrrev_b32_e32 v24, 16, v11
727 ; GISEL-NEXT:    v_mov_b32_sdwa v4, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
728 ; GISEL-NEXT:    v_mov_b32_sdwa v5, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
729 ; GISEL-NEXT:    v_mov_b32_sdwa v6, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
730 ; GISEL-NEXT:    v_mov_b32_sdwa v7, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
731 ; GISEL-NEXT:    v_mov_b32_sdwa v8, v21 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
732 ; GISEL-NEXT:    v_mov_b32_sdwa v9, v22 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
733 ; GISEL-NEXT:    v_mov_b32_sdwa v10, v23 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
734 ; GISEL-NEXT:    v_mov_b32_sdwa v11, v24 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
735 ; GISEL-NEXT:    s_nop 1
736 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_bf16 v[12:15], v[0:3], v[4:11], v16
737 ; GISEL-NEXT:    s_nop 6
738 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
739 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
740 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
741 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
742 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
743   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
744   ret <4 x float> %result
747 define <4 x float> @test_smfmac_f32_16x16x64_bf16__flags0(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3) {
748 ; SDAG-LABEL: test_smfmac_f32_16x16x64_bf16__flags0:
749 ; SDAG:       ; %bb.0:
750 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
751 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
752 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
753 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
754 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
755 ; SDAG-NEXT:    s_nop 1
756 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_bf16 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
757 ; SDAG-NEXT:    s_nop 6
758 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
759 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
760 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
761 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
762 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
764 ; GISEL-LABEL: test_smfmac_f32_16x16x64_bf16__flags0:
765 ; GISEL:       ; %bb.0:
766 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
767 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
768 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v1
769 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v2
770 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v3
771 ; GISEL-NEXT:    v_mov_b32_sdwa v0, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
772 ; GISEL-NEXT:    v_mov_b32_sdwa v1, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
773 ; GISEL-NEXT:    v_mov_b32_sdwa v2, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
774 ; GISEL-NEXT:    v_mov_b32_sdwa v3, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
775 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v4
776 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v5
777 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v6
778 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v7
779 ; GISEL-NEXT:    v_lshrrev_b32_e32 v21, 16, v8
780 ; GISEL-NEXT:    v_lshrrev_b32_e32 v22, 16, v9
781 ; GISEL-NEXT:    v_lshrrev_b32_e32 v23, 16, v10
782 ; GISEL-NEXT:    v_lshrrev_b32_e32 v24, 16, v11
783 ; GISEL-NEXT:    v_mov_b32_sdwa v4, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
784 ; GISEL-NEXT:    v_mov_b32_sdwa v5, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
785 ; GISEL-NEXT:    v_mov_b32_sdwa v6, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
786 ; GISEL-NEXT:    v_mov_b32_sdwa v7, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
787 ; GISEL-NEXT:    v_mov_b32_sdwa v8, v21 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
788 ; GISEL-NEXT:    v_mov_b32_sdwa v9, v22 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
789 ; GISEL-NEXT:    v_mov_b32_sdwa v10, v23 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
790 ; GISEL-NEXT:    v_mov_b32_sdwa v11, v24 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
791 ; GISEL-NEXT:    s_nop 1
792 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_bf16 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
793 ; GISEL-NEXT:    s_nop 6
794 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
795 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
796 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
797 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
798 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
799   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
800   ret <4 x float> %result
803 define <4 x float> @test_smfmac_f32_16x16x64_bf16__flags1(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3) {
804 ; SDAG-LABEL: test_smfmac_f32_16x16x64_bf16__flags1:
805 ; SDAG:       ; %bb.0:
806 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
807 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
808 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
809 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
810 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
811 ; SDAG-NEXT:    s_nop 1
812 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_bf16 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
813 ; SDAG-NEXT:    s_nop 6
814 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
815 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
816 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
817 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
818 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
820 ; GISEL-LABEL: test_smfmac_f32_16x16x64_bf16__flags1:
821 ; GISEL:       ; %bb.0:
822 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
823 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
824 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v1
825 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v2
826 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v3
827 ; GISEL-NEXT:    v_mov_b32_sdwa v0, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
828 ; GISEL-NEXT:    v_mov_b32_sdwa v1, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
829 ; GISEL-NEXT:    v_mov_b32_sdwa v2, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
830 ; GISEL-NEXT:    v_mov_b32_sdwa v3, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
831 ; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v4
832 ; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 16, v5
833 ; GISEL-NEXT:    v_lshrrev_b32_e32 v19, 16, v6
834 ; GISEL-NEXT:    v_lshrrev_b32_e32 v20, 16, v7
835 ; GISEL-NEXT:    v_lshrrev_b32_e32 v21, 16, v8
836 ; GISEL-NEXT:    v_lshrrev_b32_e32 v22, 16, v9
837 ; GISEL-NEXT:    v_lshrrev_b32_e32 v23, 16, v10
838 ; GISEL-NEXT:    v_lshrrev_b32_e32 v24, 16, v11
839 ; GISEL-NEXT:    v_mov_b32_sdwa v4, v17 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
840 ; GISEL-NEXT:    v_mov_b32_sdwa v5, v18 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
841 ; GISEL-NEXT:    v_mov_b32_sdwa v6, v19 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
842 ; GISEL-NEXT:    v_mov_b32_sdwa v7, v20 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
843 ; GISEL-NEXT:    v_mov_b32_sdwa v8, v21 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
844 ; GISEL-NEXT:    v_mov_b32_sdwa v9, v22 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
845 ; GISEL-NEXT:    v_mov_b32_sdwa v10, v23 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
846 ; GISEL-NEXT:    v_mov_b32_sdwa v11, v24 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
847 ; GISEL-NEXT:    s_nop 1
848 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_bf16 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
849 ; GISEL-NEXT:    s_nop 6
850 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
851 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
852 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
853 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
854 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
855   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
856   ret <4 x float> %result
859 define <4 x float> @test_smfmac_f32_16x16x64_bf16__sgpr(<8 x bfloat> inreg %arg0, <16 x bfloat> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
860 ; SDAG-LABEL: test_smfmac_f32_16x16x64_bf16__sgpr:
861 ; SDAG:       ; %bb.0:
862 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
863 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
864 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
865 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
866 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
867 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
868 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
869 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
870 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
871 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
872 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
873 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
874 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
875 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
876 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
877 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
878 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
879 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
880 ; SDAG-NEXT:    s_nop 1
881 ; SDAG-NEXT:    v_smfmac_f32_16x16x64_bf16 a[0:3], v[8:11], v[0:7], v12
882 ; SDAG-NEXT:    s_nop 6
883 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
884 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
885 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
886 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
887 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
889 ; GISEL-LABEL: test_smfmac_f32_16x16x64_bf16__sgpr:
890 ; GISEL:       ; %bb.0:
891 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
892 ; GISEL-NEXT:    s_lshr_b32 s4, s0, 16
893 ; GISEL-NEXT:    s_lshr_b32 s5, s1, 16
894 ; GISEL-NEXT:    s_lshl_b32 s4, s4, 16
895 ; GISEL-NEXT:    s_and_b32 s0, s0, 0xffff
896 ; GISEL-NEXT:    s_lshr_b32 s6, s2, 16
897 ; GISEL-NEXT:    s_or_b32 s0, s4, s0
898 ; GISEL-NEXT:    s_lshl_b32 s4, s5, 16
899 ; GISEL-NEXT:    s_and_b32 s1, s1, 0xffff
900 ; GISEL-NEXT:    s_lshr_b32 s7, s3, 16
901 ; GISEL-NEXT:    s_or_b32 s1, s4, s1
902 ; GISEL-NEXT:    s_lshl_b32 s4, s6, 16
903 ; GISEL-NEXT:    s_and_b32 s2, s2, 0xffff
904 ; GISEL-NEXT:    s_or_b32 s2, s4, s2
905 ; GISEL-NEXT:    s_lshl_b32 s4, s7, 16
906 ; GISEL-NEXT:    s_and_b32 s3, s3, 0xffff
907 ; GISEL-NEXT:    s_or_b32 s3, s4, s3
908 ; GISEL-NEXT:    s_lshr_b32 s4, s16, 16
909 ; GISEL-NEXT:    s_lshr_b32 s5, s17, 16
910 ; GISEL-NEXT:    s_lshl_b32 s4, s4, 16
911 ; GISEL-NEXT:    s_and_b32 s12, s16, 0xffff
912 ; GISEL-NEXT:    s_lshr_b32 s6, s18, 16
913 ; GISEL-NEXT:    s_or_b32 s4, s4, s12
914 ; GISEL-NEXT:    s_lshl_b32 s5, s5, 16
915 ; GISEL-NEXT:    s_and_b32 s12, s17, 0xffff
916 ; GISEL-NEXT:    s_lshr_b32 s7, s19, 16
917 ; GISEL-NEXT:    s_or_b32 s5, s5, s12
918 ; GISEL-NEXT:    s_lshl_b32 s6, s6, 16
919 ; GISEL-NEXT:    s_and_b32 s12, s18, 0xffff
920 ; GISEL-NEXT:    s_lshr_b32 s8, s20, 16
921 ; GISEL-NEXT:    s_or_b32 s6, s6, s12
922 ; GISEL-NEXT:    s_lshl_b32 s7, s7, 16
923 ; GISEL-NEXT:    s_and_b32 s12, s19, 0xffff
924 ; GISEL-NEXT:    s_lshr_b32 s9, s21, 16
925 ; GISEL-NEXT:    s_or_b32 s7, s7, s12
926 ; GISEL-NEXT:    s_lshl_b32 s8, s8, 16
927 ; GISEL-NEXT:    s_and_b32 s12, s20, 0xffff
928 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
929 ; GISEL-NEXT:    s_lshr_b32 s10, s22, 16
930 ; GISEL-NEXT:    s_or_b32 s8, s8, s12
931 ; GISEL-NEXT:    s_lshl_b32 s9, s9, 16
932 ; GISEL-NEXT:    s_and_b32 s12, s21, 0xffff
933 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
934 ; GISEL-NEXT:    s_lshr_b32 s11, s23, 16
935 ; GISEL-NEXT:    s_or_b32 s9, s9, s12
936 ; GISEL-NEXT:    s_lshl_b32 s10, s10, 16
937 ; GISEL-NEXT:    s_and_b32 s12, s22, 0xffff
938 ; GISEL-NEXT:    s_or_b32 s10, s10, s12
939 ; GISEL-NEXT:    s_lshl_b32 s11, s11, 16
940 ; GISEL-NEXT:    s_and_b32 s12, s23, 0xffff
941 ; GISEL-NEXT:    s_or_b32 s11, s11, s12
942 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[4:5]
943 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
944 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[6:7]
945 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[8:9]
946 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[10:11]
947 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
948 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
949 ; GISEL-NEXT:    s_nop 1
950 ; GISEL-NEXT:    v_smfmac_f32_16x16x64_bf16 v[0:3], v[12:15], v[4:11], v16
951 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
952   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x64.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
953   ret <4 x float> %result
956 ; --------------------------------------------------------------------
957 ; llvm.amdgcn.smfmac.f32.32x32x32.bf16
958 ; --------------------------------------------------------------------
960 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat>, <16 x bfloat>, <16 x float>, i32, i32 immarg, i32 immarg)
962 define amdgpu_kernel void @test_smfmac_f32_32x32x32_bf16__vgpr(ptr addrspace(1) %arg, <8 x bfloat> %a, <16 x bfloat> %b, i32 %idx) #0 {
963 ; SDAG-LABEL: test_smfmac_f32_32x32x32_bf16__vgpr:
964 ; SDAG:       ; %bb.0: ; %bb
965 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
966 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
967 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
968 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
969 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
970 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[6:7] offset:48
971 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[6:7] offset:32
972 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[6:7] offset:16
973 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[6:7]
974 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
975 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
976 ; SDAG-NEXT:    v_mov_b64_e32 v[26:27], s[2:3]
977 ; SDAG-NEXT:    v_mov_b64_e32 v[24:25], s[0:1]
978 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
979 ; SDAG-NEXT:    v_mov_b64_e32 v[22:23], s[14:15]
980 ; SDAG-NEXT:    v_mov_b64_e32 v[20:21], s[12:13]
981 ; SDAG-NEXT:    v_mov_b64_e32 v[18:19], s[10:11]
982 ; SDAG-NEXT:    v_mov_b64_e32 v[16:17], s[8:9]
983 ; SDAG-NEXT:    v_mov_b32_e32 v28, s16
984 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
985 ; SDAG-NEXT:    s_nop 0
986 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
987 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
988 ; SDAG-NEXT:    s_nop 7
989 ; SDAG-NEXT:    s_nop 1
990 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7] offset:32
991 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[6:7] offset:48
992 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[6:7]
993 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[6:7] offset:16
994 ; SDAG-NEXT:    s_endpgm
996 ; GISEL-LABEL: test_smfmac_f32_32x32x32_bf16__vgpr:
997 ; GISEL:       ; %bb.0: ; %bb
998 ; GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
999 ; GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x34
1000 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1001 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
1002 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1003 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[6:7]
1004 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[6:7] offset:16
1005 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[6:7] offset:32
1006 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[6:7] offset:48
1007 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x44
1008 ; GISEL-NEXT:    s_load_dword s16, s[4:5], 0x64
1009 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[2:3]
1010 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[0:1]
1011 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1012 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[14:15]
1013 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[12:13]
1014 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[10:11]
1015 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[8:9]
1016 ; GISEL-NEXT:    v_mov_b32_e32 v28, s16
1017 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
1018 ; GISEL-NEXT:    s_nop 0
1019 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
1020 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
1021 ; GISEL-NEXT:    s_nop 7
1022 ; GISEL-NEXT:    s_nop 1
1023 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[6:7]
1024 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[6:7] offset:16
1025 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7] offset:32
1026 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[6:7] offset:48
1027 ; GISEL-NEXT:    s_endpgm
1029   %id = call i32 @llvm.amdgcn.workitem.id.x()
1030   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
1031   %in.1 = load <16 x float>, ptr addrspace(1) %gep
1032   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat> %a, <16 x bfloat> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
1033   store <16 x float> %mai.1, ptr addrspace(1) %arg
1034   ret void
1037 define <16 x float> @test_smfmac_f32_32x32x32_bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3) {
1038 ; SDAG-LABEL: test_smfmac_f32_32x32x32_bf16:
1039 ; SDAG:       ; %bb.0:
1040 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1041 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1042 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1043 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1044 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1045 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1046 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1047 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1048 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1049 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1050 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1051 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1052 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1053 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1054 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1055 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1056 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1057 ; SDAG-NEXT:    s_nop 1
1058 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_bf16 a[0:15], v[0:3], v[4:11], v28
1059 ; SDAG-NEXT:    s_nop 7
1060 ; SDAG-NEXT:    s_nop 2
1061 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1062 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1063 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1064 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1065 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1066 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1067 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1068 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1069 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1070 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1071 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1072 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1073 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1074 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1075 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1076 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1077 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1079 ; GISEL-LABEL: test_smfmac_f32_32x32x32_bf16:
1080 ; GISEL:       ; %bb.0:
1081 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1082 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1083 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1084 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1085 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1086 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v48
1087 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v49
1088 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v50
1089 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v51
1090 ; GISEL-NEXT:    v_mov_b32_sdwa v48, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1091 ; GISEL-NEXT:    v_mov_b32_sdwa v49, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1092 ; GISEL-NEXT:    v_mov_b32_sdwa v50, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1093 ; GISEL-NEXT:    v_mov_b32_sdwa v51, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1094 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1095 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1096 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1097 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1098 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1099 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1100 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1101 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1102 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v30
1103 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v31
1104 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v32
1105 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v33
1106 ; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 16, v34
1107 ; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 16, v35
1108 ; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v36
1109 ; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 16, v37
1110 ; GISEL-NEXT:    v_mov_b32_sdwa v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1111 ; GISEL-NEXT:    v_mov_b32_sdwa v31, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1112 ; GISEL-NEXT:    v_mov_b32_sdwa v32, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1113 ; GISEL-NEXT:    v_mov_b32_sdwa v33, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1114 ; GISEL-NEXT:    v_mov_b32_sdwa v34, v4 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1115 ; GISEL-NEXT:    v_mov_b32_sdwa v35, v5 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1116 ; GISEL-NEXT:    v_mov_b32_sdwa v36, v6 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1117 ; GISEL-NEXT:    v_mov_b32_sdwa v37, v7 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1118 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1119 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1120 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1121 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1122 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1123 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1124 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1125 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1126 ; GISEL-NEXT:    s_nop 1
1127 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[48:51], v[30:37], v28
1128 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1129   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
1130   ret <16 x float> %result
1133 define <16 x float> @test_smfmac_f32_32x32x32_bf16__flags0(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3) {
1134 ; SDAG-LABEL: test_smfmac_f32_32x32x32_bf16__flags0:
1135 ; SDAG:       ; %bb.0:
1136 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1137 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1138 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1139 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1140 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1141 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1142 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1143 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1144 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1145 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1146 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1147 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1148 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1149 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1150 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1151 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1152 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1153 ; SDAG-NEXT:    s_nop 1
1154 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_bf16 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
1155 ; SDAG-NEXT:    s_nop 7
1156 ; SDAG-NEXT:    s_nop 2
1157 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1158 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1159 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1160 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1161 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1162 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1163 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1164 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1165 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1166 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1167 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1168 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1169 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1170 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1171 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1172 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1173 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1175 ; GISEL-LABEL: test_smfmac_f32_32x32x32_bf16__flags0:
1176 ; GISEL:       ; %bb.0:
1177 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1178 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1179 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1180 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1181 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1182 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v48
1183 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v49
1184 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v50
1185 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v51
1186 ; GISEL-NEXT:    v_mov_b32_sdwa v48, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1187 ; GISEL-NEXT:    v_mov_b32_sdwa v49, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1188 ; GISEL-NEXT:    v_mov_b32_sdwa v50, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1189 ; GISEL-NEXT:    v_mov_b32_sdwa v51, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1190 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1191 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1192 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1193 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1194 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1195 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1196 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1197 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1198 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v30
1199 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v31
1200 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v32
1201 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v33
1202 ; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 16, v34
1203 ; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 16, v35
1204 ; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v36
1205 ; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 16, v37
1206 ; GISEL-NEXT:    v_mov_b32_sdwa v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1207 ; GISEL-NEXT:    v_mov_b32_sdwa v31, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1208 ; GISEL-NEXT:    v_mov_b32_sdwa v32, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1209 ; GISEL-NEXT:    v_mov_b32_sdwa v33, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1210 ; GISEL-NEXT:    v_mov_b32_sdwa v34, v4 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1211 ; GISEL-NEXT:    v_mov_b32_sdwa v35, v5 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1212 ; GISEL-NEXT:    v_mov_b32_sdwa v36, v6 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1213 ; GISEL-NEXT:    v_mov_b32_sdwa v37, v7 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1214 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1215 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1216 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1217 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1218 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1219 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1220 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1221 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1222 ; GISEL-NEXT:    s_nop 1
1223 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
1224 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1225   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
1226   ret <16 x float> %result
1229 define <16 x float> @test_smfmac_f32_32x32x32_bf16__flags1(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3) {
1230 ; SDAG-LABEL: test_smfmac_f32_32x32x32_bf16__flags1:
1231 ; SDAG:       ; %bb.0:
1232 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1233 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1234 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1235 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1236 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1237 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1238 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1239 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1240 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1241 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1242 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1243 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1244 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1245 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1246 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1247 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1248 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1249 ; SDAG-NEXT:    s_nop 1
1250 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_bf16 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
1251 ; SDAG-NEXT:    s_nop 7
1252 ; SDAG-NEXT:    s_nop 2
1253 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1254 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1255 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1256 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1257 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1258 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1259 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1260 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1261 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1262 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1263 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1264 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1265 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1266 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1267 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1268 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1269 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1271 ; GISEL-LABEL: test_smfmac_f32_32x32x32_bf16__flags1:
1272 ; GISEL:       ; %bb.0:
1273 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1274 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1275 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1276 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1277 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1278 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v48
1279 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v49
1280 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v50
1281 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v51
1282 ; GISEL-NEXT:    v_mov_b32_sdwa v48, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1283 ; GISEL-NEXT:    v_mov_b32_sdwa v49, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1284 ; GISEL-NEXT:    v_mov_b32_sdwa v50, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1285 ; GISEL-NEXT:    v_mov_b32_sdwa v51, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1286 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1287 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1288 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1289 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1290 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1291 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1292 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1293 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1294 ; GISEL-NEXT:    v_lshrrev_b32_e32 v0, 16, v30
1295 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v31
1296 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v32
1297 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 16, v33
1298 ; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 16, v34
1299 ; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 16, v35
1300 ; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v36
1301 ; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 16, v37
1302 ; GISEL-NEXT:    v_mov_b32_sdwa v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1303 ; GISEL-NEXT:    v_mov_b32_sdwa v31, v1 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1304 ; GISEL-NEXT:    v_mov_b32_sdwa v32, v2 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1305 ; GISEL-NEXT:    v_mov_b32_sdwa v33, v3 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1306 ; GISEL-NEXT:    v_mov_b32_sdwa v34, v4 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1307 ; GISEL-NEXT:    v_mov_b32_sdwa v35, v5 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1308 ; GISEL-NEXT:    v_mov_b32_sdwa v36, v6 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1309 ; GISEL-NEXT:    v_mov_b32_sdwa v37, v7 dst_sel:WORD_1 dst_unused:UNUSED_PRESERVE src0_sel:WORD_0
1310 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1311 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1312 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1313 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1314 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1315 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1316 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1317 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1318 ; GISEL-NEXT:    s_nop 1
1319 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
1320 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1321   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
1322   ret <16 x float> %result
1325 define <16 x float> @test_smfmac_f32_32x32x32_bf16__sgpr(<8 x bfloat> inreg %arg0, <16 x bfloat> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
1326 ; SDAG-LABEL: test_smfmac_f32_32x32x32_bf16__sgpr:
1327 ; SDAG:       ; %bb.0:
1328 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1329 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
1330 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
1331 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
1332 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
1333 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
1334 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
1335 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
1336 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
1337 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
1338 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
1339 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
1340 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
1341 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
1342 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
1343 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
1344 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
1345 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
1346 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
1347 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
1348 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
1349 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1350 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
1351 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
1352 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
1353 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
1354 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
1355 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
1356 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
1357 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
1358 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1359 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1360 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1361 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1362 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1363 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1364 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1365 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1366 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1367 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1368 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1369 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1370 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1371 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1372 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1373 ; SDAG-NEXT:    s_nop 1
1374 ; SDAG-NEXT:    v_smfmac_f32_32x32x32_bf16 a[0:15], v[28:31], v[0:7], v10
1375 ; SDAG-NEXT:    s_nop 7
1376 ; SDAG-NEXT:    s_nop 2
1377 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1378 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1379 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1380 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1381 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1382 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1383 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1384 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1385 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1386 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1387 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1388 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1389 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1390 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1391 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1392 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1393 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1395 ; GISEL-LABEL: test_smfmac_f32_32x32x32_bf16__sgpr:
1396 ; GISEL:       ; %bb.0:
1397 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1398 ; GISEL-NEXT:    s_lshr_b32 s4, s0, 16
1399 ; GISEL-NEXT:    s_lshr_b32 s5, s1, 16
1400 ; GISEL-NEXT:    s_lshl_b32 s4, s4, 16
1401 ; GISEL-NEXT:    s_and_b32 s0, s0, 0xffff
1402 ; GISEL-NEXT:    s_lshr_b32 s6, s2, 16
1403 ; GISEL-NEXT:    s_or_b32 s8, s4, s0
1404 ; GISEL-NEXT:    s_lshl_b32 s0, s5, 16
1405 ; GISEL-NEXT:    s_and_b32 s1, s1, 0xffff
1406 ; GISEL-NEXT:    s_lshr_b32 s7, s3, 16
1407 ; GISEL-NEXT:    s_or_b32 s9, s0, s1
1408 ; GISEL-NEXT:    s_lshl_b32 s0, s6, 16
1409 ; GISEL-NEXT:    s_and_b32 s1, s2, 0xffff
1410 ; GISEL-NEXT:    s_or_b32 s10, s0, s1
1411 ; GISEL-NEXT:    s_lshl_b32 s0, s7, 16
1412 ; GISEL-NEXT:    s_and_b32 s1, s3, 0xffff
1413 ; GISEL-NEXT:    s_or_b32 s11, s0, s1
1414 ; GISEL-NEXT:    s_lshr_b32 s0, s16, 16
1415 ; GISEL-NEXT:    s_lshr_b32 s1, s17, 16
1416 ; GISEL-NEXT:    s_lshl_b32 s0, s0, 16
1417 ; GISEL-NEXT:    s_and_b32 s12, s16, 0xffff
1418 ; GISEL-NEXT:    s_lshr_b32 s2, s18, 16
1419 ; GISEL-NEXT:    s_or_b32 s0, s0, s12
1420 ; GISEL-NEXT:    s_lshl_b32 s1, s1, 16
1421 ; GISEL-NEXT:    s_and_b32 s12, s17, 0xffff
1422 ; GISEL-NEXT:    s_lshr_b32 s3, s19, 16
1423 ; GISEL-NEXT:    s_or_b32 s1, s1, s12
1424 ; GISEL-NEXT:    s_lshl_b32 s2, s2, 16
1425 ; GISEL-NEXT:    s_and_b32 s12, s18, 0xffff
1426 ; GISEL-NEXT:    s_lshr_b32 s4, s20, 16
1427 ; GISEL-NEXT:    s_or_b32 s2, s2, s12
1428 ; GISEL-NEXT:    s_lshl_b32 s3, s3, 16
1429 ; GISEL-NEXT:    s_and_b32 s12, s19, 0xffff
1430 ; GISEL-NEXT:    s_lshr_b32 s5, s21, 16
1431 ; GISEL-NEXT:    s_or_b32 s3, s3, s12
1432 ; GISEL-NEXT:    s_lshl_b32 s4, s4, 16
1433 ; GISEL-NEXT:    s_and_b32 s12, s20, 0xffff
1434 ; GISEL-NEXT:    s_lshr_b32 s6, s22, 16
1435 ; GISEL-NEXT:    s_or_b32 s4, s4, s12
1436 ; GISEL-NEXT:    s_lshl_b32 s5, s5, 16
1437 ; GISEL-NEXT:    s_and_b32 s12, s21, 0xffff
1438 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[10:11]
1439 ; GISEL-NEXT:    s_lshr_b32 s7, s23, 16
1440 ; GISEL-NEXT:    s_or_b32 s5, s5, s12
1441 ; GISEL-NEXT:    s_lshl_b32 s6, s6, 16
1442 ; GISEL-NEXT:    s_and_b32 s12, s22, 0xffff
1443 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[8:9]
1444 ; GISEL-NEXT:    s_or_b32 s6, s6, s12
1445 ; GISEL-NEXT:    s_lshl_b32 s7, s7, 16
1446 ; GISEL-NEXT:    s_and_b32 s12, s23, 0xffff
1447 ; GISEL-NEXT:    s_or_b32 s7, s7, s12
1448 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
1449 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
1450 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
1451 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
1452 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
1453 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
1454 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
1455 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
1456 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
1457 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
1458 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
1459 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
1460 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
1461 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
1462 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
1463 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
1464 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
1465 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[6:7]
1466 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
1467 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[4:5]
1468 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[2:3]
1469 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[0:1]
1470 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
1471 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
1472 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
1473 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
1474 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
1475 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
1476 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
1477 ; GISEL-NEXT:    s_nop 1
1478 ; GISEL-NEXT:    v_smfmac_f32_32x32x32_bf16 v[0:15], v[34:37], v[48:55], v16
1479 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1480   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x32.bf16(<8 x bfloat> %arg0, <16 x bfloat> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
1481   ret <16 x float> %result
1484 ; --------------------------------------------------------------------
1485 ; llvm.amdgcn.smfmac.i32.16x16x128.i8
1486 ; --------------------------------------------------------------------
1488 declare <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32>, <8 x i32>, <4 x i32>, i32, i32, i32)
1490 define amdgpu_kernel void @test_smfmac_i32_16x16x128_i8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
1491 ; SDAG-LABEL: test_smfmac_i32_16x16x128_i8__vgpr:
1492 ; SDAG:       ; %bb.0: ; %bb
1493 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
1494 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1495 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
1496 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
1497 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
1498 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1499 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
1500 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
1501 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x54
1502 ; SDAG-NEXT:    v_mov_b32_e32 v12, s8
1503 ; SDAG-NEXT:    v_mov_b32_e32 v13, s9
1504 ; SDAG-NEXT:    v_mov_b32_e32 v14, s10
1505 ; SDAG-NEXT:    v_mov_b32_e32 v15, s11
1506 ; SDAG-NEXT:    v_mov_b32_e32 v0, s12
1507 ; SDAG-NEXT:    v_mov_b32_e32 v1, s13
1508 ; SDAG-NEXT:    v_mov_b32_e32 v2, s14
1509 ; SDAG-NEXT:    v_mov_b32_e32 v3, s15
1510 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1511 ; SDAG-NEXT:    v_mov_b32_e32 v4, s0
1512 ; SDAG-NEXT:    v_mov_b32_e32 v5, s1
1513 ; SDAG-NEXT:    v_mov_b32_e32 v6, s2
1514 ; SDAG-NEXT:    v_mov_b32_e32 v7, s3
1515 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
1516 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
1517 ; SDAG-NEXT:    s_nop 0
1518 ; SDAG-NEXT:    v_smfmac_i32_16x16x128_i8 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
1519 ; SDAG-NEXT:    s_nop 6
1520 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
1521 ; SDAG-NEXT:    s_endpgm
1523 ; GISEL-LABEL: test_smfmac_i32_16x16x128_i8__vgpr:
1524 ; GISEL:       ; %bb.0: ; %bb
1525 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
1526 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1527 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
1528 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1529 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[0:1]
1530 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
1531 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
1532 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
1533 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1534 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[10:11]
1535 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[8:9]
1536 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[12:13]
1537 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[14:15]
1538 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
1539 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
1540 ; GISEL-NEXT:    v_mov_b32_e32 v16, s2
1541 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
1542 ; GISEL-NEXT:    s_nop 0
1543 ; GISEL-NEXT:    v_smfmac_i32_16x16x128_i8 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
1544 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
1545 ; GISEL-NEXT:    s_nop 5
1546 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[0:1]
1547 ; GISEL-NEXT:    s_endpgm
1549   %id = call i32 @llvm.amdgcn.workitem.id.x()
1550   %gep = getelementptr <4 x i32>, ptr addrspace(1) %arg, i32 %id
1551   %in.1 = load <4 x i32>, ptr addrspace(1) %gep
1552   %mai.1 = tail call <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32> %a, <8 x i32> %b, <4 x i32> %in.1, i32 %idx, i32 1, i32 2)
1553   store <4 x i32> %mai.1, ptr addrspace(1) %arg
1554   ret void
1557 define <4 x i32> @test_smfmac_i32_16x16x128_i8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3) {
1558 ; SDAG-LABEL: test_smfmac_i32_16x16x128_i8:
1559 ; SDAG:       ; %bb.0:
1560 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1561 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1562 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1563 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1564 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1565 ; SDAG-NEXT:    s_nop 1
1566 ; SDAG-NEXT:    v_smfmac_i32_16x16x128_i8 a[0:3], v[0:3], v[4:11], v16
1567 ; SDAG-NEXT:    s_nop 6
1568 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1569 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1570 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1571 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1572 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1574 ; GISEL-LABEL: test_smfmac_i32_16x16x128_i8:
1575 ; GISEL:       ; %bb.0:
1576 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1577 ; GISEL-NEXT:    v_smfmac_i32_16x16x128_i8 v[12:15], v[0:3], v[4:11], v16
1578 ; GISEL-NEXT:    s_nop 6
1579 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
1580 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
1581 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
1582 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
1583 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1584   %result = call <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
1585   ret <4 x i32> %result
1588 define <4 x i32> @test_smfmac_i32_16x16x128_i8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3) {
1589 ; SDAG-LABEL: test_smfmac_i32_16x16x128_i8__flags0:
1590 ; SDAG:       ; %bb.0:
1591 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1592 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1593 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1594 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1595 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1596 ; SDAG-NEXT:    s_nop 1
1597 ; SDAG-NEXT:    v_smfmac_i32_16x16x128_i8 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
1598 ; SDAG-NEXT:    s_nop 6
1599 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1600 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1601 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1602 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1603 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1605 ; GISEL-LABEL: test_smfmac_i32_16x16x128_i8__flags0:
1606 ; GISEL:       ; %bb.0:
1607 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1608 ; GISEL-NEXT:    v_smfmac_i32_16x16x128_i8 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
1609 ; GISEL-NEXT:    s_nop 6
1610 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
1611 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
1612 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
1613 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
1614 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1615   %result = call <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
1616   ret <4 x i32> %result
1619 define <4 x i32> @test_smfmac_i32_16x16x128_i8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3) {
1620 ; SDAG-LABEL: test_smfmac_i32_16x16x128_i8__flags1:
1621 ; SDAG:       ; %bb.0:
1622 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1623 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1624 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1625 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1626 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1627 ; SDAG-NEXT:    s_nop 1
1628 ; SDAG-NEXT:    v_smfmac_i32_16x16x128_i8 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
1629 ; SDAG-NEXT:    s_nop 6
1630 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1631 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1632 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1633 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1634 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1636 ; GISEL-LABEL: test_smfmac_i32_16x16x128_i8__flags1:
1637 ; GISEL:       ; %bb.0:
1638 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1639 ; GISEL-NEXT:    v_smfmac_i32_16x16x128_i8 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
1640 ; GISEL-NEXT:    s_nop 6
1641 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
1642 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
1643 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
1644 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
1645 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1646   %result = call <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
1647   ret <4 x i32> %result
1650 define <4 x i32> @test_smfmac_i32_16x16x128_i8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <4 x i32> inreg %arg2, i32 inreg %arg3) {
1651 ; SDAG-LABEL: test_smfmac_i32_16x16x128_i8__sgpr:
1652 ; SDAG:       ; %bb.0:
1653 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1654 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
1655 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
1656 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
1657 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
1658 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
1659 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
1660 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
1661 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
1662 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
1663 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
1664 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
1665 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
1666 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
1667 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
1668 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
1669 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
1670 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
1671 ; SDAG-NEXT:    s_nop 1
1672 ; SDAG-NEXT:    v_smfmac_i32_16x16x128_i8 a[0:3], v[8:11], v[0:7], v12
1673 ; SDAG-NEXT:    s_nop 6
1674 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1675 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1676 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1677 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1678 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1680 ; GISEL-LABEL: test_smfmac_i32_16x16x128_i8__sgpr:
1681 ; GISEL:       ; %bb.0:
1682 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1683 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
1684 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
1685 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
1686 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
1687 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
1688 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
1689 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
1690 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
1691 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
1692 ; GISEL-NEXT:    s_nop 1
1693 ; GISEL-NEXT:    v_smfmac_i32_16x16x128_i8 v[0:3], v[12:15], v[4:11], v16
1694 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1695   %result = call <4 x i32> @llvm.amdgcn.smfmac.i32.16x16x128.i8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x i32> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
1696   ret <4 x i32> %result
1699 ; --------------------------------------------------------------------
1700 ; llvm.amdgcn.smfmac.i32.32x32x64.i8
1701 ; --------------------------------------------------------------------
1703 declare <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32>, <8 x i32>, <16 x i32>, i32, i32, i32)
1705 define amdgpu_kernel void @test_smfmac_i32_32x32x64_i8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
1706 ; SDAG-LABEL: test_smfmac_i32_32x32x64_i8__vgpr:
1707 ; SDAG:       ; %bb.0: ; %bb
1708 ; SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
1709 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1710 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
1711 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1712 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
1713 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
1714 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
1715 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
1716 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
1717 ; SDAG-NEXT:    s_load_dword s2, s[4:5], 0x64
1718 ; SDAG-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
1719 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1720 ; SDAG-NEXT:    v_mov_b32_e32 v24, s8
1721 ; SDAG-NEXT:    v_mov_b32_e32 v25, s9
1722 ; SDAG-NEXT:    v_mov_b32_e32 v26, s10
1723 ; SDAG-NEXT:    v_mov_b32_e32 v27, s11
1724 ; SDAG-NEXT:    v_mov_b32_e32 v16, s12
1725 ; SDAG-NEXT:    v_mov_b32_e32 v17, s13
1726 ; SDAG-NEXT:    v_mov_b32_e32 v18, s14
1727 ; SDAG-NEXT:    v_mov_b32_e32 v19, s15
1728 ; SDAG-NEXT:    v_mov_b32_e32 v20, s16
1729 ; SDAG-NEXT:    v_mov_b32_e32 v21, s17
1730 ; SDAG-NEXT:    v_mov_b32_e32 v22, s18
1731 ; SDAG-NEXT:    v_mov_b32_e32 v23, s19
1732 ; SDAG-NEXT:    v_mov_b32_e32 v28, s2
1733 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
1734 ; SDAG-NEXT:    s_nop 0
1735 ; SDAG-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
1736 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
1737 ; SDAG-NEXT:    s_nop 7
1738 ; SDAG-NEXT:    s_nop 1
1739 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
1740 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
1741 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
1742 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
1743 ; SDAG-NEXT:    s_endpgm
1745 ; GISEL-LABEL: test_smfmac_i32_32x32x64_i8__vgpr:
1746 ; GISEL:       ; %bb.0: ; %bb
1747 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
1748 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1749 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
1750 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1751 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
1752 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
1753 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
1754 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
1755 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
1756 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
1757 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
1758 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1759 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[10:11]
1760 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[8:9]
1761 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[18:19]
1762 ; GISEL-NEXT:    v_mov_b32_e32 v28, s2
1763 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[16:17]
1764 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[14:15]
1765 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[12:13]
1766 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
1767 ; GISEL-NEXT:    s_nop 0
1768 ; GISEL-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
1769 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
1770 ; GISEL-NEXT:    s_nop 7
1771 ; GISEL-NEXT:    s_nop 1
1772 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
1773 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
1774 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
1775 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
1776 ; GISEL-NEXT:    s_endpgm
1778   %id = call i32 @llvm.amdgcn.workitem.id.x()
1779   %gep = getelementptr <16 x i32>, ptr addrspace(1) %arg, i32 %id
1780   %in.1 = load <16 x i32>, ptr addrspace(1) %gep
1781   %mai.1 = tail call <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32> %a, <8 x i32> %b, <16 x i32> %in.1, i32 %idx, i32 1, i32 2)
1782   store <16 x i32> %mai.1, ptr addrspace(1) %arg
1783   ret void
1786 define <16 x i32> @test_smfmac_i32_32x32x64_i8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3) {
1787 ; SDAG-LABEL: test_smfmac_i32_32x32x64_i8:
1788 ; SDAG:       ; %bb.0:
1789 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1790 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1791 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1792 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1793 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1794 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1795 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1796 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1797 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1798 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1799 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1800 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1801 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1802 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1803 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1804 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1805 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1806 ; SDAG-NEXT:    s_nop 1
1807 ; SDAG-NEXT:    v_smfmac_i32_32x32x64_i8 a[0:15], v[0:3], v[4:11], v28
1808 ; SDAG-NEXT:    s_nop 7
1809 ; SDAG-NEXT:    s_nop 2
1810 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1811 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1812 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1813 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1814 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1815 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1816 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1817 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1818 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1819 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1820 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1821 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1822 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1823 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1824 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1825 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1826 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1828 ; GISEL-LABEL: test_smfmac_i32_32x32x64_i8:
1829 ; GISEL:       ; %bb.0:
1830 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1831 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1832 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1833 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1834 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1835 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1836 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1837 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1838 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1839 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1840 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1841 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1842 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1843 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1844 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1845 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1846 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1847 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1848 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1849 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1850 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1851 ; GISEL-NEXT:    s_nop 1
1852 ; GISEL-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[48:51], v[30:37], v28
1853 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1854   %result = call <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
1855   ret <16 x i32> %result
1858 define <16 x i32> @test_smfmac_i32_32x32x64_i8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3) {
1859 ; SDAG-LABEL: test_smfmac_i32_32x32x64_i8__flags0:
1860 ; SDAG:       ; %bb.0:
1861 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1862 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1863 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1864 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1865 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1866 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1867 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1868 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1869 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1870 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1871 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1872 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1873 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1874 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1875 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1876 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1877 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1878 ; SDAG-NEXT:    s_nop 1
1879 ; SDAG-NEXT:    v_smfmac_i32_32x32x64_i8 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
1880 ; SDAG-NEXT:    s_nop 7
1881 ; SDAG-NEXT:    s_nop 2
1882 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1883 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1884 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1885 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1886 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1887 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1888 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1889 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1890 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1891 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1892 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1893 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1894 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1895 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1896 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1897 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1898 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1900 ; GISEL-LABEL: test_smfmac_i32_32x32x64_i8__flags0:
1901 ; GISEL:       ; %bb.0:
1902 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1903 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1904 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1905 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1906 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1907 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1908 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1909 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1910 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1911 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1912 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1913 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1914 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1915 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1916 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1917 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1918 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1919 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1920 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1921 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1922 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1923 ; GISEL-NEXT:    s_nop 1
1924 ; GISEL-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
1925 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1926   %result = call <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
1927   ret <16 x i32> %result
1930 define <16 x i32> @test_smfmac_i32_32x32x64_i8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3) {
1931 ; SDAG-LABEL: test_smfmac_i32_32x32x64_i8__flags1:
1932 ; SDAG:       ; %bb.0:
1933 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1934 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
1935 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
1936 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
1937 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
1938 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
1939 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
1940 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
1941 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
1942 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
1943 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
1944 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
1945 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
1946 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
1947 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
1948 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
1949 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
1950 ; SDAG-NEXT:    s_nop 1
1951 ; SDAG-NEXT:    v_smfmac_i32_32x32x64_i8 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
1952 ; SDAG-NEXT:    s_nop 7
1953 ; SDAG-NEXT:    s_nop 2
1954 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
1955 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
1956 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
1957 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
1958 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
1959 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
1960 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
1961 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
1962 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
1963 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
1964 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
1965 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
1966 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
1967 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
1968 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
1969 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
1970 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
1972 ; GISEL-LABEL: test_smfmac_i32_32x32x64_i8__flags1:
1973 ; GISEL:       ; %bb.0:
1974 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1975 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
1976 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
1977 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
1978 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
1979 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
1980 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
1981 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
1982 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
1983 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
1984 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
1985 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
1986 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
1987 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
1988 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
1989 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
1990 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
1991 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
1992 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
1993 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
1994 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
1995 ; GISEL-NEXT:    s_nop 1
1996 ; GISEL-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
1997 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
1998   %result = call <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
1999   ret <16 x i32> %result
2002 define <16 x i32> @test_smfmac_i32_32x32x64_i8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <16 x i32> inreg %arg2, i32 inreg %arg3) {
2003 ; SDAG-LABEL: test_smfmac_i32_32x32x64_i8__sgpr:
2004 ; SDAG:       ; %bb.0:
2005 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2006 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
2007 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
2008 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
2009 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
2010 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
2011 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
2012 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
2013 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
2014 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
2015 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
2016 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
2017 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
2018 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
2019 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
2020 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
2021 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
2022 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
2023 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
2024 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
2025 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
2026 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2027 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
2028 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
2029 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
2030 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
2031 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
2032 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
2033 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
2034 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
2035 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2036 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2037 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2038 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
2039 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
2040 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
2041 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
2042 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
2043 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
2044 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
2045 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
2046 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
2047 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
2048 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
2049 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
2050 ; SDAG-NEXT:    s_nop 1
2051 ; SDAG-NEXT:    v_smfmac_i32_32x32x64_i8 a[0:15], v[28:31], v[0:7], v10
2052 ; SDAG-NEXT:    s_nop 7
2053 ; SDAG-NEXT:    s_nop 2
2054 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2055 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2056 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2057 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2058 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
2059 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
2060 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
2061 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
2062 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
2063 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
2064 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
2065 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
2066 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
2067 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
2068 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
2069 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
2070 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2072 ; GISEL-LABEL: test_smfmac_i32_32x32x64_i8__sgpr:
2073 ; GISEL:       ; %bb.0:
2074 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2075 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
2076 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
2077 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
2078 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
2079 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
2080 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
2081 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
2082 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
2083 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
2084 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
2085 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
2086 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
2087 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
2088 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
2089 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
2090 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
2091 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
2092 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
2093 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
2094 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
2095 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
2096 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
2097 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
2098 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
2099 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
2100 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
2101 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
2102 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
2103 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
2104 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
2105 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
2106 ; GISEL-NEXT:    s_nop 1
2107 ; GISEL-NEXT:    v_smfmac_i32_32x32x64_i8 v[0:15], v[34:37], v[48:55], v16
2108 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2109   %result = call <16 x i32> @llvm.amdgcn.smfmac.i32.32x32x64.i8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x i32> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2110   ret <16 x i32> %result
2113 ; --------------------------------------------------------------------
2114 ; llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8
2115 ; --------------------------------------------------------------------
2117 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32>, <8 x i32>, <4 x float>, i32, i32 immarg, i32 immarg)
2119 define amdgpu_kernel void @test_smfmac_f32_16x16x128_bf8_bf8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
2120 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__vgpr:
2121 ; SDAG:       ; %bb.0: ; %bb
2122 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
2123 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2124 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2125 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2126 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
2127 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2128 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
2129 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
2130 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x54
2131 ; SDAG-NEXT:    v_mov_b32_e32 v12, s8
2132 ; SDAG-NEXT:    v_mov_b32_e32 v13, s9
2133 ; SDAG-NEXT:    v_mov_b32_e32 v14, s10
2134 ; SDAG-NEXT:    v_mov_b32_e32 v15, s11
2135 ; SDAG-NEXT:    v_mov_b32_e32 v0, s12
2136 ; SDAG-NEXT:    v_mov_b32_e32 v1, s13
2137 ; SDAG-NEXT:    v_mov_b32_e32 v2, s14
2138 ; SDAG-NEXT:    v_mov_b32_e32 v3, s15
2139 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2140 ; SDAG-NEXT:    v_mov_b32_e32 v4, s0
2141 ; SDAG-NEXT:    v_mov_b32_e32 v5, s1
2142 ; SDAG-NEXT:    v_mov_b32_e32 v6, s2
2143 ; SDAG-NEXT:    v_mov_b32_e32 v7, s3
2144 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
2145 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
2146 ; SDAG-NEXT:    s_nop 0
2147 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
2148 ; SDAG-NEXT:    s_nop 6
2149 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
2150 ; SDAG-NEXT:    s_endpgm
2152 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__vgpr:
2153 ; GISEL:       ; %bb.0: ; %bb
2154 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2155 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2156 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2157 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2158 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[0:1]
2159 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2160 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
2161 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
2162 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2163 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[10:11]
2164 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[8:9]
2165 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[12:13]
2166 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[14:15]
2167 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2168 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2169 ; GISEL-NEXT:    v_mov_b32_e32 v16, s2
2170 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
2171 ; GISEL-NEXT:    s_nop 0
2172 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
2173 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
2174 ; GISEL-NEXT:    s_nop 5
2175 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[0:1]
2176 ; GISEL-NEXT:    s_endpgm
2178   %id = call i32 @llvm.amdgcn.workitem.id.x()
2179   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
2180   %in.1 = load <4 x float>, ptr addrspace(1) %gep
2181   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32> %a, <8 x i32> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
2182   store <4 x float> %mai.1, ptr addrspace(1) %arg
2183   ret void
2186 define <4 x float> @test_smfmac_f32_16x16x128_bf8_bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2187 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_bf8:
2188 ; SDAG:       ; %bb.0:
2189 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2190 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2191 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2192 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2193 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2194 ; SDAG-NEXT:    s_nop 1
2195 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 a[0:3], v[0:3], v[4:11], v16
2196 ; SDAG-NEXT:    s_nop 6
2197 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2198 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2199 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2200 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2201 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2203 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_bf8:
2204 ; GISEL:       ; %bb.0:
2205 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2206 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[12:15], v[0:3], v[4:11], v16
2207 ; GISEL-NEXT:    s_nop 6
2208 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2209 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2210 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2211 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2212 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2213   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2214   ret <4 x float> %result
2217 define <4 x float> @test_smfmac_f32_16x16x128_bf8_bf8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2218 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__flags0:
2219 ; SDAG:       ; %bb.0:
2220 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2221 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2222 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2223 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2224 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2225 ; SDAG-NEXT:    s_nop 1
2226 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
2227 ; SDAG-NEXT:    s_nop 6
2228 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2229 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2230 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2231 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2232 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2234 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__flags0:
2235 ; GISEL:       ; %bb.0:
2236 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2237 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
2238 ; GISEL-NEXT:    s_nop 6
2239 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2240 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2241 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2242 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2243 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2244   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
2245   ret <4 x float> %result
2248 define <4 x float> @test_smfmac_f32_16x16x128_bf8_bf8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2249 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__flags1:
2250 ; SDAG:       ; %bb.0:
2251 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2252 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2253 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2254 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2255 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2256 ; SDAG-NEXT:    s_nop 1
2257 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
2258 ; SDAG-NEXT:    s_nop 6
2259 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2260 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2261 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2262 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2263 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2265 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__flags1:
2266 ; GISEL:       ; %bb.0:
2267 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2268 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
2269 ; GISEL-NEXT:    s_nop 6
2270 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2271 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2272 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2273 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2274 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2275   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
2276   ret <4 x float> %result
2279 define <4 x float> @test_smfmac_f32_16x16x128_bf8_bf8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
2280 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__sgpr:
2281 ; SDAG:       ; %bb.0:
2282 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2283 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
2284 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
2285 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
2286 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
2287 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
2288 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
2289 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
2290 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
2291 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
2292 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
2293 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
2294 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
2295 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
2296 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
2297 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
2298 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
2299 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
2300 ; SDAG-NEXT:    s_nop 1
2301 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 a[0:3], v[8:11], v[0:7], v12
2302 ; SDAG-NEXT:    s_nop 6
2303 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2304 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2305 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2306 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2307 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2309 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_bf8__sgpr:
2310 ; GISEL:       ; %bb.0:
2311 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2312 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
2313 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
2314 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2315 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
2316 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2317 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
2318 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
2319 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
2320 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
2321 ; GISEL-NEXT:    s_nop 1
2322 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_bf8 v[0:3], v[12:15], v[4:11], v16
2323 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2324   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2325   ret <4 x float> %result
2328 ; --------------------------------------------------------------------
2329 ; llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8
2330 ; --------------------------------------------------------------------
2332 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32>, <8 x i32>, <4 x float>, i32, i32 immarg, i32 immarg)
2334 define amdgpu_kernel void @test_smfmac_f32_16x16x128_bf8_fp8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
2335 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__vgpr:
2336 ; SDAG:       ; %bb.0: ; %bb
2337 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
2338 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2339 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2340 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2341 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
2342 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2343 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
2344 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
2345 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x54
2346 ; SDAG-NEXT:    v_mov_b32_e32 v12, s8
2347 ; SDAG-NEXT:    v_mov_b32_e32 v13, s9
2348 ; SDAG-NEXT:    v_mov_b32_e32 v14, s10
2349 ; SDAG-NEXT:    v_mov_b32_e32 v15, s11
2350 ; SDAG-NEXT:    v_mov_b32_e32 v0, s12
2351 ; SDAG-NEXT:    v_mov_b32_e32 v1, s13
2352 ; SDAG-NEXT:    v_mov_b32_e32 v2, s14
2353 ; SDAG-NEXT:    v_mov_b32_e32 v3, s15
2354 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2355 ; SDAG-NEXT:    v_mov_b32_e32 v4, s0
2356 ; SDAG-NEXT:    v_mov_b32_e32 v5, s1
2357 ; SDAG-NEXT:    v_mov_b32_e32 v6, s2
2358 ; SDAG-NEXT:    v_mov_b32_e32 v7, s3
2359 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
2360 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
2361 ; SDAG-NEXT:    s_nop 0
2362 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
2363 ; SDAG-NEXT:    s_nop 6
2364 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
2365 ; SDAG-NEXT:    s_endpgm
2367 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__vgpr:
2368 ; GISEL:       ; %bb.0: ; %bb
2369 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2370 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2371 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2372 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2373 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[0:1]
2374 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2375 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
2376 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
2377 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2378 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[10:11]
2379 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[8:9]
2380 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[12:13]
2381 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[14:15]
2382 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2383 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2384 ; GISEL-NEXT:    v_mov_b32_e32 v16, s2
2385 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
2386 ; GISEL-NEXT:    s_nop 0
2387 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
2388 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
2389 ; GISEL-NEXT:    s_nop 5
2390 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[0:1]
2391 ; GISEL-NEXT:    s_endpgm
2393   %id = call i32 @llvm.amdgcn.workitem.id.x()
2394   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
2395   %in.1 = load <4 x float>, ptr addrspace(1) %gep
2396   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32> %a, <8 x i32> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
2397   store <4 x float> %mai.1, ptr addrspace(1) %arg
2398   ret void
2401 define <4 x float> @test_smfmac_f32_16x16x128_bf8_fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2402 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_fp8:
2403 ; SDAG:       ; %bb.0:
2404 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2405 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2406 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2407 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2408 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2409 ; SDAG-NEXT:    s_nop 1
2410 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 a[0:3], v[0:3], v[4:11], v16
2411 ; SDAG-NEXT:    s_nop 6
2412 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2413 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2414 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2415 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2416 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2418 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_fp8:
2419 ; GISEL:       ; %bb.0:
2420 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2421 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[12:15], v[0:3], v[4:11], v16
2422 ; GISEL-NEXT:    s_nop 6
2423 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2424 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2425 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2426 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2427 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2428   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2429   ret <4 x float> %result
2432 define <4 x float> @test_smfmac_f32_16x16x128_bf8_fp8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2433 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__flags0:
2434 ; SDAG:       ; %bb.0:
2435 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2436 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2437 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2438 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2439 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2440 ; SDAG-NEXT:    s_nop 1
2441 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
2442 ; SDAG-NEXT:    s_nop 6
2443 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2444 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2445 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2446 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2447 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2449 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__flags0:
2450 ; GISEL:       ; %bb.0:
2451 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2452 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
2453 ; GISEL-NEXT:    s_nop 6
2454 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2455 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2456 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2457 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2458 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2459   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
2460   ret <4 x float> %result
2463 define <4 x float> @test_smfmac_f32_16x16x128_bf8_fp8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2464 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__flags1:
2465 ; SDAG:       ; %bb.0:
2466 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2467 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2468 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2469 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2470 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2471 ; SDAG-NEXT:    s_nop 1
2472 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
2473 ; SDAG-NEXT:    s_nop 6
2474 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2475 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2476 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2477 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2478 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2480 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__flags1:
2481 ; GISEL:       ; %bb.0:
2482 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2483 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
2484 ; GISEL-NEXT:    s_nop 6
2485 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2486 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2487 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2488 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2489 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2490   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
2491   ret <4 x float> %result
2494 define <4 x float> @test_smfmac_f32_16x16x128_bf8_fp8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
2495 ; SDAG-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__sgpr:
2496 ; SDAG:       ; %bb.0:
2497 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2498 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
2499 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
2500 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
2501 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
2502 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
2503 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
2504 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
2505 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
2506 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
2507 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
2508 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
2509 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
2510 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
2511 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
2512 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
2513 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
2514 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
2515 ; SDAG-NEXT:    s_nop 1
2516 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 a[0:3], v[8:11], v[0:7], v12
2517 ; SDAG-NEXT:    s_nop 6
2518 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2519 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2520 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2521 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2522 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2524 ; GISEL-LABEL: test_smfmac_f32_16x16x128_bf8_fp8__sgpr:
2525 ; GISEL:       ; %bb.0:
2526 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2527 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
2528 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
2529 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2530 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
2531 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2532 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
2533 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
2534 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
2535 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
2536 ; GISEL-NEXT:    s_nop 1
2537 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_bf8_fp8 v[0:3], v[12:15], v[4:11], v16
2538 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2539   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2540   ret <4 x float> %result
2543 ; --------------------------------------------------------------------
2544 ; llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8
2545 ; --------------------------------------------------------------------
2547 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32>, <8 x i32>, <4 x float>, i32, i32 immarg, i32 immarg)
2549 define amdgpu_kernel void @test_smfmac_f32_16x16x128_fp8_bf8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
2550 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__vgpr:
2551 ; SDAG:       ; %bb.0: ; %bb
2552 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
2553 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2554 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2555 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2556 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
2557 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2558 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
2559 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
2560 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x54
2561 ; SDAG-NEXT:    v_mov_b32_e32 v12, s8
2562 ; SDAG-NEXT:    v_mov_b32_e32 v13, s9
2563 ; SDAG-NEXT:    v_mov_b32_e32 v14, s10
2564 ; SDAG-NEXT:    v_mov_b32_e32 v15, s11
2565 ; SDAG-NEXT:    v_mov_b32_e32 v0, s12
2566 ; SDAG-NEXT:    v_mov_b32_e32 v1, s13
2567 ; SDAG-NEXT:    v_mov_b32_e32 v2, s14
2568 ; SDAG-NEXT:    v_mov_b32_e32 v3, s15
2569 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2570 ; SDAG-NEXT:    v_mov_b32_e32 v4, s0
2571 ; SDAG-NEXT:    v_mov_b32_e32 v5, s1
2572 ; SDAG-NEXT:    v_mov_b32_e32 v6, s2
2573 ; SDAG-NEXT:    v_mov_b32_e32 v7, s3
2574 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
2575 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
2576 ; SDAG-NEXT:    s_nop 0
2577 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
2578 ; SDAG-NEXT:    s_nop 6
2579 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
2580 ; SDAG-NEXT:    s_endpgm
2582 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__vgpr:
2583 ; GISEL:       ; %bb.0: ; %bb
2584 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2585 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2586 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2587 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2588 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[0:1]
2589 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2590 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
2591 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
2592 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2593 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[10:11]
2594 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[8:9]
2595 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[12:13]
2596 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[14:15]
2597 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2598 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2599 ; GISEL-NEXT:    v_mov_b32_e32 v16, s2
2600 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
2601 ; GISEL-NEXT:    s_nop 0
2602 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
2603 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
2604 ; GISEL-NEXT:    s_nop 5
2605 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[0:1]
2606 ; GISEL-NEXT:    s_endpgm
2608   %id = call i32 @llvm.amdgcn.workitem.id.x()
2609   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
2610   %in.1 = load <4 x float>, ptr addrspace(1) %gep
2611   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32> %a, <8 x i32> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
2612   store <4 x float> %mai.1, ptr addrspace(1) %arg
2613   ret void
2616 define <4 x float> @test_smfmac_f32_16x16x128_fp8_bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2617 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_bf8:
2618 ; SDAG:       ; %bb.0:
2619 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2620 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2621 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2622 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2623 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2624 ; SDAG-NEXT:    s_nop 1
2625 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 a[0:3], v[0:3], v[4:11], v16
2626 ; SDAG-NEXT:    s_nop 6
2627 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2628 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2629 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2630 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2631 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2633 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_bf8:
2634 ; GISEL:       ; %bb.0:
2635 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2636 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[12:15], v[0:3], v[4:11], v16
2637 ; GISEL-NEXT:    s_nop 6
2638 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2639 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2640 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2641 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2642 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2643   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2644   ret <4 x float> %result
2647 define <4 x float> @test_smfmac_f32_16x16x128_fp8_bf8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2648 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__flags0:
2649 ; SDAG:       ; %bb.0:
2650 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2651 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2652 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2653 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2654 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2655 ; SDAG-NEXT:    s_nop 1
2656 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
2657 ; SDAG-NEXT:    s_nop 6
2658 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2659 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2660 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2661 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2662 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2664 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__flags0:
2665 ; GISEL:       ; %bb.0:
2666 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2667 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
2668 ; GISEL-NEXT:    s_nop 6
2669 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2670 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2671 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2672 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2673 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2674   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
2675   ret <4 x float> %result
2678 define <4 x float> @test_smfmac_f32_16x16x128_fp8_bf8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2679 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__flags1:
2680 ; SDAG:       ; %bb.0:
2681 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2682 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2683 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2684 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2685 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2686 ; SDAG-NEXT:    s_nop 1
2687 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
2688 ; SDAG-NEXT:    s_nop 6
2689 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2690 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2691 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2692 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2693 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2695 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__flags1:
2696 ; GISEL:       ; %bb.0:
2697 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2698 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
2699 ; GISEL-NEXT:    s_nop 6
2700 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2701 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2702 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2703 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2704 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2705   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
2706   ret <4 x float> %result
2709 define <4 x float> @test_smfmac_f32_16x16x128_fp8_bf8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
2710 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__sgpr:
2711 ; SDAG:       ; %bb.0:
2712 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2713 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
2714 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
2715 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
2716 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
2717 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
2718 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
2719 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
2720 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
2721 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
2722 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
2723 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
2724 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
2725 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
2726 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
2727 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
2728 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
2729 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
2730 ; SDAG-NEXT:    s_nop 1
2731 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 a[0:3], v[8:11], v[0:7], v12
2732 ; SDAG-NEXT:    s_nop 6
2733 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2734 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2735 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2736 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2737 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2739 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_bf8__sgpr:
2740 ; GISEL:       ; %bb.0:
2741 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2742 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
2743 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
2744 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2745 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
2746 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2747 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
2748 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
2749 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
2750 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
2751 ; GISEL-NEXT:    s_nop 1
2752 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_bf8 v[0:3], v[12:15], v[4:11], v16
2753 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2754   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2755   ret <4 x float> %result
2758 ; --------------------------------------------------------------------
2759 ; llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8
2760 ; --------------------------------------------------------------------
2762 declare <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32>, <8 x i32>, <4 x float>, i32, i32 immarg, i32 immarg)
2764 define amdgpu_kernel void @test_smfmac_f32_16x16x128_fp8_fp8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
2765 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__vgpr:
2766 ; SDAG:       ; %bb.0: ; %bb
2767 ; SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x24
2768 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2769 ; SDAG-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2770 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2771 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
2772 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2773 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v0, s[6:7]
2774 ; SDAG-NEXT:    s_load_dword s16, s[4:5], 0x64
2775 ; SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x54
2776 ; SDAG-NEXT:    v_mov_b32_e32 v12, s8
2777 ; SDAG-NEXT:    v_mov_b32_e32 v13, s9
2778 ; SDAG-NEXT:    v_mov_b32_e32 v14, s10
2779 ; SDAG-NEXT:    v_mov_b32_e32 v15, s11
2780 ; SDAG-NEXT:    v_mov_b32_e32 v0, s12
2781 ; SDAG-NEXT:    v_mov_b32_e32 v1, s13
2782 ; SDAG-NEXT:    v_mov_b32_e32 v2, s14
2783 ; SDAG-NEXT:    v_mov_b32_e32 v3, s15
2784 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2785 ; SDAG-NEXT:    v_mov_b32_e32 v4, s0
2786 ; SDAG-NEXT:    v_mov_b32_e32 v5, s1
2787 ; SDAG-NEXT:    v_mov_b32_e32 v6, s2
2788 ; SDAG-NEXT:    v_mov_b32_e32 v7, s3
2789 ; SDAG-NEXT:    v_mov_b32_e32 v17, s16
2790 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
2791 ; SDAG-NEXT:    s_nop 0
2792 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[8:11], v[12:15], v[0:7], v17 cbsz:1 abid:2
2793 ; SDAG-NEXT:    s_nop 6
2794 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[6:7]
2795 ; SDAG-NEXT:    s_endpgm
2797 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__vgpr:
2798 ; GISEL:       ; %bb.0: ; %bb
2799 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2800 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2801 ; GISEL-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2802 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2803 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v0, s[0:1]
2804 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2805 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
2806 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
2807 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2808 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[10:11]
2809 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[8:9]
2810 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[12:13]
2811 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[14:15]
2812 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2813 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2814 ; GISEL-NEXT:    v_mov_b32_e32 v16, s2
2815 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
2816 ; GISEL-NEXT:    s_nop 0
2817 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[8:11], v[12:15], v[0:7], v16 cbsz:1 abid:2
2818 ; GISEL-NEXT:    v_mov_b32_e32 v0, 0
2819 ; GISEL-NEXT:    s_nop 5
2820 ; GISEL-NEXT:    global_store_dwordx4 v0, v[8:11], s[0:1]
2821 ; GISEL-NEXT:    s_endpgm
2823   %id = call i32 @llvm.amdgcn.workitem.id.x()
2824   %gep = getelementptr <4 x float>, ptr addrspace(1) %arg, i32 %id
2825   %in.1 = load <4 x float>, ptr addrspace(1) %gep
2826   %mai.1 = tail call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32> %a, <8 x i32> %b, <4 x float> %in.1, i32 %idx, i32 1, i32 2)
2827   store <4 x float> %mai.1, ptr addrspace(1) %arg
2828   ret void
2831 define <4 x float> @test_smfmac_f32_16x16x128_fp8_fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2832 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_fp8:
2833 ; SDAG:       ; %bb.0:
2834 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2835 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2836 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2837 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2838 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2839 ; SDAG-NEXT:    s_nop 1
2840 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 a[0:3], v[0:3], v[4:11], v16
2841 ; SDAG-NEXT:    s_nop 6
2842 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2843 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2844 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2845 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2846 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2848 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_fp8:
2849 ; GISEL:       ; %bb.0:
2850 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2851 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[12:15], v[0:3], v[4:11], v16
2852 ; GISEL-NEXT:    s_nop 6
2853 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2854 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2855 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2856 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2857 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2858   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2859   ret <4 x float> %result
2862 define <4 x float> @test_smfmac_f32_16x16x128_fp8_fp8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2863 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__flags0:
2864 ; SDAG:       ; %bb.0:
2865 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2866 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2867 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2868 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2869 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2870 ; SDAG-NEXT:    s_nop 1
2871 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 a[0:3], v[0:3], v[4:11], v16 cbsz:1 abid:3
2872 ; SDAG-NEXT:    s_nop 6
2873 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2874 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2875 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2876 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2877 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2879 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__flags0:
2880 ; GISEL:       ; %bb.0:
2881 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2882 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[12:15], v[0:3], v[4:11], v16 cbsz:1 abid:3
2883 ; GISEL-NEXT:    s_nop 6
2884 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2885 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2886 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2887 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2888 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2889   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
2890   ret <4 x float> %result
2893 define <4 x float> @test_smfmac_f32_16x16x128_fp8_fp8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3) {
2894 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__flags1:
2895 ; SDAG:       ; %bb.0:
2896 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2897 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
2898 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
2899 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
2900 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
2901 ; SDAG-NEXT:    s_nop 1
2902 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 a[0:3], v[0:3], v[4:11], v16 cbsz:3 abid:1
2903 ; SDAG-NEXT:    s_nop 6
2904 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2905 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2906 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2907 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2908 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2910 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__flags1:
2911 ; GISEL:       ; %bb.0:
2912 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2913 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[12:15], v[0:3], v[4:11], v16 cbsz:3 abid:1
2914 ; GISEL-NEXT:    s_nop 6
2915 ; GISEL-NEXT:    v_mov_b32_e32 v0, v12
2916 ; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2917 ; GISEL-NEXT:    v_mov_b32_e32 v2, v14
2918 ; GISEL-NEXT:    v_mov_b32_e32 v3, v15
2919 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2920   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
2921   ret <4 x float> %result
2924 define <4 x float> @test_smfmac_f32_16x16x128_fp8_fp8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <4 x float> inreg %arg2, i32 inreg %arg3) {
2925 ; SDAG-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__sgpr:
2926 ; SDAG:       ; %bb.0:
2927 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2928 ; SDAG-NEXT:    v_mov_b32_e32 v8, s0
2929 ; SDAG-NEXT:    v_mov_b32_e32 v9, s1
2930 ; SDAG-NEXT:    v_mov_b32_e32 v10, s2
2931 ; SDAG-NEXT:    v_mov_b32_e32 v11, s3
2932 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
2933 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
2934 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
2935 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
2936 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
2937 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
2938 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
2939 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
2940 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, s24
2941 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, s25
2942 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, s26
2943 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, s27
2944 ; SDAG-NEXT:    v_mov_b32_e32 v12, s28
2945 ; SDAG-NEXT:    s_nop 1
2946 ; SDAG-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 a[0:3], v[8:11], v[0:7], v12
2947 ; SDAG-NEXT:    s_nop 6
2948 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
2949 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
2950 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
2951 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
2952 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
2954 ; GISEL-LABEL: test_smfmac_f32_16x16x128_fp8_fp8__sgpr:
2955 ; GISEL:       ; %bb.0:
2956 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2957 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], s[2:3]
2958 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], s[0:1]
2959 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], s[16:17]
2960 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], s[24:25]
2961 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], s[18:19]
2962 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], s[20:21]
2963 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], s[22:23]
2964 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], s[26:27]
2965 ; GISEL-NEXT:    v_mov_b32_e32 v16, s28
2966 ; GISEL-NEXT:    s_nop 1
2967 ; GISEL-NEXT:    v_smfmac_f32_16x16x128_fp8_fp8 v[0:3], v[12:15], v[4:11], v16
2968 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
2969   %result = call <4 x float> @llvm.amdgcn.smfmac.f32.16x16x128.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <4 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
2970   ret <4 x float> %result
2973 ; --------------------------------------------------------------------
2974 ; llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8
2975 ; --------------------------------------------------------------------
2977 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32>, <8 x i32>, <16 x float>, i32, i32 immarg, i32 immarg)
2979 define amdgpu_kernel void @test_smfmac_f32_32x32x64_bf8_bf8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
2980 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__vgpr:
2981 ; SDAG:       ; %bb.0: ; %bb
2982 ; SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2983 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2984 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
2985 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2986 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
2987 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
2988 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
2989 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
2990 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
2991 ; SDAG-NEXT:    s_load_dword s2, s[4:5], 0x64
2992 ; SDAG-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
2993 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2994 ; SDAG-NEXT:    v_mov_b32_e32 v24, s8
2995 ; SDAG-NEXT:    v_mov_b32_e32 v25, s9
2996 ; SDAG-NEXT:    v_mov_b32_e32 v26, s10
2997 ; SDAG-NEXT:    v_mov_b32_e32 v27, s11
2998 ; SDAG-NEXT:    v_mov_b32_e32 v16, s12
2999 ; SDAG-NEXT:    v_mov_b32_e32 v17, s13
3000 ; SDAG-NEXT:    v_mov_b32_e32 v18, s14
3001 ; SDAG-NEXT:    v_mov_b32_e32 v19, s15
3002 ; SDAG-NEXT:    v_mov_b32_e32 v20, s16
3003 ; SDAG-NEXT:    v_mov_b32_e32 v21, s17
3004 ; SDAG-NEXT:    v_mov_b32_e32 v22, s18
3005 ; SDAG-NEXT:    v_mov_b32_e32 v23, s19
3006 ; SDAG-NEXT:    v_mov_b32_e32 v28, s2
3007 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3008 ; SDAG-NEXT:    s_nop 0
3009 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3010 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
3011 ; SDAG-NEXT:    s_nop 7
3012 ; SDAG-NEXT:    s_nop 1
3013 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3014 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3015 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3016 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3017 ; SDAG-NEXT:    s_endpgm
3019 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__vgpr:
3020 ; GISEL:       ; %bb.0: ; %bb
3021 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3022 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3023 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
3024 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3025 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
3026 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
3027 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
3028 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
3029 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
3030 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
3031 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
3032 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3033 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[10:11]
3034 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[8:9]
3035 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[18:19]
3036 ; GISEL-NEXT:    v_mov_b32_e32 v28, s2
3037 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[16:17]
3038 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[14:15]
3039 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[12:13]
3040 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3041 ; GISEL-NEXT:    s_nop 0
3042 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3043 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
3044 ; GISEL-NEXT:    s_nop 7
3045 ; GISEL-NEXT:    s_nop 1
3046 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3047 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3048 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3049 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3050 ; GISEL-NEXT:    s_endpgm
3052   %id = call i32 @llvm.amdgcn.workitem.id.x()
3053   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
3054   %in.1 = load <16 x float>, ptr addrspace(1) %gep
3055   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32> %a, <8 x i32> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
3056   store <16 x float> %mai.1, ptr addrspace(1) %arg
3057   ret void
3060 define <16 x float> @test_smfmac_f32_32x32x64_bf8_bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3061 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_bf8:
3062 ; SDAG:       ; %bb.0:
3063 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3064 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3065 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3066 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3067 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3068 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3069 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3070 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3071 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3072 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3073 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3074 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3075 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3076 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3077 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3078 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3079 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3080 ; SDAG-NEXT:    s_nop 1
3081 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 a[0:15], v[0:3], v[4:11], v28
3082 ; SDAG-NEXT:    s_nop 7
3083 ; SDAG-NEXT:    s_nop 2
3084 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3085 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3086 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3087 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3088 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3089 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3090 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3091 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3092 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3093 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3094 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3095 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3096 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3097 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3098 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3099 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3100 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3102 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_bf8:
3103 ; GISEL:       ; %bb.0:
3104 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3105 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3106 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3107 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3108 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3109 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3110 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3111 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3112 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3113 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3114 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3115 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3116 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3117 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3118 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3119 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3120 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3121 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3122 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3123 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3124 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3125 ; GISEL-NEXT:    s_nop 1
3126 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[48:51], v[30:37], v28
3127 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3128   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
3129   ret <16 x float> %result
3132 define <16 x float> @test_smfmac_f32_32x32x64_bf8_bf8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3133 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__flags0:
3134 ; SDAG:       ; %bb.0:
3135 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3136 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3137 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3138 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3139 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3140 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3141 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3142 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3143 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3144 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3145 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3146 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3147 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3148 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3149 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3150 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3151 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3152 ; SDAG-NEXT:    s_nop 1
3153 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
3154 ; SDAG-NEXT:    s_nop 7
3155 ; SDAG-NEXT:    s_nop 2
3156 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3157 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3158 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3159 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3160 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3161 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3162 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3163 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3164 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3165 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3166 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3167 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3168 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3169 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3170 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3171 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3172 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3174 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__flags0:
3175 ; GISEL:       ; %bb.0:
3176 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3177 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3178 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3179 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3180 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3181 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3182 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3183 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3184 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3185 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3186 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3187 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3188 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3189 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3190 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3191 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3192 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3193 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3194 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3195 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3196 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3197 ; GISEL-NEXT:    s_nop 1
3198 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
3199 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3200   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
3201   ret <16 x float> %result
3204 define <16 x float> @test_smfmac_f32_32x32x64_bf8_bf8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3205 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__flags1:
3206 ; SDAG:       ; %bb.0:
3207 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3208 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3209 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3210 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3211 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3212 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3213 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3214 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3215 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3216 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3217 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3218 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3219 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3220 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3221 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3222 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3223 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3224 ; SDAG-NEXT:    s_nop 1
3225 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
3226 ; SDAG-NEXT:    s_nop 7
3227 ; SDAG-NEXT:    s_nop 2
3228 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3229 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3230 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3231 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3232 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3233 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3234 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3235 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3236 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3237 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3238 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3239 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3240 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3241 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3242 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3243 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3244 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3246 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__flags1:
3247 ; GISEL:       ; %bb.0:
3248 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3249 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3250 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3251 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3252 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3253 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3254 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3255 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3256 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3257 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3258 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3259 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3260 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3261 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3262 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3263 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3264 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3265 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3266 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3267 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3268 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3269 ; GISEL-NEXT:    s_nop 1
3270 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
3271 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3272   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
3273   ret <16 x float> %result
3276 define <16 x float> @test_smfmac_f32_32x32x64_bf8_bf8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
3277 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__sgpr:
3278 ; SDAG:       ; %bb.0:
3279 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3280 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
3281 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
3282 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
3283 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
3284 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
3285 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
3286 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
3287 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
3288 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
3289 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
3290 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
3291 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
3292 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
3293 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
3294 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
3295 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
3296 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
3297 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
3298 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
3299 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
3300 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3301 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
3302 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
3303 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
3304 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
3305 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
3306 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
3307 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
3308 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
3309 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3310 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3311 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3312 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3313 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3314 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3315 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3316 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3317 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3318 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3319 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3320 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3321 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3322 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3323 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3324 ; SDAG-NEXT:    s_nop 1
3325 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 a[0:15], v[28:31], v[0:7], v10
3326 ; SDAG-NEXT:    s_nop 7
3327 ; SDAG-NEXT:    s_nop 2
3328 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3329 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3330 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3331 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3332 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3333 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3334 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3335 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3336 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3337 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3338 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3339 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3340 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3341 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3342 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3343 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3344 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3346 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_bf8__sgpr:
3347 ; GISEL:       ; %bb.0:
3348 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3349 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
3350 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
3351 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
3352 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
3353 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
3354 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
3355 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
3356 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
3357 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
3358 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
3359 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
3360 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
3361 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
3362 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
3363 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
3364 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
3365 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
3366 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
3367 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
3368 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
3369 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
3370 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
3371 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
3372 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
3373 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
3374 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
3375 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
3376 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
3377 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
3378 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
3379 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
3380 ; GISEL-NEXT:    s_nop 1
3381 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_bf8 v[0:15], v[34:37], v[48:55], v16
3382 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3383   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
3384   ret <16 x float> %result
3387 ; --------------------------------------------------------------------
3388 ; llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8
3389 ; --------------------------------------------------------------------
3391 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32>, <8 x i32>, <16 x float>, i32, i32 immarg, i32 immarg)
3393 define amdgpu_kernel void @test_smfmac_f32_32x32x64_bf8_fp8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
3394 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__vgpr:
3395 ; SDAG:       ; %bb.0: ; %bb
3396 ; SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3397 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3398 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
3399 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3400 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
3401 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
3402 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
3403 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
3404 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
3405 ; SDAG-NEXT:    s_load_dword s2, s[4:5], 0x64
3406 ; SDAG-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
3407 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3408 ; SDAG-NEXT:    v_mov_b32_e32 v24, s8
3409 ; SDAG-NEXT:    v_mov_b32_e32 v25, s9
3410 ; SDAG-NEXT:    v_mov_b32_e32 v26, s10
3411 ; SDAG-NEXT:    v_mov_b32_e32 v27, s11
3412 ; SDAG-NEXT:    v_mov_b32_e32 v16, s12
3413 ; SDAG-NEXT:    v_mov_b32_e32 v17, s13
3414 ; SDAG-NEXT:    v_mov_b32_e32 v18, s14
3415 ; SDAG-NEXT:    v_mov_b32_e32 v19, s15
3416 ; SDAG-NEXT:    v_mov_b32_e32 v20, s16
3417 ; SDAG-NEXT:    v_mov_b32_e32 v21, s17
3418 ; SDAG-NEXT:    v_mov_b32_e32 v22, s18
3419 ; SDAG-NEXT:    v_mov_b32_e32 v23, s19
3420 ; SDAG-NEXT:    v_mov_b32_e32 v28, s2
3421 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3422 ; SDAG-NEXT:    s_nop 0
3423 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3424 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
3425 ; SDAG-NEXT:    s_nop 7
3426 ; SDAG-NEXT:    s_nop 1
3427 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3428 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3429 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3430 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3431 ; SDAG-NEXT:    s_endpgm
3433 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__vgpr:
3434 ; GISEL:       ; %bb.0: ; %bb
3435 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3436 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3437 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
3438 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3439 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
3440 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
3441 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
3442 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
3443 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
3444 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
3445 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
3446 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3447 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[10:11]
3448 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[8:9]
3449 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[18:19]
3450 ; GISEL-NEXT:    v_mov_b32_e32 v28, s2
3451 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[16:17]
3452 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[14:15]
3453 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[12:13]
3454 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3455 ; GISEL-NEXT:    s_nop 0
3456 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3457 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
3458 ; GISEL-NEXT:    s_nop 7
3459 ; GISEL-NEXT:    s_nop 1
3460 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3461 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3462 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3463 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3464 ; GISEL-NEXT:    s_endpgm
3466   %id = call i32 @llvm.amdgcn.workitem.id.x()
3467   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
3468   %in.1 = load <16 x float>, ptr addrspace(1) %gep
3469   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32> %a, <8 x i32> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
3470   store <16 x float> %mai.1, ptr addrspace(1) %arg
3471   ret void
3474 define <16 x float> @test_smfmac_f32_32x32x64_bf8_fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3475 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_fp8:
3476 ; SDAG:       ; %bb.0:
3477 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3478 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3479 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3480 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3481 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3482 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3483 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3484 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3485 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3486 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3487 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3488 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3489 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3490 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3491 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3492 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3493 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3494 ; SDAG-NEXT:    s_nop 1
3495 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 a[0:15], v[0:3], v[4:11], v28
3496 ; SDAG-NEXT:    s_nop 7
3497 ; SDAG-NEXT:    s_nop 2
3498 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3499 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3500 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3501 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3502 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3503 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3504 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3505 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3506 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3507 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3508 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3509 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3510 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3511 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3512 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3513 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3514 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3516 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_fp8:
3517 ; GISEL:       ; %bb.0:
3518 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3519 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3520 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3521 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3522 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3523 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3524 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3525 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3526 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3527 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3528 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3529 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3530 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3531 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3532 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3533 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3534 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3535 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3536 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3537 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3538 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3539 ; GISEL-NEXT:    s_nop 1
3540 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[48:51], v[30:37], v28
3541 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3542   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
3543   ret <16 x float> %result
3546 define <16 x float> @test_smfmac_f32_32x32x64_bf8_fp8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3547 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__flags0:
3548 ; SDAG:       ; %bb.0:
3549 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3550 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3551 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3552 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3553 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3554 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3555 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3556 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3557 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3558 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3559 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3560 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3561 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3562 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3563 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3564 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3565 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3566 ; SDAG-NEXT:    s_nop 1
3567 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
3568 ; SDAG-NEXT:    s_nop 7
3569 ; SDAG-NEXT:    s_nop 2
3570 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3571 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3572 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3573 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3574 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3575 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3576 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3577 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3578 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3579 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3580 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3581 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3582 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3583 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3584 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3585 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3586 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3588 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__flags0:
3589 ; GISEL:       ; %bb.0:
3590 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3591 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3592 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3593 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3594 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3595 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3596 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3597 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3598 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3599 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3600 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3601 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3602 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3603 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3604 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3605 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3606 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3607 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3608 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3609 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3610 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3611 ; GISEL-NEXT:    s_nop 1
3612 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
3613 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3614   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
3615   ret <16 x float> %result
3618 define <16 x float> @test_smfmac_f32_32x32x64_bf8_fp8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3619 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__flags1:
3620 ; SDAG:       ; %bb.0:
3621 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3622 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3623 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3624 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3625 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3626 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3627 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3628 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3629 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3630 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3631 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3632 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3633 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3634 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3635 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3636 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3637 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3638 ; SDAG-NEXT:    s_nop 1
3639 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
3640 ; SDAG-NEXT:    s_nop 7
3641 ; SDAG-NEXT:    s_nop 2
3642 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3643 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3644 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3645 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3646 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3647 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3648 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3649 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3650 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3651 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3652 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3653 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3654 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3655 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3656 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3657 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3658 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3660 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__flags1:
3661 ; GISEL:       ; %bb.0:
3662 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3663 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3664 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3665 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3666 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3667 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3668 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3669 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3670 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3671 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3672 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3673 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3674 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3675 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3676 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3677 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3678 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3679 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3680 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3681 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3682 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3683 ; GISEL-NEXT:    s_nop 1
3684 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
3685 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3686   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
3687   ret <16 x float> %result
3690 define <16 x float> @test_smfmac_f32_32x32x64_bf8_fp8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
3691 ; SDAG-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__sgpr:
3692 ; SDAG:       ; %bb.0:
3693 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3694 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
3695 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
3696 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
3697 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
3698 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
3699 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
3700 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
3701 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
3702 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
3703 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
3704 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
3705 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
3706 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
3707 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
3708 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
3709 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
3710 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
3711 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
3712 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
3713 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
3714 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3715 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
3716 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
3717 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
3718 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
3719 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
3720 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
3721 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
3722 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
3723 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3724 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3725 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3726 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3727 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3728 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3729 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3730 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3731 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3732 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3733 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3734 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3735 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3736 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3737 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3738 ; SDAG-NEXT:    s_nop 1
3739 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 a[0:15], v[28:31], v[0:7], v10
3740 ; SDAG-NEXT:    s_nop 7
3741 ; SDAG-NEXT:    s_nop 2
3742 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3743 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3744 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3745 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3746 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3747 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3748 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3749 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3750 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3751 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3752 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3753 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3754 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3755 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3756 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3757 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3758 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3760 ; GISEL-LABEL: test_smfmac_f32_32x32x64_bf8_fp8__sgpr:
3761 ; GISEL:       ; %bb.0:
3762 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3763 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
3764 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
3765 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
3766 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
3767 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
3768 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
3769 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
3770 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
3771 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
3772 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
3773 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
3774 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
3775 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
3776 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
3777 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
3778 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
3779 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
3780 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
3781 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
3782 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
3783 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
3784 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
3785 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
3786 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
3787 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
3788 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
3789 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
3790 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
3791 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
3792 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
3793 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
3794 ; GISEL-NEXT:    s_nop 1
3795 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_bf8_fp8 v[0:15], v[34:37], v[48:55], v16
3796 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3797   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.bf8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
3798   ret <16 x float> %result
3801 ; --------------------------------------------------------------------
3802 ; llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8
3803 ; --------------------------------------------------------------------
3805 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32>, <8 x i32>, <16 x float>, i32, i32 immarg, i32 immarg)
3807 define amdgpu_kernel void @test_smfmac_f32_32x32x64_fp8_bf8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
3808 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__vgpr:
3809 ; SDAG:       ; %bb.0: ; %bb
3810 ; SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3811 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3812 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
3813 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3814 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
3815 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
3816 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
3817 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
3818 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
3819 ; SDAG-NEXT:    s_load_dword s2, s[4:5], 0x64
3820 ; SDAG-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
3821 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3822 ; SDAG-NEXT:    v_mov_b32_e32 v24, s8
3823 ; SDAG-NEXT:    v_mov_b32_e32 v25, s9
3824 ; SDAG-NEXT:    v_mov_b32_e32 v26, s10
3825 ; SDAG-NEXT:    v_mov_b32_e32 v27, s11
3826 ; SDAG-NEXT:    v_mov_b32_e32 v16, s12
3827 ; SDAG-NEXT:    v_mov_b32_e32 v17, s13
3828 ; SDAG-NEXT:    v_mov_b32_e32 v18, s14
3829 ; SDAG-NEXT:    v_mov_b32_e32 v19, s15
3830 ; SDAG-NEXT:    v_mov_b32_e32 v20, s16
3831 ; SDAG-NEXT:    v_mov_b32_e32 v21, s17
3832 ; SDAG-NEXT:    v_mov_b32_e32 v22, s18
3833 ; SDAG-NEXT:    v_mov_b32_e32 v23, s19
3834 ; SDAG-NEXT:    v_mov_b32_e32 v28, s2
3835 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3836 ; SDAG-NEXT:    s_nop 0
3837 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3838 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
3839 ; SDAG-NEXT:    s_nop 7
3840 ; SDAG-NEXT:    s_nop 1
3841 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3842 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3843 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3844 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3845 ; SDAG-NEXT:    s_endpgm
3847 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__vgpr:
3848 ; GISEL:       ; %bb.0: ; %bb
3849 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3850 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3851 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
3852 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3853 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
3854 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
3855 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
3856 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
3857 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
3858 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
3859 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
3860 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3861 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[10:11]
3862 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[8:9]
3863 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[18:19]
3864 ; GISEL-NEXT:    v_mov_b32_e32 v28, s2
3865 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[16:17]
3866 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[14:15]
3867 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[12:13]
3868 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3869 ; GISEL-NEXT:    s_nop 0
3870 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
3871 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
3872 ; GISEL-NEXT:    s_nop 7
3873 ; GISEL-NEXT:    s_nop 1
3874 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
3875 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
3876 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
3877 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
3878 ; GISEL-NEXT:    s_endpgm
3880   %id = call i32 @llvm.amdgcn.workitem.id.x()
3881   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
3882   %in.1 = load <16 x float>, ptr addrspace(1) %gep
3883   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32> %a, <8 x i32> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
3884   store <16 x float> %mai.1, ptr addrspace(1) %arg
3885   ret void
3888 define <16 x float> @test_smfmac_f32_32x32x64_fp8_bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3889 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_bf8:
3890 ; SDAG:       ; %bb.0:
3891 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3892 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3893 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3894 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3895 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3896 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3897 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3898 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3899 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3900 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3901 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3902 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3903 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3904 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3905 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3906 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3907 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3908 ; SDAG-NEXT:    s_nop 1
3909 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 a[0:15], v[0:3], v[4:11], v28
3910 ; SDAG-NEXT:    s_nop 7
3911 ; SDAG-NEXT:    s_nop 2
3912 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3913 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3914 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3915 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3916 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3917 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3918 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3919 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3920 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3921 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3922 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3923 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3924 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3925 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3926 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3927 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
3928 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3930 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_bf8:
3931 ; GISEL:       ; %bb.0:
3932 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3933 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
3934 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
3935 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
3936 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
3937 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
3938 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
3939 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
3940 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
3941 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
3942 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
3943 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
3944 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
3945 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
3946 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
3947 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
3948 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
3949 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
3950 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
3951 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
3952 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
3953 ; GISEL-NEXT:    s_nop 1
3954 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[48:51], v[30:37], v28
3955 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3956   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
3957   ret <16 x float> %result
3960 define <16 x float> @test_smfmac_f32_32x32x64_fp8_bf8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
3961 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__flags0:
3962 ; SDAG:       ; %bb.0:
3963 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3964 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
3965 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
3966 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
3967 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
3968 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
3969 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
3970 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
3971 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
3972 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
3973 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
3974 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
3975 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
3976 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
3977 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
3978 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
3979 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
3980 ; SDAG-NEXT:    s_nop 1
3981 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
3982 ; SDAG-NEXT:    s_nop 7
3983 ; SDAG-NEXT:    s_nop 2
3984 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
3985 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
3986 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
3987 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
3988 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
3989 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
3990 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
3991 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
3992 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
3993 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
3994 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
3995 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
3996 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
3997 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
3998 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
3999 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4000 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4002 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__flags0:
4003 ; GISEL:       ; %bb.0:
4004 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4005 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
4006 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
4007 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
4008 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
4009 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
4010 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
4011 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
4012 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
4013 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
4014 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
4015 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
4016 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
4017 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
4018 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
4019 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
4020 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
4021 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
4022 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
4023 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
4024 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
4025 ; GISEL-NEXT:    s_nop 1
4026 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
4027 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4028   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
4029   ret <16 x float> %result
4032 define <16 x float> @test_smfmac_f32_32x32x64_fp8_bf8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
4033 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__flags1:
4034 ; SDAG:       ; %bb.0:
4035 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4036 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4037 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4038 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4039 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4040 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4041 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4042 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4043 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4044 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4045 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4046 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4047 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4048 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4049 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4050 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4051 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4052 ; SDAG-NEXT:    s_nop 1
4053 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
4054 ; SDAG-NEXT:    s_nop 7
4055 ; SDAG-NEXT:    s_nop 2
4056 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4057 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4058 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4059 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4060 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4061 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4062 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4063 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4064 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4065 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4066 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4067 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4068 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4069 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4070 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4071 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4072 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4074 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__flags1:
4075 ; GISEL:       ; %bb.0:
4076 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4077 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
4078 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
4079 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
4080 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
4081 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
4082 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
4083 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
4084 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
4085 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
4086 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
4087 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
4088 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
4089 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
4090 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
4091 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
4092 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
4093 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
4094 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
4095 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
4096 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
4097 ; GISEL-NEXT:    s_nop 1
4098 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
4099 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4100   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
4101   ret <16 x float> %result
4104 define <16 x float> @test_smfmac_f32_32x32x64_fp8_bf8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
4105 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__sgpr:
4106 ; SDAG:       ; %bb.0:
4107 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4108 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
4109 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
4110 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
4111 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
4112 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
4113 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
4114 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
4115 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
4116 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
4117 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
4118 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
4119 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
4120 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
4121 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
4122 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
4123 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
4124 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
4125 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
4126 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
4127 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
4128 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4129 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
4130 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
4131 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
4132 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
4133 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
4134 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
4135 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
4136 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
4137 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4138 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4139 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4140 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4141 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4142 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4143 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4144 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4145 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4146 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4147 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4148 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4149 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4150 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4151 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4152 ; SDAG-NEXT:    s_nop 1
4153 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 a[0:15], v[28:31], v[0:7], v10
4154 ; SDAG-NEXT:    s_nop 7
4155 ; SDAG-NEXT:    s_nop 2
4156 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4157 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4158 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4159 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4160 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4161 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4162 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4163 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4164 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4165 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4166 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4167 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4168 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4169 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4170 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4171 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4172 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4174 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_bf8__sgpr:
4175 ; GISEL:       ; %bb.0:
4176 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4177 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
4178 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
4179 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
4180 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
4181 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
4182 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
4183 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
4184 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
4185 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
4186 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
4187 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
4188 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
4189 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
4190 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
4191 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
4192 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
4193 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
4194 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
4195 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
4196 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
4197 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
4198 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
4199 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
4200 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
4201 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
4202 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
4203 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
4204 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
4205 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
4206 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
4207 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
4208 ; GISEL-NEXT:    s_nop 1
4209 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_bf8 v[0:15], v[34:37], v[48:55], v16
4210 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4211   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.bf8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
4212   ret <16 x float> %result
4215 ; --------------------------------------------------------------------
4216 ; llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8
4217 ; --------------------------------------------------------------------
4219 declare <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32>, <8 x i32>, <16 x float>, i32, i32 immarg, i32 immarg)
4221 define amdgpu_kernel void @test_smfmac_f32_32x32x64_fp8_fp8__vgpr(ptr addrspace(1) %arg, <4 x i32> %a, <8 x i32> %b, i32 %idx) #0 {
4222 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__vgpr:
4223 ; SDAG:       ; %bb.0: ; %bb
4224 ; SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
4225 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
4226 ; SDAG-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
4227 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4228 ; SDAG-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
4229 ; SDAG-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
4230 ; SDAG-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
4231 ; SDAG-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
4232 ; SDAG-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
4233 ; SDAG-NEXT:    s_load_dword s2, s[4:5], 0x64
4234 ; SDAG-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
4235 ; SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4236 ; SDAG-NEXT:    v_mov_b32_e32 v24, s8
4237 ; SDAG-NEXT:    v_mov_b32_e32 v25, s9
4238 ; SDAG-NEXT:    v_mov_b32_e32 v26, s10
4239 ; SDAG-NEXT:    v_mov_b32_e32 v27, s11
4240 ; SDAG-NEXT:    v_mov_b32_e32 v16, s12
4241 ; SDAG-NEXT:    v_mov_b32_e32 v17, s13
4242 ; SDAG-NEXT:    v_mov_b32_e32 v18, s14
4243 ; SDAG-NEXT:    v_mov_b32_e32 v19, s15
4244 ; SDAG-NEXT:    v_mov_b32_e32 v20, s16
4245 ; SDAG-NEXT:    v_mov_b32_e32 v21, s17
4246 ; SDAG-NEXT:    v_mov_b32_e32 v22, s18
4247 ; SDAG-NEXT:    v_mov_b32_e32 v23, s19
4248 ; SDAG-NEXT:    v_mov_b32_e32 v28, s2
4249 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
4250 ; SDAG-NEXT:    s_nop 0
4251 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
4252 ; SDAG-NEXT:    v_mov_b32_e32 v16, 0
4253 ; SDAG-NEXT:    s_nop 7
4254 ; SDAG-NEXT:    s_nop 1
4255 ; SDAG-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
4256 ; SDAG-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
4257 ; SDAG-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
4258 ; SDAG-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
4259 ; SDAG-NEXT:    s_endpgm
4261 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__vgpr:
4262 ; GISEL:       ; %bb.0: ; %bb
4263 ; GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
4264 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
4265 ; GISEL-NEXT:    v_lshlrev_b32_e32 v16, 6, v0
4266 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4267 ; GISEL-NEXT:    global_load_dwordx4 v[0:3], v16, s[0:1]
4268 ; GISEL-NEXT:    global_load_dwordx4 v[4:7], v16, s[0:1] offset:16
4269 ; GISEL-NEXT:    global_load_dwordx4 v[8:11], v16, s[0:1] offset:32
4270 ; GISEL-NEXT:    global_load_dwordx4 v[12:15], v16, s[0:1] offset:48
4271 ; GISEL-NEXT:    s_load_dwordx8 s[8:15], s[4:5], 0x34
4272 ; GISEL-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x54
4273 ; GISEL-NEXT:    s_load_dword s2, s[4:5], 0x64
4274 ; GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4275 ; GISEL-NEXT:    v_mov_b64_e32 v[26:27], s[10:11]
4276 ; GISEL-NEXT:    v_mov_b64_e32 v[24:25], s[8:9]
4277 ; GISEL-NEXT:    v_mov_b64_e32 v[22:23], s[18:19]
4278 ; GISEL-NEXT:    v_mov_b32_e32 v28, s2
4279 ; GISEL-NEXT:    v_mov_b64_e32 v[20:21], s[16:17]
4280 ; GISEL-NEXT:    v_mov_b64_e32 v[18:19], s[14:15]
4281 ; GISEL-NEXT:    v_mov_b64_e32 v[16:17], s[12:13]
4282 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
4283 ; GISEL-NEXT:    s_nop 0
4284 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[24:27], v[16:23], v28 cbsz:1 abid:2
4285 ; GISEL-NEXT:    v_mov_b32_e32 v16, 0
4286 ; GISEL-NEXT:    s_nop 7
4287 ; GISEL-NEXT:    s_nop 1
4288 ; GISEL-NEXT:    global_store_dwordx4 v16, v[0:3], s[0:1]
4289 ; GISEL-NEXT:    global_store_dwordx4 v16, v[4:7], s[0:1] offset:16
4290 ; GISEL-NEXT:    global_store_dwordx4 v16, v[8:11], s[0:1] offset:32
4291 ; GISEL-NEXT:    global_store_dwordx4 v16, v[12:15], s[0:1] offset:48
4292 ; GISEL-NEXT:    s_endpgm
4294   %id = call i32 @llvm.amdgcn.workitem.id.x()
4295   %gep = getelementptr <16 x float>, ptr addrspace(1) %arg, i32 %id
4296   %in.1 = load <16 x float>, ptr addrspace(1) %gep
4297   %mai.1 = tail call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32> %a, <8 x i32> %b, <16 x float> %in.1, i32 %idx, i32 1, i32 2)
4298   store <16 x float> %mai.1, ptr addrspace(1) %arg
4299   ret void
4302 define <16 x float> @test_smfmac_f32_32x32x64_fp8_fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
4303 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_fp8:
4304 ; SDAG:       ; %bb.0:
4305 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4306 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4307 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4308 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4309 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4310 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4311 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4312 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4313 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4314 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4315 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4316 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4317 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4318 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4319 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4320 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4321 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4322 ; SDAG-NEXT:    s_nop 1
4323 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 a[0:15], v[0:3], v[4:11], v28
4324 ; SDAG-NEXT:    s_nop 7
4325 ; SDAG-NEXT:    s_nop 2
4326 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4327 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4328 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4329 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4330 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4331 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4332 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4333 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4334 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4335 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4336 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4337 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4338 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4339 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4340 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4341 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4342 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4344 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_fp8:
4345 ; GISEL:       ; %bb.0:
4346 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4347 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
4348 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
4349 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
4350 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
4351 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
4352 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
4353 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
4354 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
4355 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
4356 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
4357 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
4358 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
4359 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
4360 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
4361 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
4362 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
4363 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
4364 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
4365 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
4366 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
4367 ; GISEL-NEXT:    s_nop 1
4368 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[48:51], v[30:37], v28
4369 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4370   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
4371   ret <16 x float> %result
4374 define <16 x float> @test_smfmac_f32_32x32x64_fp8_fp8__flags0(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
4375 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__flags0:
4376 ; SDAG:       ; %bb.0:
4377 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4378 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4379 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4380 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4381 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4382 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4383 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4384 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4385 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4386 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4387 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4388 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4389 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4390 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4391 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4392 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4393 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4394 ; SDAG-NEXT:    s_nop 1
4395 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 a[0:15], v[0:3], v[4:11], v28 cbsz:1 abid:3
4396 ; SDAG-NEXT:    s_nop 7
4397 ; SDAG-NEXT:    s_nop 2
4398 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4399 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4400 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4401 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4402 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4403 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4404 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4405 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4406 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4407 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4408 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4409 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4410 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4411 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4412 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4413 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4414 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4416 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__flags0:
4417 ; GISEL:       ; %bb.0:
4418 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4419 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
4420 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
4421 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
4422 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
4423 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
4424 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
4425 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
4426 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
4427 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
4428 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
4429 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
4430 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
4431 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
4432 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
4433 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
4434 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
4435 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
4436 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
4437 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
4438 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
4439 ; GISEL-NEXT:    s_nop 1
4440 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[48:51], v[30:37], v28 cbsz:1 abid:3
4441 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4442   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 1, i32 immarg 3)
4443   ret <16 x float> %result
4446 define <16 x float> @test_smfmac_f32_32x32x64_fp8_fp8__flags1(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3) {
4447 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__flags1:
4448 ; SDAG:       ; %bb.0:
4449 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4450 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4451 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4452 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4453 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4454 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4455 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4456 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4457 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4458 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4459 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4460 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4461 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4462 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4463 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4464 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4465 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4466 ; SDAG-NEXT:    s_nop 1
4467 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 a[0:15], v[0:3], v[4:11], v28 cbsz:3 abid:1
4468 ; SDAG-NEXT:    s_nop 7
4469 ; SDAG-NEXT:    s_nop 2
4470 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4471 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4472 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4473 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4474 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4475 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4476 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4477 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4478 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4479 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4480 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4481 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4482 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4483 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4484 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4485 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4486 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4488 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__flags1:
4489 ; GISEL:       ; %bb.0:
4490 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4491 ; GISEL-NEXT:    v_mov_b32_e32 v48, v0
4492 ; GISEL-NEXT:    v_mov_b32_e32 v49, v1
4493 ; GISEL-NEXT:    v_mov_b32_e32 v50, v2
4494 ; GISEL-NEXT:    v_mov_b32_e32 v51, v3
4495 ; GISEL-NEXT:    v_mov_b32_e32 v30, v4
4496 ; GISEL-NEXT:    v_mov_b32_e32 v31, v5
4497 ; GISEL-NEXT:    v_mov_b32_e32 v32, v6
4498 ; GISEL-NEXT:    v_mov_b32_e32 v33, v7
4499 ; GISEL-NEXT:    v_mov_b32_e32 v34, v8
4500 ; GISEL-NEXT:    v_mov_b32_e32 v35, v9
4501 ; GISEL-NEXT:    v_mov_b32_e32 v36, v10
4502 ; GISEL-NEXT:    v_mov_b32_e32 v37, v11
4503 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[12:13]
4504 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[14:15]
4505 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[16:17]
4506 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[18:19]
4507 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[20:21]
4508 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[22:23]
4509 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[24:25]
4510 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[26:27]
4511 ; GISEL-NEXT:    s_nop 1
4512 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[48:51], v[30:37], v28 cbsz:3 abid:1
4513 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4514   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 3, i32 immarg 1)
4515   ret <16 x float> %result
4518 define <16 x float> @test_smfmac_f32_32x32x64_fp8_fp8__sgpr(<4 x i32> inreg %arg0, <8 x i32> inreg %arg1, <16 x float> inreg %arg2, i32 inreg %arg3) {
4519 ; SDAG-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__sgpr:
4520 ; SDAG:       ; %bb.0:
4521 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4522 ; SDAG-NEXT:    v_mov_b32_e32 v28, s0
4523 ; SDAG-NEXT:    v_mov_b32_e32 v29, s1
4524 ; SDAG-NEXT:    v_mov_b32_e32 v30, s2
4525 ; SDAG-NEXT:    v_mov_b32_e32 v31, s3
4526 ; SDAG-NEXT:    v_mov_b32_e32 v12, s24
4527 ; SDAG-NEXT:    v_mov_b32_e32 v27, v9
4528 ; SDAG-NEXT:    v_mov_b32_e32 v26, v8
4529 ; SDAG-NEXT:    v_mov_b32_e32 v25, v7
4530 ; SDAG-NEXT:    v_mov_b32_e32 v24, v6
4531 ; SDAG-NEXT:    v_mov_b32_e32 v23, v5
4532 ; SDAG-NEXT:    v_mov_b32_e32 v22, v4
4533 ; SDAG-NEXT:    v_mov_b32_e32 v21, v3
4534 ; SDAG-NEXT:    v_mov_b32_e32 v20, v2
4535 ; SDAG-NEXT:    v_mov_b32_e32 v19, v1
4536 ; SDAG-NEXT:    v_mov_b32_e32 v18, v0
4537 ; SDAG-NEXT:    v_mov_b32_e32 v13, s25
4538 ; SDAG-NEXT:    v_mov_b32_e32 v14, s26
4539 ; SDAG-NEXT:    v_mov_b32_e32 v15, s27
4540 ; SDAG-NEXT:    v_mov_b32_e32 v16, s28
4541 ; SDAG-NEXT:    v_mov_b32_e32 v17, s29
4542 ; SDAG-NEXT:    v_accvgpr_write_b32 a0, v12
4543 ; SDAG-NEXT:    v_mov_b32_e32 v0, s16
4544 ; SDAG-NEXT:    v_mov_b32_e32 v1, s17
4545 ; SDAG-NEXT:    v_mov_b32_e32 v2, s18
4546 ; SDAG-NEXT:    v_mov_b32_e32 v3, s19
4547 ; SDAG-NEXT:    v_mov_b32_e32 v4, s20
4548 ; SDAG-NEXT:    v_mov_b32_e32 v5, s21
4549 ; SDAG-NEXT:    v_mov_b32_e32 v6, s22
4550 ; SDAG-NEXT:    v_mov_b32_e32 v7, s23
4551 ; SDAG-NEXT:    v_accvgpr_write_b32 a1, v13
4552 ; SDAG-NEXT:    v_accvgpr_write_b32 a2, v14
4553 ; SDAG-NEXT:    v_accvgpr_write_b32 a3, v15
4554 ; SDAG-NEXT:    v_accvgpr_write_b32 a4, v16
4555 ; SDAG-NEXT:    v_accvgpr_write_b32 a5, v17
4556 ; SDAG-NEXT:    v_accvgpr_write_b32 a6, v18
4557 ; SDAG-NEXT:    v_accvgpr_write_b32 a7, v19
4558 ; SDAG-NEXT:    v_accvgpr_write_b32 a8, v20
4559 ; SDAG-NEXT:    v_accvgpr_write_b32 a9, v21
4560 ; SDAG-NEXT:    v_accvgpr_write_b32 a10, v22
4561 ; SDAG-NEXT:    v_accvgpr_write_b32 a11, v23
4562 ; SDAG-NEXT:    v_accvgpr_write_b32 a12, v24
4563 ; SDAG-NEXT:    v_accvgpr_write_b32 a13, v25
4564 ; SDAG-NEXT:    v_accvgpr_write_b32 a14, v26
4565 ; SDAG-NEXT:    v_accvgpr_write_b32 a15, v27
4566 ; SDAG-NEXT:    s_nop 1
4567 ; SDAG-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 a[0:15], v[28:31], v[0:7], v10
4568 ; SDAG-NEXT:    s_nop 7
4569 ; SDAG-NEXT:    s_nop 2
4570 ; SDAG-NEXT:    v_accvgpr_read_b32 v0, a0
4571 ; SDAG-NEXT:    v_accvgpr_read_b32 v1, a1
4572 ; SDAG-NEXT:    v_accvgpr_read_b32 v2, a2
4573 ; SDAG-NEXT:    v_accvgpr_read_b32 v3, a3
4574 ; SDAG-NEXT:    v_accvgpr_read_b32 v4, a4
4575 ; SDAG-NEXT:    v_accvgpr_read_b32 v5, a5
4576 ; SDAG-NEXT:    v_accvgpr_read_b32 v6, a6
4577 ; SDAG-NEXT:    v_accvgpr_read_b32 v7, a7
4578 ; SDAG-NEXT:    v_accvgpr_read_b32 v8, a8
4579 ; SDAG-NEXT:    v_accvgpr_read_b32 v9, a9
4580 ; SDAG-NEXT:    v_accvgpr_read_b32 v10, a10
4581 ; SDAG-NEXT:    v_accvgpr_read_b32 v11, a11
4582 ; SDAG-NEXT:    v_accvgpr_read_b32 v12, a12
4583 ; SDAG-NEXT:    v_accvgpr_read_b32 v13, a13
4584 ; SDAG-NEXT:    v_accvgpr_read_b32 v14, a14
4585 ; SDAG-NEXT:    v_accvgpr_read_b32 v15, a15
4586 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
4588 ; GISEL-LABEL: test_smfmac_f32_32x32x64_fp8_fp8__sgpr:
4589 ; GISEL:       ; %bb.0:
4590 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4591 ; GISEL-NEXT:    v_mov_b64_e32 v[36:37], s[2:3]
4592 ; GISEL-NEXT:    v_mov_b64_e32 v[34:35], s[0:1]
4593 ; GISEL-NEXT:    v_mov_b32_e32 v18, s24
4594 ; GISEL-NEXT:    v_mov_b32_e32 v19, s25
4595 ; GISEL-NEXT:    v_mov_b32_e32 v24, v0
4596 ; GISEL-NEXT:    v_mov_b32_e32 v25, v1
4597 ; GISEL-NEXT:    v_mov_b32_e32 v26, v2
4598 ; GISEL-NEXT:    v_mov_b32_e32 v27, v3
4599 ; GISEL-NEXT:    v_mov_b32_e32 v28, v4
4600 ; GISEL-NEXT:    v_mov_b32_e32 v29, v5
4601 ; GISEL-NEXT:    v_mov_b32_e32 v30, v6
4602 ; GISEL-NEXT:    v_mov_b32_e32 v31, v7
4603 ; GISEL-NEXT:    v_mov_b32_e32 v32, v8
4604 ; GISEL-NEXT:    v_mov_b32_e32 v33, v9
4605 ; GISEL-NEXT:    v_mov_b32_e32 v16, v10
4606 ; GISEL-NEXT:    v_mov_b32_e32 v20, s26
4607 ; GISEL-NEXT:    v_mov_b32_e32 v21, s27
4608 ; GISEL-NEXT:    v_mov_b32_e32 v22, s28
4609 ; GISEL-NEXT:    v_mov_b32_e32 v23, s29
4610 ; GISEL-NEXT:    v_mov_b64_e32 v[54:55], s[22:23]
4611 ; GISEL-NEXT:    v_mov_b64_e32 v[0:1], v[18:19]
4612 ; GISEL-NEXT:    v_mov_b64_e32 v[52:53], s[20:21]
4613 ; GISEL-NEXT:    v_mov_b64_e32 v[50:51], s[18:19]
4614 ; GISEL-NEXT:    v_mov_b64_e32 v[48:49], s[16:17]
4615 ; GISEL-NEXT:    v_mov_b64_e32 v[2:3], v[20:21]
4616 ; GISEL-NEXT:    v_mov_b64_e32 v[4:5], v[22:23]
4617 ; GISEL-NEXT:    v_mov_b64_e32 v[6:7], v[24:25]
4618 ; GISEL-NEXT:    v_mov_b64_e32 v[8:9], v[26:27]
4619 ; GISEL-NEXT:    v_mov_b64_e32 v[10:11], v[28:29]
4620 ; GISEL-NEXT:    v_mov_b64_e32 v[12:13], v[30:31]
4621 ; GISEL-NEXT:    v_mov_b64_e32 v[14:15], v[32:33]
4622 ; GISEL-NEXT:    s_nop 1
4623 ; GISEL-NEXT:    v_smfmac_f32_32x32x64_fp8_fp8 v[0:15], v[34:37], v[48:55], v16
4624 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
4625   %result = call <16 x float> @llvm.amdgcn.smfmac.f32.32x32x64.fp8.fp8(<4 x i32> %arg0, <8 x i32> %arg1, <16 x float> %arg2, i32 %arg3, i32 immarg 0, i32 immarg 0)
4626   ret <16 x float> %result
4629 attributes #0 = { "amdgpu-flat-work-group-size"="1,256" }
4630 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4631 ; GCN: {{.*}}