1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=SDAG %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -global-isel=1 -global-isel-abort=2 < %s | FileCheck -check-prefix=GISEL %s
5 ; Note: if you're adding tests here, also add them to
6 ; lower-buffer-fat-pointers-contents-legalization.ll to verify the IR produced by
9 ;;; Legal types. These are natively supported, no casts should be performed.
11 define i8 @load_i8(ptr addrspace(8) inreg %buf) {
12 ; SDAG-LABEL: load_i8:
14 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
16 ; SDAG-NEXT: s_waitcnt vmcnt(0)
17 ; SDAG-NEXT: s_setpc_b64 s[30:31]
19 ; GISEL-LABEL: load_i8:
21 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
23 ; GISEL-NEXT: s_waitcnt vmcnt(0)
24 ; GISEL-NEXT: s_setpc_b64 s[30:31]
25 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
26 %ret = load i8, ptr addrspace(7) %p
30 define void @store_i8(i8 %data, ptr addrspace(8) inreg %buf) {
31 ; SDAG-LABEL: store_i8:
33 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
35 ; SDAG-NEXT: s_waitcnt vmcnt(0)
36 ; SDAG-NEXT: s_setpc_b64 s[30:31]
38 ; GISEL-LABEL: store_i8:
40 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
42 ; GISEL-NEXT: s_waitcnt vmcnt(0)
43 ; GISEL-NEXT: s_setpc_b64 s[30:31]
44 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
45 store i8 %data, ptr addrspace(7) %p
49 define i16 @load_i16(ptr addrspace(8) inreg %buf) {
50 ; SDAG-LABEL: load_i16:
52 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
54 ; SDAG-NEXT: s_waitcnt vmcnt(0)
55 ; SDAG-NEXT: s_setpc_b64 s[30:31]
57 ; GISEL-LABEL: load_i16:
59 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
61 ; GISEL-NEXT: s_waitcnt vmcnt(0)
62 ; GISEL-NEXT: s_setpc_b64 s[30:31]
63 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
64 %ret = load i16, ptr addrspace(7) %p
68 define void @store_i16(i16 %data, ptr addrspace(8) inreg %buf) {
69 ; SDAG-LABEL: store_i16:
71 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
73 ; SDAG-NEXT: s_waitcnt vmcnt(0)
74 ; SDAG-NEXT: s_setpc_b64 s[30:31]
76 ; GISEL-LABEL: store_i16:
78 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
79 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
80 ; GISEL-NEXT: s_waitcnt vmcnt(0)
81 ; GISEL-NEXT: s_setpc_b64 s[30:31]
82 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
83 store i16 %data, ptr addrspace(7) %p
87 define i32 @load_i32(ptr addrspace(8) inreg %buf) {
88 ; SDAG-LABEL: load_i32:
90 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
92 ; SDAG-NEXT: s_waitcnt vmcnt(0)
93 ; SDAG-NEXT: s_setpc_b64 s[30:31]
95 ; GISEL-LABEL: load_i32:
97 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
98 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
99 ; GISEL-NEXT: s_waitcnt vmcnt(0)
100 ; GISEL-NEXT: s_setpc_b64 s[30:31]
101 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
102 %ret = load i32, ptr addrspace(7) %p
106 define void @store_i32(i32 %data, ptr addrspace(8) inreg %buf) {
107 ; SDAG-LABEL: store_i32:
109 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
111 ; SDAG-NEXT: s_waitcnt vmcnt(0)
112 ; SDAG-NEXT: s_setpc_b64 s[30:31]
114 ; GISEL-LABEL: store_i32:
116 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
118 ; GISEL-NEXT: s_waitcnt vmcnt(0)
119 ; GISEL-NEXT: s_setpc_b64 s[30:31]
120 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
121 store i32 %data, ptr addrspace(7) %p
125 define i64 @load_i64(ptr addrspace(8) inreg %buf) {
126 ; SDAG-LABEL: load_i64:
128 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
130 ; SDAG-NEXT: s_waitcnt vmcnt(0)
131 ; SDAG-NEXT: s_setpc_b64 s[30:31]
133 ; GISEL-LABEL: load_i64:
135 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
136 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
137 ; GISEL-NEXT: s_waitcnt vmcnt(0)
138 ; GISEL-NEXT: s_setpc_b64 s[30:31]
139 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
140 %ret = load i64, ptr addrspace(7) %p
144 define void @store_i64(i64 %data, ptr addrspace(8) inreg %buf) {
145 ; SDAG-LABEL: store_i64:
147 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
148 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
149 ; SDAG-NEXT: s_waitcnt vmcnt(0)
150 ; SDAG-NEXT: s_setpc_b64 s[30:31]
152 ; GISEL-LABEL: store_i64:
154 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
156 ; GISEL-NEXT: s_waitcnt vmcnt(0)
157 ; GISEL-NEXT: s_setpc_b64 s[30:31]
158 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
159 store i64 %data, ptr addrspace(7) %p
163 define i128 @load_i128(ptr addrspace(8) inreg %buf) {
164 ; SDAG-LABEL: load_i128:
166 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
168 ; SDAG-NEXT: s_waitcnt vmcnt(0)
169 ; SDAG-NEXT: s_setpc_b64 s[30:31]
171 ; GISEL-LABEL: load_i128:
173 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
174 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
175 ; GISEL-NEXT: s_waitcnt vmcnt(0)
176 ; GISEL-NEXT: s_setpc_b64 s[30:31]
177 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
178 %ret = load i128, ptr addrspace(7) %p
182 define void @store_i128(i128 %data, ptr addrspace(8) inreg %buf) {
183 ; SDAG-LABEL: store_i128:
185 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
186 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
187 ; SDAG-NEXT: s_waitcnt vmcnt(0)
188 ; SDAG-NEXT: s_setpc_b64 s[30:31]
190 ; GISEL-LABEL: store_i128:
192 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
193 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
194 ; GISEL-NEXT: s_waitcnt vmcnt(0)
195 ; GISEL-NEXT: s_setpc_b64 s[30:31]
196 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
197 store i128 %data, ptr addrspace(7) %p
201 define <1 x i32> @load_v1i32(ptr addrspace(8) inreg %buf) {
202 ; SDAG-LABEL: load_v1i32:
204 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
206 ; SDAG-NEXT: s_waitcnt vmcnt(0)
207 ; SDAG-NEXT: s_setpc_b64 s[30:31]
209 ; GISEL-LABEL: load_v1i32:
211 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
212 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
213 ; GISEL-NEXT: s_waitcnt vmcnt(0)
214 ; GISEL-NEXT: s_setpc_b64 s[30:31]
215 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
216 %ret = load <1 x i32>, ptr addrspace(7) %p
220 define void @store_v1i32(<1 x i32> %data, ptr addrspace(8) inreg %buf) {
221 ; SDAG-LABEL: store_v1i32:
223 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
224 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
225 ; SDAG-NEXT: s_waitcnt vmcnt(0)
226 ; SDAG-NEXT: s_setpc_b64 s[30:31]
228 ; GISEL-LABEL: store_v1i32:
230 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
232 ; GISEL-NEXT: s_waitcnt vmcnt(0)
233 ; GISEL-NEXT: s_setpc_b64 s[30:31]
234 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
235 store <1 x i32> %data, ptr addrspace(7) %p
239 define <2 x i32> @load_v2i32(ptr addrspace(8) inreg %buf) {
240 ; SDAG-LABEL: load_v2i32:
242 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
244 ; SDAG-NEXT: s_waitcnt vmcnt(0)
245 ; SDAG-NEXT: s_setpc_b64 s[30:31]
247 ; GISEL-LABEL: load_v2i32:
249 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
250 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
251 ; GISEL-NEXT: s_waitcnt vmcnt(0)
252 ; GISEL-NEXT: s_setpc_b64 s[30:31]
253 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
254 %ret = load <2 x i32>, ptr addrspace(7) %p
258 define void @store_v2i32(<2 x i32> %data, ptr addrspace(8) inreg %buf) {
259 ; SDAG-LABEL: store_v2i32:
261 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
263 ; SDAG-NEXT: s_waitcnt vmcnt(0)
264 ; SDAG-NEXT: s_setpc_b64 s[30:31]
266 ; GISEL-LABEL: store_v2i32:
268 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
269 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
270 ; GISEL-NEXT: s_waitcnt vmcnt(0)
271 ; GISEL-NEXT: s_setpc_b64 s[30:31]
272 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
273 store <2 x i32> %data, ptr addrspace(7) %p
277 define <3 x i32> @load_v3i32(ptr addrspace(8) inreg %buf) {
278 ; SDAG-LABEL: load_v3i32:
280 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
282 ; SDAG-NEXT: s_waitcnt vmcnt(0)
283 ; SDAG-NEXT: s_setpc_b64 s[30:31]
285 ; GISEL-LABEL: load_v3i32:
287 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
289 ; GISEL-NEXT: s_waitcnt vmcnt(0)
290 ; GISEL-NEXT: s_setpc_b64 s[30:31]
291 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
292 %ret = load <3 x i32>, ptr addrspace(7) %p
296 define void @store_v3i32(<3 x i32> %data, ptr addrspace(8) inreg %buf) {
297 ; SDAG-LABEL: store_v3i32:
299 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
300 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
301 ; SDAG-NEXT: s_waitcnt vmcnt(0)
302 ; SDAG-NEXT: s_setpc_b64 s[30:31]
304 ; GISEL-LABEL: store_v3i32:
306 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
308 ; GISEL-NEXT: s_waitcnt vmcnt(0)
309 ; GISEL-NEXT: s_setpc_b64 s[30:31]
310 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
311 store <3 x i32> %data, ptr addrspace(7) %p
315 define <4 x i32> @load_v4i32(ptr addrspace(8) inreg %buf) {
316 ; SDAG-LABEL: load_v4i32:
318 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
319 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
320 ; SDAG-NEXT: s_waitcnt vmcnt(0)
321 ; SDAG-NEXT: s_setpc_b64 s[30:31]
323 ; GISEL-LABEL: load_v4i32:
325 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
326 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
327 ; GISEL-NEXT: s_waitcnt vmcnt(0)
328 ; GISEL-NEXT: s_setpc_b64 s[30:31]
329 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
330 %ret = load <4 x i32>, ptr addrspace(7) %p
334 define void @store_v4i32(<4 x i32> %data, ptr addrspace(8) inreg %buf) {
335 ; SDAG-LABEL: store_v4i32:
337 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
338 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
339 ; SDAG-NEXT: s_waitcnt vmcnt(0)
340 ; SDAG-NEXT: s_setpc_b64 s[30:31]
342 ; GISEL-LABEL: store_v4i32:
344 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
345 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
346 ; GISEL-NEXT: s_waitcnt vmcnt(0)
347 ; GISEL-NEXT: s_setpc_b64 s[30:31]
348 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
349 store <4 x i32> %data, ptr addrspace(7) %p
353 define <2 x i16> @load_v2i16(ptr addrspace(8) inreg %buf) {
354 ; SDAG-LABEL: load_v2i16:
356 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
357 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
358 ; SDAG-NEXT: s_waitcnt vmcnt(0)
359 ; SDAG-NEXT: s_setpc_b64 s[30:31]
361 ; GISEL-LABEL: load_v2i16:
363 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
364 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
365 ; GISEL-NEXT: s_waitcnt vmcnt(0)
366 ; GISEL-NEXT: s_setpc_b64 s[30:31]
367 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
368 %ret = load <2 x i16>, ptr addrspace(7) %p
372 define void @store_v2i16(<2 x i16> %data, ptr addrspace(8) inreg %buf) {
373 ; SDAG-LABEL: store_v2i16:
375 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
376 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
377 ; SDAG-NEXT: s_waitcnt vmcnt(0)
378 ; SDAG-NEXT: s_setpc_b64 s[30:31]
380 ; GISEL-LABEL: store_v2i16:
382 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
383 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
384 ; GISEL-NEXT: s_waitcnt vmcnt(0)
385 ; GISEL-NEXT: s_setpc_b64 s[30:31]
386 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
387 store <2 x i16> %data, ptr addrspace(7) %p
391 define <4 x i16> @load_v4i16(ptr addrspace(8) inreg %buf) {
392 ; SDAG-LABEL: load_v4i16:
394 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
396 ; SDAG-NEXT: s_waitcnt vmcnt(0)
397 ; SDAG-NEXT: s_setpc_b64 s[30:31]
399 ; GISEL-LABEL: load_v4i16:
401 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
402 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
403 ; GISEL-NEXT: s_waitcnt vmcnt(0)
404 ; GISEL-NEXT: s_setpc_b64 s[30:31]
405 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
406 %ret = load <4 x i16>, ptr addrspace(7) %p
410 define void @store_v4i16(<4 x i16> %data, ptr addrspace(8) inreg %buf) {
411 ; SDAG-LABEL: store_v4i16:
413 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
415 ; SDAG-NEXT: s_waitcnt vmcnt(0)
416 ; SDAG-NEXT: s_setpc_b64 s[30:31]
418 ; GISEL-LABEL: store_v4i16:
420 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
421 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
422 ; GISEL-NEXT: s_waitcnt vmcnt(0)
423 ; GISEL-NEXT: s_setpc_b64 s[30:31]
424 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
425 store <4 x i16> %data, ptr addrspace(7) %p
429 define <8 x i16> @load_v8i16(ptr addrspace(8) inreg %buf) {
430 ; SDAG-LABEL: load_v8i16:
432 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
433 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
434 ; SDAG-NEXT: s_waitcnt vmcnt(0)
435 ; SDAG-NEXT: s_setpc_b64 s[30:31]
437 ; GISEL-LABEL: load_v8i16:
439 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
440 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
441 ; GISEL-NEXT: s_waitcnt vmcnt(0)
442 ; GISEL-NEXT: s_setpc_b64 s[30:31]
443 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
444 %ret = load <8 x i16>, ptr addrspace(7) %p
448 define void @store_v8i16(<8 x i16> %data, ptr addrspace(8) inreg %buf) {
449 ; SDAG-LABEL: store_v8i16:
451 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
452 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
453 ; SDAG-NEXT: s_waitcnt vmcnt(0)
454 ; SDAG-NEXT: s_setpc_b64 s[30:31]
456 ; GISEL-LABEL: store_v8i16:
458 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
459 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
460 ; GISEL-NEXT: s_waitcnt vmcnt(0)
461 ; GISEL-NEXT: s_setpc_b64 s[30:31]
462 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
463 store <8 x i16> %data, ptr addrspace(7) %p
467 define <2 x i64> @load_v2i64(ptr addrspace(8) inreg %buf) {
468 ; SDAG-LABEL: load_v2i64:
470 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
472 ; SDAG-NEXT: s_waitcnt vmcnt(0)
473 ; SDAG-NEXT: s_setpc_b64 s[30:31]
475 ; GISEL-LABEL: load_v2i64:
477 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
478 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
479 ; GISEL-NEXT: s_waitcnt vmcnt(0)
480 ; GISEL-NEXT: s_setpc_b64 s[30:31]
481 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
482 %ret = load <2 x i64>, ptr addrspace(7) %p
486 define void @store_v2i64(<2 x i64> %data, ptr addrspace(8) inreg %buf) {
487 ; SDAG-LABEL: store_v2i64:
489 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
491 ; SDAG-NEXT: s_waitcnt vmcnt(0)
492 ; SDAG-NEXT: s_setpc_b64 s[30:31]
494 ; GISEL-LABEL: store_v2i64:
496 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
497 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
498 ; GISEL-NEXT: s_waitcnt vmcnt(0)
499 ; GISEL-NEXT: s_setpc_b64 s[30:31]
500 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
501 store <2 x i64> %data, ptr addrspace(7) %p
505 define half @load_f16(ptr addrspace(8) inreg %buf) {
506 ; SDAG-LABEL: load_f16:
508 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
509 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
510 ; SDAG-NEXT: s_waitcnt vmcnt(0)
511 ; SDAG-NEXT: s_setpc_b64 s[30:31]
513 ; GISEL-LABEL: load_f16:
515 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
516 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
517 ; GISEL-NEXT: s_waitcnt vmcnt(0)
518 ; GISEL-NEXT: s_setpc_b64 s[30:31]
519 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
520 %ret = load half, ptr addrspace(7) %p
524 define void @store_f16(half %data, ptr addrspace(8) inreg %buf) {
525 ; SDAG-LABEL: store_f16:
527 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
528 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
529 ; SDAG-NEXT: s_waitcnt vmcnt(0)
530 ; SDAG-NEXT: s_setpc_b64 s[30:31]
532 ; GISEL-LABEL: store_f16:
534 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
535 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
536 ; GISEL-NEXT: s_waitcnt vmcnt(0)
537 ; GISEL-NEXT: s_setpc_b64 s[30:31]
538 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
539 store half %data, ptr addrspace(7) %p
543 define bfloat @load_bf16(ptr addrspace(8) inreg %buf) {
544 ; SDAG-LABEL: load_bf16:
546 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
547 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
548 ; SDAG-NEXT: s_waitcnt vmcnt(0)
549 ; SDAG-NEXT: s_setpc_b64 s[30:31]
551 ; GISEL-LABEL: load_bf16:
553 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
554 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
555 ; GISEL-NEXT: s_waitcnt vmcnt(0)
556 ; GISEL-NEXT: s_setpc_b64 s[30:31]
557 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
558 %ret = load bfloat, ptr addrspace(7) %p
562 define void @store_bf16(bfloat %data, ptr addrspace(8) inreg %buf) {
563 ; SDAG-LABEL: store_bf16:
565 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
566 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
567 ; SDAG-NEXT: s_waitcnt vmcnt(0)
568 ; SDAG-NEXT: s_setpc_b64 s[30:31]
570 ; GISEL-LABEL: store_bf16:
572 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
573 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
574 ; GISEL-NEXT: s_waitcnt vmcnt(0)
575 ; GISEL-NEXT: s_setpc_b64 s[30:31]
576 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
577 store bfloat %data, ptr addrspace(7) %p
581 define <2 x half> @load_v2f16(ptr addrspace(8) inreg %buf) {
582 ; SDAG-LABEL: load_v2f16:
584 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
585 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
586 ; SDAG-NEXT: s_waitcnt vmcnt(0)
587 ; SDAG-NEXT: s_setpc_b64 s[30:31]
589 ; GISEL-LABEL: load_v2f16:
591 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
592 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
593 ; GISEL-NEXT: s_waitcnt vmcnt(0)
594 ; GISEL-NEXT: s_setpc_b64 s[30:31]
595 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
596 %ret = load <2 x half>, ptr addrspace(7) %p
600 define void @store_v2f16(<2 x half> %data, ptr addrspace(8) inreg %buf) {
601 ; SDAG-LABEL: store_v2f16:
603 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
604 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
605 ; SDAG-NEXT: s_waitcnt vmcnt(0)
606 ; SDAG-NEXT: s_setpc_b64 s[30:31]
608 ; GISEL-LABEL: store_v2f16:
610 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
611 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
612 ; GISEL-NEXT: s_waitcnt vmcnt(0)
613 ; GISEL-NEXT: s_setpc_b64 s[30:31]
614 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
615 store <2 x half> %data, ptr addrspace(7) %p
619 define <4 x bfloat> @load_v4bf16(ptr addrspace(8) inreg %buf) {
620 ; SDAG-LABEL: load_v4bf16:
622 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
623 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
624 ; SDAG-NEXT: s_waitcnt vmcnt(0)
625 ; SDAG-NEXT: s_setpc_b64 s[30:31]
627 ; GISEL-LABEL: load_v4bf16:
629 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
630 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
631 ; GISEL-NEXT: s_waitcnt vmcnt(0)
632 ; GISEL-NEXT: s_setpc_b64 s[30:31]
633 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
634 %ret = load <4 x bfloat>, ptr addrspace(7) %p
635 ret <4 x bfloat> %ret
638 define void @store_v4bf16(<4 x bfloat> %data, ptr addrspace(8) inreg %buf) {
639 ; SDAG-LABEL: store_v4bf16:
641 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
642 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
643 ; SDAG-NEXT: s_waitcnt vmcnt(0)
644 ; SDAG-NEXT: s_setpc_b64 s[30:31]
646 ; GISEL-LABEL: store_v4bf16:
648 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
649 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
650 ; GISEL-NEXT: s_waitcnt vmcnt(0)
651 ; GISEL-NEXT: s_setpc_b64 s[30:31]
652 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
653 store <4 x bfloat> %data, ptr addrspace(7) %p
657 define <8 x half> @load_v8f16(ptr addrspace(8) inreg %buf) {
658 ; SDAG-LABEL: load_v8f16:
660 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
661 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
662 ; SDAG-NEXT: s_waitcnt vmcnt(0)
663 ; SDAG-NEXT: s_setpc_b64 s[30:31]
665 ; GISEL-LABEL: load_v8f16:
667 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
668 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
669 ; GISEL-NEXT: s_waitcnt vmcnt(0)
670 ; GISEL-NEXT: s_setpc_b64 s[30:31]
671 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
672 %ret = load <8 x half>, ptr addrspace(7) %p
676 define void @store_v8f16(<8 x half> %data, ptr addrspace(8) inreg %buf) {
677 ; SDAG-LABEL: store_v8f16:
679 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
680 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
681 ; SDAG-NEXT: s_waitcnt vmcnt(0)
682 ; SDAG-NEXT: s_setpc_b64 s[30:31]
684 ; GISEL-LABEL: store_v8f16:
686 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
687 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
688 ; GISEL-NEXT: s_waitcnt vmcnt(0)
689 ; GISEL-NEXT: s_setpc_b64 s[30:31]
690 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
691 store <8 x half> %data, ptr addrspace(7) %p
695 define float @load_f32(ptr addrspace(8) inreg %buf) {
696 ; SDAG-LABEL: load_f32:
698 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
699 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
700 ; SDAG-NEXT: s_waitcnt vmcnt(0)
701 ; SDAG-NEXT: s_setpc_b64 s[30:31]
703 ; GISEL-LABEL: load_f32:
705 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
706 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
707 ; GISEL-NEXT: s_waitcnt vmcnt(0)
708 ; GISEL-NEXT: s_setpc_b64 s[30:31]
709 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
710 %ret = load float, ptr addrspace(7) %p
714 define void @store_f32(float %data, ptr addrspace(8) inreg %buf) {
715 ; SDAG-LABEL: store_f32:
717 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
718 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
719 ; SDAG-NEXT: s_waitcnt vmcnt(0)
720 ; SDAG-NEXT: s_setpc_b64 s[30:31]
722 ; GISEL-LABEL: store_f32:
724 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
725 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
726 ; GISEL-NEXT: s_waitcnt vmcnt(0)
727 ; GISEL-NEXT: s_setpc_b64 s[30:31]
728 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
729 store float %data, ptr addrspace(7) %p
733 define <2 x float> @load_v2f32(ptr addrspace(8) inreg %buf) {
734 ; SDAG-LABEL: load_v2f32:
736 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
737 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
738 ; SDAG-NEXT: s_waitcnt vmcnt(0)
739 ; SDAG-NEXT: s_setpc_b64 s[30:31]
741 ; GISEL-LABEL: load_v2f32:
743 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
744 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
745 ; GISEL-NEXT: s_waitcnt vmcnt(0)
746 ; GISEL-NEXT: s_setpc_b64 s[30:31]
747 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
748 %ret = load <2 x float>, ptr addrspace(7) %p
752 define void @store_v2f32(<2 x float> %data, ptr addrspace(8) inreg %buf) {
753 ; SDAG-LABEL: store_v2f32:
755 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
756 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
757 ; SDAG-NEXT: s_waitcnt vmcnt(0)
758 ; SDAG-NEXT: s_setpc_b64 s[30:31]
760 ; GISEL-LABEL: store_v2f32:
762 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
763 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
764 ; GISEL-NEXT: s_waitcnt vmcnt(0)
765 ; GISEL-NEXT: s_setpc_b64 s[30:31]
766 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
767 store <2 x float> %data, ptr addrspace(7) %p
771 define <3 x float> @load_v3f32(ptr addrspace(8) inreg %buf) {
772 ; SDAG-LABEL: load_v3f32:
774 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
775 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
776 ; SDAG-NEXT: s_waitcnt vmcnt(0)
777 ; SDAG-NEXT: s_setpc_b64 s[30:31]
779 ; GISEL-LABEL: load_v3f32:
781 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
782 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
783 ; GISEL-NEXT: s_waitcnt vmcnt(0)
784 ; GISEL-NEXT: s_setpc_b64 s[30:31]
785 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
786 %ret = load <3 x float>, ptr addrspace(7) %p
790 define void @store_v3f32(<3 x float> %data, ptr addrspace(8) inreg %buf) {
791 ; SDAG-LABEL: store_v3f32:
793 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
794 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
795 ; SDAG-NEXT: s_waitcnt vmcnt(0)
796 ; SDAG-NEXT: s_setpc_b64 s[30:31]
798 ; GISEL-LABEL: store_v3f32:
800 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
801 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
802 ; GISEL-NEXT: s_waitcnt vmcnt(0)
803 ; GISEL-NEXT: s_setpc_b64 s[30:31]
804 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
805 store <3 x float> %data, ptr addrspace(7) %p
809 define <4 x float> @load_v4f32(ptr addrspace(8) inreg %buf) {
810 ; SDAG-LABEL: load_v4f32:
812 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
813 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
814 ; SDAG-NEXT: s_waitcnt vmcnt(0)
815 ; SDAG-NEXT: s_setpc_b64 s[30:31]
817 ; GISEL-LABEL: load_v4f32:
819 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
820 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
821 ; GISEL-NEXT: s_waitcnt vmcnt(0)
822 ; GISEL-NEXT: s_setpc_b64 s[30:31]
823 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
824 %ret = load <4 x float>, ptr addrspace(7) %p
828 define void @store_v4f32(<4 x float> %data, ptr addrspace(8) inreg %buf) {
829 ; SDAG-LABEL: store_v4f32:
831 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
832 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
833 ; SDAG-NEXT: s_waitcnt vmcnt(0)
834 ; SDAG-NEXT: s_setpc_b64 s[30:31]
836 ; GISEL-LABEL: store_v4f32:
838 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
839 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
840 ; GISEL-NEXT: s_waitcnt vmcnt(0)
841 ; GISEL-NEXT: s_setpc_b64 s[30:31]
842 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
843 store <4 x float> %data, ptr addrspace(7) %p
847 define ptr addrspace(0) @load_p0(ptr addrspace(8) inreg %buf) {
848 ; SDAG-LABEL: load_p0:
850 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
851 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
852 ; SDAG-NEXT: s_waitcnt vmcnt(0)
853 ; SDAG-NEXT: s_setpc_b64 s[30:31]
855 ; GISEL-LABEL: load_p0:
857 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
858 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
859 ; GISEL-NEXT: s_waitcnt vmcnt(0)
860 ; GISEL-NEXT: s_setpc_b64 s[30:31]
861 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
862 %ret = load ptr addrspace(0), ptr addrspace(7) %p
863 ret ptr addrspace(0) %ret
866 define void @store_p0(ptr addrspace(0) %data, ptr addrspace(8) inreg %buf) {
867 ; SDAG-LABEL: store_p0:
869 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
870 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
871 ; SDAG-NEXT: s_waitcnt vmcnt(0)
872 ; SDAG-NEXT: s_setpc_b64 s[30:31]
874 ; GISEL-LABEL: store_p0:
876 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
877 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
878 ; GISEL-NEXT: s_waitcnt vmcnt(0)
879 ; GISEL-NEXT: s_setpc_b64 s[30:31]
880 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
881 store ptr addrspace(0) %data, ptr addrspace(7) %p
885 define ptr addrspace(1) @load_p1(ptr addrspace(8) inreg %buf) {
886 ; SDAG-LABEL: load_p1:
888 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
889 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
890 ; SDAG-NEXT: s_waitcnt vmcnt(0)
891 ; SDAG-NEXT: s_setpc_b64 s[30:31]
893 ; GISEL-LABEL: load_p1:
895 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
896 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
897 ; GISEL-NEXT: s_waitcnt vmcnt(0)
898 ; GISEL-NEXT: s_setpc_b64 s[30:31]
899 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
900 %ret = load ptr addrspace(1), ptr addrspace(7) %p
901 ret ptr addrspace(1) %ret
904 define void @store_p1(ptr addrspace(1) %data, ptr addrspace(8) inreg %buf) {
905 ; SDAG-LABEL: store_p1:
907 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
908 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
909 ; SDAG-NEXT: s_waitcnt vmcnt(0)
910 ; SDAG-NEXT: s_setpc_b64 s[30:31]
912 ; GISEL-LABEL: store_p1:
914 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
915 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
916 ; GISEL-NEXT: s_waitcnt vmcnt(0)
917 ; GISEL-NEXT: s_setpc_b64 s[30:31]
918 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
919 store ptr addrspace(1) %data, ptr addrspace(7) %p
923 define ptr addrspace(2) @load_p2(ptr addrspace(8) inreg %buf) {
924 ; SDAG-LABEL: load_p2:
926 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
927 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
928 ; SDAG-NEXT: s_waitcnt vmcnt(0)
929 ; SDAG-NEXT: s_setpc_b64 s[30:31]
931 ; GISEL-LABEL: load_p2:
933 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
934 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
935 ; GISEL-NEXT: s_waitcnt vmcnt(0)
936 ; GISEL-NEXT: s_setpc_b64 s[30:31]
937 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
938 %ret = load ptr addrspace(2), ptr addrspace(7) %p
939 ret ptr addrspace(2) %ret
942 define void @store_p2(ptr addrspace(2) %data, ptr addrspace(8) inreg %buf) {
943 ; SDAG-LABEL: store_p2:
945 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
946 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
947 ; SDAG-NEXT: s_waitcnt vmcnt(0)
948 ; SDAG-NEXT: s_setpc_b64 s[30:31]
950 ; GISEL-LABEL: store_p2:
952 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
953 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
954 ; GISEL-NEXT: s_waitcnt vmcnt(0)
955 ; GISEL-NEXT: s_setpc_b64 s[30:31]
956 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
957 store ptr addrspace(2) %data, ptr addrspace(7) %p
961 define ptr addrspace(3) @load_p3(ptr addrspace(8) inreg %buf) {
962 ; SDAG-LABEL: load_p3:
964 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
965 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
966 ; SDAG-NEXT: s_waitcnt vmcnt(0)
967 ; SDAG-NEXT: s_setpc_b64 s[30:31]
969 ; GISEL-LABEL: load_p3:
971 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
972 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
973 ; GISEL-NEXT: s_waitcnt vmcnt(0)
974 ; GISEL-NEXT: s_setpc_b64 s[30:31]
975 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
976 %ret = load ptr addrspace(3), ptr addrspace(7) %p
977 ret ptr addrspace(3) %ret
980 define void @store_p3(ptr addrspace(3) %data, ptr addrspace(8) inreg %buf) {
981 ; SDAG-LABEL: store_p3:
983 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
984 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
985 ; SDAG-NEXT: s_waitcnt vmcnt(0)
986 ; SDAG-NEXT: s_setpc_b64 s[30:31]
988 ; GISEL-LABEL: store_p3:
990 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
991 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
992 ; GISEL-NEXT: s_waitcnt vmcnt(0)
993 ; GISEL-NEXT: s_setpc_b64 s[30:31]
994 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
995 store ptr addrspace(3) %data, ptr addrspace(7) %p
999 define ptr addrspace(4) @load_p4(ptr addrspace(8) inreg %buf) {
1000 ; SDAG-LABEL: load_p4:
1002 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1003 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1004 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1005 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1007 ; GISEL-LABEL: load_p4:
1009 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1010 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1011 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1012 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1013 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1014 %ret = load ptr addrspace(4), ptr addrspace(7) %p
1015 ret ptr addrspace(4) %ret
1018 define void @store_p4(ptr addrspace(4) %data, ptr addrspace(8) inreg %buf) {
1019 ; SDAG-LABEL: store_p4:
1021 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1022 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1023 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1024 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1026 ; GISEL-LABEL: store_p4:
1028 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1029 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1030 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1031 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1032 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1033 store ptr addrspace(4) %data, ptr addrspace(7) %p
1037 define ptr addrspace(5) @load_p5(ptr addrspace(8) inreg %buf) {
1038 ; SDAG-LABEL: load_p5:
1040 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1041 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
1042 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1043 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1045 ; GISEL-LABEL: load_p5:
1047 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
1049 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1050 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1051 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1052 %ret = load ptr addrspace(5), ptr addrspace(7) %p
1053 ret ptr addrspace(5) %ret
1056 define void @store_p5(ptr addrspace(5) %data, ptr addrspace(8) inreg %buf) {
1057 ; SDAG-LABEL: store_p5:
1059 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1060 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
1061 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1062 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1064 ; GISEL-LABEL: store_p5:
1066 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1067 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
1068 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1069 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1070 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1071 store ptr addrspace(5) %data, ptr addrspace(7) %p
1075 define ptr addrspace(6) @load_p6(ptr addrspace(8) inreg %buf) {
1076 ; SDAG-LABEL: load_p6:
1078 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1079 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
1080 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1081 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1083 ; GISEL-LABEL: load_p6:
1085 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
1087 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1088 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1089 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1090 %ret = load ptr addrspace(6), ptr addrspace(7) %p
1091 ret ptr addrspace(6) %ret
1094 define void @store_p6(ptr addrspace(6) %data, ptr addrspace(8) inreg %buf) {
1095 ; SDAG-LABEL: store_p6:
1097 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1098 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
1099 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1100 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1102 ; GISEL-LABEL: store_p6:
1104 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1105 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
1106 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1107 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1108 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1109 store ptr addrspace(6) %data, ptr addrspace(7) %p
1113 define ptr addrspace(8) @load_p8(ptr addrspace(8) inreg %buf) {
1114 ; SDAG-LABEL: load_p8:
1116 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1117 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1118 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1119 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1121 ; GISEL-LABEL: load_p8:
1123 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1124 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1125 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1126 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1127 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1128 %ret = load ptr addrspace(8), ptr addrspace(7) %p
1129 ret ptr addrspace(8) %ret
1132 define void @store_p8(ptr addrspace(8) %data, ptr addrspace(8) inreg %buf) {
1133 ; SDAG-LABEL: store_p8:
1135 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1136 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1137 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1138 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1140 ; GISEL-LABEL: store_p8:
1142 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1143 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1144 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1145 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1146 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1147 store ptr addrspace(8) %data, ptr addrspace(7) %p
1151 define <2 x ptr addrspace(1)> @load_v2p1(ptr addrspace(8) inreg %buf) {
1152 ; SDAG-LABEL: load_v2p1:
1154 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1155 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1156 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1157 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1159 ; GISEL-LABEL: load_v2p1:
1161 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1162 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1163 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1164 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1165 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1166 %ret = load <2 x ptr addrspace(1)>, ptr addrspace(7) %p
1167 ret <2 x ptr addrspace(1)> %ret
1170 define void @store_v2p1(<2 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) {
1171 ; SDAG-LABEL: store_v2p1:
1173 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1174 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1175 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1176 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1178 ; GISEL-LABEL: store_v2p1:
1180 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1181 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1182 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1183 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1184 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1185 store <2 x ptr addrspace(1)> %data, ptr addrspace(7) %p
1189 define <2 x ptr addrspace(5)> @load_v2p5(ptr addrspace(8) inreg %buf) {
1190 ; SDAG-LABEL: load_v2p5:
1192 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1193 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1194 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1195 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1197 ; GISEL-LABEL: load_v2p5:
1199 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1200 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1201 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1202 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1203 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1204 %ret = load <2 x ptr addrspace(5)>, ptr addrspace(7) %p
1205 ret <2 x ptr addrspace(5)> %ret
1208 define void @store_v2p5(<2 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1209 ; SDAG-LABEL: store_v2p5:
1211 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1212 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1213 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1214 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1216 ; GISEL-LABEL: store_v2p5:
1218 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1219 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1220 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1221 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1222 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1223 store <2 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1227 define <3 x ptr addrspace(5)> @load_v3p5(ptr addrspace(8) inreg %buf) {
1228 ; SDAG-LABEL: load_v3p5:
1230 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1231 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1232 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1233 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1235 ; GISEL-LABEL: load_v3p5:
1237 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1238 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1239 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1240 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1241 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1242 %ret = load <3 x ptr addrspace(5)>, ptr addrspace(7) %p
1243 ret <3 x ptr addrspace(5)> %ret
1246 define void @store_v3p5(<3 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1247 ; SDAG-LABEL: store_v3p5:
1249 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1251 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1252 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1254 ; GISEL-LABEL: store_v3p5:
1256 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1257 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1258 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1259 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1260 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1261 store <3 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1265 define <4 x ptr addrspace(5)> @load_v4p5(ptr addrspace(8) inreg %buf) {
1266 ; SDAG-LABEL: load_v4p5:
1268 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1269 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1270 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1271 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1273 ; GISEL-LABEL: load_v4p5:
1275 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1276 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1277 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1278 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1279 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1280 %ret = load <4 x ptr addrspace(5)>, ptr addrspace(7) %p
1281 ret <4 x ptr addrspace(5)> %ret
1284 define void @store_v4p5(<4 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1285 ; SDAG-LABEL: store_v4p5:
1287 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1288 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1289 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1290 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1292 ; GISEL-LABEL: store_v4p5:
1294 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1295 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1296 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1297 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1298 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1299 store <4 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1303 ;;; 3 words in a short type. These need to be bitcast to <3 x i32> to be supported.
1305 define <6 x half> @load_v6f16(ptr addrspace(8) inreg %buf) {
1306 ; SDAG-LABEL: load_v6f16:
1308 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1309 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1310 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1311 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1313 ; GISEL-LABEL: load_v6f16:
1315 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1316 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1317 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1318 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1319 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1320 %ret = load <6 x half>, ptr addrspace(7) %p
1324 define void @store_v6f16(<6 x half> %data, ptr addrspace(8) inreg %buf) {
1325 ; SDAG-LABEL: store_v6f16:
1327 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1328 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1329 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1330 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1332 ; GISEL-LABEL: store_v6f16:
1334 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1335 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1336 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1337 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1338 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1339 store <6 x half> %data, ptr addrspace(7) %p
1343 ;;; Long types (32 bit elements). Must be split into multiple operations.
1345 define <5 x float> @load_v5f32(ptr addrspace(8) inreg %buf) {
1346 ; SDAG-LABEL: load_v5f32:
1348 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1349 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1350 ; SDAG-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16
1351 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1352 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1354 ; GISEL-LABEL: load_v5f32:
1356 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1357 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1358 ; GISEL-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16
1359 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1360 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1361 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1362 %ret = load <5 x float>, ptr addrspace(7) %p
1363 ret <5 x float> %ret
1366 define void @store_v5f32(<5 x float> %data, ptr addrspace(8) inreg %buf) {
1367 ; SDAG-LABEL: store_v5f32:
1369 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1370 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1371 ; SDAG-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16
1372 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1373 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1375 ; GISEL-LABEL: store_v5f32:
1377 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1378 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1379 ; GISEL-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16
1380 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1381 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1382 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1383 store <5 x float> %data, ptr addrspace(7) %p
1387 define <6 x float> @load_v6f32(ptr addrspace(8) inreg %buf) {
1388 ; SDAG-LABEL: load_v6f32:
1390 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1391 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1392 ; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1393 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1394 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1396 ; GISEL-LABEL: load_v6f32:
1398 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1399 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1400 ; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1401 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1402 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1403 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1404 %ret = load <6 x float>, ptr addrspace(7) %p
1405 ret <6 x float> %ret
1408 define void @store_v6f32(<6 x float> %data, ptr addrspace(8) inreg %buf) {
1409 ; SDAG-LABEL: store_v6f32:
1411 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1412 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1413 ; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1414 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1415 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1417 ; GISEL-LABEL: store_v6f32:
1419 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1420 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1421 ; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1422 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1423 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1424 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1425 store <6 x float> %data, ptr addrspace(7) %p
1429 define <7 x float> @load_v7f32(ptr addrspace(8) inreg %buf) {
1430 ; SDAG-LABEL: load_v7f32:
1432 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1433 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1434 ; SDAG-NEXT: buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1435 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1436 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1438 ; GISEL-LABEL: load_v7f32:
1440 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1441 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1442 ; GISEL-NEXT: buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1443 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1444 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1445 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1446 %ret = load <7 x float>, ptr addrspace(7) %p
1447 ret <7 x float> %ret
1450 define void @store_v7f32(<7 x float> %data, ptr addrspace(8) inreg %buf) {
1451 ; SDAG-LABEL: store_v7f32:
1453 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1454 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1455 ; SDAG-NEXT: buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1456 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1457 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1459 ; GISEL-LABEL: store_v7f32:
1461 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1462 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1463 ; GISEL-NEXT: buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1464 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1465 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1466 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1467 store <7 x float> %data, ptr addrspace(7) %p
1471 define <8 x float> @load_v8f32(ptr addrspace(8) inreg %buf) {
1472 ; SDAG-LABEL: load_v8f32:
1474 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1475 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1476 ; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1477 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1478 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1480 ; GISEL-LABEL: load_v8f32:
1482 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1484 ; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1485 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1486 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1487 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1488 %ret = load <8 x float>, ptr addrspace(7) %p
1489 ret <8 x float> %ret
1492 define void @store_v8f32(<8 x float> %data, ptr addrspace(8) inreg %buf) {
1493 ; SDAG-LABEL: store_v8f32:
1495 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1496 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1497 ; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1498 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1499 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1501 ; GISEL-LABEL: store_v8f32:
1503 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1504 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1505 ; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1506 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1507 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1508 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1509 store <8 x float> %data, ptr addrspace(7) %p
1513 define <10 x float> @load_v10f32(ptr addrspace(8) inreg %buf) {
1514 ; SDAG-LABEL: load_v10f32:
1516 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1517 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1518 ; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1519 ; SDAG-NEXT: buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1520 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1521 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1523 ; GISEL-LABEL: load_v10f32:
1525 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1526 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1527 ; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1528 ; GISEL-NEXT: buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1529 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1530 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1531 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1532 %ret = load <10 x float>, ptr addrspace(7) %p
1533 ret <10 x float> %ret
1536 define void @store_v10f32(<10 x float> %data, ptr addrspace(8) inreg %buf) {
1537 ; SDAG-LABEL: store_v10f32:
1539 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1540 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1541 ; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1542 ; SDAG-NEXT: buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1543 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1544 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1546 ; GISEL-LABEL: store_v10f32:
1548 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1549 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1550 ; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1551 ; GISEL-NEXT: buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1552 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1553 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1554 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1555 store <10 x float> %data, ptr addrspace(7) %p
1559 define <6 x i32> @load_v6i32(ptr addrspace(8) inreg %buf) {
1560 ; SDAG-LABEL: load_v6i32:
1562 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1563 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1564 ; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1565 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1566 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1568 ; GISEL-LABEL: load_v6i32:
1570 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1571 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1572 ; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1573 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1574 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1575 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1576 %ret = load <6 x i32>, ptr addrspace(7) %p
1580 define void @store_v6i32(<6 x i32> %data, ptr addrspace(8) inreg %buf) {
1581 ; SDAG-LABEL: store_v6i32:
1583 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1584 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1585 ; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1586 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1587 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1589 ; GISEL-LABEL: store_v6i32:
1591 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1592 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1593 ; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1594 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1595 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1596 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1597 store <6 x i32> %data, ptr addrspace(7) %p
1601 define <4 x ptr addrspace(1)> @load_v4p1(ptr addrspace(8) inreg %buf) {
1602 ; SDAG-LABEL: load_v4p1:
1604 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1605 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1606 ; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1607 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1608 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1610 ; GISEL-LABEL: load_v4p1:
1612 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1613 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1614 ; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1615 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1616 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1617 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1618 %ret = load <4 x ptr addrspace(1)>, ptr addrspace(7) %p
1619 ret <4 x ptr addrspace(1)> %ret
1622 define void @store_v4p1(<4 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) {
1623 ; SDAG-LABEL: store_v4p1:
1625 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1626 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1627 ; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1628 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1629 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1631 ; GISEL-LABEL: store_v4p1:
1633 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1634 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1635 ; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1636 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1637 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1638 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1639 store <4 x ptr addrspace(1)> %data, ptr addrspace(7) %p
1643 ;;; Uneven types with 16-bit elements. Require splitting into multiple operations.
1645 define <1 x i16> @load_v1i16(ptr addrspace(8) inreg %buf) {
1646 ; SDAG-LABEL: load_v1i16:
1648 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1649 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
1650 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1651 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1653 ; GISEL-LABEL: load_v1i16:
1655 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1656 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
1657 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1658 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1659 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1660 %ret = load <1 x i16>, ptr addrspace(7) %p
1664 define void @store_v1i16(<1 x i16> %data, ptr addrspace(8) inreg %buf) {
1665 ; SDAG-LABEL: store_v1i16:
1667 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1668 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
1669 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1670 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1672 ; GISEL-LABEL: store_v1i16:
1674 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1675 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
1676 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1677 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1678 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1679 store <1 x i16> %data, ptr addrspace(7) %p
1683 define <3 x i16> @load_v3i16(ptr addrspace(8) inreg %buf) {
1684 ; SDAG-LABEL: load_v3i16:
1686 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1687 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
1688 ; SDAG-NEXT: buffer_load_ushort v1, off, s[16:19], 0 offset:4
1689 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1690 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1692 ; GISEL-LABEL: load_v3i16:
1694 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1695 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
1696 ; GISEL-NEXT: buffer_load_ushort v1, off, s[16:19], 0 offset:4
1697 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1698 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1699 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1700 %ret = load <3 x i16>, ptr addrspace(7) %p
1704 define void @store_v3i16(<3 x i16> %data, ptr addrspace(8) inreg %buf) {
1705 ; SDAG-LABEL: store_v3i16:
1707 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1708 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
1709 ; SDAG-NEXT: buffer_store_short v1, off, s[16:19], 0 offset:4
1710 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1711 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1713 ; GISEL-LABEL: store_v3i16:
1715 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1716 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
1717 ; GISEL-NEXT: buffer_store_short v1, off, s[16:19], 0 offset:4
1718 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1719 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1720 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1721 store <3 x i16> %data, ptr addrspace(7) %p
1725 define <5 x i16> @load_v5i16(ptr addrspace(8) inreg %buf) {
1726 ; SDAG-LABEL: load_v5i16:
1728 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1729 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1730 ; SDAG-NEXT: buffer_load_ushort v2, off, s[16:19], 0 offset:8
1731 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1732 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1734 ; GISEL-LABEL: load_v5i16:
1736 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1737 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1738 ; GISEL-NEXT: buffer_load_ushort v2, off, s[16:19], 0 offset:8
1739 ; GISEL-NEXT: s_mov_b32 s4, 0xffff
1740 ; GISEL-NEXT: s_waitcnt vmcnt(1)
1741 ; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0
1742 ; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1
1743 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1744 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1745 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1746 %ret = load <5 x i16>, ptr addrspace(7) %p
1750 define void @store_v5i16(<5 x i16> %data, ptr addrspace(8) inreg %buf) {
1751 ; SDAG-LABEL: store_v5i16:
1753 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1754 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1755 ; SDAG-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:8
1756 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1757 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1759 ; GISEL-LABEL: store_v5i16:
1761 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1762 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1763 ; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:8
1764 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1765 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1766 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1767 store <5 x i16> %data, ptr addrspace(7) %p
1771 define <6 x i16> @load_v6i16(ptr addrspace(8) inreg %buf) {
1772 ; SDAG-LABEL: load_v6i16:
1774 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1775 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1776 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1777 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1779 ; GISEL-LABEL: load_v6i16:
1781 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1782 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1783 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1784 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1785 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1786 %ret = load <6 x i16>, ptr addrspace(7) %p
1790 define void @store_v6i16(<6 x i16> %data, ptr addrspace(8) inreg %buf) {
1791 ; SDAG-LABEL: store_v6i16:
1793 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1795 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1796 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1798 ; GISEL-LABEL: store_v6i16:
1800 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1801 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1802 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1803 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1804 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1805 store <6 x i16> %data, ptr addrspace(7) %p
1809 define <7 x i16> @load_v7i16(ptr addrspace(8) inreg %buf) {
1810 ; SDAG-LABEL: load_v7i16:
1812 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1813 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1814 ; SDAG-NEXT: buffer_load_ushort v3, off, s[16:19], 0 offset:12
1815 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1816 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1818 ; GISEL-LABEL: load_v7i16:
1820 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1821 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1822 ; GISEL-NEXT: buffer_load_ushort v3, off, s[16:19], 0 offset:12
1823 ; GISEL-NEXT: s_mov_b32 s4, 0xffff
1824 ; GISEL-NEXT: s_waitcnt vmcnt(1)
1825 ; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0
1826 ; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1
1827 ; GISEL-NEXT: v_bfi_b32 v2, s4, v2, v2
1828 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1829 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1830 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1831 %ret = load <7 x i16>, ptr addrspace(7) %p
1835 define void @store_v7i16(<7 x i16> %data, ptr addrspace(8) inreg %buf) {
1836 ; SDAG-LABEL: store_v7i16:
1838 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1839 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1840 ; SDAG-NEXT: buffer_store_short v3, off, s[16:19], 0 offset:12
1841 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1842 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1844 ; GISEL-LABEL: store_v7i16:
1846 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1847 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1848 ; GISEL-NEXT: buffer_store_short v3, off, s[16:19], 0 offset:12
1849 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1850 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1851 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1852 store <7 x i16> %data, ptr addrspace(7) %p
1856 define <9 x i16> @load_v9i16(ptr addrspace(8) inreg %buf) {
1857 ; SDAG-LABEL: load_v9i16:
1859 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1860 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1861 ; SDAG-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:16
1862 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1863 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1865 ; GISEL-LABEL: load_v9i16:
1867 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1868 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1869 ; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:16
1870 ; GISEL-NEXT: s_mov_b32 s4, 0xffff
1871 ; GISEL-NEXT: s_waitcnt vmcnt(1)
1872 ; GISEL-NEXT: v_bfi_b32 v0, s4, v0, v0
1873 ; GISEL-NEXT: v_bfi_b32 v1, s4, v1, v1
1874 ; GISEL-NEXT: v_bfi_b32 v2, s4, v2, v2
1875 ; GISEL-NEXT: v_bfi_b32 v3, s4, v3, v3
1876 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1877 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1878 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1879 %ret = load <9 x i16>, ptr addrspace(7) %p
1883 define void @store_v9i16(<9 x i16> %data, ptr addrspace(8) inreg %buf) {
1884 ; SDAG-LABEL: store_v9i16:
1886 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1887 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1888 ; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:16
1889 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1890 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1892 ; GISEL-LABEL: store_v9i16:
1894 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1895 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1896 ; GISEL-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:16
1897 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1898 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1899 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1900 store <9 x i16> %data, ptr addrspace(7) %p
1904 ;;; Byte vectors. Need to be
1905 ;;; - Split into multiple operations
1906 ;;; - Bitcast if they have a natively supported width
1908 define <1 x i8> @load_v1i8(ptr addrspace(8) inreg %buf) {
1909 ; SDAG-LABEL: load_v1i8:
1911 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1912 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
1913 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1914 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1916 ; GISEL-LABEL: load_v1i8:
1918 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1919 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
1920 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1921 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1922 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1923 %ret = load <1 x i8>, ptr addrspace(7) %p
1927 define void @store_v1i8(<1 x i8> %data, ptr addrspace(8) inreg %buf) {
1928 ; SDAG-LABEL: store_v1i8:
1930 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1931 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
1932 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1933 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1935 ; GISEL-LABEL: store_v1i8:
1937 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1938 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
1939 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1940 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1941 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1942 store <1 x i8> %data, ptr addrspace(7) %p
1946 define <2 x i8> @load_v2i8(ptr addrspace(8) inreg %buf) {
1947 ; SDAG-LABEL: load_v2i8:
1949 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1950 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
1951 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1952 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
1953 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1955 ; GISEL-LABEL: load_v2i8:
1957 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1958 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
1959 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1960 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
1961 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1962 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1963 %ret = load <2 x i8>, ptr addrspace(7) %p
1967 define void @store_v2i8(<2 x i8> %data, ptr addrspace(8) inreg %buf) {
1968 ; SDAG-LABEL: store_v2i8:
1970 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1971 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
1972 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1973 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
1974 ; SDAG-NEXT: s_waitcnt vmcnt(0)
1975 ; SDAG-NEXT: s_setpc_b64 s[30:31]
1977 ; GISEL-LABEL: store_v2i8:
1979 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1980 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1
1981 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
1982 ; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1983 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
1984 ; GISEL-NEXT: s_waitcnt vmcnt(0)
1985 ; GISEL-NEXT: s_setpc_b64 s[30:31]
1986 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1987 store <2 x i8> %data, ptr addrspace(7) %p
1991 define <3 x i8> @load_v3i8(ptr addrspace(8) inreg %buf) {
1992 ; SDAG-LABEL: load_v3i8:
1994 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1995 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
1996 ; SDAG-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2
1997 ; SDAG-NEXT: s_waitcnt vmcnt(1)
1998 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
1999 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2000 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2002 ; GISEL-LABEL: load_v3i8:
2004 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2005 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
2006 ; GISEL-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2
2007 ; GISEL-NEXT: s_waitcnt vmcnt(1)
2008 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2009 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2010 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2011 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2012 %ret = load <3 x i8>, ptr addrspace(7) %p
2016 define void @store_v3i8(<3 x i8> %data, ptr addrspace(8) inreg %buf) {
2017 ; SDAG-LABEL: store_v3i8:
2019 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2020 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2021 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2022 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
2023 ; SDAG-NEXT: buffer_store_byte v2, off, s[16:19], 0 offset:2
2024 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2025 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2027 ; GISEL-LABEL: store_v3i8:
2029 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2030 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1
2031 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2032 ; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2033 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
2034 ; GISEL-NEXT: buffer_store_byte v2, off, s[16:19], 0 offset:2
2035 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2036 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2037 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2038 store <3 x i8> %data, ptr addrspace(7) %p
2042 define <4 x i8> @load_v4i8(ptr addrspace(8) inreg %buf) {
2043 ; SDAG-LABEL: load_v4i8:
2045 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2046 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2047 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2048 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2049 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2050 ; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2051 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2053 ; GISEL-LABEL: load_v4i8:
2055 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2056 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2057 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2058 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2059 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2060 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2061 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2062 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2063 %ret = load <4 x i8>, ptr addrspace(7) %p
2067 define void @store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
2068 ; SDAG-LABEL: store_v4i8:
2070 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2071 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2072 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2073 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2074 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2075 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2076 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2077 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2078 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2080 ; GISEL-LABEL: store_v4i8:
2082 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2083 ; GISEL-NEXT: v_mov_b32_e32 v5, 8
2084 ; GISEL-NEXT: v_mov_b32_e32 v4, 0xff
2085 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2086 ; GISEL-NEXT: v_and_or_b32 v0, v0, v4, v1
2087 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2088 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2089 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2090 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2091 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2092 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2093 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2094 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2095 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2096 store <4 x i8> %data, ptr addrspace(7) %p
2100 define <5 x i8> @load_v5i8(ptr addrspace(8) inreg %buf) {
2101 ; SDAG-LABEL: load_v5i8:
2103 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2104 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2105 ; SDAG-NEXT: buffer_load_ubyte v4, off, s[16:19], 0 offset:4
2106 ; SDAG-NEXT: s_waitcnt vmcnt(1)
2107 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2108 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2109 ; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2110 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2111 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2113 ; GISEL-LABEL: load_v5i8:
2115 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2116 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2117 ; GISEL-NEXT: buffer_load_ubyte v4, off, s[16:19], 0 offset:4
2118 ; GISEL-NEXT: s_waitcnt vmcnt(1)
2119 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2120 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2121 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2122 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2123 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2124 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2125 %ret = load <5 x i8>, ptr addrspace(7) %p
2129 define void @store_v5i8(<5 x i8> %data, ptr addrspace(8) inreg %buf) {
2130 ; SDAG-LABEL: store_v5i8:
2132 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2133 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2134 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2135 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2136 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2137 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2138 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2139 ; SDAG-NEXT: buffer_store_byte v4, off, s[16:19], 0 offset:4
2140 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2141 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2143 ; GISEL-LABEL: store_v5i8:
2145 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2146 ; GISEL-NEXT: v_mov_b32_e32 v6, 8
2147 ; GISEL-NEXT: v_mov_b32_e32 v5, 0xff
2148 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v6, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2149 ; GISEL-NEXT: v_and_or_b32 v0, v0, v5, v1
2150 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2151 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2152 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2153 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2154 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2155 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2156 ; GISEL-NEXT: buffer_store_byte v4, off, s[16:19], 0 offset:4
2157 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2158 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2159 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2160 store <5 x i8> %data, ptr addrspace(7) %p
2164 define <6 x i8> @load_v6i8(ptr addrspace(8) inreg %buf) {
2165 ; SDAG-LABEL: load_v6i8:
2167 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2168 ; SDAG-NEXT: buffer_load_ushort v6, off, s[16:19], 0 offset:4
2169 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2170 ; SDAG-NEXT: s_waitcnt vmcnt(1)
2171 ; SDAG-NEXT: v_and_b32_e32 v1, 0xffff, v6
2172 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2173 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 8, v0
2174 ; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1]
2175 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2176 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2177 ; SDAG-NEXT: v_mov_b32_e32 v4, v6
2178 ; SDAG-NEXT: v_mov_b32_e32 v1, v7
2179 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2181 ; GISEL-LABEL: load_v6i8:
2183 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2184 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2185 ; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4
2186 ; GISEL-NEXT: s_waitcnt vmcnt(1)
2187 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2188 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2189 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2190 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2191 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4
2192 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2193 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2194 %ret = load <6 x i8>, ptr addrspace(7) %p
2198 define void @store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
2199 ; SDAG-LABEL: store_v6i8:
2201 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2202 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2203 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2204 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2205 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2206 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
2207 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2208 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2209 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2210 ; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:4
2211 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2212 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2214 ; GISEL-LABEL: store_v6i8:
2216 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2217 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1
2218 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2219 ; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2220 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v3
2221 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2222 ; GISEL-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2223 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v5
2224 ; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0
2225 ; GISEL-NEXT: v_lshlrev_b16_e32 v2, 8, v2
2226 ; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0
2227 ; GISEL-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2228 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2229 ; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:4
2230 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2231 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2232 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2233 store <6 x i8> %data, ptr addrspace(7) %p
2237 define <7 x i8> @load_v7i8(ptr addrspace(8) inreg %buf) {
2238 ; SDAG-LABEL: load_v7i8:
2240 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2241 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2242 ; SDAG-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4
2243 ; SDAG-NEXT: buffer_load_ubyte v6, off, s[16:19], 0 offset:6
2244 ; SDAG-NEXT: s_waitcnt vmcnt(2)
2245 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2246 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2247 ; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2248 ; SDAG-NEXT: s_waitcnt vmcnt(1)
2249 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v4
2250 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2251 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2253 ; GISEL-LABEL: load_v7i8:
2255 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2256 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2257 ; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4
2258 ; GISEL-NEXT: buffer_load_ubyte v6, off, s[16:19], 0 offset:6
2259 ; GISEL-NEXT: s_waitcnt vmcnt(2)
2260 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
2261 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2262 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2263 ; GISEL-NEXT: s_waitcnt vmcnt(1)
2264 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4
2265 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2266 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2267 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2268 %ret = load <7 x i8>, ptr addrspace(7) %p
2272 define void @store_v7i8(<7 x i8> %data, ptr addrspace(8) inreg %buf) {
2273 ; SDAG-LABEL: store_v7i8:
2275 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2276 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2277 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2278 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2279 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2280 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2281 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2282 ; SDAG-NEXT: v_lshlrev_b16_e32 v0, 8, v5
2283 ; SDAG-NEXT: v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2284 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0 offset:4
2285 ; SDAG-NEXT: buffer_store_byte v6, off, s[16:19], 0 offset:6
2286 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2287 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2289 ; GISEL-LABEL: store_v7i8:
2291 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2292 ; GISEL-NEXT: v_mov_b32_e32 v8, 8
2293 ; GISEL-NEXT: v_mov_b32_e32 v7, 0xff
2294 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v8, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2295 ; GISEL-NEXT: v_and_or_b32 v0, v0, v7, v1
2296 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2297 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2298 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2299 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2300 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2301 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2302 ; GISEL-NEXT: v_and_b32_e32 v0, 0xff, v5
2303 ; GISEL-NEXT: v_lshlrev_b16_e32 v0, 8, v0
2304 ; GISEL-NEXT: v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2305 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0 offset:4
2306 ; GISEL-NEXT: buffer_store_byte v6, off, s[16:19], 0 offset:6
2307 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2308 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2309 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2310 store <7 x i8> %data, ptr addrspace(7) %p
2314 define <8 x i8> @load_v8i8(ptr addrspace(8) inreg %buf) {
2315 ; SDAG-LABEL: load_v8i8:
2317 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2318 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2319 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2320 ; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1]
2321 ; SDAG-NEXT: v_lshrrev_b32_e32 v8, 8, v0
2322 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2323 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2324 ; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2325 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2326 ; SDAG-NEXT: v_mov_b32_e32 v4, v1
2327 ; SDAG-NEXT: v_mov_b32_e32 v1, v8
2328 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2330 ; GISEL-LABEL: load_v8i8:
2332 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2333 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2334 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2335 ; GISEL-NEXT: v_lshrrev_b32_e32 v8, 8, v0
2336 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
2337 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2338 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2339 ; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2340 ; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2341 ; GISEL-NEXT: v_mov_b32_e32 v4, v1
2342 ; GISEL-NEXT: v_mov_b32_e32 v1, v8
2343 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2344 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2345 %ret = load <8 x i8>, ptr addrspace(7) %p
2349 define void @store_v8i8(<8 x i8> %data, ptr addrspace(8) inreg %buf) {
2350 ; SDAG-LABEL: store_v8i8:
2352 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2353 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
2354 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2355 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2356 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7
2357 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2358 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2359 ; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2360 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2361 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2362 ; SDAG-NEXT: v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2363 ; SDAG-NEXT: buffer_store_dwordx2 v[3:4], off, s[16:19], 0
2364 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2365 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2367 ; GISEL-LABEL: store_v8i8:
2369 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2370 ; GISEL-NEXT: v_mov_b32_e32 v9, 8
2371 ; GISEL-NEXT: v_mov_b32_e32 v8, 0xff
2372 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2373 ; GISEL-NEXT: v_and_or_b32 v0, v0, v8, v1
2374 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2375 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2376 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2377 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2378 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2379 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v9, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2380 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6
2381 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7
2382 ; GISEL-NEXT: v_and_or_b32 v1, v4, v8, v1
2383 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2
2384 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3
2385 ; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3
2386 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2387 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2388 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2389 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2390 store <8 x i8> %data, ptr addrspace(7) %p
2394 define <12 x i8> @load_v12i8(ptr addrspace(8) inreg %buf) {
2395 ; SDAG-LABEL: load_v12i8:
2397 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2398 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
2399 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2400 ; SDAG-NEXT: v_mov_b32_e32 v8, v2
2401 ; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v2
2402 ; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1]
2403 ; SDAG-NEXT: v_lshrrev_b32_e32 v14, 8, v0
2404 ; SDAG-NEXT: v_lshrrev_b32_e32 v13, 16, v0
2405 ; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[8:9]
2406 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2407 ; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2408 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2409 ; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v2
2410 ; SDAG-NEXT: v_mov_b32_e32 v4, v1
2411 ; SDAG-NEXT: v_mov_b32_e32 v1, v14
2412 ; SDAG-NEXT: v_mov_b32_e32 v2, v13
2413 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2415 ; GISEL-LABEL: load_v12i8:
2417 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2418 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
2419 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2420 ; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v0
2421 ; GISEL-NEXT: v_lshrrev_b32_e32 v12, 16, v0
2422 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
2423 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2424 ; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2425 ; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2426 ; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2
2427 ; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2
2428 ; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2
2429 ; GISEL-NEXT: v_mov_b32_e32 v4, v1
2430 ; GISEL-NEXT: v_mov_b32_e32 v8, v2
2431 ; GISEL-NEXT: v_mov_b32_e32 v1, v13
2432 ; GISEL-NEXT: v_mov_b32_e32 v2, v12
2433 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2434 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2435 %ret = load <12 x i8>, ptr addrspace(7) %p
2439 define void @store_v12i8(<12 x i8> %data, ptr addrspace(8) inreg %buf) {
2440 ; SDAG-LABEL: store_v12i8:
2442 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2443 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9
2444 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
2445 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2446 ; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2447 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11
2448 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2449 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7
2450 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2451 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2452 ; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2453 ; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2454 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2455 ; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2456 ; SDAG-NEXT: v_or_b32_sdwa v7, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2457 ; SDAG-NEXT: v_or_b32_sdwa v6, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2458 ; SDAG-NEXT: buffer_store_dwordx3 v[6:8], off, s[16:19], 0
2459 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2460 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2462 ; GISEL-LABEL: store_v12i8:
2464 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2465 ; GISEL-NEXT: v_mov_b32_e32 v13, 8
2466 ; GISEL-NEXT: v_mov_b32_e32 v12, 0xff
2467 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v13, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2468 ; GISEL-NEXT: v_and_or_b32 v0, v0, v12, v1
2469 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2470 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2471 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2472 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2473 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2474 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v13, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2475 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6
2476 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7
2477 ; GISEL-NEXT: v_and_or_b32 v1, v4, v12, v1
2478 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2
2479 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3
2480 ; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3
2481 ; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v13, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2482 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10
2483 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11
2484 ; GISEL-NEXT: v_and_or_b32 v2, v8, v12, v2
2485 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3
2486 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4
2487 ; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4
2488 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
2489 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2490 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2491 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2492 store <12 x i8> %data, ptr addrspace(7) %p
2496 define <16 x i8> @load_v16i8(ptr addrspace(8) inreg %buf) {
2497 ; SDAG-LABEL: load_v16i8:
2499 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2500 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2501 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2502 ; SDAG-NEXT: v_lshrrev_b64 v[18:19], 24, v[0:1]
2503 ; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[2:3]
2504 ; SDAG-NEXT: v_lshrrev_b32_e32 v17, 8, v0
2505 ; SDAG-NEXT: v_lshrrev_b32_e32 v16, 16, v0
2506 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2507 ; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2508 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2509 ; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v2
2510 ; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v2
2511 ; SDAG-NEXT: v_lshrrev_b32_e32 v13, 8, v3
2512 ; SDAG-NEXT: v_lshrrev_b32_e32 v14, 16, v3
2513 ; SDAG-NEXT: v_lshrrev_b32_e32 v15, 24, v3
2514 ; SDAG-NEXT: v_mov_b32_e32 v4, v1
2515 ; SDAG-NEXT: v_mov_b32_e32 v8, v2
2516 ; SDAG-NEXT: v_mov_b32_e32 v12, v3
2517 ; SDAG-NEXT: v_mov_b32_e32 v1, v17
2518 ; SDAG-NEXT: v_mov_b32_e32 v2, v16
2519 ; SDAG-NEXT: v_mov_b32_e32 v3, v18
2520 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2522 ; GISEL-LABEL: load_v16i8:
2524 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2525 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2526 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2527 ; GISEL-NEXT: v_lshrrev_b32_e32 v16, 8, v0
2528 ; GISEL-NEXT: v_lshrrev_b32_e32 v17, 16, v0
2529 ; GISEL-NEXT: v_lshrrev_b32_e32 v18, 24, v0
2530 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2531 ; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2532 ; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2533 ; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2
2534 ; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2
2535 ; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2
2536 ; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v3
2537 ; GISEL-NEXT: v_lshrrev_b32_e32 v14, 16, v3
2538 ; GISEL-NEXT: v_lshrrev_b32_e32 v15, 24, v3
2539 ; GISEL-NEXT: v_mov_b32_e32 v4, v1
2540 ; GISEL-NEXT: v_mov_b32_e32 v8, v2
2541 ; GISEL-NEXT: v_mov_b32_e32 v12, v3
2542 ; GISEL-NEXT: v_mov_b32_e32 v1, v16
2543 ; GISEL-NEXT: v_mov_b32_e32 v2, v17
2544 ; GISEL-NEXT: v_mov_b32_e32 v3, v18
2545 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2546 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2547 %ret = load <16 x i8>, ptr addrspace(7) %p
2551 define void @store_v16i8(<16 x i8> %data, ptr addrspace(8) inreg %buf) {
2552 ; SDAG-LABEL: store_v16i8:
2554 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2555 ; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v13
2556 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9
2557 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
2558 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2559 ; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2560 ; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v15
2561 ; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2562 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11
2563 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2564 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v7
2565 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2566 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
2567 ; SDAG-NEXT: v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2568 ; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2569 ; SDAG-NEXT: v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2570 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2571 ; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2572 ; SDAG-NEXT: v_or_b32_sdwa v11, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2573 ; SDAG-NEXT: v_or_b32_sdwa v10, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2574 ; SDAG-NEXT: v_or_b32_sdwa v9, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2575 ; SDAG-NEXT: buffer_store_dwordx4 v[9:12], off, s[16:19], 0
2576 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2577 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2579 ; GISEL-LABEL: store_v16i8:
2581 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2582 ; GISEL-NEXT: v_mov_b32_e32 v17, 8
2583 ; GISEL-NEXT: v_mov_b32_e32 v16, 0xff
2584 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v17, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2585 ; GISEL-NEXT: v_and_or_b32 v0, v0, v16, v1
2586 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
2587 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
2588 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
2589 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
2590 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
2591 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v17, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2592 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v6
2593 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v7
2594 ; GISEL-NEXT: v_and_or_b32 v1, v4, v16, v1
2595 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2
2596 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3
2597 ; GISEL-NEXT: v_or3_b32 v1, v1, v2, v3
2598 ; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v17, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2599 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10
2600 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11
2601 ; GISEL-NEXT: v_and_or_b32 v2, v8, v16, v2
2602 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3
2603 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4
2604 ; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4
2605 ; GISEL-NEXT: v_lshlrev_b32_sdwa v3, v17, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2606 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v14
2607 ; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v15
2608 ; GISEL-NEXT: v_and_or_b32 v3, v12, v16, v3
2609 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4
2610 ; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5
2611 ; GISEL-NEXT: v_or3_b32 v3, v3, v4, v5
2612 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2613 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2614 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2615 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2616 store <16 x i8> %data, ptr addrspace(7) %p
2620 define <32 x i8> @load_v32i8(ptr addrspace(8) inreg %buf) {
2621 ; SDAG-LABEL: load_v32i8:
2623 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2624 ; SDAG-NEXT: buffer_load_dwordx4 v[36:39], off, s[16:19], 0
2625 ; SDAG-NEXT: buffer_load_dwordx4 v[32:35], off, s[16:19], 0 offset:16
2626 ; SDAG-NEXT: s_waitcnt vmcnt(1)
2627 ; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[36:37]
2628 ; SDAG-NEXT: v_lshrrev_b64 v[11:12], 24, v[38:39]
2629 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2630 ; SDAG-NEXT: v_lshrrev_b64 v[19:20], 24, v[32:33]
2631 ; SDAG-NEXT: v_lshrrev_b64 v[27:28], 24, v[34:35]
2632 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v36
2633 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v36
2634 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v37
2635 ; SDAG-NEXT: v_lshrrev_b32_e32 v6, 16, v37
2636 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 24, v37
2637 ; SDAG-NEXT: v_lshrrev_b32_e32 v9, 8, v38
2638 ; SDAG-NEXT: v_lshrrev_b32_e32 v10, 16, v38
2639 ; SDAG-NEXT: v_lshrrev_b32_e32 v13, 8, v39
2640 ; SDAG-NEXT: v_lshrrev_b32_e32 v14, 16, v39
2641 ; SDAG-NEXT: v_lshrrev_b32_e32 v15, 24, v39
2642 ; SDAG-NEXT: v_lshrrev_b32_e32 v17, 8, v32
2643 ; SDAG-NEXT: v_lshrrev_b32_e32 v18, 16, v32
2644 ; SDAG-NEXT: v_lshrrev_b32_e32 v21, 8, v33
2645 ; SDAG-NEXT: v_lshrrev_b32_e32 v22, 16, v33
2646 ; SDAG-NEXT: v_lshrrev_b32_e32 v23, 24, v33
2647 ; SDAG-NEXT: v_lshrrev_b32_e32 v25, 8, v34
2648 ; SDAG-NEXT: v_lshrrev_b32_e32 v26, 16, v34
2649 ; SDAG-NEXT: v_lshrrev_b32_e32 v29, 8, v35
2650 ; SDAG-NEXT: v_lshrrev_b32_e32 v30, 16, v35
2651 ; SDAG-NEXT: v_lshrrev_b32_e32 v31, 24, v35
2652 ; SDAG-NEXT: v_mov_b32_e32 v0, v36
2653 ; SDAG-NEXT: v_mov_b32_e32 v4, v37
2654 ; SDAG-NEXT: v_mov_b32_e32 v8, v38
2655 ; SDAG-NEXT: v_mov_b32_e32 v12, v39
2656 ; SDAG-NEXT: v_mov_b32_e32 v16, v32
2657 ; SDAG-NEXT: v_mov_b32_e32 v20, v33
2658 ; SDAG-NEXT: v_mov_b32_e32 v24, v34
2659 ; SDAG-NEXT: v_mov_b32_e32 v28, v35
2660 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2662 ; GISEL-LABEL: load_v32i8:
2664 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2665 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2666 ; GISEL-NEXT: buffer_load_dwordx4 v[16:19], off, s[16:19], 0 offset:16
2667 ; GISEL-NEXT: s_waitcnt vmcnt(1)
2668 ; GISEL-NEXT: v_lshrrev_b32_e32 v35, 8, v0
2669 ; GISEL-NEXT: v_lshrrev_b32_e32 v36, 16, v0
2670 ; GISEL-NEXT: v_lshrrev_b32_e32 v37, 24, v0
2671 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2672 ; GISEL-NEXT: v_lshrrev_b32_e32 v32, 8, v16
2673 ; GISEL-NEXT: v_lshrrev_b32_e32 v33, 16, v16
2674 ; GISEL-NEXT: v_lshrrev_b32_e32 v34, 24, v16
2675 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v1
2676 ; GISEL-NEXT: v_lshrrev_b32_e32 v6, 16, v1
2677 ; GISEL-NEXT: v_lshrrev_b32_e32 v7, 24, v1
2678 ; GISEL-NEXT: v_lshrrev_b32_e32 v9, 8, v2
2679 ; GISEL-NEXT: v_lshrrev_b32_e32 v10, 16, v2
2680 ; GISEL-NEXT: v_lshrrev_b32_e32 v11, 24, v2
2681 ; GISEL-NEXT: v_lshrrev_b32_e32 v13, 8, v3
2682 ; GISEL-NEXT: v_lshrrev_b32_e32 v14, 16, v3
2683 ; GISEL-NEXT: v_lshrrev_b32_e32 v15, 24, v3
2684 ; GISEL-NEXT: v_lshrrev_b32_e32 v21, 8, v17
2685 ; GISEL-NEXT: v_lshrrev_b32_e32 v22, 16, v17
2686 ; GISEL-NEXT: v_lshrrev_b32_e32 v23, 24, v17
2687 ; GISEL-NEXT: v_lshrrev_b32_e32 v25, 8, v18
2688 ; GISEL-NEXT: v_lshrrev_b32_e32 v26, 16, v18
2689 ; GISEL-NEXT: v_lshrrev_b32_e32 v27, 24, v18
2690 ; GISEL-NEXT: v_lshrrev_b32_e32 v29, 8, v19
2691 ; GISEL-NEXT: v_lshrrev_b32_e32 v30, 16, v19
2692 ; GISEL-NEXT: v_lshrrev_b32_e32 v31, 24, v19
2693 ; GISEL-NEXT: v_mov_b32_e32 v4, v1
2694 ; GISEL-NEXT: v_mov_b32_e32 v8, v2
2695 ; GISEL-NEXT: v_mov_b32_e32 v12, v3
2696 ; GISEL-NEXT: v_mov_b32_e32 v20, v17
2697 ; GISEL-NEXT: v_mov_b32_e32 v24, v18
2698 ; GISEL-NEXT: v_mov_b32_e32 v28, v19
2699 ; GISEL-NEXT: v_mov_b32_e32 v1, v35
2700 ; GISEL-NEXT: v_mov_b32_e32 v2, v36
2701 ; GISEL-NEXT: v_mov_b32_e32 v3, v37
2702 ; GISEL-NEXT: v_mov_b32_e32 v17, v32
2703 ; GISEL-NEXT: v_mov_b32_e32 v18, v33
2704 ; GISEL-NEXT: v_mov_b32_e32 v19, v34
2705 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2706 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2707 %ret = load <32 x i8>, ptr addrspace(7) %p
2711 define void @store_v32i8(<32 x i8> %data, ptr addrspace(8) inreg %buf) {
2712 ; SDAG-LABEL: store_v32i8:
2714 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2715 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v9
2716 ; SDAG-NEXT: v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2717 ; SDAG-NEXT: v_lshlrev_b16_e32 v9, 8, v11
2718 ; SDAG-NEXT: v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2719 ; SDAG-NEXT: buffer_load_ubyte v10, off, s[0:3], s32
2720 ; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v13
2721 ; SDAG-NEXT: v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2722 ; SDAG-NEXT: v_lshlrev_b16_e32 v13, 8, v15
2723 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
2724 ; SDAG-NEXT: v_lshlrev_b16_e32 v7, 8, v7
2725 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
2726 ; SDAG-NEXT: v_lshlrev_b16_e32 v3, 8, v3
2727 ; SDAG-NEXT: v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2728 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2729 ; SDAG-NEXT: v_or_b32_sdwa v5, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2730 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2731 ; SDAG-NEXT: v_or_b32_sdwa v6, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2732 ; SDAG-NEXT: v_or_b32_sdwa v3, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2733 ; SDAG-NEXT: v_or_b32_sdwa v2, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2734 ; SDAG-NEXT: v_or_b32_sdwa v1, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2735 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2736 ; SDAG-NEXT: v_lshlrev_b16_e32 v11, 8, v29
2737 ; SDAG-NEXT: v_lshlrev_b16_e32 v14, 8, v25
2738 ; SDAG-NEXT: v_lshlrev_b16_e32 v15, 8, v27
2739 ; SDAG-NEXT: v_lshlrev_b16_e32 v21, 8, v21
2740 ; SDAG-NEXT: v_lshlrev_b16_e32 v23, 8, v23
2741 ; SDAG-NEXT: v_lshlrev_b16_e32 v17, 8, v17
2742 ; SDAG-NEXT: v_lshlrev_b16_e32 v19, 8, v19
2743 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2744 ; SDAG-NEXT: v_or_b32_sdwa v7, v28, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2745 ; SDAG-NEXT: v_or_b32_sdwa v11, v24, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2746 ; SDAG-NEXT: v_or_b32_sdwa v14, v26, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2747 ; SDAG-NEXT: v_or_b32_sdwa v15, v20, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2748 ; SDAG-NEXT: v_or_b32_sdwa v20, v22, v23 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2749 ; SDAG-NEXT: v_or_b32_sdwa v16, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2750 ; SDAG-NEXT: v_or_b32_sdwa v17, v18, v19 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2751 ; SDAG-NEXT: v_or_b32_sdwa v5, v11, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2752 ; SDAG-NEXT: v_or_b32_sdwa v4, v15, v20 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2753 ; SDAG-NEXT: v_or_b32_sdwa v3, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2754 ; SDAG-NEXT: s_waitcnt vmcnt(1)
2755 ; SDAG-NEXT: v_lshlrev_b16_e32 v0, 8, v10
2756 ; SDAG-NEXT: v_or_b32_sdwa v0, v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2757 ; SDAG-NEXT: v_or_b32_sdwa v6, v7, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2758 ; SDAG-NEXT: buffer_store_dwordx4 v[3:6], off, s[16:19], 0 offset:16
2759 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2760 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2762 ; GISEL-LABEL: store_v32i8:
2764 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2765 ; GISEL-NEXT: v_mov_b32_e32 v31, 8
2766 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v31, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2767 ; GISEL-NEXT: v_mov_b32_e32 v32, 0xff
2768 ; GISEL-NEXT: v_and_or_b32 v0, v0, v32, v1
2769 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v31, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2770 ; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v7
2771 ; GISEL-NEXT: buffer_load_ubyte v7, off, s[0:3], s32
2772 ; GISEL-NEXT: v_and_or_b32 v1, v4, v32, v1
2773 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v2
2774 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v3
2775 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v6
2776 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 16, v2
2777 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 24, v3
2778 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4
2779 ; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5
2780 ; GISEL-NEXT: v_or3_b32 v0, v0, v2, v3
2781 ; GISEL-NEXT: v_or3_b32 v1, v1, v4, v5
2782 ; GISEL-NEXT: v_lshlrev_b32_sdwa v2, v31, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2783 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v10
2784 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v11
2785 ; GISEL-NEXT: v_and_or_b32 v2, v8, v32, v2
2786 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 16, v3
2787 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 24, v4
2788 ; GISEL-NEXT: v_or3_b32 v2, v2, v3, v4
2789 ; GISEL-NEXT: v_lshlrev_b32_sdwa v3, v31, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2790 ; GISEL-NEXT: v_and_b32_e32 v4, 0xff, v14
2791 ; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v15
2792 ; GISEL-NEXT: v_and_or_b32 v3, v12, v32, v3
2793 ; GISEL-NEXT: v_lshlrev_b32_e32 v4, 16, v4
2794 ; GISEL-NEXT: v_lshlrev_b32_e32 v5, 24, v5
2795 ; GISEL-NEXT: v_or3_b32 v3, v3, v4, v5
2796 ; GISEL-NEXT: v_lshlrev_b32_sdwa v4, v31, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2797 ; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v18
2798 ; GISEL-NEXT: v_and_b32_e32 v6, 0xff, v19
2799 ; GISEL-NEXT: v_and_or_b32 v4, v16, v32, v4
2800 ; GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v5
2801 ; GISEL-NEXT: v_lshlrev_b32_e32 v6, 24, v6
2802 ; GISEL-NEXT: v_lshlrev_b32_sdwa v8, v31, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2803 ; GISEL-NEXT: v_or3_b32 v4, v4, v5, v6
2804 ; GISEL-NEXT: v_and_b32_e32 v5, 0xff, v22
2805 ; GISEL-NEXT: v_and_b32_e32 v6, 0xff, v23
2806 ; GISEL-NEXT: v_and_or_b32 v8, v20, v32, v8
2807 ; GISEL-NEXT: v_lshlrev_b32_e32 v5, 16, v5
2808 ; GISEL-NEXT: v_lshlrev_b32_e32 v6, 24, v6
2809 ; GISEL-NEXT: v_or3_b32 v5, v8, v5, v6
2810 ; GISEL-NEXT: v_lshlrev_b32_sdwa v6, v31, v25 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2811 ; GISEL-NEXT: v_and_b32_e32 v8, 0xff, v26
2812 ; GISEL-NEXT: v_and_b32_e32 v9, 0xff, v27
2813 ; GISEL-NEXT: v_and_or_b32 v6, v24, v32, v6
2814 ; GISEL-NEXT: v_lshlrev_b32_e32 v8, 16, v8
2815 ; GISEL-NEXT: v_lshlrev_b32_e32 v9, 24, v9
2816 ; GISEL-NEXT: v_or3_b32 v6, v6, v8, v9
2817 ; GISEL-NEXT: v_lshlrev_b32_sdwa v8, v31, v29 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2818 ; GISEL-NEXT: v_and_b32_e32 v9, 0xff, v30
2819 ; GISEL-NEXT: v_and_or_b32 v8, v28, v32, v8
2820 ; GISEL-NEXT: v_lshlrev_b32_e32 v9, 16, v9
2821 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2822 ; GISEL-NEXT: v_lshlrev_b32_e32 v7, 24, v7
2823 ; GISEL-NEXT: v_or3_b32 v7, v8, v9, v7
2824 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2825 ; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
2826 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2827 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2828 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2829 store <32 x i8> %data, ptr addrspace(7) %p
2833 ;;; Arrays. Need to become vectors.
2835 define [1 x i32] @load_a1i32(ptr addrspace(8) inreg %buf) {
2836 ; SDAG-LABEL: load_a1i32:
2838 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2839 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2840 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2841 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2843 ; GISEL-LABEL: load_a1i32:
2845 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2846 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2847 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2848 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2849 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2850 %ret = load [1 x i32], ptr addrspace(7) %p
2854 define void @store_a1i32([1 x i32] %data, ptr addrspace(8) inreg %buf) {
2855 ; SDAG-LABEL: store_a1i32:
2857 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2858 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2859 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2860 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2862 ; GISEL-LABEL: store_a1i32:
2864 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2865 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2866 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2867 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2868 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2869 store [1 x i32] %data, ptr addrspace(7) %p
2873 define [2 x i32] @load_a2i32(ptr addrspace(8) inreg %buf) {
2874 ; SDAG-LABEL: load_a2i32:
2876 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2877 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2878 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2879 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2881 ; GISEL-LABEL: load_a2i32:
2883 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2884 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2885 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2886 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2887 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2888 %ret = load [2 x i32], ptr addrspace(7) %p
2892 define void @store_a2i32([2 x i32] %data, ptr addrspace(8) inreg %buf) {
2893 ; SDAG-LABEL: store_a2i32:
2895 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2896 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2897 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2898 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2900 ; GISEL-LABEL: store_a2i32:
2902 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2903 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2904 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2905 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2906 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2907 store [2 x i32] %data, ptr addrspace(7) %p
2911 define [2 x half] @load_a2f16(ptr addrspace(8) inreg %buf) {
2912 ; SDAG-LABEL: load_a2f16:
2914 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2915 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
2916 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2917 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 16, v0
2918 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2920 ; GISEL-LABEL: load_a2f16:
2922 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2923 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
2924 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2925 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 16, v0
2926 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2927 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2928 %ret = load [2 x half], ptr addrspace(7) %p
2932 define void @store_a2f16([2 x half] %data, ptr addrspace(8) inreg %buf) {
2933 ; SDAG-LABEL: store_a2f16:
2935 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2936 ; SDAG-NEXT: s_mov_b32 s4, 0x5040100
2937 ; SDAG-NEXT: v_perm_b32 v0, v1, v0, s4
2938 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
2939 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2940 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2942 ; GISEL-LABEL: store_a2f16:
2944 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2945 ; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0
2946 ; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0
2947 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
2948 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2949 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2950 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2951 store [2 x half] %data, ptr addrspace(7) %p
2955 define [2 x ptr addrspace(1)] @load_a2p1(ptr addrspace(8) inreg %buf) {
2956 ; SDAG-LABEL: load_a2p1:
2958 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2959 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2960 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2961 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2963 ; GISEL-LABEL: load_a2p1:
2965 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2966 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2967 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2968 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2969 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2970 %ret = load [2 x ptr addrspace(1)], ptr addrspace(7) %p
2971 ret [2 x ptr addrspace(1)] %ret
2974 define void @store_a2p1([2 x ptr addrspace(1)] %data, ptr addrspace(8) inreg %buf) {
2975 ; SDAG-LABEL: store_a2p1:
2977 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2978 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2979 ; SDAG-NEXT: s_waitcnt vmcnt(0)
2980 ; SDAG-NEXT: s_setpc_b64 s[30:31]
2982 ; GISEL-LABEL: store_a2p1:
2984 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2985 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2986 ; GISEL-NEXT: s_waitcnt vmcnt(0)
2987 ; GISEL-NEXT: s_setpc_b64 s[30:31]
2988 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2989 store [2 x ptr addrspace(1)] %data, ptr addrspace(7) %p
2993 ;;; Scalars of atypical width. Need to be cast to vectors and split.
2995 define i40 @load_i40(ptr addrspace(8) inreg %buf) {
2996 ; SDAG-LABEL: load_i40:
2998 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2999 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
3000 ; SDAG-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:4
3001 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3002 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3004 ; GISEL-LABEL: load_i40:
3006 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3007 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
3008 ; GISEL-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:4
3009 ; GISEL-NEXT: v_mov_b32_e32 v2, 0xff
3010 ; GISEL-NEXT: s_waitcnt vmcnt(1)
3011 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 8, v0
3012 ; GISEL-NEXT: v_lshrrev_b32_e32 v4, 24, v0
3013 ; GISEL-NEXT: v_and_b32_e32 v3, 0xff, v3
3014 ; GISEL-NEXT: v_and_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
3015 ; GISEL-NEXT: v_lshlrev_b16_e32 v4, 8, v4
3016 ; GISEL-NEXT: v_lshlrev_b16_e32 v3, 8, v3
3017 ; GISEL-NEXT: v_or_b32_e32 v2, v2, v4
3018 ; GISEL-NEXT: v_or_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3019 ; GISEL-NEXT: v_and_b32_e32 v2, 0xffff, v2
3020 ; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0
3021 ; GISEL-NEXT: v_lshl_or_b32 v0, v2, 16, v0
3022 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3023 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3024 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3025 %ret = load i40, ptr addrspace(7) %p
3029 define void @store_i40(i40 %data, ptr addrspace(8) inreg %buf) {
3030 ; SDAG-LABEL: store_i40:
3032 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3033 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3034 ; SDAG-NEXT: buffer_store_byte v1, off, s[16:19], 0 offset:4
3035 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3036 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3038 ; GISEL-LABEL: store_i40:
3040 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3041 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3042 ; GISEL-NEXT: buffer_store_byte v1, off, s[16:19], 0 offset:4
3043 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3044 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3045 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3046 store i40 %data, ptr addrspace(7) %p
3050 define i96 @load_i96(ptr addrspace(8) inreg %buf) {
3051 ; SDAG-LABEL: load_i96:
3053 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3054 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3055 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3056 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3058 ; GISEL-LABEL: load_i96:
3060 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3061 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3062 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3063 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3064 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3065 %ret = load i96, ptr addrspace(7) %p
3069 define void @store_i96(i96 %data, ptr addrspace(8) inreg %buf) {
3070 ; SDAG-LABEL: store_i96:
3072 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3073 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3074 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3075 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3077 ; GISEL-LABEL: store_i96:
3079 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3080 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3081 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3082 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3083 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3084 store i96 %data, ptr addrspace(7) %p
3088 define i160 @load_i160(ptr addrspace(8) inreg %buf) {
3089 ; SDAG-LABEL: load_i160:
3091 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3092 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3093 ; SDAG-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16
3094 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3095 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3097 ; GISEL-LABEL: load_i160:
3099 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3100 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3101 ; GISEL-NEXT: buffer_load_dword v4, off, s[16:19], 0 offset:16
3102 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3103 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3104 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3105 %ret = load i160, ptr addrspace(7) %p
3109 define void @store_i160(i160 %data, ptr addrspace(8) inreg %buf) {
3110 ; SDAG-LABEL: store_i160:
3112 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3113 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3114 ; SDAG-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16
3115 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3116 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3118 ; GISEL-LABEL: store_i160:
3120 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3121 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3122 ; GISEL-NEXT: buffer_store_dword v4, off, s[16:19], 0 offset:16
3123 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3124 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3125 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3126 store i160 %data, ptr addrspace(7) %p
3130 define i256 @load_i256(ptr addrspace(8) inreg %buf) {
3131 ; SDAG-LABEL: load_i256:
3133 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3134 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3135 ; SDAG-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3136 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3137 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3139 ; GISEL-LABEL: load_i256:
3141 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3142 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3143 ; GISEL-NEXT: buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3144 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3145 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3146 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3147 %ret = load i256, ptr addrspace(7) %p
3151 define void @store_i256(i256 %data, ptr addrspace(8) inreg %buf) {
3152 ; SDAG-LABEL: store_i256:
3154 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3155 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3156 ; SDAG-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3157 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3158 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3160 ; GISEL-LABEL: store_i256:
3162 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3163 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3164 ; GISEL-NEXT: buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3165 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3166 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3167 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3168 store i256 %data, ptr addrspace(7) %p
3172 ;;; Non-byte-sized scalars. Require zero-extension.
3174 define i7 @load_i7(ptr addrspace(8) inreg %buf) {
3175 ; SDAG-LABEL: load_i7:
3177 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3178 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3179 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3180 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3182 ; GISEL-LABEL: load_i7:
3184 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3185 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3186 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3187 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3188 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3189 %ret = load i7, ptr addrspace(7) %p
3193 define void @store_i7(i7 %data, ptr addrspace(8) inreg %buf) {
3194 ; SDAG-LABEL: store_i7:
3196 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3197 ; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v0
3198 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
3199 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3200 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3202 ; GISEL-LABEL: store_i7:
3204 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3205 ; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v0
3206 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
3207 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3208 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3209 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3210 store i7 %data, ptr addrspace(7) %p
3214 define i4 @load_i4(ptr addrspace(8) inreg %buf) {
3215 ; SDAG-LABEL: load_i4:
3217 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3218 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3219 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3220 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3222 ; GISEL-LABEL: load_i4:
3224 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3225 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3226 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3227 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3228 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3229 %ret = load i4, ptr addrspace(7) %p
3233 define void @store_i4(i4 %data, ptr addrspace(8) inreg %buf) {
3234 ; SDAG-LABEL: store_i4:
3236 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3237 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v0
3238 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
3239 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3240 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3242 ; GISEL-LABEL: store_i4:
3244 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3245 ; GISEL-NEXT: v_and_b32_e32 v0, 15, v0
3246 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
3247 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3248 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3249 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3250 store i4 %data, ptr addrspace(7) %p
3255 ;;; Byte-sized vectors of i4. Require casts.
3257 define <2 x i4> @load_v2i4(ptr addrspace(8) inreg %buf) {
3258 ; SDAG-LABEL: load_v2i4:
3260 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3261 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3262 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3263 ; SDAG-NEXT: buffer_store_byte v0, off, s[0:3], s32
3264 ; SDAG-NEXT: buffer_load_ubyte v1, off, s[0:3], s32
3265 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3266 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v1
3267 ; SDAG-NEXT: v_lshrrev_b16_e32 v1, 4, v1
3268 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3270 ; GISEL-LABEL: load_v2i4:
3272 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3273 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3274 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3275 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0
3276 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3277 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3278 %ret = load <2 x i4>, ptr addrspace(7) %p
3282 define void @store_v2i4(<2 x i4> %data, ptr addrspace(8) inreg %buf) {
3283 ; SDAG-LABEL: store_v2i4:
3285 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3286 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 4, v1
3287 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v0
3288 ; SDAG-NEXT: v_or_b32_e32 v0, v0, v1
3289 ; SDAG-NEXT: buffer_store_byte v0, off, s[0:3], s32
3290 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[0:3], s32
3291 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3292 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
3293 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3294 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3296 ; GISEL-LABEL: store_v2i4:
3298 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3299 ; GISEL-NEXT: v_and_b32_e32 v1, 15, v1
3300 ; GISEL-NEXT: v_and_b32_e32 v0, 15, v0
3301 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 4, v1
3302 ; GISEL-NEXT: v_or_b32_e32 v0, v0, v1
3303 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
3304 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3305 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3306 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3307 store <2 x i4> %data, ptr addrspace(7) %p
3311 define <4 x i4> @load_v4i4(ptr addrspace(8) inreg %buf) {
3312 ; SDAG-LABEL: load_v4i4:
3314 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3315 ; SDAG-NEXT: buffer_load_ushort v0, off, s[16:19], 0
3316 ; SDAG-NEXT: v_mov_b32_e32 v2, 15
3317 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3318 ; SDAG-NEXT: buffer_store_short v0, off, s[0:3], s32
3319 ; SDAG-NEXT: buffer_load_ushort v1, off, s[0:3], s32
3320 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3321 ; SDAG-NEXT: v_lshrrev_b16_e32 v4, 4, v1
3322 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v1
3323 ; SDAG-NEXT: v_lshrrev_b16_e32 v3, 12, v1
3324 ; SDAG-NEXT: v_and_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD
3325 ; SDAG-NEXT: v_and_b32_e32 v1, 15, v4
3326 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3328 ; GISEL-LABEL: load_v4i4:
3330 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3331 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
3332 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3333 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0
3334 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 8, v0
3335 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 12, v0
3336 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3337 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3338 %ret = load <4 x i4>, ptr addrspace(7) %p
3342 define void @store_v4i4(<4 x i4> %data, ptr addrspace(8) inreg %buf) {
3343 ; SDAG-LABEL: store_v4i4:
3345 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3346 ; SDAG-NEXT: v_and_b32_e32 v1, 15, v1
3347 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v0
3348 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 4, v1
3349 ; SDAG-NEXT: v_or_b32_e32 v0, v0, v1
3350 ; SDAG-NEXT: v_mov_b32_e32 v1, 15
3351 ; SDAG-NEXT: v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3352 ; SDAG-NEXT: v_or_b32_e32 v0, v0, v1
3353 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 12, v3
3354 ; SDAG-NEXT: v_or_b32_e32 v0, v0, v1
3355 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
3356 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3357 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3359 ; GISEL-LABEL: store_v4i4:
3361 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3362 ; GISEL-NEXT: v_and_b32_e32 v1, 15, v1
3363 ; GISEL-NEXT: v_and_b32_e32 v0, 15, v0
3364 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 4, v1
3365 ; GISEL-NEXT: v_or_b32_e32 v0, v0, v1
3366 ; GISEL-NEXT: v_mov_b32_e32 v1, 15
3367 ; GISEL-NEXT: v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3368 ; GISEL-NEXT: v_or_b32_e32 v0, v0, v1
3369 ; GISEL-NEXT: v_and_b32_e32 v1, 15, v3
3370 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 12, v1
3371 ; GISEL-NEXT: v_or_b32_e32 v0, v0, v1
3372 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
3373 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3374 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3375 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3376 store <4 x i4> %data, ptr addrspace(7) %p
3380 define <8 x i4> @load_v8i4(ptr addrspace(8) inreg %buf) {
3381 ; SDAG-LABEL: load_v8i4:
3383 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3384 ; SDAG-NEXT: buffer_load_dword v7, off, s[16:19], 0
3385 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3386 ; SDAG-NEXT: v_and_b32_e32 v0, 15, v7
3387 ; SDAG-NEXT: v_bfe_u32 v1, v7, 4, 4
3388 ; SDAG-NEXT: v_bfe_u32 v2, v7, 8, 4
3389 ; SDAG-NEXT: v_bfe_u32 v3, v7, 12, 4
3390 ; SDAG-NEXT: v_bfe_u32 v4, v7, 16, 4
3391 ; SDAG-NEXT: v_bfe_u32 v5, v7, 20, 4
3392 ; SDAG-NEXT: v_bfe_u32 v6, v7, 24, 4
3393 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 28, v7
3394 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3396 ; GISEL-LABEL: load_v8i4:
3398 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3399 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
3400 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3401 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 4, v0
3402 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 8, v0
3403 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 12, v0
3404 ; GISEL-NEXT: v_lshrrev_b32_e32 v4, 16, v0
3405 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 20, v0
3406 ; GISEL-NEXT: v_lshrrev_b32_e32 v6, 24, v0
3407 ; GISEL-NEXT: v_lshrrev_b32_e32 v7, 28, v0
3408 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3409 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3410 %ret = load <8 x i4>, ptr addrspace(7) %p
3414 define void @store_v8i4(<8 x i4> %data, ptr addrspace(8) inreg %buf) {
3415 ; SDAG-LABEL: store_v8i4:
3417 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3418 ; SDAG-NEXT: v_and_b32_e32 v1, 15, v1
3419 ; SDAG-NEXT: v_lshlrev_b32_e32 v1, 4, v1
3420 ; SDAG-NEXT: v_and_or_b32 v0, v0, 15, v1
3421 ; SDAG-NEXT: v_and_b32_e32 v1, 15, v3
3422 ; SDAG-NEXT: v_and_b32_e32 v2, 15, v2
3423 ; SDAG-NEXT: v_lshlrev_b32_e32 v1, 12, v1
3424 ; SDAG-NEXT: v_lshlrev_b32_e32 v2, 8, v2
3425 ; SDAG-NEXT: v_or3_b32 v0, v0, v2, v1
3426 ; SDAG-NEXT: v_and_b32_e32 v1, 15, v5
3427 ; SDAG-NEXT: v_mov_b32_e32 v2, 15
3428 ; SDAG-NEXT: v_lshlrev_b32_e32 v1, 20, v1
3429 ; SDAG-NEXT: v_and_b32_sdwa v3, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3430 ; SDAG-NEXT: v_or3_b32 v0, v0, v3, v1
3431 ; SDAG-NEXT: v_lshlrev_b32_e32 v1, 28, v7
3432 ; SDAG-NEXT: v_and_b32_sdwa v2, v6, v2 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3433 ; SDAG-NEXT: v_or3_b32 v0, v0, v2, v1
3434 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3435 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3436 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3438 ; GISEL-LABEL: store_v8i4:
3440 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3441 ; GISEL-NEXT: v_and_b32_e32 v1, 15, v1
3442 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 4, v1
3443 ; GISEL-NEXT: v_and_or_b32 v0, v0, 15, v1
3444 ; GISEL-NEXT: v_and_b32_e32 v1, 15, v2
3445 ; GISEL-NEXT: v_and_b32_e32 v2, 15, v3
3446 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 8, v1
3447 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 12, v2
3448 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
3449 ; GISEL-NEXT: v_mov_b32_e32 v1, 15
3450 ; GISEL-NEXT: v_and_b32_e32 v3, 15, v5
3451 ; GISEL-NEXT: v_and_b32_sdwa v2, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3452 ; GISEL-NEXT: v_lshlrev_b32_e32 v3, 20, v3
3453 ; GISEL-NEXT: v_or3_b32 v0, v0, v2, v3
3454 ; GISEL-NEXT: v_and_b32_e32 v2, 15, v7
3455 ; GISEL-NEXT: v_and_b32_sdwa v1, v6, v1 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3456 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 28, v2
3457 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
3458 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3459 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3460 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3461 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3462 store <8 x i4> %data, ptr addrspace(7) %p
3466 ;;; Vectors of non-byte-sized integers.
3468 define <2 x i6> @load_v2i6(ptr addrspace(8) inreg %buf) {
3469 ; SDAG-LABEL: load_v2i6:
3471 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3472 ; SDAG-NEXT: buffer_load_ushort v1, off, s[16:19], 0
3473 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3474 ; SDAG-NEXT: v_and_b32_e32 v0, 63, v1
3475 ; SDAG-NEXT: v_bfe_u32 v1, v1, 6, 6
3476 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3478 ; GISEL-LABEL: load_v2i6:
3480 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3481 ; GISEL-NEXT: buffer_load_ushort v0, off, s[16:19], 0
3482 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3483 ; GISEL-NEXT: v_lshrrev_b16_e32 v1, 6, v0
3484 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3485 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3486 %ret = load <2 x i6>, ptr addrspace(7) %p
3490 define void @store_v2i6(<2 x i6> %data, ptr addrspace(8) inreg %buf) {
3491 ; SDAG-LABEL: store_v2i6:
3493 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3494 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 6, v1
3495 ; SDAG-NEXT: v_and_b32_e32 v0, 63, v0
3496 ; SDAG-NEXT: v_or_b32_e32 v0, v0, v1
3497 ; SDAG-NEXT: v_and_b32_e32 v0, 0xfff, v0
3498 ; SDAG-NEXT: v_and_b32_e32 v0, 0xffff, v0
3499 ; SDAG-NEXT: buffer_store_short v0, off, s[16:19], 0
3500 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3501 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3503 ; GISEL-LABEL: store_v2i6:
3505 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3506 ; GISEL-NEXT: v_and_b32_e32 v1, 63, v1
3507 ; GISEL-NEXT: v_and_b32_e32 v0, 63, v0
3508 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 6, v1
3509 ; GISEL-NEXT: v_or_b32_e32 v0, v0, v1
3510 ; GISEL-NEXT: v_and_b32_e32 v0, 0xfff, v0
3511 ; GISEL-NEXT: buffer_store_short v0, off, s[16:19], 0
3512 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3513 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3514 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3515 store <2 x i6> %data, ptr addrspace(7) %p
3519 ;; Blocks of fp6 elements
3520 define <6 x i32> @load_v32i6(ptr addrspace(8) inreg %buf) {
3521 ; SDAG-LABEL: load_v32i6:
3523 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3524 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3525 ; SDAG-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3526 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3527 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3529 ; GISEL-LABEL: load_v32i6:
3531 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3532 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3533 ; GISEL-NEXT: buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3534 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3535 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3536 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3537 %ret = load <32 x i6>, ptr addrspace(7) %p
3538 %ret.cast = bitcast <32 x i6> %ret to <6 x i32>
3539 ret <6 x i32> %ret.cast
3542 define void @store_v32i6(<6 x i32> %data.abi, ptr addrspace(8) inreg %buf) {
3543 ; SDAG-LABEL: store_v32i6:
3545 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3546 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3547 ; SDAG-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3548 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3549 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3551 ; GISEL-LABEL: store_v32i6:
3553 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3554 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3555 ; GISEL-NEXT: buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3556 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3557 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3558 %data = bitcast <6 x i32> %data.abi to <32 x i6>
3559 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3560 store <32 x i6> %data, ptr addrspace(7) %p
3566 define <4 x i8> @volatile_load_v4i8(ptr addrspace(8) inreg %buf) {
3567 ; SDAG-LABEL: volatile_load_v4i8:
3569 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3570 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc
3571 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3572 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
3573 ; SDAG-NEXT: v_lshrrev_b32_e32 v1, 8, v0
3574 ; SDAG-NEXT: v_lshrrev_b32_e32 v3, 24, v0
3575 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3577 ; GISEL-LABEL: volatile_load_v4i8:
3579 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3580 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc
3581 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3582 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
3583 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
3584 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
3585 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3586 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3587 %ret = load volatile <4 x i8>, ptr addrspace(7) %p
3591 define void @volatile_store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
3592 ; SDAG-LABEL: volatile_store_v4i8:
3594 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3595 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
3596 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3597 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
3598 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3599 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3600 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3601 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3602 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3604 ; GISEL-LABEL: volatile_store_v4i8:
3606 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3607 ; GISEL-NEXT: v_mov_b32_e32 v5, 8
3608 ; GISEL-NEXT: v_mov_b32_e32 v4, 0xff
3609 ; GISEL-NEXT: v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
3610 ; GISEL-NEXT: v_and_or_b32 v0, v0, v4, v1
3611 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v2
3612 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v3
3613 ; GISEL-NEXT: v_lshlrev_b32_e32 v1, 16, v1
3614 ; GISEL-NEXT: v_lshlrev_b32_e32 v2, 24, v2
3615 ; GISEL-NEXT: v_or3_b32 v0, v0, v1, v2
3616 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3617 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3618 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3619 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3620 store volatile <4 x i8> %data, ptr addrspace(7) %p
3624 define <6 x i8> @volatile_load_v6i8(ptr addrspace(8) inreg %buf) {
3625 ; SDAG-LABEL: volatile_load_v6i8:
3627 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3628 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc
3629 ; SDAG-NEXT: buffer_load_ushort v6, off, s[16:19], 0 offset:4 glc
3630 ; SDAG-NEXT: s_waitcnt vmcnt(1)
3631 ; SDAG-NEXT: v_lshrrev_b32_e32 v7, 8, v0
3632 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3633 ; SDAG-NEXT: v_and_b32_e32 v1, 0xffff, v6
3634 ; SDAG-NEXT: v_lshrrev_b64 v[3:4], 24, v[0:1]
3635 ; SDAG-NEXT: v_lshrrev_b32_e32 v2, 16, v0
3636 ; SDAG-NEXT: v_lshrrev_b32_e32 v5, 8, v1
3637 ; SDAG-NEXT: v_mov_b32_e32 v4, v6
3638 ; SDAG-NEXT: v_mov_b32_e32 v1, v7
3639 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3641 ; GISEL-LABEL: volatile_load_v6i8:
3643 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3644 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0 glc
3645 ; GISEL-NEXT: buffer_load_ushort v4, off, s[16:19], 0 offset:4 glc
3646 ; GISEL-NEXT: s_waitcnt vmcnt(1)
3647 ; GISEL-NEXT: v_lshrrev_b32_e32 v2, 16, v0
3648 ; GISEL-NEXT: v_lshrrev_b32_e32 v1, 8, v0
3649 ; GISEL-NEXT: v_lshrrev_b32_e32 v3, 24, v0
3650 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3651 ; GISEL-NEXT: v_lshrrev_b32_e32 v5, 8, v4
3652 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3653 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3654 %ret = load volatile <6 x i8>, ptr addrspace(7) %p
3658 define void @volatile_store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
3659 ; SDAG-LABEL: volatile_store_v6i8:
3661 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v1
3663 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3664 ; SDAG-NEXT: v_lshlrev_b16_e32 v1, 8, v3
3665 ; SDAG-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3666 ; SDAG-NEXT: v_lshlrev_b16_e32 v5, 8, v5
3667 ; SDAG-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3668 ; SDAG-NEXT: v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3669 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3670 ; SDAG-NEXT: buffer_store_short v4, off, s[16:19], 0 offset:4
3671 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3672 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3674 ; GISEL-LABEL: volatile_store_v6i8:
3676 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3677 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v1
3678 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
3679 ; GISEL-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3680 ; GISEL-NEXT: v_and_b32_e32 v1, 0xff, v3
3681 ; GISEL-NEXT: v_lshlrev_b16_e32 v1, 8, v1
3682 ; GISEL-NEXT: v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3683 ; GISEL-NEXT: v_and_b32_e32 v2, 0xff, v5
3684 ; GISEL-NEXT: v_and_b32_e32 v0, 0xffff, v0
3685 ; GISEL-NEXT: v_lshlrev_b16_e32 v2, 8, v2
3686 ; GISEL-NEXT: v_lshl_or_b32 v0, v1, 16, v0
3687 ; GISEL-NEXT: v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3688 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3689 ; GISEL-NEXT: buffer_store_short v2, off, s[16:19], 0 offset:4
3690 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3691 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3692 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3693 store volatile <6 x i8> %data, ptr addrspace(7) %p
3697 define [2 x [2 x i32]] @load_a2a2i32(ptr addrspace(8) inreg %buf) {
3698 ; SDAG-LABEL: load_a2a2i32:
3700 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3701 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3702 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3703 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3705 ; GISEL-LABEL: load_a2a2i32:
3707 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3708 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3709 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3710 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3711 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3712 %ret = load [2 x [2 x i32]], ptr addrspace(7) %p
3713 ret [2 x [2 x i32]] %ret
3716 define void @store_a2a2i32([2 x [2 x i32]] %data, ptr addrspace(8) inreg %buf) {
3717 ; SDAG-LABEL: store_a2a2i32:
3719 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3720 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3721 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3722 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3724 ; GISEL-LABEL: store_a2a2i32:
3726 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3727 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3728 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3729 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3730 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3731 store [2 x [2 x i32]] %data, ptr addrspace(7) %p
3735 define [2 x <2 x i32>] @load_a2v2i32(ptr addrspace(8) inreg %buf) {
3736 ; SDAG-LABEL: load_a2v2i32:
3738 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3739 ; SDAG-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3740 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3741 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3743 ; GISEL-LABEL: load_a2v2i32:
3745 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3746 ; GISEL-NEXT: buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3747 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3748 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3749 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3750 %ret = load [2 x <2 x i32>], ptr addrspace(7) %p
3751 ret [2 x <2 x i32>] %ret
3754 define void @store_a2v2i32([2 x <2 x i32>] %data, ptr addrspace(8) inreg %buf) {
3755 ; SDAG-LABEL: store_a2v2i32:
3757 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3758 ; SDAG-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3759 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3760 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3762 ; GISEL-LABEL: store_a2v2i32:
3764 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3765 ; GISEL-NEXT: buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3766 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3767 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3768 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3769 store [2 x <2 x i32>] %data, ptr addrspace(7) %p
3773 define { i32 } @load_sl_i32s(ptr addrspace(8) inreg %buf) {
3774 ; SDAG-LABEL: load_sl_i32s:
3776 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3777 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
3778 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3779 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3781 ; GISEL-LABEL: load_sl_i32s:
3783 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3784 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
3785 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3786 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3787 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3788 %ret = load { i32 }, ptr addrspace(7) %p
3792 define void @store_sl_i32s({ i32 } %data, ptr addrspace(8) inreg %buf) {
3793 ; SDAG-LABEL: store_sl_i32s:
3795 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3796 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3797 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3798 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3800 ; GISEL-LABEL: store_sl_i32s:
3802 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3803 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3804 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3805 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3806 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3807 store { i32 } %data, ptr addrspace(7) %p
3811 define { { float } } @load_sl_sl_f32ss(ptr addrspace(8) inreg %buf) {
3812 ; SDAG-LABEL: load_sl_sl_f32ss:
3814 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3815 ; SDAG-NEXT: buffer_load_dword v0, off, s[16:19], 0
3816 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3817 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3819 ; GISEL-LABEL: load_sl_sl_f32ss:
3821 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3822 ; GISEL-NEXT: buffer_load_dword v0, off, s[16:19], 0
3823 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3824 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3825 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3826 %ret = load { { float } }, ptr addrspace(7) %p
3827 ret { { float } } %ret
3830 define void @store_sl_sl_f32ss({ { float } } %data, ptr addrspace(8) inreg %buf) {
3831 ; SDAG-LABEL: store_sl_sl_f32ss:
3833 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3834 ; SDAG-NEXT: buffer_store_dword v0, off, s[16:19], 0
3835 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3836 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3838 ; GISEL-LABEL: store_sl_sl_f32ss:
3840 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3841 ; GISEL-NEXT: buffer_store_dword v0, off, s[16:19], 0
3842 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3843 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3844 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3845 store { { float } } %data, ptr addrspace(7) %p
3849 define { <2 x i32> } @load_sl_v2i32s(ptr addrspace(8) inreg %buf) {
3850 ; SDAG-LABEL: load_sl_v2i32s:
3852 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3853 ; SDAG-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3854 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3855 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3857 ; GISEL-LABEL: load_sl_v2i32s:
3859 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3860 ; GISEL-NEXT: buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3861 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3862 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3863 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3864 %ret = load { <2 x i32> }, ptr addrspace(7) %p
3865 ret { <2 x i32> } %ret
3868 define void @store_sl_v2i32s({ <2 x i32> } %data, ptr addrspace(8) inreg %buf) {
3869 ; SDAG-LABEL: store_sl_v2i32s:
3871 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3872 ; SDAG-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3873 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3874 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3876 ; GISEL-LABEL: store_sl_v2i32s:
3878 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3879 ; GISEL-NEXT: buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3880 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3881 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3882 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3883 store { <2 x i32> } %data, ptr addrspace(7) %p
3887 define { i64, i32 } @load_sl_i64i32s(ptr addrspace(8) inreg %buf) {
3888 ; SDAG-LABEL: load_sl_i64i32s:
3890 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3891 ; SDAG-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3892 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3893 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3895 ; GISEL-LABEL: load_sl_i64i32s:
3897 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3898 ; GISEL-NEXT: buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3899 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3900 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3901 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3902 %ret = load { i64, i32 }, ptr addrspace(7) %p
3903 ret { i64, i32 } %ret
3906 define void @store_sl_i64i32s({ i64, i32 } %data, ptr addrspace(8) inreg %buf) {
3907 ; SDAG-LABEL: store_sl_i64i32s:
3909 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3910 ; SDAG-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3911 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3912 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3914 ; GISEL-LABEL: store_sl_i64i32s:
3916 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3917 ; GISEL-NEXT: buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3918 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3919 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3920 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3921 store { i64, i32 } %data, ptr addrspace(7) %p
3925 define [4 x i7] @load_a4i7(ptr addrspace(8) inreg %buf) {
3926 ; SDAG-LABEL: load_a4i7:
3928 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3929 ; SDAG-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3930 ; SDAG-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3931 ; SDAG-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3932 ; SDAG-NEXT: buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3933 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3934 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3936 ; GISEL-LABEL: load_a4i7:
3938 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3939 ; GISEL-NEXT: buffer_load_ubyte v0, off, s[16:19], 0
3940 ; GISEL-NEXT: buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3941 ; GISEL-NEXT: buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3942 ; GISEL-NEXT: buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3943 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3944 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3945 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3946 %ret = load [4 x i7], ptr addrspace(7) %p
3950 define void @store_a4i7([4 x i7] %data, ptr addrspace(8) inreg %buf) {
3951 ; SDAG-LABEL: store_a4i7:
3953 ; SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3954 ; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v0
3955 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0
3956 ; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v1
3957 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:1
3958 ; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v2
3959 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:2
3960 ; SDAG-NEXT: v_and_b32_e32 v0, 0x7f, v3
3961 ; SDAG-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:3
3962 ; SDAG-NEXT: s_waitcnt vmcnt(0)
3963 ; SDAG-NEXT: s_setpc_b64 s[30:31]
3965 ; GISEL-LABEL: store_a4i7:
3967 ; GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3968 ; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v0
3969 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0
3970 ; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v1
3971 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:1
3972 ; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v2
3973 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:2
3974 ; GISEL-NEXT: v_and_b32_e32 v0, 0x7f, v3
3975 ; GISEL-NEXT: buffer_store_byte v0, off, s[16:19], 0 offset:3
3976 ; GISEL-NEXT: s_waitcnt vmcnt(0)
3977 ; GISEL-NEXT: s_setpc_b64 s[30:31]
3978 %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3979 store [4 x i7] %data, ptr addrspace(7) %p