Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / bf16.ll
blob0a81e98005b1adfdf6f5b895160156fa4f2ad15d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=amdgcn -verify-machineinstrs | FileCheck %s -check-prefixes=GCN
3 ; RUN: llc < %s -mtriple=amdgcn -mcpu=hawaii -verify-machineinstrs | FileCheck %s -check-prefixes=GFX7
4 ; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck %s -check-prefixes=GFX8
5 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs | FileCheck %s -check-prefixes=GFX9
6 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefixes=GFX10
8 ; We only have storage-only BF16 support. We can load/store those values as we treat them as u16, but
9 ; we don't support operations on them. As such, codegen is expected to fail for any operation other
10 ; than simple load/stores.
12 define void @test_load_store(ptr addrspace(1) %in, ptr addrspace(1) %out) {
13 ; GCN-LABEL: test_load_store:
14 ; GCN:       ; %bb.0:
15 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16 ; GCN-NEXT:    s_mov_b32 s6, 0
17 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
18 ; GCN-NEXT:    s_mov_b32 s4, s6
19 ; GCN-NEXT:    s_mov_b32 s5, s6
20 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
21 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
23 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
24 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26 ; GFX7-LABEL: test_load_store:
27 ; GFX7:       ; %bb.0:
28 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29 ; GFX7-NEXT:    s_mov_b32 s6, 0
30 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
31 ; GFX7-NEXT:    s_mov_b32 s4, s6
32 ; GFX7-NEXT:    s_mov_b32 s5, s6
33 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
34 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
36 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
39 ; GFX8-LABEL: test_load_store:
40 ; GFX8:       ; %bb.0:
41 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
43 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
44 ; GFX8-NEXT:    flat_store_short v[2:3], v0
45 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
46 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
48 ; GFX9-LABEL: test_load_store:
49 ; GFX9:       ; %bb.0:
50 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
51 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
52 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
53 ; GFX9-NEXT:    global_store_short v[2:3], v0, off
54 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
55 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
57 ; GFX10-LABEL: test_load_store:
58 ; GFX10:       ; %bb.0:
59 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
61 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
62 ; GFX10-NEXT:    global_store_short v[2:3], v0, off
63 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
64   %val = load bfloat, ptr addrspace(1) %in
65   store bfloat %val, ptr addrspace(1) %out
66   ret void
69 define void @test_load_store_f32_to_bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
70 ; GCN-LABEL: test_load_store_f32_to_bf16:
71 ; GCN:       ; %bb.0:
72 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
73 ; GCN-NEXT:    s_mov_b32 s6, 0
74 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
75 ; GCN-NEXT:    s_mov_b32 s4, s6
76 ; GCN-NEXT:    s_mov_b32 s5, s6
77 ; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
78 ; GCN-NEXT:    s_waitcnt vmcnt(0)
79 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
80 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
81 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
82 ; GCN-NEXT:    s_setpc_b64 s[30:31]
84 ; GFX7-LABEL: test_load_store_f32_to_bf16:
85 ; GFX7:       ; %bb.0:
86 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
87 ; GFX7-NEXT:    s_mov_b32 s6, 0
88 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
89 ; GFX7-NEXT:    s_mov_b32 s4, s6
90 ; GFX7-NEXT:    s_mov_b32 s5, s6
91 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
92 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
93 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
94 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
95 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
96 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
98 ; GFX8-LABEL: test_load_store_f32_to_bf16:
99 ; GFX8:       ; %bb.0:
100 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
101 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
102 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
103 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
104 ; GFX8-NEXT:    flat_store_short v[2:3], v0
105 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
106 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
108 ; GFX9-LABEL: test_load_store_f32_to_bf16:
109 ; GFX9:       ; %bb.0:
110 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
111 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
112 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
113 ; GFX9-NEXT:    global_store_short_d16_hi v[2:3], v0, off
114 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
115 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
117 ; GFX10-LABEL: test_load_store_f32_to_bf16:
118 ; GFX10:       ; %bb.0:
119 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
120 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
121 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
122 ; GFX10-NEXT:    global_store_short_d16_hi v[2:3], v0, off
123 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
124   %val = load float, ptr addrspace(1) %in
125   %val.bf16 = fptrunc float %val to bfloat
126   store bfloat %val.bf16, ptr addrspace(1) %out
127   ret void
130 define void @test_load_store_f64_to_bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
131 ; GCN-LABEL: test_load_store_f64_to_bf16:
132 ; GCN:       ; %bb.0:
133 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
134 ; GCN-NEXT:    s_mov_b32 s6, 0
135 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
136 ; GCN-NEXT:    s_mov_b32 s4, s6
137 ; GCN-NEXT:    s_mov_b32 s5, s6
138 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
139 ; GCN-NEXT:    s_waitcnt vmcnt(0)
140 ; GCN-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
141 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
142 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
143 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
144 ; GCN-NEXT:    s_setpc_b64 s[30:31]
146 ; GFX7-LABEL: test_load_store_f64_to_bf16:
147 ; GFX7:       ; %bb.0:
148 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
149 ; GFX7-NEXT:    s_mov_b32 s6, 0
150 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
151 ; GFX7-NEXT:    s_mov_b32 s4, s6
152 ; GFX7-NEXT:    s_mov_b32 s5, s6
153 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
154 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
155 ; GFX7-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
156 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
157 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
158 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
159 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
161 ; GFX8-LABEL: test_load_store_f64_to_bf16:
162 ; GFX8:       ; %bb.0:
163 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
164 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
165 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
166 ; GFX8-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
167 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
168 ; GFX8-NEXT:    flat_store_short v[2:3], v0
169 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
170 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
172 ; GFX9-LABEL: test_load_store_f64_to_bf16:
173 ; GFX9:       ; %bb.0:
174 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
175 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
176 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
177 ; GFX9-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
178 ; GFX9-NEXT:    global_store_short_d16_hi v[2:3], v0, off
179 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
180 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
182 ; GFX10-LABEL: test_load_store_f64_to_bf16:
183 ; GFX10:       ; %bb.0:
184 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
185 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
186 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
187 ; GFX10-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
188 ; GFX10-NEXT:    global_store_short_d16_hi v[2:3], v0, off
189 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
190   %val = load double, ptr addrspace(1) %in
191   %val.bf16 = fptrunc double %val to bfloat
192   store bfloat %val.bf16, ptr addrspace(1) %out
193   ret void
196 define void @test_load_store_bf16_to_f32(ptr addrspace(1) %in, ptr addrspace(1) %out) {
197 ; GCN-LABEL: test_load_store_bf16_to_f32:
198 ; GCN:       ; %bb.0:
199 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
200 ; GCN-NEXT:    s_mov_b32 s6, 0
201 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
202 ; GCN-NEXT:    s_mov_b32 s4, s6
203 ; GCN-NEXT:    s_mov_b32 s5, s6
204 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
205 ; GCN-NEXT:    s_waitcnt vmcnt(0)
206 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
207 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
208 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
209 ; GCN-NEXT:    s_setpc_b64 s[30:31]
211 ; GFX7-LABEL: test_load_store_bf16_to_f32:
212 ; GFX7:       ; %bb.0:
213 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
214 ; GFX7-NEXT:    s_mov_b32 s6, 0
215 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
216 ; GFX7-NEXT:    s_mov_b32 s4, s6
217 ; GFX7-NEXT:    s_mov_b32 s5, s6
218 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
219 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
221 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
222 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
223 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
225 ; GFX8-LABEL: test_load_store_bf16_to_f32:
226 ; GFX8:       ; %bb.0:
227 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
228 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
229 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
230 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
231 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
232 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
233 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
235 ; GFX9-LABEL: test_load_store_bf16_to_f32:
236 ; GFX9:       ; %bb.0:
237 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
238 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
239 ; GFX9-NEXT:    global_load_short_d16_hi v4, v[0:1], off
240 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
241 ; GFX9-NEXT:    global_store_dword v[2:3], v4, off
242 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
243 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
245 ; GFX10-LABEL: test_load_store_bf16_to_f32:
246 ; GFX10:       ; %bb.0:
247 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
248 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
249 ; GFX10-NEXT:    global_load_short_d16_hi v4, v[0:1], off
250 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
251 ; GFX10-NEXT:    global_store_dword v[2:3], v4, off
252 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
253   %val = load bfloat, ptr addrspace(1) %in
254   %val.f32 = fpext bfloat %val to float
255   store float %val.f32, ptr addrspace(1) %out
256   ret void
259 define void @test_load_store_bf16_to_f64(ptr addrspace(1) %in, ptr addrspace(1) %out) {
260 ; GCN-LABEL: test_load_store_bf16_to_f64:
261 ; GCN:       ; %bb.0:
262 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
263 ; GCN-NEXT:    s_mov_b32 s6, 0
264 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
265 ; GCN-NEXT:    s_mov_b32 s4, s6
266 ; GCN-NEXT:    s_mov_b32 s5, s6
267 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
268 ; GCN-NEXT:    s_waitcnt vmcnt(0)
269 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
270 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
271 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
272 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
273 ; GCN-NEXT:    s_setpc_b64 s[30:31]
275 ; GFX7-LABEL: test_load_store_bf16_to_f64:
276 ; GFX7:       ; %bb.0:
277 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
278 ; GFX7-NEXT:    s_mov_b32 s6, 0
279 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
280 ; GFX7-NEXT:    s_mov_b32 s4, s6
281 ; GFX7-NEXT:    s_mov_b32 s5, s6
282 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
283 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
284 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
285 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
286 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
287 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
288 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
290 ; GFX8-LABEL: test_load_store_bf16_to_f64:
291 ; GFX8:       ; %bb.0:
292 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
293 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
294 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
295 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
296 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
297 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
298 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
299 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
301 ; GFX9-LABEL: test_load_store_bf16_to_f64:
302 ; GFX9:       ; %bb.0:
303 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
304 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
305 ; GFX9-NEXT:    global_load_short_d16_hi v4, v[0:1], off
306 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
307 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
308 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
309 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
310 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
312 ; GFX10-LABEL: test_load_store_bf16_to_f64:
313 ; GFX10:       ; %bb.0:
314 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
315 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
316 ; GFX10-NEXT:    global_load_short_d16_hi v4, v[0:1], off
317 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
318 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
319 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
320 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
321   %val = load bfloat, ptr addrspace(1) %in
322   %val.f64 = fpext bfloat %val to double
323   store double %val.f64, ptr addrspace(1) %out
324   ret void
327 define void @test_load_store_v2bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
328 ; GCN-LABEL: test_load_store_v2bf16:
329 ; GCN:       ; %bb.0:
330 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
331 ; GCN-NEXT:    s_mov_b32 s6, 0
332 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
333 ; GCN-NEXT:    s_mov_b32 s4, s6
334 ; GCN-NEXT:    s_mov_b32 s5, s6
335 ; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
336 ; GCN-NEXT:    s_waitcnt vmcnt(0)
337 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
338 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
339 ; GCN-NEXT:    s_setpc_b64 s[30:31]
341 ; GFX7-LABEL: test_load_store_v2bf16:
342 ; GFX7:       ; %bb.0:
343 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
344 ; GFX7-NEXT:    s_mov_b32 s6, 0
345 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
346 ; GFX7-NEXT:    s_mov_b32 s4, s6
347 ; GFX7-NEXT:    s_mov_b32 s5, s6
348 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
349 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
350 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
351 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
352 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
354 ; GFX8-LABEL: test_load_store_v2bf16:
355 ; GFX8:       ; %bb.0:
356 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
357 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
358 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
359 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
360 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
361 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
363 ; GFX9-LABEL: test_load_store_v2bf16:
364 ; GFX9:       ; %bb.0:
365 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
366 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
367 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
368 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
369 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
370 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
372 ; GFX10-LABEL: test_load_store_v2bf16:
373 ; GFX10:       ; %bb.0:
374 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
375 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
376 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
377 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
378 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
379   %val = load <2 x bfloat>, ptr addrspace(1) %in
380   store <2 x bfloat> %val, ptr addrspace(1) %out
381   ret void
384 define void @test_load_store_v4bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
385 ; GCN-LABEL: test_load_store_v4bf16:
386 ; GCN:       ; %bb.0:
387 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
388 ; GCN-NEXT:    s_mov_b32 s6, 0
389 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
390 ; GCN-NEXT:    s_mov_b32 s4, s6
391 ; GCN-NEXT:    s_mov_b32 s5, s6
392 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
393 ; GCN-NEXT:    s_waitcnt vmcnt(0)
394 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
395 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
396 ; GCN-NEXT:    s_setpc_b64 s[30:31]
398 ; GFX7-LABEL: test_load_store_v4bf16:
399 ; GFX7:       ; %bb.0:
400 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
401 ; GFX7-NEXT:    s_mov_b32 s6, 0
402 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
403 ; GFX7-NEXT:    s_mov_b32 s4, s6
404 ; GFX7-NEXT:    s_mov_b32 s5, s6
405 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
406 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
407 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
408 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
409 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
411 ; GFX8-LABEL: test_load_store_v4bf16:
412 ; GFX8:       ; %bb.0:
413 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
415 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
416 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
417 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
418 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
420 ; GFX9-LABEL: test_load_store_v4bf16:
421 ; GFX9:       ; %bb.0:
422 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
423 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
424 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
425 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
426 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
427 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
429 ; GFX10-LABEL: test_load_store_v4bf16:
430 ; GFX10:       ; %bb.0:
431 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
432 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
433 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
434 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
435 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
436   %val = load <4 x bfloat>, ptr addrspace(1) %in
437   store <4 x bfloat> %val, ptr addrspace(1) %out
438   ret void
441 define void @test_load_store_v8bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
442 ; GCN-LABEL: test_load_store_v8bf16:
443 ; GCN:       ; %bb.0:
444 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
445 ; GCN-NEXT:    s_mov_b32 s6, 0
446 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
447 ; GCN-NEXT:    s_mov_b32 s4, s6
448 ; GCN-NEXT:    s_mov_b32 s5, s6
449 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
450 ; GCN-NEXT:    s_waitcnt vmcnt(0)
451 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64
452 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
453 ; GCN-NEXT:    s_setpc_b64 s[30:31]
455 ; GFX7-LABEL: test_load_store_v8bf16:
456 ; GFX7:       ; %bb.0:
457 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
458 ; GFX7-NEXT:    s_mov_b32 s6, 0
459 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
460 ; GFX7-NEXT:    s_mov_b32 s4, s6
461 ; GFX7-NEXT:    s_mov_b32 s5, s6
462 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
463 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
464 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64
465 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
466 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
468 ; GFX8-LABEL: test_load_store_v8bf16:
469 ; GFX8:       ; %bb.0:
470 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
472 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
473 ; GFX8-NEXT:    flat_store_dwordx4 v[2:3], v[4:7]
474 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
475 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
477 ; GFX9-LABEL: test_load_store_v8bf16:
478 ; GFX9:       ; %bb.0:
479 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
480 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
481 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
482 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
483 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
484 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
486 ; GFX10-LABEL: test_load_store_v8bf16:
487 ; GFX10:       ; %bb.0:
488 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
489 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
490 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
491 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
492 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
493   %val = load <8 x bfloat>, ptr addrspace(1) %in
494   store <8 x bfloat> %val, ptr addrspace(1) %out
495   ret void
498 define void @test_load_store_v16bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
499 ; GCN-LABEL: test_load_store_v16bf16:
500 ; GCN:       ; %bb.0:
501 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
502 ; GCN-NEXT:    s_mov_b32 s6, 0
503 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
504 ; GCN-NEXT:    s_mov_b32 s4, s6
505 ; GCN-NEXT:    s_mov_b32 s5, s6
506 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16
507 ; GCN-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64
508 ; GCN-NEXT:    s_waitcnt vmcnt(1)
509 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64 offset:16
510 ; GCN-NEXT:    s_waitcnt vmcnt(1)
511 ; GCN-NEXT:    buffer_store_dwordx4 v[8:11], v[2:3], s[4:7], 0 addr64
512 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
513 ; GCN-NEXT:    s_setpc_b64 s[30:31]
515 ; GFX7-LABEL: test_load_store_v16bf16:
516 ; GFX7:       ; %bb.0:
517 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
518 ; GFX7-NEXT:    s_mov_b32 s6, 0
519 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
520 ; GFX7-NEXT:    s_mov_b32 s4, s6
521 ; GFX7-NEXT:    s_mov_b32 s5, s6
522 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16
523 ; GFX7-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64
524 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
525 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64 offset:16
526 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
527 ; GFX7-NEXT:    buffer_store_dwordx4 v[8:11], v[2:3], s[4:7], 0 addr64
528 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
529 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
531 ; GFX8-LABEL: test_load_store_v16bf16:
532 ; GFX8:       ; %bb.0:
533 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
534 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v0
535 ; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
536 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
537 ; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[0:1]
538 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v2
539 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v3, vcc
540 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
541 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
542 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
543 ; GFX8-NEXT:    flat_store_dwordx4 v[2:3], v[8:11]
544 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
545 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
547 ; GFX9-LABEL: test_load_store_v16bf16:
548 ; GFX9:       ; %bb.0:
549 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
550 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
551 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
552 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
553 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
554 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
555 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
556 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
557 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
559 ; GFX10-LABEL: test_load_store_v16bf16:
560 ; GFX10:       ; %bb.0:
561 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
562 ; GFX10-NEXT:    s_clause 0x1
563 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
564 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
565 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
566 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
567 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
568 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
569 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
570   %val = load <16 x bfloat>, ptr addrspace(1) %in
571   store <16 x bfloat> %val, ptr addrspace(1) %out
572   ret void
575 define void @test_arg_store(bfloat %in, ptr addrspace(1) %out) {
576 ; GCN-LABEL: test_arg_store:
577 ; GCN:       ; %bb.0:
578 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
579 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
580 ; GCN-NEXT:    s_mov_b32 s6, 0
581 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
582 ; GCN-NEXT:    s_mov_b32 s4, s6
583 ; GCN-NEXT:    s_mov_b32 s5, s6
584 ; GCN-NEXT:    buffer_store_short v0, v[1:2], s[4:7], 0 addr64
585 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
586 ; GCN-NEXT:    s_setpc_b64 s[30:31]
588 ; GFX7-LABEL: test_arg_store:
589 ; GFX7:       ; %bb.0:
590 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
591 ; GFX7-NEXT:    s_mov_b32 s6, 0
592 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
593 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
594 ; GFX7-NEXT:    s_mov_b32 s4, s6
595 ; GFX7-NEXT:    s_mov_b32 s5, s6
596 ; GFX7-NEXT:    buffer_store_short v0, v[1:2], s[4:7], 0 addr64
597 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
598 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
600 ; GFX8-LABEL: test_arg_store:
601 ; GFX8:       ; %bb.0:
602 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
603 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
604 ; GFX8-NEXT:    flat_store_short v[1:2], v0
605 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
606 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
608 ; GFX9-LABEL: test_arg_store:
609 ; GFX9:       ; %bb.0:
610 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
611 ; GFX9-NEXT:    global_store_short_d16_hi v[1:2], v0, off
612 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
613 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
615 ; GFX10-LABEL: test_arg_store:
616 ; GFX10:       ; %bb.0:
617 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
618 ; GFX10-NEXT:    global_store_short_d16_hi v[1:2], v0, off
619 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
620   store bfloat %in, ptr addrspace(1) %out
621   ret void
624 define void @test_arg_store_v2bf16(<2 x bfloat> %in, ptr addrspace(1) %out) {
625 ; GCN-LABEL: test_arg_store_v2bf16:
626 ; GCN:       ; %bb.0:
627 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
628 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
629 ; GCN-NEXT:    s_mov_b32 s6, 0
630 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
631 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
632 ; GCN-NEXT:    s_mov_b32 s4, s6
633 ; GCN-NEXT:    s_mov_b32 s5, s6
634 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
635 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
636 ; GCN-NEXT:    s_setpc_b64 s[30:31]
638 ; GFX7-LABEL: test_arg_store_v2bf16:
639 ; GFX7:       ; %bb.0:
640 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
641 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
642 ; GFX7-NEXT:    s_mov_b32 s6, 0
643 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
644 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
645 ; GFX7-NEXT:    s_mov_b32 s4, s6
646 ; GFX7-NEXT:    s_mov_b32 s5, s6
647 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
648 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
649 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
651 ; GFX8-LABEL: test_arg_store_v2bf16:
652 ; GFX8:       ; %bb.0:
653 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
654 ; GFX8-NEXT:    flat_store_dword v[1:2], v0
655 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
656 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
658 ; GFX9-LABEL: test_arg_store_v2bf16:
659 ; GFX9:       ; %bb.0:
660 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
661 ; GFX9-NEXT:    global_store_dword v[1:2], v0, off
662 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
663 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
665 ; GFX10-LABEL: test_arg_store_v2bf16:
666 ; GFX10:       ; %bb.0:
667 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
668 ; GFX10-NEXT:    global_store_dword v[1:2], v0, off
669 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
670   store <2 x bfloat> %in, ptr addrspace(1) %out
671   ret void
674 define void @test_arg_store_v3bf16(<3 x bfloat> %in, <3 x bfloat> addrspace(1)* %out) {
675 ; GCN-LABEL: test_arg_store_v3bf16:
676 ; GCN:       ; %bb.0:
677 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
678 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
679 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
680 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
681 ; GCN-NEXT:    s_mov_b32 s6, 0
682 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
683 ; GCN-NEXT:    s_mov_b32 s4, s6
684 ; GCN-NEXT:    s_mov_b32 s5, s6
685 ; GCN-NEXT:    buffer_store_short v2, v[3:4], s[4:7], 0 addr64 offset:4
686 ; GCN-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
687 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
688 ; GCN-NEXT:    s_setpc_b64 s[30:31]
690 ; GFX7-LABEL: test_arg_store_v3bf16:
691 ; GFX7:       ; %bb.0:
692 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
693 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
694 ; GFX7-NEXT:    s_mov_b32 s6, 0
695 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
696 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
697 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
698 ; GFX7-NEXT:    s_mov_b32 s4, s6
699 ; GFX7-NEXT:    s_mov_b32 s5, s6
700 ; GFX7-NEXT:    buffer_store_short v1, v[3:4], s[4:7], 0 addr64 offset:4
701 ; GFX7-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
702 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
703 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
705 ; GFX8-LABEL: test_arg_store_v3bf16:
706 ; GFX8:       ; %bb.0:
707 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
708 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
709 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v2
710 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
711 ; GFX8-NEXT:    flat_store_short v[2:3], v1
712 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
713 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
715 ; GFX9-LABEL: test_arg_store_v3bf16:
716 ; GFX9:       ; %bb.0:
717 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
718 ; GFX9-NEXT:    global_store_short v[2:3], v1, off offset:4
719 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
720 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
721 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
723 ; GFX10-LABEL: test_arg_store_v3bf16:
724 ; GFX10:       ; %bb.0:
725 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
726 ; GFX10-NEXT:    global_store_short v[2:3], v1, off offset:4
727 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
728 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
729   store <3 x bfloat> %in, <3 x bfloat> addrspace(1) * %out
730   ret void
733 define void @test_arg_store_v4bf16(<4 x bfloat> %in, ptr addrspace(1) %out) {
734 ; GCN-LABEL: test_arg_store_v4bf16:
735 ; GCN:       ; %bb.0:
736 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
737 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
738 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
739 ; GCN-NEXT:    s_mov_b32 s6, 0
740 ; GCN-NEXT:    v_alignbit_b32 v1, v3, v2, 16
741 ; GCN-NEXT:    v_alignbit_b32 v0, v6, v0, 16
742 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
743 ; GCN-NEXT:    s_mov_b32 s4, s6
744 ; GCN-NEXT:    s_mov_b32 s5, s6
745 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[4:5], s[4:7], 0 addr64
746 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
747 ; GCN-NEXT:    s_setpc_b64 s[30:31]
749 ; GFX7-LABEL: test_arg_store_v4bf16:
750 ; GFX7:       ; %bb.0:
751 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
752 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
753 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
754 ; GFX7-NEXT:    s_mov_b32 s6, 0
755 ; GFX7-NEXT:    v_alignbit_b32 v2, v3, v2, 16
756 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
757 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
758 ; GFX7-NEXT:    s_mov_b32 s4, s6
759 ; GFX7-NEXT:    s_mov_b32 s5, s6
760 ; GFX7-NEXT:    buffer_store_dwordx2 v[1:2], v[4:5], s[4:7], 0 addr64
761 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
762 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
764 ; GFX8-LABEL: test_arg_store_v4bf16:
765 ; GFX8:       ; %bb.0:
766 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
767 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
768 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
769 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
771 ; GFX9-LABEL: test_arg_store_v4bf16:
772 ; GFX9:       ; %bb.0:
773 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
774 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
775 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
776 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
778 ; GFX10-LABEL: test_arg_store_v4bf16:
779 ; GFX10:       ; %bb.0:
780 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
781 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
782 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
783   store <4 x bfloat> %in, ptr addrspace(1)  %out
784   ret void
787 define void @test_arg_store_v8bf16(<8 x bfloat> %in, ptr addrspace(1) %out) {
788 ; GCN-LABEL: test_arg_store_v8bf16:
789 ; GCN:       ; %bb.0:
790 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
791 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
792 ; GCN-NEXT:    s_mov_b32 s6, 0
793 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
794 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v5
795 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
796 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
797 ; GCN-NEXT:    s_mov_b32 s4, s6
798 ; GCN-NEXT:    s_mov_b32 s5, s6
799 ; GCN-NEXT:    v_alignbit_b32 v5, v7, v6, 16
800 ; GCN-NEXT:    v_alignbit_b32 v4, v10, v4, 16
801 ; GCN-NEXT:    v_alignbit_b32 v3, v3, v2, 16
802 ; GCN-NEXT:    v_alignbit_b32 v2, v1, v0, 16
803 ; GCN-NEXT:    buffer_store_dwordx4 v[2:5], v[8:9], s[4:7], 0 addr64
804 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
805 ; GCN-NEXT:    s_setpc_b64 s[30:31]
807 ; GFX7-LABEL: test_arg_store_v8bf16:
808 ; GFX7:       ; %bb.0:
809 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
810 ; GFX7-NEXT:    s_mov_b32 s6, 0
811 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
812 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
813 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
814 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
815 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
816 ; GFX7-NEXT:    s_mov_b32 s4, s6
817 ; GFX7-NEXT:    s_mov_b32 s5, s6
818 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
819 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
820 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
821 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
822 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[8:9], s[4:7], 0 addr64
823 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
824 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
826 ; GFX8-LABEL: test_arg_store_v8bf16:
827 ; GFX8:       ; %bb.0:
828 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
829 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
830 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
831 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
833 ; GFX9-LABEL: test_arg_store_v8bf16:
834 ; GFX9:       ; %bb.0:
835 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
836 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
837 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
838 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
840 ; GFX10-LABEL: test_arg_store_v8bf16:
841 ; GFX10:       ; %bb.0:
842 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
843 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
844 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
845   store <8 x bfloat> %in, ptr addrspace(1) %out
846   ret void
849 define void @test_arg_store_v16bf16(<16 x bfloat> %in, ptr addrspace(1) %out) {
850 ; GCN-LABEL: test_arg_store_v16bf16:
851 ; GCN:       ; %bb.0:
852 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
853 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
854 ; GCN-NEXT:    v_lshrrev_b32_e32 v18, 16, v5
855 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
856 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
857 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
858 ; GCN-NEXT:    s_mov_b32 s6, 0
859 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
860 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v13
861 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
862 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
863 ; GCN-NEXT:    v_alignbit_b32 v5, v7, v6, 16
864 ; GCN-NEXT:    v_alignbit_b32 v4, v18, v4, 16
865 ; GCN-NEXT:    v_alignbit_b32 v3, v3, v2, 16
866 ; GCN-NEXT:    v_alignbit_b32 v2, v1, v0, 16
867 ; GCN-NEXT:    s_mov_b32 s4, s6
868 ; GCN-NEXT:    s_mov_b32 s5, s6
869 ; GCN-NEXT:    v_alignbit_b32 v13, v15, v14, 16
870 ; GCN-NEXT:    v_alignbit_b32 v12, v19, v12, 16
871 ; GCN-NEXT:    v_alignbit_b32 v11, v11, v10, 16
872 ; GCN-NEXT:    v_alignbit_b32 v10, v9, v8, 16
873 ; GCN-NEXT:    buffer_store_dwordx4 v[10:13], v[16:17], s[4:7], 0 addr64 offset:16
874 ; GCN-NEXT:    buffer_store_dwordx4 v[2:5], v[16:17], s[4:7], 0 addr64
875 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
876 ; GCN-NEXT:    s_setpc_b64 s[30:31]
878 ; GFX7-LABEL: test_arg_store_v16bf16:
879 ; GFX7:       ; %bb.0:
880 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
881 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
882 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
883 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
884 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
885 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
886 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
887 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v15
888 ; GFX7-NEXT:    v_alignbit_b32 v14, v0, v14, 16
889 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v13
890 ; GFX7-NEXT:    v_alignbit_b32 v13, v0, v12, 16
891 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v11
892 ; GFX7-NEXT:    s_mov_b32 s6, 0
893 ; GFX7-NEXT:    v_alignbit_b32 v12, v0, v10, 16
894 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v9
895 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
896 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
897 ; GFX7-NEXT:    s_mov_b32 s4, s6
898 ; GFX7-NEXT:    s_mov_b32 s5, s6
899 ; GFX7-NEXT:    v_alignbit_b32 v11, v0, v8, 16
900 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
901 ; GFX7-NEXT:    buffer_store_dwordx4 v[11:14], v[16:17], s[4:7], 0 addr64 offset:16
902 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[16:17], s[4:7], 0 addr64
903 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
904 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
906 ; GFX8-LABEL: test_arg_store_v16bf16:
907 ; GFX8:       ; %bb.0:
908 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
909 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
910 ; GFX8-NEXT:    s_nop 0
911 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v8
912 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v9, vcc
913 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
914 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
915 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
917 ; GFX9-LABEL: test_arg_store_v16bf16:
918 ; GFX9:       ; %bb.0:
919 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
920 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
921 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
922 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
923 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
925 ; GFX10-LABEL: test_arg_store_v16bf16:
926 ; GFX10:       ; %bb.0:
927 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
928 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
929 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
930 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
931   store <16 x bfloat> %in, ptr addrspace(1) %out
932   ret void
935 define amdgpu_gfx void @test_inreg_arg_store(bfloat inreg %in, ptr addrspace(1) %out) {
936 ; GCN-LABEL: test_inreg_arg_store:
937 ; GCN:       ; %bb.0:
938 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
939 ; GCN-NEXT:    s_lshr_b32 s34, s4, 16
940 ; GCN-NEXT:    s_mov_b32 s38, 0
941 ; GCN-NEXT:    s_mov_b32 s39, 0xf000
942 ; GCN-NEXT:    s_mov_b32 s36, s38
943 ; GCN-NEXT:    s_mov_b32 s37, s38
944 ; GCN-NEXT:    v_mov_b32_e32 v2, s34
945 ; GCN-NEXT:    buffer_store_short v2, v[0:1], s[36:39], 0 addr64
946 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
947 ; GCN-NEXT:    s_setpc_b64 s[30:31]
949 ; GFX7-LABEL: test_inreg_arg_store:
950 ; GFX7:       ; %bb.0:
951 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
952 ; GFX7-NEXT:    s_lshr_b32 s34, s4, 16
953 ; GFX7-NEXT:    s_mov_b32 s38, 0
954 ; GFX7-NEXT:    s_mov_b32 s39, 0xf000
955 ; GFX7-NEXT:    s_mov_b32 s36, s38
956 ; GFX7-NEXT:    s_mov_b32 s37, s38
957 ; GFX7-NEXT:    v_mov_b32_e32 v2, s34
958 ; GFX7-NEXT:    buffer_store_short v2, v[0:1], s[36:39], 0 addr64
959 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
960 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
962 ; GFX8-LABEL: test_inreg_arg_store:
963 ; GFX8:       ; %bb.0:
964 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
965 ; GFX8-NEXT:    s_lshr_b32 s34, s4, 16
966 ; GFX8-NEXT:    v_mov_b32_e32 v2, s34
967 ; GFX8-NEXT:    flat_store_short v[0:1], v2
968 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
969 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
971 ; GFX9-LABEL: test_inreg_arg_store:
972 ; GFX9:       ; %bb.0:
973 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
974 ; GFX9-NEXT:    v_mov_b32_e32 v2, s4
975 ; GFX9-NEXT:    global_store_short_d16_hi v[0:1], v2, off
976 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
977 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
979 ; GFX10-LABEL: test_inreg_arg_store:
980 ; GFX10:       ; %bb.0:
981 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
982 ; GFX10-NEXT:    v_mov_b32_e32 v2, s4
983 ; GFX10-NEXT:    global_store_short_d16_hi v[0:1], v2, off
984 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
985   store bfloat %in, ptr addrspace(1) %out
986   ret void
989 define bfloat @test_byval(ptr addrspace(5) byval(bfloat) %bv, bfloat %val) {
990 ; GCN-LABEL: test_byval:
991 ; GCN:       ; %bb.0:
992 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
993 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
994 ; GCN-NEXT:    buffer_store_short v1, off, s[0:3], s32
995 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
996 ; GCN-NEXT:    s_setpc_b64 s[30:31]
998 ; GFX7-LABEL: test_byval:
999 ; GFX7:       ; %bb.0:
1000 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1001 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
1002 ; GFX7-NEXT:    buffer_store_short v1, off, s[0:3], s32
1003 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1004 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1006 ; GFX8-LABEL: test_byval:
1007 ; GFX8:       ; %bb.0:
1008 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1009 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
1010 ; GFX8-NEXT:    buffer_store_short v1, off, s[0:3], s32
1011 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1012 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1014 ; GFX9-LABEL: test_byval:
1015 ; GFX9:       ; %bb.0:
1016 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1017 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, off, s[0:3], s32
1018 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1019 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1021 ; GFX10-LABEL: test_byval:
1022 ; GFX10:       ; %bb.0:
1023 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1024 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, off, s[0:3], s32
1025 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1026   store bfloat %val, ptr addrspace(5) %bv
1027   %retval = load bfloat, ptr addrspace(5) %bv
1028   ret bfloat %retval
1031 define void @test_sret(ptr addrspace(5) sret(bfloat) %sret, bfloat %val) {
1032 ; GCN-LABEL: test_sret:
1033 ; GCN:       ; %bb.0:
1034 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1035 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1036 ; GCN-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
1037 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1038 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1040 ; GFX7-LABEL: test_sret:
1041 ; GFX7:       ; %bb.0:
1042 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1043 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1044 ; GFX7-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
1045 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1046 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1048 ; GFX8-LABEL: test_sret:
1049 ; GFX8:       ; %bb.0:
1050 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1051 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1052 ; GFX8-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
1053 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1054 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1056 ; GFX9-LABEL: test_sret:
1057 ; GFX9:       ; %bb.0:
1058 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1059 ; GFX9-NEXT:    buffer_store_short_d16_hi v1, v0, s[0:3], 0 offen
1060 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1061 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1063 ; GFX10-LABEL: test_sret:
1064 ; GFX10:       ; %bb.0:
1065 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1066 ; GFX10-NEXT:    buffer_store_short_d16_hi v1, v0, s[0:3], 0 offen
1067 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1068   store bfloat %val, ptr addrspace(5) %sret
1069   ret void
1072 define void @test_bitcast_from_bfloat(ptr addrspace(1) %in, ptr addrspace(1) %out) {
1073 ; GCN-LABEL: test_bitcast_from_bfloat:
1074 ; GCN:       ; %bb.0:
1075 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1076 ; GCN-NEXT:    s_mov_b32 s6, 0
1077 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1078 ; GCN-NEXT:    s_mov_b32 s4, s6
1079 ; GCN-NEXT:    s_mov_b32 s5, s6
1080 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
1081 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1082 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
1083 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1084 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1086 ; GFX7-LABEL: test_bitcast_from_bfloat:
1087 ; GFX7:       ; %bb.0:
1088 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1089 ; GFX7-NEXT:    s_mov_b32 s6, 0
1090 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1091 ; GFX7-NEXT:    s_mov_b32 s4, s6
1092 ; GFX7-NEXT:    s_mov_b32 s5, s6
1093 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
1094 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1095 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
1096 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1097 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1099 ; GFX8-LABEL: test_bitcast_from_bfloat:
1100 ; GFX8:       ; %bb.0:
1101 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1102 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
1103 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1104 ; GFX8-NEXT:    flat_store_short v[2:3], v0
1105 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1106 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1108 ; GFX9-LABEL: test_bitcast_from_bfloat:
1109 ; GFX9:       ; %bb.0:
1110 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1111 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
1112 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1113 ; GFX9-NEXT:    global_store_short v[2:3], v0, off
1114 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1115 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1117 ; GFX10-LABEL: test_bitcast_from_bfloat:
1118 ; GFX10:       ; %bb.0:
1119 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1120 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
1121 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1122 ; GFX10-NEXT:    global_store_short v[2:3], v0, off
1123 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1124   %val = load bfloat, ptr addrspace(1) %in
1125   %val_int = bitcast bfloat %val to i16
1126   store i16 %val_int, ptr addrspace(1) %out
1127   ret void
1130 define void @test_bitcast_to_bfloat(ptr addrspace(1) %out, ptr addrspace(1) %in) {
1131 ; GCN-LABEL: test_bitcast_to_bfloat:
1132 ; GCN:       ; %bb.0:
1133 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1134 ; GCN-NEXT:    s_mov_b32 s6, 0
1135 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1136 ; GCN-NEXT:    s_mov_b32 s4, s6
1137 ; GCN-NEXT:    s_mov_b32 s5, s6
1138 ; GCN-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64
1139 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1140 ; GCN-NEXT:    buffer_store_short v2, v[0:1], s[4:7], 0 addr64
1141 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1142 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1144 ; GFX7-LABEL: test_bitcast_to_bfloat:
1145 ; GFX7:       ; %bb.0:
1146 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1147 ; GFX7-NEXT:    s_mov_b32 s6, 0
1148 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1149 ; GFX7-NEXT:    s_mov_b32 s4, s6
1150 ; GFX7-NEXT:    s_mov_b32 s5, s6
1151 ; GFX7-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64
1152 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1153 ; GFX7-NEXT:    buffer_store_short v2, v[0:1], s[4:7], 0 addr64
1154 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1155 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1157 ; GFX8-LABEL: test_bitcast_to_bfloat:
1158 ; GFX8:       ; %bb.0:
1159 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1160 ; GFX8-NEXT:    flat_load_ushort v2, v[2:3]
1161 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1162 ; GFX8-NEXT:    flat_store_short v[0:1], v2
1163 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1164 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1166 ; GFX9-LABEL: test_bitcast_to_bfloat:
1167 ; GFX9:       ; %bb.0:
1168 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1169 ; GFX9-NEXT:    global_load_ushort v2, v[2:3], off
1170 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1171 ; GFX9-NEXT:    global_store_short v[0:1], v2, off
1172 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1173 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1175 ; GFX10-LABEL: test_bitcast_to_bfloat:
1176 ; GFX10:       ; %bb.0:
1177 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1178 ; GFX10-NEXT:    global_load_ushort v2, v[2:3], off
1179 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1180 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
1181 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1182   %val = load i16, ptr addrspace(1) %in
1183   %val_fp = bitcast i16 %val to bfloat
1184   store bfloat %val_fp, ptr addrspace(1) %out
1185   ret void
1188 define bfloat @test_ret(bfloat %in) {
1189 ; GCN-LABEL: test_ret:
1190 ; GCN:       ; %bb.0: ; %entry
1191 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1192 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1194 ; GFX7-LABEL: test_ret:
1195 ; GFX7:       ; %bb.0: ; %entry
1196 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1197 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1199 ; GFX8-LABEL: test_ret:
1200 ; GFX8:       ; %bb.0: ; %entry
1201 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1202 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1204 ; GFX9-LABEL: test_ret:
1205 ; GFX9:       ; %bb.0: ; %entry
1206 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1207 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1209 ; GFX10-LABEL: test_ret:
1210 ; GFX10:       ; %bb.0: ; %entry
1211 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1212 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1213 entry:
1214   ret bfloat %in
1217 define <2 x bfloat> @test_ret_v2bf16(<2 x bfloat> %in) {
1218 ; GCN-LABEL: test_ret_v2bf16:
1219 ; GCN:       ; %bb.0: ; %entry
1220 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1221 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1223 ; GFX7-LABEL: test_ret_v2bf16:
1224 ; GFX7:       ; %bb.0: ; %entry
1225 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1226 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1228 ; GFX8-LABEL: test_ret_v2bf16:
1229 ; GFX8:       ; %bb.0: ; %entry
1230 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1231 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1233 ; GFX9-LABEL: test_ret_v2bf16:
1234 ; GFX9:       ; %bb.0: ; %entry
1235 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1236 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1238 ; GFX10-LABEL: test_ret_v2bf16:
1239 ; GFX10:       ; %bb.0: ; %entry
1240 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1241 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1242 entry:
1243   ret <2 x bfloat> %in
1246 define <3 x bfloat> @test_ret_v3bf16(<3 x bfloat> %in) {
1247 ; GCN-LABEL: test_ret_v3bf16:
1248 ; GCN:       ; %bb.0: ; %entry
1249 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1252 ; GFX7-LABEL: test_ret_v3bf16:
1253 ; GFX7:       ; %bb.0: ; %entry
1254 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1255 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1257 ; GFX8-LABEL: test_ret_v3bf16:
1258 ; GFX8:       ; %bb.0: ; %entry
1259 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1260 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1261 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1263 ; GFX9-LABEL: test_ret_v3bf16:
1264 ; GFX9:       ; %bb.0: ; %entry
1265 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1266 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1267 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1269 ; GFX10-LABEL: test_ret_v3bf16:
1270 ; GFX10:       ; %bb.0: ; %entry
1271 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1272 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1273 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1274 entry:
1275   ret <3 x bfloat> %in
1278 define <4 x bfloat> @test_ret_v4bf16(<4 x bfloat> %in) {
1279 ; GCN-LABEL: test_ret_v4bf16:
1280 ; GCN:       ; %bb.0: ; %entry
1281 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1282 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1284 ; GFX7-LABEL: test_ret_v4bf16:
1285 ; GFX7:       ; %bb.0: ; %entry
1286 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1287 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1289 ; GFX8-LABEL: test_ret_v4bf16:
1290 ; GFX8:       ; %bb.0: ; %entry
1291 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1292 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1294 ; GFX9-LABEL: test_ret_v4bf16:
1295 ; GFX9:       ; %bb.0: ; %entry
1296 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1297 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1299 ; GFX10-LABEL: test_ret_v4bf16:
1300 ; GFX10:       ; %bb.0: ; %entry
1301 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1302 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1303 entry:
1304   ret <4 x bfloat> %in
1307 define <8 x bfloat> @test_ret_v8bf16(<8 x bfloat> %in) {
1308 ; GCN-LABEL: test_ret_v8bf16:
1309 ; GCN:       ; %bb.0: ; %entry
1310 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1311 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1313 ; GFX7-LABEL: test_ret_v8bf16:
1314 ; GFX7:       ; %bb.0: ; %entry
1315 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1316 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1318 ; GFX8-LABEL: test_ret_v8bf16:
1319 ; GFX8:       ; %bb.0: ; %entry
1320 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1321 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1323 ; GFX9-LABEL: test_ret_v8bf16:
1324 ; GFX9:       ; %bb.0: ; %entry
1325 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1326 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1328 ; GFX10-LABEL: test_ret_v8bf16:
1329 ; GFX10:       ; %bb.0: ; %entry
1330 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1331 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1332 entry:
1333   ret <8 x bfloat> %in
1336 define <16 x bfloat> @test_ret_v16bf16(<16 x bfloat> %in) {
1337 ; GCN-LABEL: test_ret_v16bf16:
1338 ; GCN:       ; %bb.0: ; %entry
1339 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1340 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1342 ; GFX7-LABEL: test_ret_v16bf16:
1343 ; GFX7:       ; %bb.0: ; %entry
1344 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1345 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1347 ; GFX8-LABEL: test_ret_v16bf16:
1348 ; GFX8:       ; %bb.0: ; %entry
1349 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1350 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1352 ; GFX9-LABEL: test_ret_v16bf16:
1353 ; GFX9:       ; %bb.0: ; %entry
1354 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1355 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1357 ; GFX10-LABEL: test_ret_v16bf16:
1358 ; GFX10:       ; %bb.0: ; %entry
1359 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1360 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1361 entry:
1362   ret <16 x bfloat> %in
1365 define void @test_call(bfloat %in, ptr addrspace(5) %out) {
1366 ; GCN-LABEL: test_call:
1367 ; GCN:       ; %bb.0: ; %entry
1368 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1369 ; GCN-NEXT:    s_mov_b32 s8, s33
1370 ; GCN-NEXT:    s_mov_b32 s33, s32
1371 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1372 ; GCN-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1373 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1374 ; GCN-NEXT:    s_addk_i32 s32, 0x400
1375 ; GCN-NEXT:    s_waitcnt expcnt(0)
1376 ; GCN-NEXT:    v_writelane_b32 v2, s30, 0
1377 ; GCN-NEXT:    v_writelane_b32 v2, s31, 1
1378 ; GCN-NEXT:    s_getpc_b64 s[4:5]
1379 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store@gotpcrel32@lo+4
1380 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store@gotpcrel32@hi+12
1381 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1382 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
1383 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1384 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1385 ; GCN-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
1386 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1387 ; GCN-NEXT:    v_readlane_b32 s31, v2, 1
1388 ; GCN-NEXT:    v_readlane_b32 s30, v2, 0
1389 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1390 ; GCN-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1391 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1392 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
1393 ; GCN-NEXT:    s_mov_b32 s33, s8
1394 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1395 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1397 ; GFX7-LABEL: test_call:
1398 ; GFX7:       ; %bb.0: ; %entry
1399 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1400 ; GFX7-NEXT:    s_mov_b32 s8, s33
1401 ; GFX7-NEXT:    s_mov_b32 s33, s32
1402 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1403 ; GFX7-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1404 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1405 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
1406 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
1407 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store@gotpcrel32@lo+4
1408 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store@gotpcrel32@hi+12
1409 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1410 ; GFX7-NEXT:    v_writelane_b32 v2, s30, 0
1411 ; GFX7-NEXT:    v_writelane_b32 v2, s31, 1
1412 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1413 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1414 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1415 ; GFX7-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
1416 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1417 ; GFX7-NEXT:    v_readlane_b32 s31, v2, 1
1418 ; GFX7-NEXT:    v_readlane_b32 s30, v2, 0
1419 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1420 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1421 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1422 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
1423 ; GFX7-NEXT:    s_mov_b32 s33, s8
1424 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1425 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1427 ; GFX8-LABEL: test_call:
1428 ; GFX8:       ; %bb.0: ; %entry
1429 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1430 ; GFX8-NEXT:    s_mov_b32 s6, s33
1431 ; GFX8-NEXT:    s_mov_b32 s33, s32
1432 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1433 ; GFX8-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1434 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1435 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
1436 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
1437 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store@gotpcrel32@lo+4
1438 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store@gotpcrel32@hi+12
1439 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1440 ; GFX8-NEXT:    v_writelane_b32 v2, s30, 0
1441 ; GFX8-NEXT:    v_writelane_b32 v2, s31, 1
1442 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1443 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1444 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1445 ; GFX8-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
1446 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1447 ; GFX8-NEXT:    v_readlane_b32 s31, v2, 1
1448 ; GFX8-NEXT:    v_readlane_b32 s30, v2, 0
1449 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1450 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1451 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1452 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
1453 ; GFX8-NEXT:    s_mov_b32 s33, s6
1454 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1455 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1457 ; GFX9-LABEL: test_call:
1458 ; GFX9:       ; %bb.0: ; %entry
1459 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1460 ; GFX9-NEXT:    s_mov_b32 s6, s33
1461 ; GFX9-NEXT:    s_mov_b32 s33, s32
1462 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1463 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1464 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1465 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1466 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
1467 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store@gotpcrel32@lo+4
1468 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store@gotpcrel32@hi+12
1469 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1470 ; GFX9-NEXT:    v_writelane_b32 v2, s30, 0
1471 ; GFX9-NEXT:    v_writelane_b32 v2, s31, 1
1472 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1473 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1474 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, v1, s[0:3], 0 offen
1475 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1476 ; GFX9-NEXT:    v_readlane_b32 s31, v2, 1
1477 ; GFX9-NEXT:    v_readlane_b32 s30, v2, 0
1478 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1479 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1480 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1481 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1482 ; GFX9-NEXT:    s_mov_b32 s33, s6
1483 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1484 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1486 ; GFX10-LABEL: test_call:
1487 ; GFX10:       ; %bb.0: ; %entry
1488 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1489 ; GFX10-NEXT:    s_mov_b32 s6, s33
1490 ; GFX10-NEXT:    s_mov_b32 s33, s32
1491 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1492 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1493 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1494 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1495 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1496 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
1497 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store@gotpcrel32@lo+4
1498 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store@gotpcrel32@hi+12
1499 ; GFX10-NEXT:    v_writelane_b32 v2, s30, 0
1500 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1501 ; GFX10-NEXT:    v_writelane_b32 v2, s31, 1
1502 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1503 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1504 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, v1, s[0:3], 0 offen
1505 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1506 ; GFX10-NEXT:    v_readlane_b32 s31, v2, 1
1507 ; GFX10-NEXT:    v_readlane_b32 s30, v2, 0
1508 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1509 ; GFX10-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1510 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1511 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1512 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1513 ; GFX10-NEXT:    s_mov_b32 s33, s6
1514 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1515 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1516 entry:
1517   %result = call bfloat @test_arg_store(bfloat %in)
1518   store volatile bfloat %result, ptr addrspace(5) %out
1519   ret void
1522 define void @test_call_v2bf16(<2 x bfloat> %in, ptr addrspace(5) %out) {
1523 ; GCN-LABEL: test_call_v2bf16:
1524 ; GCN:       ; %bb.0: ; %entry
1525 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1526 ; GCN-NEXT:    s_mov_b32 s8, s33
1527 ; GCN-NEXT:    s_mov_b32 s33, s32
1528 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1529 ; GCN-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1530 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1531 ; GCN-NEXT:    s_addk_i32 s32, 0x400
1532 ; GCN-NEXT:    s_waitcnt expcnt(0)
1533 ; GCN-NEXT:    v_writelane_b32 v3, s30, 0
1534 ; GCN-NEXT:    v_writelane_b32 v3, s31, 1
1535 ; GCN-NEXT:    s_getpc_b64 s[4:5]
1536 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1537 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1538 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1539 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
1540 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1541 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1542 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1543 ; GCN-NEXT:    v_add_i32_e32 v4, vcc, 2, v2
1544 ; GCN-NEXT:    buffer_store_short v1, v4, s[0:3], 0 offen
1545 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1546 ; GCN-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
1547 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1548 ; GCN-NEXT:    v_readlane_b32 s31, v3, 1
1549 ; GCN-NEXT:    v_readlane_b32 s30, v3, 0
1550 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1551 ; GCN-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1552 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1553 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
1554 ; GCN-NEXT:    s_mov_b32 s33, s8
1555 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1556 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1558 ; GFX7-LABEL: test_call_v2bf16:
1559 ; GFX7:       ; %bb.0: ; %entry
1560 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1561 ; GFX7-NEXT:    s_mov_b32 s8, s33
1562 ; GFX7-NEXT:    s_mov_b32 s33, s32
1563 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1564 ; GFX7-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1565 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1566 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
1567 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
1568 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1569 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1570 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1571 ; GFX7-NEXT:    v_writelane_b32 v3, s30, 0
1572 ; GFX7-NEXT:    v_writelane_b32 v3, s31, 1
1573 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1574 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1575 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1576 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 2, v2
1577 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1578 ; GFX7-NEXT:    buffer_store_short v1, v4, s[0:3], 0 offen
1579 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1580 ; GFX7-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
1581 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1582 ; GFX7-NEXT:    v_readlane_b32 s31, v3, 1
1583 ; GFX7-NEXT:    v_readlane_b32 s30, v3, 0
1584 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1585 ; GFX7-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1586 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1587 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
1588 ; GFX7-NEXT:    s_mov_b32 s33, s8
1589 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1590 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1592 ; GFX8-LABEL: test_call_v2bf16:
1593 ; GFX8:       ; %bb.0: ; %entry
1594 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1595 ; GFX8-NEXT:    s_mov_b32 s6, s33
1596 ; GFX8-NEXT:    s_mov_b32 s33, s32
1597 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1598 ; GFX8-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1599 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1600 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
1601 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
1602 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1603 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1604 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1605 ; GFX8-NEXT:    v_writelane_b32 v2, s30, 0
1606 ; GFX8-NEXT:    v_writelane_b32 v2, s31, 1
1607 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1608 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1609 ; GFX8-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
1610 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1611 ; GFX8-NEXT:    v_readlane_b32 s31, v2, 1
1612 ; GFX8-NEXT:    v_readlane_b32 s30, v2, 0
1613 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1614 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1615 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1616 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
1617 ; GFX8-NEXT:    s_mov_b32 s33, s6
1618 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1619 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1621 ; GFX9-LABEL: test_call_v2bf16:
1622 ; GFX9:       ; %bb.0: ; %entry
1623 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1624 ; GFX9-NEXT:    s_mov_b32 s6, s33
1625 ; GFX9-NEXT:    s_mov_b32 s33, s32
1626 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1627 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1628 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1629 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1630 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
1631 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1632 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1633 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1634 ; GFX9-NEXT:    v_writelane_b32 v2, s30, 0
1635 ; GFX9-NEXT:    v_writelane_b32 v2, s31, 1
1636 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1637 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1638 ; GFX9-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
1639 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1640 ; GFX9-NEXT:    v_readlane_b32 s31, v2, 1
1641 ; GFX9-NEXT:    v_readlane_b32 s30, v2, 0
1642 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1643 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1644 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1645 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1646 ; GFX9-NEXT:    s_mov_b32 s33, s6
1647 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1648 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1650 ; GFX10-LABEL: test_call_v2bf16:
1651 ; GFX10:       ; %bb.0: ; %entry
1652 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1653 ; GFX10-NEXT:    s_mov_b32 s6, s33
1654 ; GFX10-NEXT:    s_mov_b32 s33, s32
1655 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1656 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
1657 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1658 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1659 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1660 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
1661 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1662 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1663 ; GFX10-NEXT:    v_writelane_b32 v2, s30, 0
1664 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1665 ; GFX10-NEXT:    v_writelane_b32 v2, s31, 1
1666 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1667 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1668 ; GFX10-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
1669 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1670 ; GFX10-NEXT:    v_readlane_b32 s31, v2, 1
1671 ; GFX10-NEXT:    v_readlane_b32 s30, v2, 0
1672 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1673 ; GFX10-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
1674 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1675 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1676 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1677 ; GFX10-NEXT:    s_mov_b32 s33, s6
1678 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1679 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1680 entry:
1681   %result = call <2 x bfloat> @test_arg_store_v2bf16(<2 x bfloat> %in)
1682   store volatile <2 x bfloat> %result, ptr addrspace(5) %out
1683   ret void
1686 define void @test_call_v3bf16(<3 x bfloat> %in, ptr addrspace(5) %out) {
1687 ; GCN-LABEL: test_call_v3bf16:
1688 ; GCN:       ; %bb.0: ; %entry
1689 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1690 ; GCN-NEXT:    s_mov_b32 s8, s33
1691 ; GCN-NEXT:    s_mov_b32 s33, s32
1692 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1693 ; GCN-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
1694 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1695 ; GCN-NEXT:    s_addk_i32 s32, 0x400
1696 ; GCN-NEXT:    s_waitcnt expcnt(0)
1697 ; GCN-NEXT:    v_writelane_b32 v4, s30, 0
1698 ; GCN-NEXT:    v_writelane_b32 v4, s31, 1
1699 ; GCN-NEXT:    s_getpc_b64 s[4:5]
1700 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1701 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1702 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1703 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
1704 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1705 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1706 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1707 ; GCN-NEXT:    v_add_i32_e32 v5, vcc, 4, v3
1708 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1709 ; GCN-NEXT:    buffer_store_short v2, v5, s[0:3], 0 offen
1710 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1711 ; GCN-NEXT:    buffer_store_dword v0, v3, s[0:3], 0 offen
1712 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1713 ; GCN-NEXT:    v_readlane_b32 s31, v4, 1
1714 ; GCN-NEXT:    v_readlane_b32 s30, v4, 0
1715 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1716 ; GCN-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
1717 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1718 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
1719 ; GCN-NEXT:    s_mov_b32 s33, s8
1720 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1721 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1723 ; GFX7-LABEL: test_call_v3bf16:
1724 ; GFX7:       ; %bb.0: ; %entry
1725 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1726 ; GFX7-NEXT:    s_mov_b32 s8, s33
1727 ; GFX7-NEXT:    s_mov_b32 s33, s32
1728 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1729 ; GFX7-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
1730 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1731 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
1732 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
1733 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1734 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1735 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1736 ; GFX7-NEXT:    v_writelane_b32 v4, s30, 0
1737 ; GFX7-NEXT:    v_writelane_b32 v4, s31, 1
1738 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1739 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1740 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1741 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1742 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
1743 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 4, v3
1744 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
1745 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1746 ; GFX7-NEXT:    buffer_store_dword v0, v3, s[0:3], 0 offen
1747 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1748 ; GFX7-NEXT:    v_readlane_b32 s31, v4, 1
1749 ; GFX7-NEXT:    v_readlane_b32 s30, v4, 0
1750 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1751 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
1752 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1753 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
1754 ; GFX7-NEXT:    s_mov_b32 s33, s8
1755 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1756 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1758 ; GFX8-LABEL: test_call_v3bf16:
1759 ; GFX8:       ; %bb.0: ; %entry
1760 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1761 ; GFX8-NEXT:    s_mov_b32 s6, s33
1762 ; GFX8-NEXT:    s_mov_b32 s33, s32
1763 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1764 ; GFX8-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1765 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1766 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
1767 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
1768 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1769 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1770 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1771 ; GFX8-NEXT:    v_writelane_b32 v3, s30, 0
1772 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1773 ; GFX8-NEXT:    v_writelane_b32 v3, s31, 1
1774 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1775 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1776 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 4, v2
1777 ; GFX8-NEXT:    buffer_store_short v1, v4, s[0:3], 0 offen
1778 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1779 ; GFX8-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
1780 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1781 ; GFX8-NEXT:    v_readlane_b32 s31, v3, 1
1782 ; GFX8-NEXT:    v_readlane_b32 s30, v3, 0
1783 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1784 ; GFX8-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1785 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1786 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
1787 ; GFX8-NEXT:    s_mov_b32 s33, s6
1788 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1789 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1791 ; GFX9-LABEL: test_call_v3bf16:
1792 ; GFX9:       ; %bb.0: ; %entry
1793 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794 ; GFX9-NEXT:    s_mov_b32 s6, s33
1795 ; GFX9-NEXT:    s_mov_b32 s33, s32
1796 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1797 ; GFX9-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1798 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1799 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1800 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
1801 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1802 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1803 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1804 ; GFX9-NEXT:    v_writelane_b32 v3, s30, 0
1805 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1806 ; GFX9-NEXT:    v_writelane_b32 v3, s31, 1
1807 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1808 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1809 ; GFX9-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
1810 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1811 ; GFX9-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
1812 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1813 ; GFX9-NEXT:    v_readlane_b32 s31, v3, 1
1814 ; GFX9-NEXT:    v_readlane_b32 s30, v3, 0
1815 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1816 ; GFX9-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1817 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1818 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
1819 ; GFX9-NEXT:    s_mov_b32 s33, s6
1820 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1821 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1823 ; GFX10-LABEL: test_call_v3bf16:
1824 ; GFX10:       ; %bb.0: ; %entry
1825 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1826 ; GFX10-NEXT:    s_mov_b32 s6, s33
1827 ; GFX10-NEXT:    s_mov_b32 s33, s32
1828 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1829 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1830 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1831 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1832 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
1833 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
1834 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1835 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1836 ; GFX10-NEXT:    v_writelane_b32 v3, s30, 0
1837 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1838 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1839 ; GFX10-NEXT:    v_writelane_b32 v3, s31, 1
1840 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1841 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1842 ; GFX10-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
1843 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1844 ; GFX10-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
1845 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1846 ; GFX10-NEXT:    v_readlane_b32 s31, v3, 1
1847 ; GFX10-NEXT:    v_readlane_b32 s30, v3, 0
1848 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
1849 ; GFX10-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1850 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
1851 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
1852 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
1853 ; GFX10-NEXT:    s_mov_b32 s33, s6
1854 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1855 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1856 entry:
1857   %result = call <3 x bfloat> @test_arg_store_v2bf16(<3 x bfloat> %in)
1858   store volatile <3 x bfloat> %result, ptr addrspace(5) %out
1859   ret void
1862 define void @test_call_v4bf16(<4 x bfloat> %in, ptr addrspace(5) %out) {
1863 ; GCN-LABEL: test_call_v4bf16:
1864 ; GCN:       ; %bb.0: ; %entry
1865 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1866 ; GCN-NEXT:    s_mov_b32 s8, s33
1867 ; GCN-NEXT:    s_mov_b32 s33, s32
1868 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1869 ; GCN-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
1870 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1871 ; GCN-NEXT:    s_addk_i32 s32, 0x400
1872 ; GCN-NEXT:    s_waitcnt expcnt(0)
1873 ; GCN-NEXT:    v_writelane_b32 v5, s30, 0
1874 ; GCN-NEXT:    v_writelane_b32 v5, s31, 1
1875 ; GCN-NEXT:    s_getpc_b64 s[4:5]
1876 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1877 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1878 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1879 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
1880 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1881 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1882 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1883 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1884 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1885 ; GCN-NEXT:    v_add_i32_e32 v6, vcc, 6, v4
1886 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 4, v4
1887 ; GCN-NEXT:    v_add_i32_e32 v8, vcc, 2, v4
1888 ; GCN-NEXT:    buffer_store_short v3, v6, s[0:3], 0 offen
1889 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1890 ; GCN-NEXT:    buffer_store_short v2, v7, s[0:3], 0 offen
1891 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1892 ; GCN-NEXT:    buffer_store_short v1, v8, s[0:3], 0 offen
1893 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1894 ; GCN-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
1895 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1896 ; GCN-NEXT:    v_readlane_b32 s31, v5, 1
1897 ; GCN-NEXT:    v_readlane_b32 s30, v5, 0
1898 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1899 ; GCN-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
1900 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
1901 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
1902 ; GCN-NEXT:    s_mov_b32 s33, s8
1903 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1904 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1906 ; GFX7-LABEL: test_call_v4bf16:
1907 ; GFX7:       ; %bb.0: ; %entry
1908 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1909 ; GFX7-NEXT:    s_mov_b32 s8, s33
1910 ; GFX7-NEXT:    s_mov_b32 s33, s32
1911 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1912 ; GFX7-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
1913 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1914 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
1915 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
1916 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1917 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1918 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1919 ; GFX7-NEXT:    v_writelane_b32 v5, s30, 0
1920 ; GFX7-NEXT:    v_writelane_b32 v5, s31, 1
1921 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1922 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1923 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1924 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 6, v4
1925 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1926 ; GFX7-NEXT:    buffer_store_short v3, v6, s[0:3], 0 offen
1927 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1928 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v4
1929 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1930 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
1931 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1932 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v4
1933 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1934 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
1935 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1936 ; GFX7-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
1937 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1938 ; GFX7-NEXT:    v_readlane_b32 s31, v5, 1
1939 ; GFX7-NEXT:    v_readlane_b32 s30, v5, 0
1940 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1941 ; GFX7-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
1942 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
1943 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
1944 ; GFX7-NEXT:    s_mov_b32 s33, s8
1945 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1946 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1948 ; GFX8-LABEL: test_call_v4bf16:
1949 ; GFX8:       ; %bb.0: ; %entry
1950 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1951 ; GFX8-NEXT:    s_mov_b32 s6, s33
1952 ; GFX8-NEXT:    s_mov_b32 s33, s32
1953 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1954 ; GFX8-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1955 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1956 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
1957 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
1958 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1959 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
1960 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
1961 ; GFX8-NEXT:    v_writelane_b32 v3, s30, 0
1962 ; GFX8-NEXT:    v_writelane_b32 v3, s31, 1
1963 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1964 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
1965 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 4, v2
1966 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v0
1967 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v1
1968 ; GFX8-NEXT:    buffer_store_short v1, v6, s[0:3], 0 offen
1969 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1970 ; GFX8-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
1971 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1972 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 6, v2
1973 ; GFX8-NEXT:    buffer_store_short v5, v0, s[0:3], 0 offen
1974 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1975 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 2, v2
1976 ; GFX8-NEXT:    buffer_store_short v4, v0, s[0:3], 0 offen
1977 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1978 ; GFX8-NEXT:    v_readlane_b32 s31, v3, 1
1979 ; GFX8-NEXT:    v_readlane_b32 s30, v3, 0
1980 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1981 ; GFX8-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
1982 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
1983 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
1984 ; GFX8-NEXT:    s_mov_b32 s33, s6
1985 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1986 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1988 ; GFX9-LABEL: test_call_v4bf16:
1989 ; GFX9:       ; %bb.0: ; %entry
1990 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1991 ; GFX9-NEXT:    s_mov_b32 s6, s33
1992 ; GFX9-NEXT:    s_mov_b32 s33, s32
1993 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
1994 ; GFX9-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
1995 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
1996 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
1997 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
1998 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
1999 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2000 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2001 ; GFX9-NEXT:    v_writelane_b32 v3, s30, 0
2002 ; GFX9-NEXT:    v_writelane_b32 v3, s31, 1
2003 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2004 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2005 ; GFX9-NEXT:    buffer_store_short_d16_hi v1, v2, s[0:3], 0 offen offset:6
2006 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2007 ; GFX9-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
2008 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2009 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, v2, s[0:3], 0 offen offset:2
2010 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2011 ; GFX9-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
2012 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2013 ; GFX9-NEXT:    v_readlane_b32 s31, v3, 1
2014 ; GFX9-NEXT:    v_readlane_b32 s30, v3, 0
2015 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2016 ; GFX9-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
2017 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
2018 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2019 ; GFX9-NEXT:    s_mov_b32 s33, s6
2020 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2021 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2023 ; GFX10-LABEL: test_call_v4bf16:
2024 ; GFX10:       ; %bb.0: ; %entry
2025 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2026 ; GFX10-NEXT:    s_mov_b32 s6, s33
2027 ; GFX10-NEXT:    s_mov_b32 s33, s32
2028 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2029 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
2030 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2031 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2032 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2033 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
2034 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2035 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2036 ; GFX10-NEXT:    v_writelane_b32 v3, s30, 0
2037 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2038 ; GFX10-NEXT:    v_writelane_b32 v3, s31, 1
2039 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2040 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2041 ; GFX10-NEXT:    buffer_store_short_d16_hi v1, v2, s[0:3], 0 offen offset:6
2042 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2043 ; GFX10-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
2044 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2045 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, v2, s[0:3], 0 offen offset:2
2046 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2047 ; GFX10-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
2048 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2049 ; GFX10-NEXT:    v_readlane_b32 s31, v3, 1
2050 ; GFX10-NEXT:    v_readlane_b32 s30, v3, 0
2051 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2052 ; GFX10-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
2053 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2054 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2055 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2056 ; GFX10-NEXT:    s_mov_b32 s33, s6
2057 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2058 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2059 entry:
2060   %result = call <4 x bfloat> @test_arg_store_v2bf16(<4 x bfloat> %in)
2061   store volatile <4 x bfloat> %result, ptr addrspace(5) %out
2062   ret void
2065 define void @test_call_v8bf16(<8 x bfloat> %in, ptr addrspace(5) %out) {
2066 ; GCN-LABEL: test_call_v8bf16:
2067 ; GCN:       ; %bb.0: ; %entry
2068 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2069 ; GCN-NEXT:    s_mov_b32 s8, s33
2070 ; GCN-NEXT:    s_mov_b32 s33, s32
2071 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2072 ; GCN-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
2073 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
2074 ; GCN-NEXT:    s_addk_i32 s32, 0x400
2075 ; GCN-NEXT:    s_waitcnt expcnt(0)
2076 ; GCN-NEXT:    v_writelane_b32 v9, s30, 0
2077 ; GCN-NEXT:    v_writelane_b32 v9, s31, 1
2078 ; GCN-NEXT:    s_getpc_b64 s[4:5]
2079 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2080 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2081 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2082 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
2083 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2084 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2085 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2086 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2087 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2088 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2089 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
2090 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
2091 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
2092 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, 14, v8
2093 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 12, v8
2094 ; GCN-NEXT:    v_add_i32_e32 v12, vcc, 10, v8
2095 ; GCN-NEXT:    v_add_i32_e32 v13, vcc, 8, v8
2096 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, 6, v8
2097 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 4, v8
2098 ; GCN-NEXT:    v_add_i32_e32 v16, vcc, 2, v8
2099 ; GCN-NEXT:    buffer_store_short v7, v10, s[0:3], 0 offen
2100 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2101 ; GCN-NEXT:    buffer_store_short v6, v11, s[0:3], 0 offen
2102 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2103 ; GCN-NEXT:    buffer_store_short v5, v12, s[0:3], 0 offen
2104 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2105 ; GCN-NEXT:    buffer_store_short v4, v13, s[0:3], 0 offen
2106 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2107 ; GCN-NEXT:    buffer_store_short v3, v14, s[0:3], 0 offen
2108 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2109 ; GCN-NEXT:    buffer_store_short v2, v15, s[0:3], 0 offen
2110 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2111 ; GCN-NEXT:    buffer_store_short v1, v16, s[0:3], 0 offen
2112 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2113 ; GCN-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
2114 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2115 ; GCN-NEXT:    v_readlane_b32 s31, v9, 1
2116 ; GCN-NEXT:    v_readlane_b32 s30, v9, 0
2117 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2118 ; GCN-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
2119 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
2120 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
2121 ; GCN-NEXT:    s_mov_b32 s33, s8
2122 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2123 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2125 ; GFX7-LABEL: test_call_v8bf16:
2126 ; GFX7:       ; %bb.0: ; %entry
2127 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2128 ; GFX7-NEXT:    s_mov_b32 s8, s33
2129 ; GFX7-NEXT:    s_mov_b32 s33, s32
2130 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2131 ; GFX7-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
2132 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
2133 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
2134 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
2135 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2136 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2137 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2138 ; GFX7-NEXT:    v_writelane_b32 v9, s30, 0
2139 ; GFX7-NEXT:    v_writelane_b32 v9, s31, 1
2140 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
2141 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2142 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
2143 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 14, v8
2144 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
2145 ; GFX7-NEXT:    buffer_store_short v7, v10, s[0:3], 0 offen
2146 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2147 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 12, v8
2148 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
2149 ; GFX7-NEXT:    buffer_store_short v6, v7, s[0:3], 0 offen
2150 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2151 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 10, v8
2152 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2153 ; GFX7-NEXT:    buffer_store_short v5, v6, s[0:3], 0 offen
2154 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2155 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 8, v8
2156 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2157 ; GFX7-NEXT:    buffer_store_short v4, v5, s[0:3], 0 offen
2158 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2159 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 6, v8
2160 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2161 ; GFX7-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen
2162 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2163 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v8
2164 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2165 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
2166 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2167 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v8
2168 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2169 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
2170 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2171 ; GFX7-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
2172 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2173 ; GFX7-NEXT:    v_readlane_b32 s31, v9, 1
2174 ; GFX7-NEXT:    v_readlane_b32 s30, v9, 0
2175 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2176 ; GFX7-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
2177 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
2178 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
2179 ; GFX7-NEXT:    s_mov_b32 s33, s8
2180 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2181 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2183 ; GFX8-LABEL: test_call_v8bf16:
2184 ; GFX8:       ; %bb.0: ; %entry
2185 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2186 ; GFX8-NEXT:    s_mov_b32 s6, s33
2187 ; GFX8-NEXT:    s_mov_b32 s33, s32
2188 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2189 ; GFX8-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
2190 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
2191 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
2192 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
2193 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2194 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2195 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2196 ; GFX8-NEXT:    v_writelane_b32 v5, s30, 0
2197 ; GFX8-NEXT:    v_writelane_b32 v5, s31, 1
2198 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
2199 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2200 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, 12, v4
2201 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v3
2202 ; GFX8-NEXT:    buffer_store_short v3, v10, s[0:3], 0 offen
2203 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2204 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 8, v4
2205 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v2
2206 ; GFX8-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
2207 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2208 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v4
2209 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
2210 ; GFX8-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
2211 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2212 ; GFX8-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
2213 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2214 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 14, v4
2215 ; GFX8-NEXT:    buffer_store_short v9, v0, s[0:3], 0 offen
2216 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2217 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 10, v4
2218 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v1
2219 ; GFX8-NEXT:    buffer_store_short v8, v0, s[0:3], 0 offen
2220 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2221 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 6, v4
2222 ; GFX8-NEXT:    buffer_store_short v7, v0, s[0:3], 0 offen
2223 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2224 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 2, v4
2225 ; GFX8-NEXT:    buffer_store_short v6, v0, s[0:3], 0 offen
2226 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2227 ; GFX8-NEXT:    v_readlane_b32 s31, v5, 1
2228 ; GFX8-NEXT:    v_readlane_b32 s30, v5, 0
2229 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2230 ; GFX8-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
2231 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
2232 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
2233 ; GFX8-NEXT:    s_mov_b32 s33, s6
2234 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2235 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2237 ; GFX9-LABEL: test_call_v8bf16:
2238 ; GFX9:       ; %bb.0: ; %entry
2239 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2240 ; GFX9-NEXT:    s_mov_b32 s6, s33
2241 ; GFX9-NEXT:    s_mov_b32 s33, s32
2242 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2243 ; GFX9-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
2244 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
2245 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2246 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
2247 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2248 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2249 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2250 ; GFX9-NEXT:    v_writelane_b32 v5, s30, 0
2251 ; GFX9-NEXT:    v_writelane_b32 v5, s31, 1
2252 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2253 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2254 ; GFX9-NEXT:    buffer_store_short_d16_hi v3, v4, s[0:3], 0 offen offset:14
2255 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2256 ; GFX9-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen offset:12
2257 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2258 ; GFX9-NEXT:    buffer_store_short_d16_hi v2, v4, s[0:3], 0 offen offset:10
2259 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2260 ; GFX9-NEXT:    buffer_store_short v2, v4, s[0:3], 0 offen offset:8
2261 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2262 ; GFX9-NEXT:    buffer_store_short_d16_hi v1, v4, s[0:3], 0 offen offset:6
2263 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2264 ; GFX9-NEXT:    buffer_store_short v1, v4, s[0:3], 0 offen offset:4
2265 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2266 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, v4, s[0:3], 0 offen offset:2
2267 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2268 ; GFX9-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
2269 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2270 ; GFX9-NEXT:    v_readlane_b32 s31, v5, 1
2271 ; GFX9-NEXT:    v_readlane_b32 s30, v5, 0
2272 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2273 ; GFX9-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
2274 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
2275 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2276 ; GFX9-NEXT:    s_mov_b32 s33, s6
2277 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2278 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2280 ; GFX10-LABEL: test_call_v8bf16:
2281 ; GFX10:       ; %bb.0: ; %entry
2282 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2283 ; GFX10-NEXT:    s_mov_b32 s6, s33
2284 ; GFX10-NEXT:    s_mov_b32 s33, s32
2285 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2286 ; GFX10-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
2287 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2288 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2289 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2290 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
2291 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2292 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2293 ; GFX10-NEXT:    v_writelane_b32 v5, s30, 0
2294 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2295 ; GFX10-NEXT:    v_writelane_b32 v5, s31, 1
2296 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2297 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2298 ; GFX10-NEXT:    buffer_store_short_d16_hi v3, v4, s[0:3], 0 offen offset:14
2299 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2300 ; GFX10-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen offset:12
2301 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2302 ; GFX10-NEXT:    buffer_store_short_d16_hi v2, v4, s[0:3], 0 offen offset:10
2303 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2304 ; GFX10-NEXT:    buffer_store_short v2, v4, s[0:3], 0 offen offset:8
2305 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2306 ; GFX10-NEXT:    buffer_store_short_d16_hi v1, v4, s[0:3], 0 offen offset:6
2307 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2308 ; GFX10-NEXT:    buffer_store_short v1, v4, s[0:3], 0 offen offset:4
2309 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2310 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, v4, s[0:3], 0 offen offset:2
2311 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2312 ; GFX10-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
2313 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2314 ; GFX10-NEXT:    v_readlane_b32 s31, v5, 1
2315 ; GFX10-NEXT:    v_readlane_b32 s30, v5, 0
2316 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2317 ; GFX10-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
2318 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2319 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2320 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2321 ; GFX10-NEXT:    s_mov_b32 s33, s6
2322 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2323 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2324 entry:
2325   %result = call <8 x bfloat> @test_arg_store_v2bf16(<8 x bfloat> %in)
2326   store volatile <8 x bfloat> %result, ptr addrspace(5) %out
2327   ret void
2330 define void @test_call_v16bf16(<16 x bfloat> %in, ptr addrspace(5) %out) {
2331 ; GCN-LABEL: test_call_v16bf16:
2332 ; GCN:       ; %bb.0: ; %entry
2333 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2334 ; GCN-NEXT:    s_mov_b32 s8, s33
2335 ; GCN-NEXT:    s_mov_b32 s33, s32
2336 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2337 ; GCN-NEXT:    buffer_store_dword v17, off, s[0:3], s33 ; 4-byte Folded Spill
2338 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
2339 ; GCN-NEXT:    s_addk_i32 s32, 0x400
2340 ; GCN-NEXT:    s_waitcnt expcnt(0)
2341 ; GCN-NEXT:    v_writelane_b32 v17, s30, 0
2342 ; GCN-NEXT:    v_writelane_b32 v17, s31, 1
2343 ; GCN-NEXT:    s_getpc_b64 s[4:5]
2344 ; GCN-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2345 ; GCN-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2346 ; GCN-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2347 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
2348 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2349 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2350 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2351 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2352 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2353 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2354 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
2355 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
2356 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
2357 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
2358 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
2359 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
2360 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
2361 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
2362 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
2363 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
2364 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
2365 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 30, v16
2366 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 28, v16
2367 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 26, v16
2368 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 24, v16
2369 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 22, v16
2370 ; GCN-NEXT:    v_add_i32_e32 v23, vcc, 20, v16
2371 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 18, v16
2372 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 16, v16
2373 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 14, v16
2374 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 12, v16
2375 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 10, v16
2376 ; GCN-NEXT:    buffer_store_short v15, v18, s[0:3], 0 offen
2377 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2378 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 8, v16
2379 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 6, v16
2380 ; GCN-NEXT:    buffer_store_short v14, v19, s[0:3], 0 offen
2381 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2382 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, 4, v16
2383 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 2, v16
2384 ; GCN-NEXT:    buffer_store_short v13, v20, s[0:3], 0 offen
2385 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2386 ; GCN-NEXT:    buffer_store_short v12, v21, s[0:3], 0 offen
2387 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2388 ; GCN-NEXT:    buffer_store_short v11, v22, s[0:3], 0 offen
2389 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2390 ; GCN-NEXT:    buffer_store_short v10, v23, s[0:3], 0 offen
2391 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2392 ; GCN-NEXT:    buffer_store_short v9, v24, s[0:3], 0 offen
2393 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2394 ; GCN-NEXT:    buffer_store_short v8, v25, s[0:3], 0 offen
2395 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2396 ; GCN-NEXT:    buffer_store_short v7, v26, s[0:3], 0 offen
2397 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2398 ; GCN-NEXT:    buffer_store_short v6, v27, s[0:3], 0 offen
2399 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2400 ; GCN-NEXT:    buffer_store_short v5, v28, s[0:3], 0 offen
2401 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2402 ; GCN-NEXT:    buffer_store_short v4, v15, s[0:3], 0 offen
2403 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2404 ; GCN-NEXT:    buffer_store_short v3, v18, s[0:3], 0 offen
2405 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2406 ; GCN-NEXT:    buffer_store_short v2, v14, s[0:3], 0 offen
2407 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2408 ; GCN-NEXT:    buffer_store_short v1, v19, s[0:3], 0 offen
2409 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2410 ; GCN-NEXT:    buffer_store_short v0, v16, s[0:3], 0 offen
2411 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2412 ; GCN-NEXT:    v_readlane_b32 s31, v17, 1
2413 ; GCN-NEXT:    v_readlane_b32 s30, v17, 0
2414 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2415 ; GCN-NEXT:    buffer_load_dword v17, off, s[0:3], s33 ; 4-byte Folded Reload
2416 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
2417 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
2418 ; GCN-NEXT:    s_mov_b32 s33, s8
2419 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2420 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2422 ; GFX7-LABEL: test_call_v16bf16:
2423 ; GFX7:       ; %bb.0: ; %entry
2424 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2425 ; GFX7-NEXT:    s_mov_b32 s8, s33
2426 ; GFX7-NEXT:    s_mov_b32 s33, s32
2427 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2428 ; GFX7-NEXT:    buffer_store_dword v17, off, s[0:3], s33 ; 4-byte Folded Spill
2429 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
2430 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
2431 ; GFX7-NEXT:    s_getpc_b64 s[4:5]
2432 ; GFX7-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2433 ; GFX7-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2434 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2435 ; GFX7-NEXT:    v_writelane_b32 v17, s30, 0
2436 ; GFX7-NEXT:    v_writelane_b32 v17, s31, 1
2437 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
2438 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2439 ; GFX7-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
2440 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, 30, v16
2441 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
2442 ; GFX7-NEXT:    buffer_store_short v15, v18, s[0:3], 0 offen
2443 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2444 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 28, v16
2445 ; GFX7-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
2446 ; GFX7-NEXT:    buffer_store_short v14, v15, s[0:3], 0 offen
2447 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2448 ; GFX7-NEXT:    v_add_i32_e32 v14, vcc, 26, v16
2449 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
2450 ; GFX7-NEXT:    buffer_store_short v13, v14, s[0:3], 0 offen
2451 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2452 ; GFX7-NEXT:    v_add_i32_e32 v13, vcc, 24, v16
2453 ; GFX7-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
2454 ; GFX7-NEXT:    buffer_store_short v12, v13, s[0:3], 0 offen
2455 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2456 ; GFX7-NEXT:    v_add_i32_e32 v12, vcc, 22, v16
2457 ; GFX7-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
2458 ; GFX7-NEXT:    buffer_store_short v11, v12, s[0:3], 0 offen
2459 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2460 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, 20, v16
2461 ; GFX7-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
2462 ; GFX7-NEXT:    buffer_store_short v10, v11, s[0:3], 0 offen
2463 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2464 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 18, v16
2465 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
2466 ; GFX7-NEXT:    buffer_store_short v9, v10, s[0:3], 0 offen
2467 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2468 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 16, v16
2469 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
2470 ; GFX7-NEXT:    buffer_store_short v8, v9, s[0:3], 0 offen
2471 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2472 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 14, v16
2473 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
2474 ; GFX7-NEXT:    buffer_store_short v7, v8, s[0:3], 0 offen
2475 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2476 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 12, v16
2477 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
2478 ; GFX7-NEXT:    buffer_store_short v6, v7, s[0:3], 0 offen
2479 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2480 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 10, v16
2481 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2482 ; GFX7-NEXT:    buffer_store_short v5, v6, s[0:3], 0 offen
2483 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2484 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 8, v16
2485 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2486 ; GFX7-NEXT:    buffer_store_short v4, v5, s[0:3], 0 offen
2487 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2488 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 6, v16
2489 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2490 ; GFX7-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen
2491 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2492 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v16
2493 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2494 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
2495 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2496 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v16
2497 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2498 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
2499 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2500 ; GFX7-NEXT:    buffer_store_short v0, v16, s[0:3], 0 offen
2501 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2502 ; GFX7-NEXT:    v_readlane_b32 s31, v17, 1
2503 ; GFX7-NEXT:    v_readlane_b32 s30, v17, 0
2504 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2505 ; GFX7-NEXT:    buffer_load_dword v17, off, s[0:3], s33 ; 4-byte Folded Reload
2506 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
2507 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
2508 ; GFX7-NEXT:    s_mov_b32 s33, s8
2509 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2510 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2512 ; GFX8-LABEL: test_call_v16bf16:
2513 ; GFX8:       ; %bb.0: ; %entry
2514 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2515 ; GFX8-NEXT:    s_mov_b32 s6, s33
2516 ; GFX8-NEXT:    s_mov_b32 s33, s32
2517 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2518 ; GFX8-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
2519 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
2520 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
2521 ; GFX8-NEXT:    s_getpc_b64 s[4:5]
2522 ; GFX8-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2523 ; GFX8-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2524 ; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2525 ; GFX8-NEXT:    v_writelane_b32 v9, s30, 0
2526 ; GFX8-NEXT:    v_writelane_b32 v9, s31, 1
2527 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
2528 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2529 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, 28, v8
2530 ; GFX8-NEXT:    v_lshrrev_b32_e32 v17, 16, v7
2531 ; GFX8-NEXT:    buffer_store_short v7, v18, s[0:3], 0 offen
2532 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2533 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 24, v8
2534 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v6
2535 ; GFX8-NEXT:    buffer_store_short v6, v7, s[0:3], 0 offen
2536 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2537 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 20, v8
2538 ; GFX8-NEXT:    v_lshrrev_b32_e32 v15, 16, v5
2539 ; GFX8-NEXT:    buffer_store_short v5, v6, s[0:3], 0 offen
2540 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2541 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 16, v8
2542 ; GFX8-NEXT:    v_lshrrev_b32_e32 v14, 16, v4
2543 ; GFX8-NEXT:    buffer_store_short v4, v5, s[0:3], 0 offen
2544 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2545 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 12, v8
2546 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v3
2547 ; GFX8-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen
2548 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2549 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 8, v8
2550 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v2
2551 ; GFX8-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
2552 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2553 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v8
2554 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v0
2555 ; GFX8-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
2556 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2557 ; GFX8-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
2558 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2559 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 30, v8
2560 ; GFX8-NEXT:    buffer_store_short v17, v0, s[0:3], 0 offen
2561 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2562 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 26, v8
2563 ; GFX8-NEXT:    buffer_store_short v16, v0, s[0:3], 0 offen
2564 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2565 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 22, v8
2566 ; GFX8-NEXT:    buffer_store_short v15, v0, s[0:3], 0 offen
2567 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2568 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 18, v8
2569 ; GFX8-NEXT:    buffer_store_short v14, v0, s[0:3], 0 offen
2570 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2571 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 14, v8
2572 ; GFX8-NEXT:    buffer_store_short v13, v0, s[0:3], 0 offen
2573 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2574 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 10, v8
2575 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v1
2576 ; GFX8-NEXT:    buffer_store_short v12, v0, s[0:3], 0 offen
2577 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2578 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 6, v8
2579 ; GFX8-NEXT:    buffer_store_short v11, v0, s[0:3], 0 offen
2580 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2581 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 2, v8
2582 ; GFX8-NEXT:    buffer_store_short v10, v0, s[0:3], 0 offen
2583 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2584 ; GFX8-NEXT:    v_readlane_b32 s31, v9, 1
2585 ; GFX8-NEXT:    v_readlane_b32 s30, v9, 0
2586 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2587 ; GFX8-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
2588 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
2589 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
2590 ; GFX8-NEXT:    s_mov_b32 s33, s6
2591 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2592 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2594 ; GFX9-LABEL: test_call_v16bf16:
2595 ; GFX9:       ; %bb.0: ; %entry
2596 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2597 ; GFX9-NEXT:    s_mov_b32 s6, s33
2598 ; GFX9-NEXT:    s_mov_b32 s33, s32
2599 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2600 ; GFX9-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
2601 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
2602 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
2603 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
2604 ; GFX9-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2605 ; GFX9-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2606 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2607 ; GFX9-NEXT:    v_writelane_b32 v9, s30, 0
2608 ; GFX9-NEXT:    v_writelane_b32 v9, s31, 1
2609 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2610 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2611 ; GFX9-NEXT:    buffer_store_short_d16_hi v7, v8, s[0:3], 0 offen offset:30
2612 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2613 ; GFX9-NEXT:    buffer_store_short v7, v8, s[0:3], 0 offen offset:28
2614 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2615 ; GFX9-NEXT:    buffer_store_short_d16_hi v6, v8, s[0:3], 0 offen offset:26
2616 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2617 ; GFX9-NEXT:    buffer_store_short v6, v8, s[0:3], 0 offen offset:24
2618 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2619 ; GFX9-NEXT:    buffer_store_short_d16_hi v5, v8, s[0:3], 0 offen offset:22
2620 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2621 ; GFX9-NEXT:    buffer_store_short v5, v8, s[0:3], 0 offen offset:20
2622 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2623 ; GFX9-NEXT:    buffer_store_short_d16_hi v4, v8, s[0:3], 0 offen offset:18
2624 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2625 ; GFX9-NEXT:    buffer_store_short v4, v8, s[0:3], 0 offen offset:16
2626 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2627 ; GFX9-NEXT:    buffer_store_short_d16_hi v3, v8, s[0:3], 0 offen offset:14
2628 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2629 ; GFX9-NEXT:    buffer_store_short v3, v8, s[0:3], 0 offen offset:12
2630 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2631 ; GFX9-NEXT:    buffer_store_short_d16_hi v2, v8, s[0:3], 0 offen offset:10
2632 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2633 ; GFX9-NEXT:    buffer_store_short v2, v8, s[0:3], 0 offen offset:8
2634 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2635 ; GFX9-NEXT:    buffer_store_short_d16_hi v1, v8, s[0:3], 0 offen offset:6
2636 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2637 ; GFX9-NEXT:    buffer_store_short v1, v8, s[0:3], 0 offen offset:4
2638 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2639 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, v8, s[0:3], 0 offen offset:2
2640 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2641 ; GFX9-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
2642 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2643 ; GFX9-NEXT:    v_readlane_b32 s31, v9, 1
2644 ; GFX9-NEXT:    v_readlane_b32 s30, v9, 0
2645 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
2646 ; GFX9-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
2647 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
2648 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
2649 ; GFX9-NEXT:    s_mov_b32 s33, s6
2650 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2651 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2653 ; GFX10-LABEL: test_call_v16bf16:
2654 ; GFX10:       ; %bb.0: ; %entry
2655 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2656 ; GFX10-NEXT:    s_mov_b32 s6, s33
2657 ; GFX10-NEXT:    s_mov_b32 s33, s32
2658 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2659 ; GFX10-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
2660 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2661 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2662 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
2663 ; GFX10-NEXT:    s_getpc_b64 s[4:5]
2664 ; GFX10-NEXT:    s_add_u32 s4, s4, test_arg_store_v2bf16@gotpcrel32@lo+4
2665 ; GFX10-NEXT:    s_addc_u32 s5, s5, test_arg_store_v2bf16@gotpcrel32@hi+12
2666 ; GFX10-NEXT:    v_writelane_b32 v9, s30, 0
2667 ; GFX10-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x0
2668 ; GFX10-NEXT:    v_writelane_b32 v9, s31, 1
2669 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2670 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[4:5]
2671 ; GFX10-NEXT:    buffer_store_short_d16_hi v7, v8, s[0:3], 0 offen offset:30
2672 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2673 ; GFX10-NEXT:    buffer_store_short v7, v8, s[0:3], 0 offen offset:28
2674 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2675 ; GFX10-NEXT:    buffer_store_short_d16_hi v6, v8, s[0:3], 0 offen offset:26
2676 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2677 ; GFX10-NEXT:    buffer_store_short v6, v8, s[0:3], 0 offen offset:24
2678 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2679 ; GFX10-NEXT:    buffer_store_short_d16_hi v5, v8, s[0:3], 0 offen offset:22
2680 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2681 ; GFX10-NEXT:    buffer_store_short v5, v8, s[0:3], 0 offen offset:20
2682 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2683 ; GFX10-NEXT:    buffer_store_short_d16_hi v4, v8, s[0:3], 0 offen offset:18
2684 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2685 ; GFX10-NEXT:    buffer_store_short v4, v8, s[0:3], 0 offen offset:16
2686 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2687 ; GFX10-NEXT:    buffer_store_short_d16_hi v3, v8, s[0:3], 0 offen offset:14
2688 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2689 ; GFX10-NEXT:    buffer_store_short v3, v8, s[0:3], 0 offen offset:12
2690 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2691 ; GFX10-NEXT:    buffer_store_short_d16_hi v2, v8, s[0:3], 0 offen offset:10
2692 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2693 ; GFX10-NEXT:    buffer_store_short v2, v8, s[0:3], 0 offen offset:8
2694 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2695 ; GFX10-NEXT:    buffer_store_short_d16_hi v1, v8, s[0:3], 0 offen offset:6
2696 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2697 ; GFX10-NEXT:    buffer_store_short v1, v8, s[0:3], 0 offen offset:4
2698 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2699 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, v8, s[0:3], 0 offen offset:2
2700 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2701 ; GFX10-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
2702 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2703 ; GFX10-NEXT:    v_readlane_b32 s31, v9, 1
2704 ; GFX10-NEXT:    v_readlane_b32 s30, v9, 0
2705 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
2706 ; GFX10-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
2707 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2708 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
2709 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
2710 ; GFX10-NEXT:    s_mov_b32 s33, s6
2711 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2712 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2713 entry:
2714   %result = call <16 x bfloat> @test_arg_store_v2bf16(<16 x bfloat> %in)
2715   store volatile <16 x bfloat> %result, ptr addrspace(5) %out
2716   ret void
2719 define bfloat @test_alloca_load_store_ret(bfloat %in) {
2720 ; GCN-LABEL: test_alloca_load_store_ret:
2721 ; GCN:       ; %bb.0: ; %entry
2722 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2723 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2724 ; GCN-NEXT:    buffer_store_short v0, off, s[0:3], s32
2725 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2726 ; GCN-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
2727 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2728 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2729 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2731 ; GFX7-LABEL: test_alloca_load_store_ret:
2732 ; GFX7:       ; %bb.0: ; %entry
2733 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2734 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2735 ; GFX7-NEXT:    buffer_store_short v0, off, s[0:3], s32
2736 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2737 ; GFX7-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
2738 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2739 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2740 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2742 ; GFX8-LABEL: test_alloca_load_store_ret:
2743 ; GFX8:       ; %bb.0: ; %entry
2744 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2745 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2746 ; GFX8-NEXT:    buffer_store_short v0, off, s[0:3], s32
2747 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2748 ; GFX8-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
2749 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2750 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2751 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2753 ; GFX9-LABEL: test_alloca_load_store_ret:
2754 ; GFX9:       ; %bb.0: ; %entry
2755 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2756 ; GFX9-NEXT:    buffer_store_short_d16_hi v0, off, s[0:3], s32
2757 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2758 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2759 ; GFX9-NEXT:    buffer_load_short_d16_hi v0, off, s[0:3], s32 glc
2760 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2761 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2763 ; GFX10-LABEL: test_alloca_load_store_ret:
2764 ; GFX10:       ; %bb.0: ; %entry
2765 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2766 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2767 ; GFX10-NEXT:    buffer_store_short_d16_hi v0, off, s[0:3], s32
2768 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2769 ; GFX10-NEXT:    buffer_load_short_d16_hi v1, off, s[0:3], s32 glc dlc
2770 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2771 ; GFX10-NEXT:    v_mov_b32_e32 v0, v1
2772 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2773 entry:
2774   %in.addr = alloca bfloat, align 2, addrspace(5)
2775   store volatile bfloat %in, ptr addrspace(5) %in.addr, align 2
2776   %loaded = load volatile bfloat, ptr addrspace(5) %in.addr, align 2
2777   ret bfloat %loaded
2780 define { <32 x i32>, bfloat } @test_overflow_stack(bfloat %a, <32 x i32> %b) {
2781 ; GCN-LABEL: test_overflow_stack:
2782 ; GCN:       ; %bb.0:
2783 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2784 ; GCN-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
2785 ; GCN-NEXT:    s_waitcnt expcnt(0)
2786 ; GCN-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
2787 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x7c, v0
2788 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
2789 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32
2790 ; GCN-NEXT:    s_waitcnt vmcnt(2)
2791 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2792 ; GCN-NEXT:    s_waitcnt expcnt(0)
2793 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x78, v0
2794 ; GCN-NEXT:    s_waitcnt vmcnt(2)
2795 ; GCN-NEXT:    buffer_store_dword v32, v2, s[0:3], 0 offen
2796 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x74, v0
2797 ; GCN-NEXT:    s_waitcnt vmcnt(2)
2798 ; GCN-NEXT:    buffer_store_dword v33, v2, s[0:3], 0 offen
2799 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x70, v0
2800 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x6c, v0
2801 ; GCN-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
2802 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x68, v0
2803 ; GCN-NEXT:    s_waitcnt expcnt(0)
2804 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x64, v0
2805 ; GCN-NEXT:    buffer_store_dword v29, v31, s[0:3], 0 offen
2806 ; GCN-NEXT:    s_waitcnt expcnt(0)
2807 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x60, v0
2808 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x5c, v0
2809 ; GCN-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
2810 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x58, v0
2811 ; GCN-NEXT:    s_waitcnt expcnt(0)
2812 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0x54, v0
2813 ; GCN-NEXT:    buffer_store_dword v27, v30, s[0:3], 0 offen
2814 ; GCN-NEXT:    s_waitcnt expcnt(0)
2815 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0x50, v0
2816 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x4c, v0
2817 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2818 ; GCN-NEXT:    buffer_store_dword v26, v29, s[0:3], 0 offen
2819 ; GCN-NEXT:    s_waitcnt expcnt(0)
2820 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 0x48, v0
2821 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x44, v0
2822 ; GCN-NEXT:    buffer_store_dword v25, v31, s[0:3], 0 offen
2823 ; GCN-NEXT:    s_waitcnt expcnt(0)
2824 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 64, v0
2825 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 60, v0
2826 ; GCN-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
2827 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 56, v0
2828 ; GCN-NEXT:    s_waitcnt expcnt(0)
2829 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 52, v0
2830 ; GCN-NEXT:    buffer_store_dword v23, v28, s[0:3], 0 offen
2831 ; GCN-NEXT:    s_waitcnt expcnt(0)
2832 ; GCN-NEXT:    v_add_i32_e32 v23, vcc, 48, v0
2833 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 44, v0
2834 ; GCN-NEXT:    buffer_store_dword v22, v27, s[0:3], 0 offen
2835 ; GCN-NEXT:    s_waitcnt expcnt(0)
2836 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 40, v0
2837 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 36, v0
2838 ; GCN-NEXT:    buffer_store_dword v21, v30, s[0:3], 0 offen
2839 ; GCN-NEXT:    s_waitcnt expcnt(0)
2840 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 32, v0
2841 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 28, v0
2842 ; GCN-NEXT:    buffer_store_dword v20, v26, s[0:3], 0 offen
2843 ; GCN-NEXT:    s_waitcnt expcnt(0)
2844 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 24, v0
2845 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 20, v0
2846 ; GCN-NEXT:    buffer_store_dword v19, v29, s[0:3], 0 offen
2847 ; GCN-NEXT:    s_waitcnt expcnt(0)
2848 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 16, v0
2849 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 12, v0
2850 ; GCN-NEXT:    buffer_store_dword v18, v25, s[0:3], 0 offen
2851 ; GCN-NEXT:    s_waitcnt expcnt(0)
2852 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 8, v0
2853 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 4, v0
2854 ; GCN-NEXT:    v_add_i32_e32 v0, vcc, 0x80, v0
2855 ; GCN-NEXT:    buffer_store_dword v17, v31, s[0:3], 0 offen
2856 ; GCN-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
2857 ; GCN-NEXT:    buffer_store_dword v15, v24, s[0:3], 0 offen
2858 ; GCN-NEXT:    buffer_store_dword v14, v23, s[0:3], 0 offen
2859 ; GCN-NEXT:    buffer_store_dword v13, v28, s[0:3], 0 offen
2860 ; GCN-NEXT:    buffer_store_dword v12, v22, s[0:3], 0 offen
2861 ; GCN-NEXT:    buffer_store_dword v11, v27, s[0:3], 0 offen
2862 ; GCN-NEXT:    buffer_store_dword v10, v21, s[0:3], 0 offen
2863 ; GCN-NEXT:    buffer_store_dword v9, v30, s[0:3], 0 offen
2864 ; GCN-NEXT:    buffer_store_dword v8, v20, s[0:3], 0 offen
2865 ; GCN-NEXT:    buffer_store_dword v7, v26, s[0:3], 0 offen
2866 ; GCN-NEXT:    buffer_store_dword v6, v19, s[0:3], 0 offen
2867 ; GCN-NEXT:    buffer_store_dword v5, v29, s[0:3], 0 offen
2868 ; GCN-NEXT:    buffer_store_dword v4, v18, s[0:3], 0 offen
2869 ; GCN-NEXT:    buffer_store_dword v3, v25, s[0:3], 0 offen
2870 ; GCN-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
2871 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2872 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2874 ; GFX7-LABEL: test_overflow_stack:
2875 ; GFX7:       ; %bb.0:
2876 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2877 ; GFX7-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
2878 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
2879 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x7c, v0
2880 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2881 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2882 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2883 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:4
2884 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x78, v0
2885 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2886 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2887 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32
2888 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x74, v0
2889 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2890 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2891 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x70, v0
2892 ; GFX7-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
2893 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x6c, v0
2894 ; GFX7-NEXT:    buffer_store_dword v29, v2, s[0:3], 0 offen
2895 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x68, v0
2896 ; GFX7-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
2897 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x64, v0
2898 ; GFX7-NEXT:    buffer_store_dword v27, v2, s[0:3], 0 offen
2899 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x60, v0
2900 ; GFX7-NEXT:    buffer_store_dword v26, v2, s[0:3], 0 offen
2901 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x5c, v0
2902 ; GFX7-NEXT:    buffer_store_dword v25, v2, s[0:3], 0 offen
2903 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x58, v0
2904 ; GFX7-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
2905 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x54, v0
2906 ; GFX7-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
2907 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x50, v0
2908 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
2909 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x4c, v0
2910 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
2911 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x48, v0
2912 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
2913 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x44, v0
2914 ; GFX7-NEXT:    buffer_store_dword v19, v2, s[0:3], 0 offen
2915 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 64, v0
2916 ; GFX7-NEXT:    buffer_store_dword v18, v2, s[0:3], 0 offen
2917 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 60, v0
2918 ; GFX7-NEXT:    buffer_store_dword v17, v2, s[0:3], 0 offen
2919 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 56, v0
2920 ; GFX7-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
2921 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 52, v0
2922 ; GFX7-NEXT:    buffer_store_dword v15, v2, s[0:3], 0 offen
2923 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 48, v0
2924 ; GFX7-NEXT:    buffer_store_dword v14, v2, s[0:3], 0 offen
2925 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 44, v0
2926 ; GFX7-NEXT:    buffer_store_dword v13, v2, s[0:3], 0 offen
2927 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 40, v0
2928 ; GFX7-NEXT:    buffer_store_dword v12, v2, s[0:3], 0 offen
2929 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 36, v0
2930 ; GFX7-NEXT:    buffer_store_dword v11, v2, s[0:3], 0 offen
2931 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 32, v0
2932 ; GFX7-NEXT:    buffer_store_dword v10, v2, s[0:3], 0 offen
2933 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 28, v0
2934 ; GFX7-NEXT:    buffer_store_dword v9, v2, s[0:3], 0 offen
2935 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 24, v0
2936 ; GFX7-NEXT:    buffer_store_dword v8, v2, s[0:3], 0 offen
2937 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 20, v0
2938 ; GFX7-NEXT:    buffer_store_dword v7, v2, s[0:3], 0 offen
2939 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 16, v0
2940 ; GFX7-NEXT:    buffer_store_dword v6, v2, s[0:3], 0 offen
2941 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 12, v0
2942 ; GFX7-NEXT:    buffer_store_dword v5, v2, s[0:3], 0 offen
2943 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 8, v0
2944 ; GFX7-NEXT:    buffer_store_dword v4, v2, s[0:3], 0 offen
2945 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 4, v0
2946 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, 0x80, v0
2947 ; GFX7-NEXT:    buffer_store_dword v3, v2, s[0:3], 0 offen
2948 ; GFX7-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
2949 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2950 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2952 ; GFX8-LABEL: test_overflow_stack:
2953 ; GFX8:       ; %bb.0:
2954 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2955 ; GFX8-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
2956 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
2957 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x7c, v0
2958 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2959 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2960 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2961 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:4
2962 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x78, v0
2963 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2964 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2965 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32
2966 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x74, v0
2967 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2968 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
2969 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x70, v0
2970 ; GFX8-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
2971 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x6c, v0
2972 ; GFX8-NEXT:    buffer_store_dword v29, v2, s[0:3], 0 offen
2973 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x68, v0
2974 ; GFX8-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
2975 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x64, v0
2976 ; GFX8-NEXT:    buffer_store_dword v27, v2, s[0:3], 0 offen
2977 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x60, v0
2978 ; GFX8-NEXT:    buffer_store_dword v26, v2, s[0:3], 0 offen
2979 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x5c, v0
2980 ; GFX8-NEXT:    buffer_store_dword v25, v2, s[0:3], 0 offen
2981 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x58, v0
2982 ; GFX8-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
2983 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x54, v0
2984 ; GFX8-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
2985 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x50, v0
2986 ; GFX8-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
2987 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x4c, v0
2988 ; GFX8-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
2989 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x48, v0
2990 ; GFX8-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
2991 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x44, v0
2992 ; GFX8-NEXT:    buffer_store_dword v19, v2, s[0:3], 0 offen
2993 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 64, v0
2994 ; GFX8-NEXT:    buffer_store_dword v18, v2, s[0:3], 0 offen
2995 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 60, v0
2996 ; GFX8-NEXT:    buffer_store_dword v17, v2, s[0:3], 0 offen
2997 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 56, v0
2998 ; GFX8-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
2999 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 52, v0
3000 ; GFX8-NEXT:    buffer_store_dword v15, v2, s[0:3], 0 offen
3001 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 48, v0
3002 ; GFX8-NEXT:    buffer_store_dword v14, v2, s[0:3], 0 offen
3003 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 44, v0
3004 ; GFX8-NEXT:    buffer_store_dword v13, v2, s[0:3], 0 offen
3005 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 40, v0
3006 ; GFX8-NEXT:    buffer_store_dword v12, v2, s[0:3], 0 offen
3007 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 36, v0
3008 ; GFX8-NEXT:    buffer_store_dword v11, v2, s[0:3], 0 offen
3009 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 32, v0
3010 ; GFX8-NEXT:    buffer_store_dword v10, v2, s[0:3], 0 offen
3011 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 28, v0
3012 ; GFX8-NEXT:    buffer_store_dword v9, v2, s[0:3], 0 offen
3013 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 24, v0
3014 ; GFX8-NEXT:    buffer_store_dword v8, v2, s[0:3], 0 offen
3015 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 20, v0
3016 ; GFX8-NEXT:    buffer_store_dword v7, v2, s[0:3], 0 offen
3017 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 16, v0
3018 ; GFX8-NEXT:    buffer_store_dword v6, v2, s[0:3], 0 offen
3019 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 12, v0
3020 ; GFX8-NEXT:    buffer_store_dword v5, v2, s[0:3], 0 offen
3021 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 8, v0
3022 ; GFX8-NEXT:    buffer_store_dword v4, v2, s[0:3], 0 offen
3023 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v0
3024 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 0x80, v0
3025 ; GFX8-NEXT:    buffer_store_dword v3, v2, s[0:3], 0 offen
3026 ; GFX8-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3027 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3028 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3030 ; GFX9-LABEL: test_overflow_stack:
3031 ; GFX9:       ; %bb.0:
3032 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3033 ; GFX9-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:112
3034 ; GFX9-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:108
3035 ; GFX9-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:104
3036 ; GFX9-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:100
3037 ; GFX9-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:96
3038 ; GFX9-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:92
3039 ; GFX9-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:88
3040 ; GFX9-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:84
3041 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:80
3042 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:76
3043 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:72
3044 ; GFX9-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:4
3045 ; GFX9-NEXT:    s_nop 0
3046 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:68
3047 ; GFX9-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:8
3048 ; GFX9-NEXT:    s_nop 0
3049 ; GFX9-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:64
3050 ; GFX9-NEXT:    buffer_load_dword v18, off, s[0:3], s32
3051 ; GFX9-NEXT:    s_nop 0
3052 ; GFX9-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:60
3053 ; GFX9-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:56
3054 ; GFX9-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:52
3055 ; GFX9-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:48
3056 ; GFX9-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:44
3057 ; GFX9-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:40
3058 ; GFX9-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:36
3059 ; GFX9-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:32
3060 ; GFX9-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
3061 ; GFX9-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3062 ; GFX9-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3063 ; GFX9-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3064 ; GFX9-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3065 ; GFX9-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3066 ; GFX9-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3067 ; GFX9-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3068 ; GFX9-NEXT:    s_waitcnt vmcnt(18)
3069 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:124
3070 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:120
3071 ; GFX9-NEXT:    s_waitcnt vmcnt(18)
3072 ; GFX9-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:116
3073 ; GFX9-NEXT:    buffer_store_short_d16_hi v1, v0, s[0:3], 0 offen offset:128
3074 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3075 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3077 ; GFX10-LABEL: test_overflow_stack:
3078 ; GFX10:       ; %bb.0:
3079 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3080 ; GFX10-NEXT:    s_clause 0x2
3081 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:8
3082 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
3083 ; GFX10-NEXT:    buffer_load_dword v33, off, s[0:3], s32
3084 ; GFX10-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:112
3085 ; GFX10-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:108
3086 ; GFX10-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:104
3087 ; GFX10-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:100
3088 ; GFX10-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:96
3089 ; GFX10-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:92
3090 ; GFX10-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:88
3091 ; GFX10-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:84
3092 ; GFX10-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:80
3093 ; GFX10-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:76
3094 ; GFX10-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:72
3095 ; GFX10-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:68
3096 ; GFX10-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:64
3097 ; GFX10-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:60
3098 ; GFX10-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:56
3099 ; GFX10-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:52
3100 ; GFX10-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:48
3101 ; GFX10-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:44
3102 ; GFX10-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:40
3103 ; GFX10-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:36
3104 ; GFX10-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:32
3105 ; GFX10-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
3106 ; GFX10-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
3107 ; GFX10-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
3108 ; GFX10-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
3109 ; GFX10-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
3110 ; GFX10-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
3111 ; GFX10-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
3112 ; GFX10-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
3113 ; GFX10-NEXT:    s_waitcnt vmcnt(2)
3114 ; GFX10-NEXT:    buffer_store_dword v31, v0, s[0:3], 0 offen offset:124
3115 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
3116 ; GFX10-NEXT:    buffer_store_dword v32, v0, s[0:3], 0 offen offset:120
3117 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3118 ; GFX10-NEXT:    buffer_store_dword v33, v0, s[0:3], 0 offen offset:116
3119 ; GFX10-NEXT:    buffer_store_short_d16_hi v1, v0, s[0:3], 0 offen offset:128
3120 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3121   %ins.0 = insertvalue { <32 x i32>, bfloat } poison, <32 x i32> %b, 0
3122   %ins.1 = insertvalue { <32 x i32>, bfloat } %ins.0 ,bfloat %a, 1
3123   ret { <32 x i32>, bfloat } %ins.1