[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / buffer-fat-pointers-contents-legalization.ll
blob7eaa52d89b9b687b99bc134e6afc88681db3e0d5
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_mov_b32 s4, s33
3095 ; SDAG-NEXT:    s_add_i32 s33, s32, 0x7c0
3096 ; SDAG-NEXT:    s_and_b32 s33, s33, 0xfffff800
3097 ; SDAG-NEXT:    s_mov_b32 s5, s34
3098 ; SDAG-NEXT:    s_mov_b32 s34, s32
3099 ; SDAG-NEXT:    s_addk_i32 s32, 0x1800
3100 ; SDAG-NEXT:    s_mov_b32 s32, s34
3101 ; SDAG-NEXT:    s_mov_b32 s34, s5
3102 ; SDAG-NEXT:    s_mov_b32 s33, s4
3103 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3104 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3106 ; GISEL-LABEL: load_i160:
3107 ; GISEL:       ; %bb.0:
3108 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3109 ; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3110 ; GISEL-NEXT:    buffer_load_dword v4, off, s[16:19], 0 offset:16
3111 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3112 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3113   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3114   %ret = load i160, ptr addrspace(7) %p
3115   ret i160 %ret
3118 define void @store_i160(i160 %data, ptr addrspace(8) inreg %buf) {
3119 ; SDAG-LABEL: store_i160:
3120 ; SDAG:       ; %bb.0:
3121 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3122 ; SDAG-NEXT:    s_mov_b32 s4, s33
3123 ; SDAG-NEXT:    s_add_i32 s33, s32, 0x7c0
3124 ; SDAG-NEXT:    s_and_b32 s33, s33, 0xfffff800
3125 ; SDAG-NEXT:    s_mov_b32 s5, s34
3126 ; SDAG-NEXT:    s_mov_b32 s34, s32
3127 ; SDAG-NEXT:    s_addk_i32 s32, 0x1000
3128 ; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3129 ; SDAG-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
3130 ; SDAG-NEXT:    s_mov_b32 s32, s34
3131 ; SDAG-NEXT:    s_mov_b32 s34, s5
3132 ; SDAG-NEXT:    s_mov_b32 s33, s4
3133 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3134 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3136 ; GISEL-LABEL: store_i160:
3137 ; GISEL:       ; %bb.0:
3138 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3139 ; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3140 ; GISEL-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
3141 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3142 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3143   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3144   store i160 %data, ptr addrspace(7) %p
3145   ret void
3148 define i256 @load_i256(ptr addrspace(8) inreg %buf) {
3149 ; SDAG-LABEL: load_i256:
3150 ; SDAG:       ; %bb.0:
3151 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3152 ; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3153 ; SDAG-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3154 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3155 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3157 ; GISEL-LABEL: load_i256:
3158 ; GISEL:       ; %bb.0:
3159 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3160 ; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3161 ; GISEL-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3162 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3163 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3164   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3165   %ret = load i256, ptr addrspace(7) %p
3166   ret i256 %ret
3169 define void @store_i256(i256 %data, ptr addrspace(8) inreg %buf) {
3170 ; SDAG-LABEL: store_i256:
3171 ; SDAG:       ; %bb.0:
3172 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3173 ; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3174 ; SDAG-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3175 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3176 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3178 ; GISEL-LABEL: store_i256:
3179 ; GISEL:       ; %bb.0:
3180 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3181 ; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3182 ; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3183 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3184 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3185   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3186   store i256 %data, ptr addrspace(7) %p
3187   ret void
3190 ;;; Non-byte-sized scalars. Require zero-extension.
3192 define i7 @load_i7(ptr addrspace(8) inreg %buf) {
3193 ; SDAG-LABEL: load_i7:
3194 ; SDAG:       ; %bb.0:
3195 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3196 ; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3197 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3198 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3200 ; GISEL-LABEL: load_i7:
3201 ; GISEL:       ; %bb.0:
3202 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3203 ; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3204 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3205 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3206   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3207   %ret = load i7, ptr addrspace(7) %p
3208   ret i7 %ret
3211 define void @store_i7(i7 %data, ptr addrspace(8) inreg %buf) {
3212 ; SDAG-LABEL: store_i7:
3213 ; SDAG:       ; %bb.0:
3214 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3215 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3216 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3217 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3218 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3220 ; GISEL-LABEL: store_i7:
3221 ; GISEL:       ; %bb.0:
3222 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3223 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3224 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3225 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3226 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3227   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3228   store i7 %data, ptr addrspace(7) %p
3229   ret void
3232 define i4 @load_i4(ptr addrspace(8) inreg %buf) {
3233 ; SDAG-LABEL: load_i4:
3234 ; SDAG:       ; %bb.0:
3235 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3236 ; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3237 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3238 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3240 ; GISEL-LABEL: load_i4:
3241 ; GISEL:       ; %bb.0:
3242 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3243 ; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3244 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3245 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3246   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3247   %ret = load i4, ptr addrspace(7) %p
3248   ret i4 %ret
3251 define void @store_i4(i4 %data, ptr addrspace(8) inreg %buf) {
3252 ; SDAG-LABEL: store_i4:
3253 ; SDAG:       ; %bb.0:
3254 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3255 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3256 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3257 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3258 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3260 ; GISEL-LABEL: store_i4:
3261 ; GISEL:       ; %bb.0:
3262 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3263 ; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3264 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3265 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3266 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3267   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3268   store i4 %data, ptr addrspace(7) %p
3269   ret void
3273 ;;; Byte-sized vectors of i4. Require casts.
3275 define <2 x i4> @load_v2i4(ptr addrspace(8) inreg %buf) {
3276 ; SDAG-LABEL: load_v2i4:
3277 ; SDAG:       ; %bb.0:
3278 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3279 ; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3280 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3281 ; SDAG-NEXT:    buffer_store_byte v0, off, s[0:3], s32
3282 ; SDAG-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32
3283 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3284 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v1
3285 ; SDAG-NEXT:    v_lshrrev_b16_e32 v1, 4, v1
3286 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3288 ; GISEL-LABEL: load_v2i4:
3289 ; GISEL:       ; %bb.0:
3290 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3291 ; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3292 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3293 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3294 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3295   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3296   %ret = load <2 x i4>, ptr addrspace(7) %p
3297   ret <2 x i4> %ret
3300 define void @store_v2i4(<2 x i4> %data, ptr addrspace(8) inreg %buf) {
3301 ; SDAG-LABEL: store_v2i4:
3302 ; SDAG:       ; %bb.0:
3303 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3304 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3305 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3306 ; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3307 ; SDAG-NEXT:    buffer_store_byte v0, off, s[0:3], s32
3308 ; SDAG-NEXT:    buffer_load_ubyte v0, off, s[0:3], s32
3309 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3310 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3311 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3312 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3314 ; GISEL-LABEL: store_v2i4:
3315 ; GISEL:       ; %bb.0:
3316 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3317 ; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3318 ; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3319 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3320 ; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3321 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3322 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3323 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3324   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3325   store <2 x i4> %data, ptr addrspace(7) %p
3326   ret void
3329 define <4 x i4> @load_v4i4(ptr addrspace(8) inreg %buf) {
3330 ; SDAG-LABEL: load_v4i4:
3331 ; SDAG:       ; %bb.0:
3332 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3333 ; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3334 ; SDAG-NEXT:    v_mov_b32_e32 v2, 15
3335 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3336 ; SDAG-NEXT:    buffer_store_short v0, off, s[0:3], s32
3337 ; SDAG-NEXT:    buffer_load_ushort v1, off, s[0:3], s32
3338 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3339 ; SDAG-NEXT:    v_lshrrev_b16_e32 v4, 4, v1
3340 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v1
3341 ; SDAG-NEXT:    v_lshrrev_b16_e32 v3, 12, v1
3342 ; SDAG-NEXT:    v_and_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD
3343 ; SDAG-NEXT:    v_and_b32_e32 v1, 15, v4
3344 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3346 ; GISEL-LABEL: load_v4i4:
3347 ; GISEL:       ; %bb.0:
3348 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3349 ; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3350 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3351 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3352 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 8, v0
3353 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 12, v0
3354 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3355   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3356   %ret = load <4 x i4>, ptr addrspace(7) %p
3357   ret <4 x i4> %ret
3360 define void @store_v4i4(<4 x i4> %data, ptr addrspace(8) inreg %buf) {
3361 ; SDAG-LABEL: store_v4i4:
3362 ; SDAG:       ; %bb.0:
3363 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3364 ; SDAG-NEXT:    v_and_b32_e32 v1, 15, v1
3365 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3366 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3367 ; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3368 ; SDAG-NEXT:    v_mov_b32_e32 v1, 15
3369 ; SDAG-NEXT:    v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3370 ; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3371 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 12, v3
3372 ; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3373 ; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
3374 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3375 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3377 ; GISEL-LABEL: store_v4i4:
3378 ; GISEL:       ; %bb.0:
3379 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3380 ; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3381 ; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3382 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3383 ; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3384 ; GISEL-NEXT:    v_mov_b32_e32 v1, 15
3385 ; GISEL-NEXT:    v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3386 ; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3387 ; GISEL-NEXT:    v_and_b32_e32 v1, 15, v3
3388 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 12, v1
3389 ; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3390 ; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
3391 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3392 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3393   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3394   store <4 x i4> %data, ptr addrspace(7) %p
3395   ret void
3398 define <8 x i4> @load_v8i4(ptr addrspace(8) inreg %buf) {
3399 ; SDAG-LABEL: load_v8i4:
3400 ; SDAG:       ; %bb.0:
3401 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3402 ; SDAG-NEXT:    buffer_load_dword v7, off, s[16:19], 0
3403 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3404 ; SDAG-NEXT:    v_and_b32_e32 v0, 15, v7
3405 ; SDAG-NEXT:    v_bfe_u32 v1, v7, 4, 4
3406 ; SDAG-NEXT:    v_bfe_u32 v2, v7, 8, 4
3407 ; SDAG-NEXT:    v_bfe_u32 v3, v7, 12, 4
3408 ; SDAG-NEXT:    v_bfe_u32 v4, v7, 16, 4
3409 ; SDAG-NEXT:    v_bfe_u32 v5, v7, 20, 4
3410 ; SDAG-NEXT:    v_bfe_u32 v6, v7, 24, 4
3411 ; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 28, v7
3412 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3414 ; GISEL-LABEL: load_v8i4:
3415 ; GISEL:       ; %bb.0:
3416 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3417 ; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3418 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3419 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3420 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 8, v0
3421 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 12, v0
3422 ; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 16, v0
3423 ; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 20, v0
3424 ; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 24, v0
3425 ; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 28, v0
3426 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3427   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3428   %ret = load <8 x i4>, ptr addrspace(7) %p
3429   ret <8 x i4> %ret
3432 define void @store_v8i4(<8 x i4> %data, ptr addrspace(8) inreg %buf) {
3433 ; SDAG-LABEL: store_v8i4:
3434 ; SDAG:       ; %bb.0:
3435 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3436 ; SDAG-NEXT:    v_and_b32_e32 v1, 15, v1
3437 ; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3438 ; SDAG-NEXT:    v_and_or_b32 v0, v0, 15, v1
3439 ; SDAG-NEXT:    v_and_b32_e32 v1, 15, v3
3440 ; SDAG-NEXT:    v_and_b32_e32 v2, 15, v2
3441 ; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 12, v1
3442 ; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3443 ; SDAG-NEXT:    v_or3_b32 v0, v0, v2, v1
3444 ; SDAG-NEXT:    v_and_b32_e32 v1, 15, v5
3445 ; SDAG-NEXT:    v_mov_b32_e32 v2, 15
3446 ; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 20, v1
3447 ; SDAG-NEXT:    v_and_b32_sdwa v3, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3448 ; SDAG-NEXT:    v_or3_b32 v0, v0, v3, v1
3449 ; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 28, v7
3450 ; SDAG-NEXT:    v_and_b32_sdwa v2, v6, v2 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3451 ; SDAG-NEXT:    v_or3_b32 v0, v0, v2, v1
3452 ; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3453 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3454 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3456 ; GISEL-LABEL: store_v8i4:
3457 ; GISEL:       ; %bb.0:
3458 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3459 ; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3460 ; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3461 ; GISEL-NEXT:    v_and_or_b32 v0, v0, 15, v1
3462 ; GISEL-NEXT:    v_and_b32_e32 v1, 15, v2
3463 ; GISEL-NEXT:    v_and_b32_e32 v2, 15, v3
3464 ; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 8, v1
3465 ; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 12, v2
3466 ; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3467 ; GISEL-NEXT:    v_mov_b32_e32 v1, 15
3468 ; GISEL-NEXT:    v_and_b32_e32 v3, 15, v5
3469 ; GISEL-NEXT:    v_and_b32_sdwa v2, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3470 ; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 20, v3
3471 ; GISEL-NEXT:    v_or3_b32 v0, v0, v2, v3
3472 ; GISEL-NEXT:    v_and_b32_e32 v2, 15, v7
3473 ; GISEL-NEXT:    v_and_b32_sdwa v1, v6, v1 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3474 ; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 28, v2
3475 ; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3476 ; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3477 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3478 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3479   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3480   store <8 x i4> %data, ptr addrspace(7) %p
3481   ret void
3484 ;;; Vectors of non-byte-sized integers.
3486 define <2 x i6> @load_v2i6(ptr addrspace(8) inreg %buf) {
3487 ; SDAG-LABEL: load_v2i6:
3488 ; SDAG:       ; %bb.0:
3489 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3490 ; SDAG-NEXT:    buffer_load_ushort v1, off, s[16:19], 0
3491 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3492 ; SDAG-NEXT:    v_and_b32_e32 v0, 63, v1
3493 ; SDAG-NEXT:    v_bfe_u32 v1, v1, 6, 6
3494 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3496 ; GISEL-LABEL: load_v2i6:
3497 ; GISEL:       ; %bb.0:
3498 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3499 ; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3500 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3501 ; GISEL-NEXT:    v_lshrrev_b16_e32 v1, 6, v0
3502 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3503   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3504   %ret = load <2 x i6>, ptr addrspace(7) %p
3505   ret <2 x i6> %ret
3508 define void @store_v2i6(<2 x i6> %data, ptr addrspace(8) inreg %buf) {
3509 ; SDAG-LABEL: store_v2i6:
3510 ; SDAG:       ; %bb.0:
3511 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3512 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 6, v1
3513 ; SDAG-NEXT:    v_and_b32_e32 v0, 63, v0
3514 ; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3515 ; SDAG-NEXT:    v_and_b32_e32 v0, 0xfff, v0
3516 ; SDAG-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3517 ; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
3518 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3519 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3521 ; GISEL-LABEL: store_v2i6:
3522 ; GISEL:       ; %bb.0:
3523 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3524 ; GISEL-NEXT:    v_and_b32_e32 v1, 63, v1
3525 ; GISEL-NEXT:    v_and_b32_e32 v0, 63, v0
3526 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 6, v1
3527 ; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3528 ; GISEL-NEXT:    v_and_b32_e32 v0, 0xfff, v0
3529 ; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
3530 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3531 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3532   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3533   store <2 x i6> %data, ptr addrspace(7) %p
3534   ret void
3537 ;; Blocks of fp6 elements
3538 define <6 x i32> @load_v32i6(ptr addrspace(8) inreg %buf) {
3539 ; SDAG-LABEL: load_v32i6:
3540 ; SDAG:       ; %bb.0:
3541 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3542 ; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3543 ; SDAG-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3544 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3545 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3547 ; GISEL-LABEL: load_v32i6:
3548 ; GISEL:       ; %bb.0:
3549 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3550 ; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3551 ; GISEL-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3552 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3553 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3554   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3555   %ret = load <32 x i6>, ptr addrspace(7) %p
3556   %ret.cast = bitcast <32 x i6> %ret to <6 x i32>
3557   ret <6 x i32> %ret.cast
3560 define void @store_v32i6(<6 x i32> %data.abi, ptr addrspace(8) inreg %buf) {
3561 ; SDAG-LABEL: store_v32i6:
3562 ; SDAG:       ; %bb.0:
3563 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3564 ; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3565 ; SDAG-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3566 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3567 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3569 ; GISEL-LABEL: store_v32i6:
3570 ; GISEL:       ; %bb.0:
3571 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3572 ; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3573 ; GISEL-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3574 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3575 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3576   %data = bitcast <6 x i32> %data.abi to <32 x i6>
3577   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3578   store <32 x i6> %data, ptr addrspace(7) %p
3579   ret void
3582 ;;; Modifiers
3584 define <4 x i8> @volatile_load_v4i8(ptr addrspace(8) inreg %buf) {
3585 ; SDAG-LABEL: volatile_load_v4i8:
3586 ; SDAG:       ; %bb.0:
3587 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3588 ; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3589 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3590 ; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3591 ; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3592 ; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3593 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3595 ; GISEL-LABEL: volatile_load_v4i8:
3596 ; GISEL:       ; %bb.0:
3597 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3598 ; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3599 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3600 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3601 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3602 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3603 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3604   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3605   %ret = load volatile <4 x i8>, ptr addrspace(7) %p
3606   ret <4 x i8> %ret
3609 define void @volatile_store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
3610 ; SDAG-LABEL: volatile_store_v4i8:
3611 ; SDAG:       ; %bb.0:
3612 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3613 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3614 ; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3615 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
3616 ; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3617 ; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3618 ; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3619 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3620 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3622 ; GISEL-LABEL: volatile_store_v4i8:
3623 ; GISEL:       ; %bb.0:
3624 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3625 ; GISEL-NEXT:    v_mov_b32_e32 v5, 8
3626 ; GISEL-NEXT:    v_mov_b32_e32 v4, 0xff
3627 ; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
3628 ; GISEL-NEXT:    v_and_or_b32 v0, v0, v4, v1
3629 ; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
3630 ; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
3631 ; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3632 ; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
3633 ; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3634 ; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3635 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3636 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3637   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3638   store volatile <4 x i8> %data, ptr addrspace(7) %p
3639   ret void
3642 define <6 x i8> @volatile_load_v6i8(ptr addrspace(8) inreg %buf) {
3643 ; SDAG-LABEL: volatile_load_v6i8:
3644 ; SDAG:       ; %bb.0:
3645 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3646 ; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3647 ; SDAG-NEXT:    buffer_load_ushort v6, off, s[16:19], 0 offset:4 glc
3648 ; SDAG-NEXT:    s_waitcnt vmcnt(1)
3649 ; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 8, v0
3650 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3651 ; SDAG-NEXT:    v_and_b32_e32 v1, 0xffff, v6
3652 ; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[0:1]
3653 ; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3654 ; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3655 ; SDAG-NEXT:    v_mov_b32_e32 v4, v6
3656 ; SDAG-NEXT:    v_mov_b32_e32 v1, v7
3657 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3659 ; GISEL-LABEL: volatile_load_v6i8:
3660 ; GISEL:       ; %bb.0:
3661 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662 ; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3663 ; GISEL-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:4 glc
3664 ; GISEL-NEXT:    s_waitcnt vmcnt(1)
3665 ; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3666 ; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3667 ; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3668 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3669 ; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v4
3670 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3671   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3672   %ret = load volatile <6 x i8>, ptr addrspace(7) %p
3673   ret <6 x i8> %ret
3676 define void @volatile_store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
3677 ; SDAG-LABEL: volatile_store_v6i8:
3678 ; SDAG:       ; %bb.0:
3679 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3680 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3681 ; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3682 ; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
3683 ; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3684 ; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
3685 ; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3686 ; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3687 ; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3688 ; SDAG-NEXT:    buffer_store_short v4, off, s[16:19], 0 offset:4
3689 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3690 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3692 ; GISEL-LABEL: volatile_store_v6i8:
3693 ; GISEL:       ; %bb.0:
3694 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3695 ; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v1
3696 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3697 ; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3698 ; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v3
3699 ; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3700 ; GISEL-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3701 ; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v5
3702 ; GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3703 ; GISEL-NEXT:    v_lshlrev_b16_e32 v2, 8, v2
3704 ; GISEL-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
3705 ; GISEL-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3706 ; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3707 ; GISEL-NEXT:    buffer_store_short v2, off, s[16:19], 0 offset:4
3708 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3709 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3710   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3711   store volatile <6 x i8> %data, ptr addrspace(7) %p
3712   ret void
3715 define [2 x [2 x i32]] @load_a2a2i32(ptr addrspace(8) inreg %buf) {
3716 ; SDAG-LABEL: load_a2a2i32:
3717 ; SDAG:       ; %bb.0:
3718 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3719 ; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3720 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3721 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3723 ; GISEL-LABEL: load_a2a2i32:
3724 ; GISEL:       ; %bb.0:
3725 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726 ; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3727 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3728 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3729   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3730   %ret = load [2 x [2 x i32]], ptr addrspace(7) %p
3731   ret [2 x [2 x i32]] %ret
3734 define void @store_a2a2i32([2 x [2 x i32]] %data, ptr addrspace(8) inreg %buf) {
3735 ; SDAG-LABEL: store_a2a2i32:
3736 ; SDAG:       ; %bb.0:
3737 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3738 ; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3739 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3740 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3742 ; GISEL-LABEL: store_a2a2i32:
3743 ; GISEL:       ; %bb.0:
3744 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3745 ; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3746 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3747 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3748   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3749   store [2 x [2 x i32]] %data, ptr addrspace(7) %p
3750   ret void
3753 define [2 x <2 x i32>] @load_a2v2i32(ptr addrspace(8) inreg %buf) {
3754 ; SDAG-LABEL: load_a2v2i32:
3755 ; SDAG:       ; %bb.0:
3756 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3757 ; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3758 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3759 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3761 ; GISEL-LABEL: load_a2v2i32:
3762 ; GISEL:       ; %bb.0:
3763 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3764 ; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3765 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3766 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3767   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3768   %ret = load [2 x <2 x i32>], ptr addrspace(7) %p
3769   ret [2 x <2 x i32>] %ret
3772 define void @store_a2v2i32([2 x <2 x i32>] %data, ptr addrspace(8) inreg %buf) {
3773 ; SDAG-LABEL: store_a2v2i32:
3774 ; SDAG:       ; %bb.0:
3775 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3776 ; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3777 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3778 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3780 ; GISEL-LABEL: store_a2v2i32:
3781 ; GISEL:       ; %bb.0:
3782 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3783 ; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3784 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3785 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3786   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3787   store [2 x <2 x i32>] %data, ptr addrspace(7) %p
3788   ret void
3791 define { i32 } @load_sl_i32s(ptr addrspace(8) inreg %buf) {
3792 ; SDAG-LABEL: load_sl_i32s:
3793 ; SDAG:       ; %bb.0:
3794 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3795 ; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3796 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3797 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3799 ; GISEL-LABEL: load_sl_i32s:
3800 ; GISEL:       ; %bb.0:
3801 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3802 ; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3803 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3804 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3805   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3806   %ret = load { i32 }, ptr addrspace(7) %p
3807   ret { i32 } %ret
3810 define void @store_sl_i32s({ i32 } %data, ptr addrspace(8) inreg %buf) {
3811 ; SDAG-LABEL: store_sl_i32s:
3812 ; SDAG:       ; %bb.0:
3813 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3814 ; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3815 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3816 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3818 ; GISEL-LABEL: store_sl_i32s:
3819 ; GISEL:       ; %bb.0:
3820 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3821 ; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3822 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3823 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3824   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3825   store { i32 } %data, ptr addrspace(7) %p
3826   ret void
3829 define { { float } } @load_sl_sl_f32ss(ptr addrspace(8) inreg %buf) {
3830 ; SDAG-LABEL: load_sl_sl_f32ss:
3831 ; SDAG:       ; %bb.0:
3832 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3833 ; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3834 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3835 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3837 ; GISEL-LABEL: load_sl_sl_f32ss:
3838 ; GISEL:       ; %bb.0:
3839 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3840 ; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3841 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3842 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3843   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3844   %ret = load { { float } }, ptr addrspace(7) %p
3845   ret { { float } } %ret
3848 define void @store_sl_sl_f32ss({ { float } } %data, ptr addrspace(8) inreg %buf) {
3849 ; SDAG-LABEL: store_sl_sl_f32ss:
3850 ; SDAG:       ; %bb.0:
3851 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3852 ; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3853 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3854 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3856 ; GISEL-LABEL: store_sl_sl_f32ss:
3857 ; GISEL:       ; %bb.0:
3858 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3859 ; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3860 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3861 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3862   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3863   store { { float } } %data, ptr addrspace(7) %p
3864   ret void
3867 define { <2 x i32> } @load_sl_v2i32s(ptr addrspace(8) inreg %buf) {
3868 ; SDAG-LABEL: load_sl_v2i32s:
3869 ; SDAG:       ; %bb.0:
3870 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3871 ; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3872 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3873 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3875 ; GISEL-LABEL: load_sl_v2i32s:
3876 ; GISEL:       ; %bb.0:
3877 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3878 ; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3879 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3880 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3881   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3882   %ret = load { <2 x i32> }, ptr addrspace(7) %p
3883   ret { <2 x i32> } %ret
3886 define void @store_sl_v2i32s({ <2 x i32> } %data, ptr addrspace(8) inreg %buf) {
3887 ; SDAG-LABEL: store_sl_v2i32s:
3888 ; SDAG:       ; %bb.0:
3889 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3890 ; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3891 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3892 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3894 ; GISEL-LABEL: store_sl_v2i32s:
3895 ; GISEL:       ; %bb.0:
3896 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3897 ; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3898 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3899 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3900   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3901   store { <2 x i32> } %data, ptr addrspace(7) %p
3902   ret void
3905 define { i64, i32 } @load_sl_i64i32s(ptr addrspace(8) inreg %buf) {
3906 ; SDAG-LABEL: load_sl_i64i32s:
3907 ; SDAG:       ; %bb.0:
3908 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3909 ; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3910 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3911 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3913 ; GISEL-LABEL: load_sl_i64i32s:
3914 ; GISEL:       ; %bb.0:
3915 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3916 ; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3917 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3918 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3919   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3920   %ret = load { i64, i32 }, ptr addrspace(7) %p
3921   ret { i64, i32 } %ret
3924 define void @store_sl_i64i32s({ i64, i32 } %data, ptr addrspace(8) inreg %buf) {
3925 ; SDAG-LABEL: store_sl_i64i32s:
3926 ; SDAG:       ; %bb.0:
3927 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3928 ; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3929 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3930 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3932 ; GISEL-LABEL: store_sl_i64i32s:
3933 ; GISEL:       ; %bb.0:
3934 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3935 ; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3936 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3937 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3938   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3939   store { i64, i32 } %data, ptr addrspace(7) %p
3940   ret void
3943 define [4 x i7] @load_a4i7(ptr addrspace(8) inreg %buf) {
3944 ; SDAG-LABEL: load_a4i7:
3945 ; SDAG:       ; %bb.0:
3946 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3947 ; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3948 ; SDAG-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3949 ; SDAG-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3950 ; SDAG-NEXT:    buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3951 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3952 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3954 ; GISEL-LABEL: load_a4i7:
3955 ; GISEL:       ; %bb.0:
3956 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3957 ; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3958 ; GISEL-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3959 ; GISEL-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3960 ; GISEL-NEXT:    buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3961 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3962 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3963   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3964   %ret = load [4 x i7], ptr addrspace(7) %p
3965   ret [4 x i7] %ret
3968 define void @store_a4i7([4 x i7] %data, ptr addrspace(8) inreg %buf) {
3969 ; SDAG-LABEL: store_a4i7:
3970 ; SDAG:       ; %bb.0:
3971 ; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3972 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3973 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3974 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v1
3975 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:1
3976 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v2
3977 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:2
3978 ; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v3
3979 ; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:3
3980 ; SDAG-NEXT:    s_waitcnt vmcnt(0)
3981 ; SDAG-NEXT:    s_setpc_b64 s[30:31]
3983 ; GISEL-LABEL: store_a4i7:
3984 ; GISEL:       ; %bb.0:
3985 ; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3986 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3987 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3988 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v1
3989 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:1
3990 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v2
3991 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:2
3992 ; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v3
3993 ; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:3
3994 ; GISEL-NEXT:    s_waitcnt vmcnt(0)
3995 ; GISEL-NEXT:    s_setpc_b64 s[30:31]
3996   %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3997   store [4 x i7] %data, ptr addrspace(7) %p
3998   ret void