[AMDGPU] Don't unify divergent exit nodes with `musttail` calls (#126395)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / buffer-fat-pointers-contents-legalization.ll
blob405058b24dcc21ed0e2a695a6d0c5f247d4d9936
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
7 ; the lowering.
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:
13 ; SDAG:       ; %bb.0:
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:
20 ; GISEL:       ; %bb.0:
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
27   ret i8 %ret
30 define void @store_i8(i8 %data, ptr addrspace(8) inreg %buf) {
31 ; SDAG-LABEL: store_i8:
32 ; SDAG:       ; %bb.0:
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:
39 ; GISEL:       ; %bb.0:
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
46   ret void
49 define i16 @load_i16(ptr addrspace(8) inreg %buf) {
50 ; SDAG-LABEL: load_i16:
51 ; SDAG:       ; %bb.0:
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:
58 ; GISEL:       ; %bb.0:
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
65   ret i16 %ret
68 define void @store_i16(i16 %data, ptr addrspace(8) inreg %buf) {
69 ; SDAG-LABEL: store_i16:
70 ; SDAG:       ; %bb.0:
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:
77 ; GISEL:       ; %bb.0:
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
84   ret void
87 define i32 @load_i32(ptr addrspace(8) inreg %buf) {
88 ; SDAG-LABEL: load_i32:
89 ; SDAG:       ; %bb.0:
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:
96 ; GISEL:       ; %bb.0:
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
103   ret i32 %ret
106 define void @store_i32(i32 %data, ptr addrspace(8) inreg %buf) {
107 ; SDAG-LABEL: store_i32:
108 ; SDAG:       ; %bb.0:
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:
115 ; GISEL:       ; %bb.0:
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
122   ret void
125 define i64 @load_i64(ptr addrspace(8) inreg %buf) {
126 ; SDAG-LABEL: load_i64:
127 ; SDAG:       ; %bb.0:
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:
134 ; GISEL:       ; %bb.0:
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
141   ret i64 %ret
144 define void @store_i64(i64 %data, ptr addrspace(8) inreg %buf) {
145 ; SDAG-LABEL: store_i64:
146 ; SDAG:       ; %bb.0:
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:
153 ; GISEL:       ; %bb.0:
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
160   ret void
163 define i128 @load_i128(ptr addrspace(8) inreg %buf) {
164 ; SDAG-LABEL: load_i128:
165 ; SDAG:       ; %bb.0:
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:
172 ; GISEL:       ; %bb.0:
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
179   ret i128 %ret
182 define void @store_i128(i128 %data, ptr addrspace(8) inreg %buf) {
183 ; SDAG-LABEL: store_i128:
184 ; SDAG:       ; %bb.0:
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:
191 ; GISEL:       ; %bb.0:
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
198   ret void
201 define <1 x i32> @load_v1i32(ptr addrspace(8) inreg %buf) {
202 ; SDAG-LABEL: load_v1i32:
203 ; SDAG:       ; %bb.0:
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:
210 ; GISEL:       ; %bb.0:
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
217   ret <1 x i32> %ret
220 define void @store_v1i32(<1 x i32> %data, ptr addrspace(8) inreg %buf) {
221 ; SDAG-LABEL: store_v1i32:
222 ; SDAG:       ; %bb.0:
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:
229 ; GISEL:       ; %bb.0:
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
236   ret void
239 define <2 x i32> @load_v2i32(ptr addrspace(8) inreg %buf) {
240 ; SDAG-LABEL: load_v2i32:
241 ; SDAG:       ; %bb.0:
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:
248 ; GISEL:       ; %bb.0:
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
255   ret <2 x i32> %ret
258 define void @store_v2i32(<2 x i32> %data, ptr addrspace(8) inreg %buf) {
259 ; SDAG-LABEL: store_v2i32:
260 ; SDAG:       ; %bb.0:
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:
267 ; GISEL:       ; %bb.0:
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
274   ret void
277 define <3 x i32> @load_v3i32(ptr addrspace(8) inreg %buf) {
278 ; SDAG-LABEL: load_v3i32:
279 ; SDAG:       ; %bb.0:
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:
286 ; GISEL:       ; %bb.0:
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
293   ret <3 x i32> %ret
296 define void @store_v3i32(<3 x i32> %data, ptr addrspace(8) inreg %buf) {
297 ; SDAG-LABEL: store_v3i32:
298 ; SDAG:       ; %bb.0:
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:
305 ; GISEL:       ; %bb.0:
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
312   ret void
315 define <4 x i32> @load_v4i32(ptr addrspace(8) inreg %buf) {
316 ; SDAG-LABEL: load_v4i32:
317 ; SDAG:       ; %bb.0:
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:
324 ; GISEL:       ; %bb.0:
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
331   ret <4 x i32> %ret
334 define void @store_v4i32(<4 x i32> %data, ptr addrspace(8) inreg %buf) {
335 ; SDAG-LABEL: store_v4i32:
336 ; SDAG:       ; %bb.0:
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:
343 ; GISEL:       ; %bb.0:
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
350   ret void
353 define <2 x i16> @load_v2i16(ptr addrspace(8) inreg %buf) {
354 ; SDAG-LABEL: load_v2i16:
355 ; SDAG:       ; %bb.0:
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:
362 ; GISEL:       ; %bb.0:
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
369   ret <2 x i16> %ret
372 define void @store_v2i16(<2 x i16> %data, ptr addrspace(8) inreg %buf) {
373 ; SDAG-LABEL: store_v2i16:
374 ; SDAG:       ; %bb.0:
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:
381 ; GISEL:       ; %bb.0:
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
388   ret void
391 define <4 x i16> @load_v4i16(ptr addrspace(8) inreg %buf) {
392 ; SDAG-LABEL: load_v4i16:
393 ; SDAG:       ; %bb.0:
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:
400 ; GISEL:       ; %bb.0:
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
407   ret <4 x i16> %ret
410 define void @store_v4i16(<4 x i16> %data, ptr addrspace(8) inreg %buf) {
411 ; SDAG-LABEL: store_v4i16:
412 ; SDAG:       ; %bb.0:
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:
419 ; GISEL:       ; %bb.0:
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
426   ret void
429 define <8 x i16> @load_v8i16(ptr addrspace(8) inreg %buf) {
430 ; SDAG-LABEL: load_v8i16:
431 ; SDAG:       ; %bb.0:
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:
438 ; GISEL:       ; %bb.0:
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
445   ret <8 x i16> %ret
448 define void @store_v8i16(<8 x i16> %data, ptr addrspace(8) inreg %buf) {
449 ; SDAG-LABEL: store_v8i16:
450 ; SDAG:       ; %bb.0:
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:
457 ; GISEL:       ; %bb.0:
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
464   ret void
467 define <2 x i64> @load_v2i64(ptr addrspace(8) inreg %buf) {
468 ; SDAG-LABEL: load_v2i64:
469 ; SDAG:       ; %bb.0:
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:
476 ; GISEL:       ; %bb.0:
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
483   ret <2 x i64> %ret
486 define void @store_v2i64(<2 x i64> %data, ptr addrspace(8) inreg %buf) {
487 ; SDAG-LABEL: store_v2i64:
488 ; SDAG:       ; %bb.0:
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:
495 ; GISEL:       ; %bb.0:
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
502   ret void
505 define half @load_f16(ptr addrspace(8) inreg %buf) {
506 ; SDAG-LABEL: load_f16:
507 ; SDAG:       ; %bb.0:
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:
514 ; GISEL:       ; %bb.0:
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
521   ret half %ret
524 define void @store_f16(half %data, ptr addrspace(8) inreg %buf) {
525 ; SDAG-LABEL: store_f16:
526 ; SDAG:       ; %bb.0:
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:
533 ; GISEL:       ; %bb.0:
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
540   ret void
543 define bfloat @load_bf16(ptr addrspace(8) inreg %buf) {
544 ; SDAG-LABEL: load_bf16:
545 ; SDAG:       ; %bb.0:
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:
552 ; GISEL:       ; %bb.0:
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
559   ret bfloat %ret
562 define void @store_bf16(bfloat %data, ptr addrspace(8) inreg %buf) {
563 ; SDAG-LABEL: store_bf16:
564 ; SDAG:       ; %bb.0:
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:
571 ; GISEL:       ; %bb.0:
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
578   ret void
581 define <2 x half> @load_v2f16(ptr addrspace(8) inreg %buf) {
582 ; SDAG-LABEL: load_v2f16:
583 ; SDAG:       ; %bb.0:
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:
590 ; GISEL:       ; %bb.0:
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
597   ret <2 x half> %ret
600 define void @store_v2f16(<2 x half> %data, ptr addrspace(8) inreg %buf) {
601 ; SDAG-LABEL: store_v2f16:
602 ; SDAG:       ; %bb.0:
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:
609 ; GISEL:       ; %bb.0:
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
616   ret void
619 define <4 x bfloat> @load_v4bf16(ptr addrspace(8) inreg %buf) {
620 ; SDAG-LABEL: load_v4bf16:
621 ; SDAG:       ; %bb.0:
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:
628 ; GISEL:       ; %bb.0:
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:
640 ; SDAG:       ; %bb.0:
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:
647 ; GISEL:       ; %bb.0:
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
654   ret void
657 define <8 x half> @load_v8f16(ptr addrspace(8) inreg %buf) {
658 ; SDAG-LABEL: load_v8f16:
659 ; SDAG:       ; %bb.0:
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:
666 ; GISEL:       ; %bb.0:
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
673   ret <8 x half> %ret
676 define void @store_v8f16(<8 x half> %data, ptr addrspace(8) inreg %buf) {
677 ; SDAG-LABEL: store_v8f16:
678 ; SDAG:       ; %bb.0:
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:
685 ; GISEL:       ; %bb.0:
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
692   ret void
695 define float @load_f32(ptr addrspace(8) inreg %buf) {
696 ; SDAG-LABEL: load_f32:
697 ; SDAG:       ; %bb.0:
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:
704 ; GISEL:       ; %bb.0:
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
711   ret float %ret
714 define void @store_f32(float %data, ptr addrspace(8) inreg %buf) {
715 ; SDAG-LABEL: store_f32:
716 ; SDAG:       ; %bb.0:
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:
723 ; GISEL:       ; %bb.0:
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
730   ret void
733 define <2 x float> @load_v2f32(ptr addrspace(8) inreg %buf) {
734 ; SDAG-LABEL: load_v2f32:
735 ; SDAG:       ; %bb.0:
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:
742 ; GISEL:       ; %bb.0:
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
749   ret <2 x float> %ret
752 define void @store_v2f32(<2 x float> %data, ptr addrspace(8) inreg %buf) {
753 ; SDAG-LABEL: store_v2f32:
754 ; SDAG:       ; %bb.0:
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:
761 ; GISEL:       ; %bb.0:
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
768   ret void
771 define <3 x float> @load_v3f32(ptr addrspace(8) inreg %buf) {
772 ; SDAG-LABEL: load_v3f32:
773 ; SDAG:       ; %bb.0:
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:
780 ; GISEL:       ; %bb.0:
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
787   ret <3 x float> %ret
790 define void @store_v3f32(<3 x float> %data, ptr addrspace(8) inreg %buf) {
791 ; SDAG-LABEL: store_v3f32:
792 ; SDAG:       ; %bb.0:
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:
799 ; GISEL:       ; %bb.0:
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
806   ret void
809 define <4 x float> @load_v4f32(ptr addrspace(8) inreg %buf) {
810 ; SDAG-LABEL: load_v4f32:
811 ; SDAG:       ; %bb.0:
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:
818 ; GISEL:       ; %bb.0:
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
825   ret <4 x float> %ret
828 define void @store_v4f32(<4 x float> %data, ptr addrspace(8) inreg %buf) {
829 ; SDAG-LABEL: store_v4f32:
830 ; SDAG:       ; %bb.0:
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:
837 ; GISEL:       ; %bb.0:
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
844   ret void
847 define ptr addrspace(0) @load_p0(ptr addrspace(8) inreg %buf) {
848 ; SDAG-LABEL: load_p0:
849 ; SDAG:       ; %bb.0:
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:
856 ; GISEL:       ; %bb.0:
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:
868 ; SDAG:       ; %bb.0:
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:
875 ; GISEL:       ; %bb.0:
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
882   ret void
885 define ptr addrspace(1) @load_p1(ptr addrspace(8) inreg %buf) {
886 ; SDAG-LABEL: load_p1:
887 ; SDAG:       ; %bb.0:
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:
894 ; GISEL:       ; %bb.0:
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:
906 ; SDAG:       ; %bb.0:
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:
913 ; GISEL:       ; %bb.0:
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
920   ret void
923 define ptr addrspace(2) @load_p2(ptr addrspace(8) inreg %buf) {
924 ; SDAG-LABEL: load_p2:
925 ; SDAG:       ; %bb.0:
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:
932 ; GISEL:       ; %bb.0:
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:
944 ; SDAG:       ; %bb.0:
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:
951 ; GISEL:       ; %bb.0:
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
958   ret void
961 define ptr addrspace(3) @load_p3(ptr addrspace(8) inreg %buf) {
962 ; SDAG-LABEL: load_p3:
963 ; SDAG:       ; %bb.0:
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:
970 ; GISEL:       ; %bb.0:
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:
982 ; SDAG:       ; %bb.0:
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:
989 ; GISEL:       ; %bb.0:
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
996   ret void
999 define ptr addrspace(4) @load_p4(ptr addrspace(8) inreg %buf) {
1000 ; SDAG-LABEL: load_p4:
1001 ; SDAG:       ; %bb.0:
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:
1008 ; GISEL:       ; %bb.0:
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:
1020 ; SDAG:       ; %bb.0:
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:
1027 ; GISEL:       ; %bb.0:
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
1034   ret void
1037 define ptr addrspace(5) @load_p5(ptr addrspace(8) inreg %buf) {
1038 ; SDAG-LABEL: load_p5:
1039 ; SDAG:       ; %bb.0:
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:
1046 ; GISEL:       ; %bb.0:
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:
1058 ; SDAG:       ; %bb.0:
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:
1065 ; GISEL:       ; %bb.0:
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
1072   ret void
1075 define ptr addrspace(6) @load_p6(ptr addrspace(8) inreg %buf) {
1076 ; SDAG-LABEL: load_p6:
1077 ; SDAG:       ; %bb.0:
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:
1084 ; GISEL:       ; %bb.0:
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:
1096 ; SDAG:       ; %bb.0:
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:
1103 ; GISEL:       ; %bb.0:
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
1110   ret void
1113 define ptr addrspace(8) @load_p8(ptr addrspace(8) inreg %buf) {
1114 ; SDAG-LABEL: load_p8:
1115 ; SDAG:       ; %bb.0:
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:
1122 ; GISEL:       ; %bb.0:
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:
1134 ; SDAG:       ; %bb.0:
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:
1141 ; GISEL:       ; %bb.0:
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
1148   ret void
1151 define <2 x ptr addrspace(1)> @load_v2p1(ptr addrspace(8) inreg %buf) {
1152 ; SDAG-LABEL: load_v2p1:
1153 ; SDAG:       ; %bb.0:
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:
1160 ; GISEL:       ; %bb.0:
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:
1172 ; SDAG:       ; %bb.0:
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:
1179 ; GISEL:       ; %bb.0:
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
1186   ret void
1189 define <2 x ptr addrspace(5)> @load_v2p5(ptr addrspace(8) inreg %buf) {
1190 ; SDAG-LABEL: load_v2p5:
1191 ; SDAG:       ; %bb.0:
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:
1198 ; GISEL:       ; %bb.0:
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:
1210 ; SDAG:       ; %bb.0:
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:
1217 ; GISEL:       ; %bb.0:
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
1224   ret void
1227 define <3 x ptr addrspace(5)> @load_v3p5(ptr addrspace(8) inreg %buf) {
1228 ; SDAG-LABEL: load_v3p5:
1229 ; SDAG:       ; %bb.0:
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:
1236 ; GISEL:       ; %bb.0:
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:
1248 ; SDAG:       ; %bb.0:
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:
1255 ; GISEL:       ; %bb.0:
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
1262   ret void
1265 define <4 x ptr addrspace(5)> @load_v4p5(ptr addrspace(8) inreg %buf) {
1266 ; SDAG-LABEL: load_v4p5:
1267 ; SDAG:       ; %bb.0:
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:
1274 ; GISEL:       ; %bb.0:
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:
1286 ; SDAG:       ; %bb.0:
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:
1293 ; GISEL:       ; %bb.0:
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
1300   ret void
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:
1307 ; SDAG:       ; %bb.0:
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:
1314 ; GISEL:       ; %bb.0:
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
1321   ret <6 x half> %ret
1324 define void @store_v6f16(<6 x half> %data, ptr addrspace(8) inreg %buf) {
1325 ; SDAG-LABEL: store_v6f16:
1326 ; SDAG:       ; %bb.0:
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:
1333 ; GISEL:       ; %bb.0:
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
1340   ret void
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:
1347 ; SDAG:       ; %bb.0:
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:
1355 ; GISEL:       ; %bb.0:
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:
1368 ; SDAG:       ; %bb.0:
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:
1376 ; GISEL:       ; %bb.0:
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
1384   ret void
1387 define <6 x float> @load_v6f32(ptr addrspace(8) inreg %buf) {
1388 ; SDAG-LABEL: load_v6f32:
1389 ; SDAG:       ; %bb.0:
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:
1397 ; GISEL:       ; %bb.0:
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:
1410 ; SDAG:       ; %bb.0:
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:
1418 ; GISEL:       ; %bb.0:
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
1426   ret void
1429 define <7 x float> @load_v7f32(ptr addrspace(8) inreg %buf) {
1430 ; SDAG-LABEL: load_v7f32:
1431 ; SDAG:       ; %bb.0:
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:
1439 ; GISEL:       ; %bb.0:
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:
1452 ; SDAG:       ; %bb.0:
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:
1460 ; GISEL:       ; %bb.0:
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
1468   ret void
1471 define <8 x float> @load_v8f32(ptr addrspace(8) inreg %buf) {
1472 ; SDAG-LABEL: load_v8f32:
1473 ; SDAG:       ; %bb.0:
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:
1481 ; GISEL:       ; %bb.0:
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:
1494 ; SDAG:       ; %bb.0:
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:
1502 ; GISEL:       ; %bb.0:
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
1510   ret void
1513 define <10 x float> @load_v10f32(ptr addrspace(8) inreg %buf) {
1514 ; SDAG-LABEL: load_v10f32:
1515 ; SDAG:       ; %bb.0:
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:
1524 ; GISEL:       ; %bb.0:
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:
1538 ; SDAG:       ; %bb.0:
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:
1547 ; GISEL:       ; %bb.0:
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
1556   ret void
1559 define <6 x i32> @load_v6i32(ptr addrspace(8) inreg %buf) {
1560 ; SDAG-LABEL: load_v6i32:
1561 ; SDAG:       ; %bb.0:
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:
1569 ; GISEL:       ; %bb.0:
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
1577   ret <6 x i32> %ret
1580 define void @store_v6i32(<6 x i32> %data, ptr addrspace(8) inreg %buf) {
1581 ; SDAG-LABEL: store_v6i32:
1582 ; SDAG:       ; %bb.0:
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:
1590 ; GISEL:       ; %bb.0:
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
1598   ret void
1601 define <4 x ptr addrspace(1)> @load_v4p1(ptr addrspace(8) inreg %buf) {
1602 ; SDAG-LABEL: load_v4p1:
1603 ; SDAG:       ; %bb.0:
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:
1611 ; GISEL:       ; %bb.0:
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:
1624 ; SDAG:       ; %bb.0:
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:
1632 ; GISEL:       ; %bb.0:
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
1640   ret void
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:
1647 ; SDAG:       ; %bb.0:
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:
1654 ; GISEL:       ; %bb.0:
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
1661   ret <1 x i16> %ret
1664 define void @store_v1i16(<1 x i16> %data, ptr addrspace(8) inreg %buf) {
1665 ; SDAG-LABEL: store_v1i16:
1666 ; SDAG:       ; %bb.0:
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:
1673 ; GISEL:       ; %bb.0:
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
1680   ret void
1683 define <3 x i16> @load_v3i16(ptr addrspace(8) inreg %buf) {
1684 ; SDAG-LABEL: load_v3i16:
1685 ; SDAG:       ; %bb.0:
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:
1693 ; GISEL:       ; %bb.0:
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
1701   ret <3 x i16> %ret
1704 define void @store_v3i16(<3 x i16> %data, ptr addrspace(8) inreg %buf) {
1705 ; SDAG-LABEL: store_v3i16:
1706 ; SDAG:       ; %bb.0:
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:
1714 ; GISEL:       ; %bb.0:
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
1722   ret void
1725 define <5 x i16> @load_v5i16(ptr addrspace(8) inreg %buf) {
1726 ; SDAG-LABEL: load_v5i16:
1727 ; SDAG:       ; %bb.0:
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:
1735 ; GISEL:       ; %bb.0:
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
1747   ret <5 x i16> %ret
1750 define void @store_v5i16(<5 x i16> %data, ptr addrspace(8) inreg %buf) {
1751 ; SDAG-LABEL: store_v5i16:
1752 ; SDAG:       ; %bb.0:
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:
1760 ; GISEL:       ; %bb.0:
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
1768   ret void
1771 define <6 x i16> @load_v6i16(ptr addrspace(8) inreg %buf) {
1772 ; SDAG-LABEL: load_v6i16:
1773 ; SDAG:       ; %bb.0:
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:
1780 ; GISEL:       ; %bb.0:
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
1787   ret <6 x i16> %ret
1790 define void @store_v6i16(<6 x i16> %data, ptr addrspace(8) inreg %buf) {
1791 ; SDAG-LABEL: store_v6i16:
1792 ; SDAG:       ; %bb.0:
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:
1799 ; GISEL:       ; %bb.0:
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
1806   ret void
1809 define <7 x i16> @load_v7i16(ptr addrspace(8) inreg %buf) {
1810 ; SDAG-LABEL: load_v7i16:
1811 ; SDAG:       ; %bb.0:
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:
1819 ; GISEL:       ; %bb.0:
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
1832   ret <7 x i16> %ret
1835 define void @store_v7i16(<7 x i16> %data, ptr addrspace(8) inreg %buf) {
1836 ; SDAG-LABEL: store_v7i16:
1837 ; SDAG:       ; %bb.0:
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:
1845 ; GISEL:       ; %bb.0:
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
1853   ret void
1856 define <9 x i16> @load_v9i16(ptr addrspace(8) inreg %buf) {
1857 ; SDAG-LABEL: load_v9i16:
1858 ; SDAG:       ; %bb.0:
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:
1866 ; GISEL:       ; %bb.0:
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
1880   ret <9 x i16> %ret
1883 define void @store_v9i16(<9 x i16> %data, ptr addrspace(8) inreg %buf) {
1884 ; SDAG-LABEL: store_v9i16:
1885 ; SDAG:       ; %bb.0:
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:
1893 ; GISEL:       ; %bb.0:
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
1901   ret void
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:
1910 ; SDAG:       ; %bb.0:
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:
1917 ; GISEL:       ; %bb.0:
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
1924   ret <1 x i8> %ret
1927 define void @store_v1i8(<1 x i8> %data, ptr addrspace(8) inreg %buf) {
1928 ; SDAG-LABEL: store_v1i8:
1929 ; SDAG:       ; %bb.0:
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:
1936 ; GISEL:       ; %bb.0:
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
1943   ret void
1946 define <2 x i8> @load_v2i8(ptr addrspace(8) inreg %buf) {
1947 ; SDAG-LABEL: load_v2i8:
1948 ; SDAG:       ; %bb.0:
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:
1956 ; GISEL:       ; %bb.0:
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
1964   ret <2 x i8> %ret
1967 define void @store_v2i8(<2 x i8> %data, ptr addrspace(8) inreg %buf) {
1968 ; SDAG-LABEL: store_v2i8:
1969 ; SDAG:       ; %bb.0:
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:
1978 ; GISEL:       ; %bb.0:
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
1988   ret void
1991 define <3 x i8> @load_v3i8(ptr addrspace(8) inreg %buf) {
1992 ; SDAG-LABEL: load_v3i8:
1993 ; SDAG:       ; %bb.0:
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:
2003 ; GISEL:       ; %bb.0:
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
2013   ret <3 x i8> %ret
2016 define void @store_v3i8(<3 x i8> %data, ptr addrspace(8) inreg %buf) {
2017 ; SDAG-LABEL: store_v3i8:
2018 ; SDAG:       ; %bb.0:
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:
2028 ; GISEL:       ; %bb.0:
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
2039   ret void
2042 define <4 x i8> @load_v4i8(ptr addrspace(8) inreg %buf) {
2043 ; SDAG-LABEL: load_v4i8:
2044 ; SDAG:       ; %bb.0:
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:
2054 ; GISEL:       ; %bb.0:
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
2064   ret <4 x i8> %ret
2067 define void @store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
2068 ; SDAG-LABEL: store_v4i8:
2069 ; SDAG:       ; %bb.0:
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:
2081 ; GISEL:       ; %bb.0:
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
2097   ret void
2100 define <5 x i8> @load_v5i8(ptr addrspace(8) inreg %buf) {
2101 ; SDAG-LABEL: load_v5i8:
2102 ; SDAG:       ; %bb.0:
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:
2114 ; GISEL:       ; %bb.0:
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
2126   ret <5 x i8> %ret
2129 define void @store_v5i8(<5 x i8> %data, ptr addrspace(8) inreg %buf) {
2130 ; SDAG-LABEL: store_v5i8:
2131 ; SDAG:       ; %bb.0:
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:
2144 ; GISEL:       ; %bb.0:
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
2161   ret void
2164 define <6 x i8> @load_v6i8(ptr addrspace(8) inreg %buf) {
2165 ; SDAG-LABEL: load_v6i8:
2166 ; SDAG:       ; %bb.0:
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:
2182 ; GISEL:       ; %bb.0:
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
2195   ret <6 x i8> %ret
2198 define void @store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
2199 ; SDAG-LABEL: store_v6i8:
2200 ; SDAG:       ; %bb.0:
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:
2215 ; GISEL:       ; %bb.0:
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
2234   ret void
2237 define <7 x i8> @load_v7i8(ptr addrspace(8) inreg %buf) {
2238 ; SDAG-LABEL: load_v7i8:
2239 ; SDAG:       ; %bb.0:
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:
2254 ; GISEL:       ; %bb.0:
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
2269   ret <7 x i8> %ret
2272 define void @store_v7i8(<7 x i8> %data, ptr addrspace(8) inreg %buf) {
2273 ; SDAG-LABEL: store_v7i8:
2274 ; SDAG:       ; %bb.0:
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:
2290 ; GISEL:       ; %bb.0:
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
2311   ret void
2314 define <8 x i8> @load_v8i8(ptr addrspace(8) inreg %buf) {
2315 ; SDAG-LABEL: load_v8i8:
2316 ; SDAG:       ; %bb.0:
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:
2331 ; GISEL:       ; %bb.0:
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
2346   ret <8 x i8> %ret
2349 define void @store_v8i8(<8 x i8> %data, ptr addrspace(8) inreg %buf) {
2350 ; SDAG-LABEL: store_v8i8:
2351 ; SDAG:       ; %bb.0:
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:
2368 ; GISEL:       ; %bb.0:
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
2391   ret void
2394 define <12 x i8> @load_v12i8(ptr addrspace(8) inreg %buf) {
2395 ; SDAG-LABEL: load_v12i8:
2396 ; SDAG:       ; %bb.0:
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:
2416 ; GISEL:       ; %bb.0:
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
2436   ret <12 x i8> %ret
2439 define void @store_v12i8(<12 x i8> %data, ptr addrspace(8) inreg %buf) {
2440 ; SDAG-LABEL: store_v12i8:
2441 ; SDAG:       ; %bb.0:
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:
2463 ; GISEL:       ; %bb.0:
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
2493   ret void
2496 define <16 x i8> @load_v16i8(ptr addrspace(8) inreg %buf) {
2497 ; SDAG-LABEL: load_v16i8:
2498 ; SDAG:       ; %bb.0:
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:
2523 ; GISEL:       ; %bb.0:
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
2548   ret <16 x i8> %ret
2551 define void @store_v16i8(<16 x i8> %data, ptr addrspace(8) inreg %buf) {
2552 ; SDAG-LABEL: store_v16i8:
2553 ; SDAG:       ; %bb.0:
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:
2580 ; GISEL:       ; %bb.0:
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
2617   ret void
2620 define <32 x i8> @load_v32i8(ptr addrspace(8) inreg %buf) {
2621 ; SDAG-LABEL: load_v32i8:
2622 ; SDAG:       ; %bb.0:
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:
2663 ; GISEL:       ; %bb.0:
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
2708   ret <32 x i8> %ret
2711 define void @store_v32i8(<32 x i8> %data, ptr addrspace(8) inreg %buf) {
2712 ; SDAG-LABEL: store_v32i8:
2713 ; SDAG:       ; %bb.0:
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:
2763 ; GISEL:       ; %bb.0:
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
2830   ret void
2833 ;;; Arrays. Need to become vectors.
2835 define [1 x i32] @load_a1i32(ptr addrspace(8) inreg %buf) {
2836 ; SDAG-LABEL: load_a1i32:
2837 ; SDAG:       ; %bb.0:
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:
2844 ; GISEL:       ; %bb.0:
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
2851   ret [1 x i32] %ret
2854 define void @store_a1i32([1 x i32] %data, ptr addrspace(8) inreg %buf) {
2855 ; SDAG-LABEL: store_a1i32:
2856 ; SDAG:       ; %bb.0:
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:
2863 ; GISEL:       ; %bb.0:
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
2870   ret void
2873 define [2 x i32] @load_a2i32(ptr addrspace(8) inreg %buf) {
2874 ; SDAG-LABEL: load_a2i32:
2875 ; SDAG:       ; %bb.0:
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:
2882 ; GISEL:       ; %bb.0:
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
2889   ret [2 x i32] %ret
2892 define void @store_a2i32([2 x i32] %data, ptr addrspace(8) inreg %buf) {
2893 ; SDAG-LABEL: store_a2i32:
2894 ; SDAG:       ; %bb.0:
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:
2901 ; GISEL:       ; %bb.0:
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
2908   ret void
2911 define [2 x half] @load_a2f16(ptr addrspace(8) inreg %buf) {
2912 ; SDAG-LABEL: load_a2f16:
2913 ; SDAG:       ; %bb.0:
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:
2921 ; GISEL:       ; %bb.0:
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
2929   ret [2 x half] %ret
2932 define void @store_a2f16([2 x half] %data, ptr addrspace(8) inreg %buf) {
2933 ; SDAG-LABEL: store_a2f16:
2934 ; SDAG:       ; %bb.0:
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:
2943 ; GISEL:       ; %bb.0:
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
2952   ret void
2955 define [2 x ptr addrspace(1)] @load_a2p1(ptr addrspace(8) inreg %buf) {
2956 ; SDAG-LABEL: load_a2p1:
2957 ; SDAG:       ; %bb.0:
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:
2964 ; GISEL:       ; %bb.0:
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:
2976 ; SDAG:       ; %bb.0:
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:
2983 ; GISEL:       ; %bb.0:
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
2990   ret void
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:
2997 ; SDAG:       ; %bb.0:
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:
3005 ; GISEL:       ; %bb.0:
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
3026   ret i40 %ret
3029 define void @store_i40(i40 %data, ptr addrspace(8) inreg %buf) {
3030 ; SDAG-LABEL: store_i40:
3031 ; SDAG:       ; %bb.0:
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:
3039 ; GISEL:       ; %bb.0:
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
3047   ret void
3050 define i96 @load_i96(ptr addrspace(8) inreg %buf) {
3051 ; SDAG-LABEL: load_i96:
3052 ; SDAG:       ; %bb.0:
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:
3059 ; GISEL:       ; %bb.0:
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
3066   ret i96 %ret
3069 define void @store_i96(i96 %data, ptr addrspace(8) inreg %buf) {
3070 ; SDAG-LABEL: store_i96:
3071 ; SDAG:       ; %bb.0:
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:
3078 ; GISEL:       ; %bb.0:
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
3085   ret void
3088 define i160 @load_i160(ptr addrspace(8) inreg %buf) {
3089 ; SDAG-LABEL: load_i160:
3090 ; SDAG:       ; %bb.0:
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:
3098 ; GISEL:       ; %bb.0:
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
3106   ret i160 %ret
3109 define void @store_i160(i160 %data, ptr addrspace(8) inreg %buf) {
3110 ; SDAG-LABEL: store_i160:
3111 ; SDAG:       ; %bb.0:
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:
3119 ; GISEL:       ; %bb.0:
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
3127   ret void
3130 define i256 @load_i256(ptr addrspace(8) inreg %buf) {
3131 ; SDAG-LABEL: load_i256:
3132 ; SDAG:       ; %bb.0:
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:
3140 ; GISEL:       ; %bb.0:
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
3148   ret i256 %ret
3151 define void @store_i256(i256 %data, ptr addrspace(8) inreg %buf) {
3152 ; SDAG-LABEL: store_i256:
3153 ; SDAG:       ; %bb.0:
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:
3161 ; GISEL:       ; %bb.0:
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
3169   ret void
3172 ;;; Non-byte-sized scalars. Require zero-extension.
3174 define i7 @load_i7(ptr addrspace(8) inreg %buf) {
3175 ; SDAG-LABEL: load_i7:
3176 ; SDAG:       ; %bb.0:
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:
3183 ; GISEL:       ; %bb.0:
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
3190   ret i7 %ret
3193 define void @store_i7(i7 %data, ptr addrspace(8) inreg %buf) {
3194 ; SDAG-LABEL: store_i7:
3195 ; SDAG:       ; %bb.0:
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:
3203 ; GISEL:       ; %bb.0:
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
3211   ret void
3214 define i4 @load_i4(ptr addrspace(8) inreg %buf) {
3215 ; SDAG-LABEL: load_i4:
3216 ; SDAG:       ; %bb.0:
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:
3223 ; GISEL:       ; %bb.0:
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
3230   ret i4 %ret
3233 define void @store_i4(i4 %data, ptr addrspace(8) inreg %buf) {
3234 ; SDAG-LABEL: store_i4:
3235 ; SDAG:       ; %bb.0:
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:
3243 ; GISEL:       ; %bb.0:
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
3251   ret void
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:
3259 ; SDAG:       ; %bb.0:
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:
3271 ; GISEL:       ; %bb.0:
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
3279   ret <2 x i4> %ret
3282 define void @store_v2i4(<2 x i4> %data, ptr addrspace(8) inreg %buf) {
3283 ; SDAG-LABEL: store_v2i4:
3284 ; SDAG:       ; %bb.0:
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:
3297 ; GISEL:       ; %bb.0:
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
3308   ret void
3311 define <4 x i4> @load_v4i4(ptr addrspace(8) inreg %buf) {
3312 ; SDAG-LABEL: load_v4i4:
3313 ; SDAG:       ; %bb.0:
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:
3329 ; GISEL:       ; %bb.0:
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
3339   ret <4 x i4> %ret
3342 define void @store_v4i4(<4 x i4> %data, ptr addrspace(8) inreg %buf) {
3343 ; SDAG-LABEL: store_v4i4:
3344 ; SDAG:       ; %bb.0:
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:
3360 ; GISEL:       ; %bb.0:
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
3377   ret void
3380 define <8 x i4> @load_v8i4(ptr addrspace(8) inreg %buf) {
3381 ; SDAG-LABEL: load_v8i4:
3382 ; SDAG:       ; %bb.0:
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:
3397 ; GISEL:       ; %bb.0:
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
3411   ret <8 x i4> %ret
3414 define void @store_v8i4(<8 x i4> %data, ptr addrspace(8) inreg %buf) {
3415 ; SDAG-LABEL: store_v8i4:
3416 ; SDAG:       ; %bb.0:
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:
3439 ; GISEL:       ; %bb.0:
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
3463   ret void
3466 ;;; Vectors of non-byte-sized integers.
3468 define <2 x i6> @load_v2i6(ptr addrspace(8) inreg %buf) {
3469 ; SDAG-LABEL: load_v2i6:
3470 ; SDAG:       ; %bb.0:
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:
3479 ; GISEL:       ; %bb.0:
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
3487   ret <2 x i6> %ret
3490 define void @store_v2i6(<2 x i6> %data, ptr addrspace(8) inreg %buf) {
3491 ; SDAG-LABEL: store_v2i6:
3492 ; SDAG:       ; %bb.0:
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:
3504 ; GISEL:       ; %bb.0:
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
3516   ret void
3519 ;; Blocks of fp6 elements
3520 define <6 x i32> @load_v32i6(ptr addrspace(8) inreg %buf) {
3521 ; SDAG-LABEL: load_v32i6:
3522 ; SDAG:       ; %bb.0:
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:
3530 ; GISEL:       ; %bb.0:
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:
3544 ; SDAG:       ; %bb.0:
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:
3552 ; GISEL:       ; %bb.0:
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
3561   ret void
3564 ;;; Modifiers
3566 define <4 x i8> @volatile_load_v4i8(ptr addrspace(8) inreg %buf) {
3567 ; SDAG-LABEL: volatile_load_v4i8:
3568 ; SDAG:       ; %bb.0:
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:
3578 ; GISEL:       ; %bb.0:
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
3588   ret <4 x i8> %ret
3591 define void @volatile_store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
3592 ; SDAG-LABEL: volatile_store_v4i8:
3593 ; SDAG:       ; %bb.0:
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:
3605 ; GISEL:       ; %bb.0:
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
3621   ret void
3624 define <6 x i8> @volatile_load_v6i8(ptr addrspace(8) inreg %buf) {
3625 ; SDAG-LABEL: volatile_load_v6i8:
3626 ; SDAG:       ; %bb.0:
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:
3642 ; GISEL:       ; %bb.0:
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
3655   ret <6 x i8> %ret
3658 define void @volatile_store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
3659 ; SDAG-LABEL: volatile_store_v6i8:
3660 ; SDAG:       ; %bb.0:
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:
3675 ; GISEL:       ; %bb.0:
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
3694   ret void
3697 define [2 x [2 x i32]] @load_a2a2i32(ptr addrspace(8) inreg %buf) {
3698 ; SDAG-LABEL: load_a2a2i32:
3699 ; SDAG:       ; %bb.0:
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:
3706 ; GISEL:       ; %bb.0:
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:
3718 ; SDAG:       ; %bb.0:
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:
3725 ; GISEL:       ; %bb.0:
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
3732   ret void
3735 define [2 x <2 x i32>] @load_a2v2i32(ptr addrspace(8) inreg %buf) {
3736 ; SDAG-LABEL: load_a2v2i32:
3737 ; SDAG:       ; %bb.0:
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:
3744 ; GISEL:       ; %bb.0:
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:
3756 ; SDAG:       ; %bb.0:
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:
3763 ; GISEL:       ; %bb.0:
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
3770   ret void
3773 define { i32 } @load_sl_i32s(ptr addrspace(8) inreg %buf) {
3774 ; SDAG-LABEL: load_sl_i32s:
3775 ; SDAG:       ; %bb.0:
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:
3782 ; GISEL:       ; %bb.0:
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
3789   ret { i32 } %ret
3792 define void @store_sl_i32s({ i32 } %data, ptr addrspace(8) inreg %buf) {
3793 ; SDAG-LABEL: store_sl_i32s:
3794 ; SDAG:       ; %bb.0:
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:
3801 ; GISEL:       ; %bb.0:
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
3808   ret void
3811 define { { float } } @load_sl_sl_f32ss(ptr addrspace(8) inreg %buf) {
3812 ; SDAG-LABEL: load_sl_sl_f32ss:
3813 ; SDAG:       ; %bb.0:
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:
3820 ; GISEL:       ; %bb.0:
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:
3832 ; SDAG:       ; %bb.0:
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:
3839 ; GISEL:       ; %bb.0:
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
3846   ret void
3849 define { <2 x i32> } @load_sl_v2i32s(ptr addrspace(8) inreg %buf) {
3850 ; SDAG-LABEL: load_sl_v2i32s:
3851 ; SDAG:       ; %bb.0:
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:
3858 ; GISEL:       ; %bb.0:
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:
3870 ; SDAG:       ; %bb.0:
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:
3877 ; GISEL:       ; %bb.0:
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
3884   ret void
3887 define { i64, i32 } @load_sl_i64i32s(ptr addrspace(8) inreg %buf) {
3888 ; SDAG-LABEL: load_sl_i64i32s:
3889 ; SDAG:       ; %bb.0:
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:
3896 ; GISEL:       ; %bb.0:
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:
3908 ; SDAG:       ; %bb.0:
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:
3915 ; GISEL:       ; %bb.0:
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
3922   ret void
3925 define [4 x i7] @load_a4i7(ptr addrspace(8) inreg %buf) {
3926 ; SDAG-LABEL: load_a4i7:
3927 ; SDAG:       ; %bb.0:
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:
3937 ; GISEL:       ; %bb.0:
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
3947   ret [4 x i7] %ret
3950 define void @store_a4i7([4 x i7] %data, ptr addrspace(8) inreg %buf) {
3951 ; SDAG-LABEL: store_a4i7:
3952 ; SDAG:       ; %bb.0:
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:
3966 ; GISEL:       ; %bb.0:
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
3980   ret void