xref: /llvm-project/llvm/test/CodeGen/AMDGPU/buffer-fat-pointers-contents-legalization.ll (revision 5a81a559d69fb84e1e8ef623ac4b642081c14c51)
1697c1883SKrzysztof Drewniak; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2697c1883SKrzysztof Drewniak; RUN: llc -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefix=SDAG %s
3*5a81a559SDavid Green; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -global-isel=1 -global-isel-abort=2 < %s | FileCheck -check-prefix=GISEL %s
4697c1883SKrzysztof Drewniak
5697c1883SKrzysztof Drewniak; Note: if you're adding tests here, also add them to
6697c1883SKrzysztof Drewniak; lower-buffer-fat-pointers-contents-legalization.ll to verify the IR produced by
7697c1883SKrzysztof Drewniak; the lowering.
8697c1883SKrzysztof Drewniak
9697c1883SKrzysztof Drewniak;;; Legal types. These are natively supported, no casts should be performed.
10697c1883SKrzysztof Drewniak
11697c1883SKrzysztof Drewniakdefine i8 @load_i8(ptr addrspace(8) inreg %buf) {
12697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i8:
13697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
14697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
16697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
17697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
18697c1883SKrzysztof Drewniak;
19697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i8:
20697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
21697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
23697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
24697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
25697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
26697c1883SKrzysztof Drewniak  %ret = load i8, ptr addrspace(7) %p
27697c1883SKrzysztof Drewniak  ret i8 %ret
28697c1883SKrzysztof Drewniak}
29697c1883SKrzysztof Drewniak
30697c1883SKrzysztof Drewniakdefine void @store_i8(i8 %data, ptr addrspace(8) inreg %buf) {
31697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i8:
32697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
33697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
35697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
36697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
37697c1883SKrzysztof Drewniak;
38697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i8:
39697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
40697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
41697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
42697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
43697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
44697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
45697c1883SKrzysztof Drewniak  store i8 %data, ptr addrspace(7) %p
46697c1883SKrzysztof Drewniak  ret void
47697c1883SKrzysztof Drewniak}
48697c1883SKrzysztof Drewniak
49697c1883SKrzysztof Drewniakdefine i16 @load_i16(ptr addrspace(8) inreg %buf) {
50697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i16:
51697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
52697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
54697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
55697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
56697c1883SKrzysztof Drewniak;
57697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i16:
58697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
59697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
60697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
61697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
62697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
63697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
64697c1883SKrzysztof Drewniak  %ret = load i16, ptr addrspace(7) %p
65697c1883SKrzysztof Drewniak  ret i16 %ret
66697c1883SKrzysztof Drewniak}
67697c1883SKrzysztof Drewniak
68697c1883SKrzysztof Drewniakdefine void @store_i16(i16 %data, ptr addrspace(8) inreg %buf) {
69697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i16:
70697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
71697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
73697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
74697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
75697c1883SKrzysztof Drewniak;
76697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i16:
77697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
78697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
79697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
80697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
81697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
82697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
83697c1883SKrzysztof Drewniak  store i16 %data, ptr addrspace(7) %p
84697c1883SKrzysztof Drewniak  ret void
85697c1883SKrzysztof Drewniak}
86697c1883SKrzysztof Drewniak
87697c1883SKrzysztof Drewniakdefine i32 @load_i32(ptr addrspace(8) inreg %buf) {
88697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i32:
89697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
90697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
92697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
93697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
94697c1883SKrzysztof Drewniak;
95697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i32:
96697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
97697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
98697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
99697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
100697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
101697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
102697c1883SKrzysztof Drewniak  %ret = load i32, ptr addrspace(7) %p
103697c1883SKrzysztof Drewniak  ret i32 %ret
104697c1883SKrzysztof Drewniak}
105697c1883SKrzysztof Drewniak
106697c1883SKrzysztof Drewniakdefine void @store_i32(i32 %data, ptr addrspace(8) inreg %buf) {
107697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i32:
108697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
109697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
110697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
111697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
112697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
113697c1883SKrzysztof Drewniak;
114697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i32:
115697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
116697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
118697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
119697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
120697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
121697c1883SKrzysztof Drewniak  store i32 %data, ptr addrspace(7) %p
122697c1883SKrzysztof Drewniak  ret void
123697c1883SKrzysztof Drewniak}
124697c1883SKrzysztof Drewniak
125697c1883SKrzysztof Drewniakdefine i64 @load_i64(ptr addrspace(8) inreg %buf) {
126697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i64:
127697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
128697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
130697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
131697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
132697c1883SKrzysztof Drewniak;
133697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i64:
134697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
135697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
136697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
137697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
138697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
139697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
140697c1883SKrzysztof Drewniak  %ret = load i64, ptr addrspace(7) %p
141697c1883SKrzysztof Drewniak  ret i64 %ret
142697c1883SKrzysztof Drewniak}
143697c1883SKrzysztof Drewniak
144697c1883SKrzysztof Drewniakdefine void @store_i64(i64 %data, ptr addrspace(8) inreg %buf) {
145697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i64:
146697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
147697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
148697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
149697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
150697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
151697c1883SKrzysztof Drewniak;
152697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i64:
153697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
154697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
155697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
156697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
157697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
158697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
159697c1883SKrzysztof Drewniak  store i64 %data, ptr addrspace(7) %p
160697c1883SKrzysztof Drewniak  ret void
161697c1883SKrzysztof Drewniak}
162697c1883SKrzysztof Drewniak
163697c1883SKrzysztof Drewniakdefine i128 @load_i128(ptr addrspace(8) inreg %buf) {
164697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i128:
165697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
166697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
168697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
169697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
170697c1883SKrzysztof Drewniak;
171697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i128:
172697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
173697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
174697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
175697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
176697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
177697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
178697c1883SKrzysztof Drewniak  %ret = load i128, ptr addrspace(7) %p
179697c1883SKrzysztof Drewniak  ret i128 %ret
180697c1883SKrzysztof Drewniak}
181697c1883SKrzysztof Drewniak
182697c1883SKrzysztof Drewniakdefine void @store_i128(i128 %data, ptr addrspace(8) inreg %buf) {
183697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i128:
184697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
185697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
186697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
187697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
188697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
189697c1883SKrzysztof Drewniak;
190697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i128:
191697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
192697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
193697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
194697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
195697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
196697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
197697c1883SKrzysztof Drewniak  store i128 %data, ptr addrspace(7) %p
198697c1883SKrzysztof Drewniak  ret void
199697c1883SKrzysztof Drewniak}
200697c1883SKrzysztof Drewniak
201697c1883SKrzysztof Drewniakdefine <1 x i32> @load_v1i32(ptr addrspace(8) inreg %buf) {
202697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i32:
203697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
204697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
206697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
207697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
208697c1883SKrzysztof Drewniak;
209697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i32:
210697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
211697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
212697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
213697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
214697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
215697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
216697c1883SKrzysztof Drewniak  %ret = load <1 x i32>, ptr addrspace(7) %p
217697c1883SKrzysztof Drewniak  ret <1 x i32> %ret
218697c1883SKrzysztof Drewniak}
219697c1883SKrzysztof Drewniak
220697c1883SKrzysztof Drewniakdefine void @store_v1i32(<1 x i32> %data, ptr addrspace(8) inreg %buf) {
221697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i32:
222697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
223697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
224697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
225697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
226697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
227697c1883SKrzysztof Drewniak;
228697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i32:
229697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
230697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
232697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
233697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
234697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
235697c1883SKrzysztof Drewniak  store <1 x i32> %data, ptr addrspace(7) %p
236697c1883SKrzysztof Drewniak  ret void
237697c1883SKrzysztof Drewniak}
238697c1883SKrzysztof Drewniak
239697c1883SKrzysztof Drewniakdefine <2 x i32> @load_v2i32(ptr addrspace(8) inreg %buf) {
240697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i32:
241697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
242697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
244697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
245697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
246697c1883SKrzysztof Drewniak;
247697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i32:
248697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
249697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
250697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
251697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
252697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
253697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
254697c1883SKrzysztof Drewniak  %ret = load <2 x i32>, ptr addrspace(7) %p
255697c1883SKrzysztof Drewniak  ret <2 x i32> %ret
256697c1883SKrzysztof Drewniak}
257697c1883SKrzysztof Drewniak
258697c1883SKrzysztof Drewniakdefine void @store_v2i32(<2 x i32> %data, ptr addrspace(8) inreg %buf) {
259697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i32:
260697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
261697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
262697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
263697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
264697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
265697c1883SKrzysztof Drewniak;
266697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i32:
267697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
268697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
269697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
270697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
271697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
272697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
273697c1883SKrzysztof Drewniak  store <2 x i32> %data, ptr addrspace(7) %p
274697c1883SKrzysztof Drewniak  ret void
275697c1883SKrzysztof Drewniak}
276697c1883SKrzysztof Drewniak
277697c1883SKrzysztof Drewniakdefine <3 x i32> @load_v3i32(ptr addrspace(8) inreg %buf) {
278697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i32:
279697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
280697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
282697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
283697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
284697c1883SKrzysztof Drewniak;
285697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i32:
286697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
287697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
289697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
290697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
291697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
292697c1883SKrzysztof Drewniak  %ret = load <3 x i32>, ptr addrspace(7) %p
293697c1883SKrzysztof Drewniak  ret <3 x i32> %ret
294697c1883SKrzysztof Drewniak}
295697c1883SKrzysztof Drewniak
296697c1883SKrzysztof Drewniakdefine void @store_v3i32(<3 x i32> %data, ptr addrspace(8) inreg %buf) {
297697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i32:
298697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
299697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
300697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
301697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
302697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
303697c1883SKrzysztof Drewniak;
304697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i32:
305697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
306697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
308697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
309697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
310697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
311697c1883SKrzysztof Drewniak  store <3 x i32> %data, ptr addrspace(7) %p
312697c1883SKrzysztof Drewniak  ret void
313697c1883SKrzysztof Drewniak}
314697c1883SKrzysztof Drewniak
315697c1883SKrzysztof Drewniakdefine <4 x i32> @load_v4i32(ptr addrspace(8) inreg %buf) {
316697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i32:
317697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
318697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
319697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
320697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
321697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
322697c1883SKrzysztof Drewniak;
323697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i32:
324697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
325697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
326697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
327697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
328697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
329697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
330697c1883SKrzysztof Drewniak  %ret = load <4 x i32>, ptr addrspace(7) %p
331697c1883SKrzysztof Drewniak  ret <4 x i32> %ret
332697c1883SKrzysztof Drewniak}
333697c1883SKrzysztof Drewniak
334697c1883SKrzysztof Drewniakdefine void @store_v4i32(<4 x i32> %data, ptr addrspace(8) inreg %buf) {
335697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i32:
336697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
337697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
338697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
339697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
340697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
341697c1883SKrzysztof Drewniak;
342697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i32:
343697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
344697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
345697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
346697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
347697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
348697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
349697c1883SKrzysztof Drewniak  store <4 x i32> %data, ptr addrspace(7) %p
350697c1883SKrzysztof Drewniak  ret void
351697c1883SKrzysztof Drewniak}
352697c1883SKrzysztof Drewniak
353697c1883SKrzysztof Drewniakdefine <2 x i16> @load_v2i16(ptr addrspace(8) inreg %buf) {
354697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i16:
355697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
356697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
357697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
358697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
359697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
360697c1883SKrzysztof Drewniak;
361697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i16:
362697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
363697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
364697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
365697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
366697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
367697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
368697c1883SKrzysztof Drewniak  %ret = load <2 x i16>, ptr addrspace(7) %p
369697c1883SKrzysztof Drewniak  ret <2 x i16> %ret
370697c1883SKrzysztof Drewniak}
371697c1883SKrzysztof Drewniak
372697c1883SKrzysztof Drewniakdefine void @store_v2i16(<2 x i16> %data, ptr addrspace(8) inreg %buf) {
373697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i16:
374697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
375697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
376697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
377697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
378697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
379697c1883SKrzysztof Drewniak;
380697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i16:
381697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
382697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
383697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
384697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
385697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
386697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
387697c1883SKrzysztof Drewniak  store <2 x i16> %data, ptr addrspace(7) %p
388697c1883SKrzysztof Drewniak  ret void
389697c1883SKrzysztof Drewniak}
390697c1883SKrzysztof Drewniak
391697c1883SKrzysztof Drewniakdefine <4 x i16> @load_v4i16(ptr addrspace(8) inreg %buf) {
392697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i16:
393697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
394697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
396697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
397697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
398697c1883SKrzysztof Drewniak;
399697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i16:
400697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
401697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
402697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
403697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
404697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
405697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
406697c1883SKrzysztof Drewniak  %ret = load <4 x i16>, ptr addrspace(7) %p
407697c1883SKrzysztof Drewniak  ret <4 x i16> %ret
408697c1883SKrzysztof Drewniak}
409697c1883SKrzysztof Drewniak
410697c1883SKrzysztof Drewniakdefine void @store_v4i16(<4 x i16> %data, ptr addrspace(8) inreg %buf) {
411697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i16:
412697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
413697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
414697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
415697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
416697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
417697c1883SKrzysztof Drewniak;
418697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i16:
419697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
420697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
421697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
422697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
423697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
424697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
425697c1883SKrzysztof Drewniak  store <4 x i16> %data, ptr addrspace(7) %p
426697c1883SKrzysztof Drewniak  ret void
427697c1883SKrzysztof Drewniak}
428697c1883SKrzysztof Drewniak
429697c1883SKrzysztof Drewniakdefine <8 x i16> @load_v8i16(ptr addrspace(8) inreg %buf) {
430697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i16:
431697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
432697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
433697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
434697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
435697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
436697c1883SKrzysztof Drewniak;
437697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i16:
438697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
439697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
440697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
441697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
442697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
443697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
444697c1883SKrzysztof Drewniak  %ret = load <8 x i16>, ptr addrspace(7) %p
445697c1883SKrzysztof Drewniak  ret <8 x i16> %ret
446697c1883SKrzysztof Drewniak}
447697c1883SKrzysztof Drewniak
448697c1883SKrzysztof Drewniakdefine void @store_v8i16(<8 x i16> %data, ptr addrspace(8) inreg %buf) {
449697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i16:
450697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
451697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
452697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
453697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
454697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
455697c1883SKrzysztof Drewniak;
456697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i16:
457697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
458697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
459697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
460697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
461697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
462697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
463697c1883SKrzysztof Drewniak  store <8 x i16> %data, ptr addrspace(7) %p
464697c1883SKrzysztof Drewniak  ret void
465697c1883SKrzysztof Drewniak}
466697c1883SKrzysztof Drewniak
467697c1883SKrzysztof Drewniakdefine <2 x i64> @load_v2i64(ptr addrspace(8) inreg %buf) {
468697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i64:
469697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
470697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
472697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
473697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
474697c1883SKrzysztof Drewniak;
475697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i64:
476697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
477697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
478697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
479697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
480697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
481697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
482697c1883SKrzysztof Drewniak  %ret = load <2 x i64>, ptr addrspace(7) %p
483697c1883SKrzysztof Drewniak  ret <2 x i64> %ret
484697c1883SKrzysztof Drewniak}
485697c1883SKrzysztof Drewniak
486697c1883SKrzysztof Drewniakdefine void @store_v2i64(<2 x i64> %data, ptr addrspace(8) inreg %buf) {
487697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i64:
488697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
489697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
491697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
492697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
493697c1883SKrzysztof Drewniak;
494697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i64:
495697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
496697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
497697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
498697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
499697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
500697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
501697c1883SKrzysztof Drewniak  store <2 x i64> %data, ptr addrspace(7) %p
502697c1883SKrzysztof Drewniak  ret void
503697c1883SKrzysztof Drewniak}
504697c1883SKrzysztof Drewniak
505697c1883SKrzysztof Drewniakdefine half @load_f16(ptr addrspace(8) inreg %buf) {
506697c1883SKrzysztof Drewniak; SDAG-LABEL: load_f16:
507697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
508697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
509697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
510697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
511697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
512697c1883SKrzysztof Drewniak;
513697c1883SKrzysztof Drewniak; GISEL-LABEL: load_f16:
514697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
515697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
516697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
517697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
518697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
519697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
520697c1883SKrzysztof Drewniak  %ret = load half, ptr addrspace(7) %p
521697c1883SKrzysztof Drewniak  ret half %ret
522697c1883SKrzysztof Drewniak}
523697c1883SKrzysztof Drewniak
524697c1883SKrzysztof Drewniakdefine void @store_f16(half %data, ptr addrspace(8) inreg %buf) {
525697c1883SKrzysztof Drewniak; SDAG-LABEL: store_f16:
526697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
527697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
528697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
529697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
530697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
531697c1883SKrzysztof Drewniak;
532697c1883SKrzysztof Drewniak; GISEL-LABEL: store_f16:
533697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
534697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
535697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
536697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
537697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
538697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
539697c1883SKrzysztof Drewniak  store half %data, ptr addrspace(7) %p
540697c1883SKrzysztof Drewniak  ret void
541697c1883SKrzysztof Drewniak}
542697c1883SKrzysztof Drewniak
543697c1883SKrzysztof Drewniakdefine bfloat @load_bf16(ptr addrspace(8) inreg %buf) {
544697c1883SKrzysztof Drewniak; SDAG-LABEL: load_bf16:
545697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
546697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
547697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
548697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
549697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
550697c1883SKrzysztof Drewniak;
551697c1883SKrzysztof Drewniak; GISEL-LABEL: load_bf16:
552697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
553697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
554697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
555697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
556697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
557697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
558697c1883SKrzysztof Drewniak  %ret = load bfloat, ptr addrspace(7) %p
559697c1883SKrzysztof Drewniak  ret bfloat %ret
560697c1883SKrzysztof Drewniak}
561697c1883SKrzysztof Drewniak
562697c1883SKrzysztof Drewniakdefine void @store_bf16(bfloat %data, ptr addrspace(8) inreg %buf) {
563697c1883SKrzysztof Drewniak; SDAG-LABEL: store_bf16:
564697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
565697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
566697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
567697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
568697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
569697c1883SKrzysztof Drewniak;
570697c1883SKrzysztof Drewniak; GISEL-LABEL: store_bf16:
571697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
572697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
573697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
574697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
575697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
576697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
577697c1883SKrzysztof Drewniak  store bfloat %data, ptr addrspace(7) %p
578697c1883SKrzysztof Drewniak  ret void
579697c1883SKrzysztof Drewniak}
580697c1883SKrzysztof Drewniak
581697c1883SKrzysztof Drewniakdefine <2 x half> @load_v2f16(ptr addrspace(8) inreg %buf) {
582697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2f16:
583697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
584697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
585697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
586697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
587697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
588697c1883SKrzysztof Drewniak;
589697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2f16:
590697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
591697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
592697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
593697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
594697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
595697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
596697c1883SKrzysztof Drewniak  %ret = load <2 x half>, ptr addrspace(7) %p
597697c1883SKrzysztof Drewniak  ret <2 x half> %ret
598697c1883SKrzysztof Drewniak}
599697c1883SKrzysztof Drewniak
600697c1883SKrzysztof Drewniakdefine void @store_v2f16(<2 x half> %data, ptr addrspace(8) inreg %buf) {
601697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2f16:
602697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
603697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
604697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
605697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
606697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
607697c1883SKrzysztof Drewniak;
608697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2f16:
609697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
610697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
611697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
612697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
613697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
614697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
615697c1883SKrzysztof Drewniak  store <2 x half> %data, ptr addrspace(7) %p
616697c1883SKrzysztof Drewniak  ret void
617697c1883SKrzysztof Drewniak}
618697c1883SKrzysztof Drewniak
619697c1883SKrzysztof Drewniakdefine <4 x bfloat> @load_v4bf16(ptr addrspace(8) inreg %buf) {
620697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4bf16:
621697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
622697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
623697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
624697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
625697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
626697c1883SKrzysztof Drewniak;
627697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4bf16:
628697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
629697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
630697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
631697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
632697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
633697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
634697c1883SKrzysztof Drewniak  %ret = load <4 x bfloat>, ptr addrspace(7) %p
635697c1883SKrzysztof Drewniak  ret <4 x bfloat> %ret
636697c1883SKrzysztof Drewniak}
637697c1883SKrzysztof Drewniak
638697c1883SKrzysztof Drewniakdefine void @store_v4bf16(<4 x bfloat> %data, ptr addrspace(8) inreg %buf) {
639697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4bf16:
640697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
641697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
642697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
643697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
644697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
645697c1883SKrzysztof Drewniak;
646697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4bf16:
647697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
648697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
649697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
650697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
651697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
652697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
653697c1883SKrzysztof Drewniak  store <4 x bfloat> %data, ptr addrspace(7) %p
654697c1883SKrzysztof Drewniak  ret void
655697c1883SKrzysztof Drewniak}
656697c1883SKrzysztof Drewniak
657697c1883SKrzysztof Drewniakdefine <8 x half> @load_v8f16(ptr addrspace(8) inreg %buf) {
658697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8f16:
659697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
660697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
661697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
662697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
663697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
664697c1883SKrzysztof Drewniak;
665697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8f16:
666697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
667697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
668697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
669697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
670697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
671697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
672697c1883SKrzysztof Drewniak  %ret = load <8 x half>, ptr addrspace(7) %p
673697c1883SKrzysztof Drewniak  ret <8 x half> %ret
674697c1883SKrzysztof Drewniak}
675697c1883SKrzysztof Drewniak
676697c1883SKrzysztof Drewniakdefine void @store_v8f16(<8 x half> %data, ptr addrspace(8) inreg %buf) {
677697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8f16:
678697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
679697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
680697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
681697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
682697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
683697c1883SKrzysztof Drewniak;
684697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8f16:
685697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
686697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
687697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
688697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
689697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
690697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
691697c1883SKrzysztof Drewniak  store <8 x half> %data, ptr addrspace(7) %p
692697c1883SKrzysztof Drewniak  ret void
693697c1883SKrzysztof Drewniak}
694697c1883SKrzysztof Drewniak
695697c1883SKrzysztof Drewniakdefine float @load_f32(ptr addrspace(8) inreg %buf) {
696697c1883SKrzysztof Drewniak; SDAG-LABEL: load_f32:
697697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
698697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
699697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
700697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
701697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
702697c1883SKrzysztof Drewniak;
703697c1883SKrzysztof Drewniak; GISEL-LABEL: load_f32:
704697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
705697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
706697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
707697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
708697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
709697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
710697c1883SKrzysztof Drewniak  %ret = load float, ptr addrspace(7) %p
711697c1883SKrzysztof Drewniak  ret float %ret
712697c1883SKrzysztof Drewniak}
713697c1883SKrzysztof Drewniak
714697c1883SKrzysztof Drewniakdefine void @store_f32(float %data, ptr addrspace(8) inreg %buf) {
715697c1883SKrzysztof Drewniak; SDAG-LABEL: store_f32:
716697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
717697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
718697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
719697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
720697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
721697c1883SKrzysztof Drewniak;
722697c1883SKrzysztof Drewniak; GISEL-LABEL: store_f32:
723697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
724697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
725697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
726697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
727697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
728697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
729697c1883SKrzysztof Drewniak  store float %data, ptr addrspace(7) %p
730697c1883SKrzysztof Drewniak  ret void
731697c1883SKrzysztof Drewniak}
732697c1883SKrzysztof Drewniak
733697c1883SKrzysztof Drewniakdefine <2 x float> @load_v2f32(ptr addrspace(8) inreg %buf) {
734697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2f32:
735697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
736697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
737697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
738697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
739697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
740697c1883SKrzysztof Drewniak;
741697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2f32:
742697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
743697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
744697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
745697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
746697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
747697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
748697c1883SKrzysztof Drewniak  %ret = load <2 x float>, ptr addrspace(7) %p
749697c1883SKrzysztof Drewniak  ret <2 x float> %ret
750697c1883SKrzysztof Drewniak}
751697c1883SKrzysztof Drewniak
752697c1883SKrzysztof Drewniakdefine void @store_v2f32(<2 x float> %data, ptr addrspace(8) inreg %buf) {
753697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2f32:
754697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
755697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
756697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
757697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
758697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
759697c1883SKrzysztof Drewniak;
760697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2f32:
761697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
762697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
763697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
764697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
765697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
766697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
767697c1883SKrzysztof Drewniak  store <2 x float> %data, ptr addrspace(7) %p
768697c1883SKrzysztof Drewniak  ret void
769697c1883SKrzysztof Drewniak}
770697c1883SKrzysztof Drewniak
771697c1883SKrzysztof Drewniakdefine <3 x float> @load_v3f32(ptr addrspace(8) inreg %buf) {
772697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3f32:
773697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
774697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
775697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
776697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
777697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
778697c1883SKrzysztof Drewniak;
779697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3f32:
780697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
781697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
782697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
783697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
784697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
785697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
786697c1883SKrzysztof Drewniak  %ret = load <3 x float>, ptr addrspace(7) %p
787697c1883SKrzysztof Drewniak  ret <3 x float> %ret
788697c1883SKrzysztof Drewniak}
789697c1883SKrzysztof Drewniak
790697c1883SKrzysztof Drewniakdefine void @store_v3f32(<3 x float> %data, ptr addrspace(8) inreg %buf) {
791697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3f32:
792697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
793697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
794697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
795697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
796697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
797697c1883SKrzysztof Drewniak;
798697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3f32:
799697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
800697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
801697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
802697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
803697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
804697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
805697c1883SKrzysztof Drewniak  store <3 x float> %data, ptr addrspace(7) %p
806697c1883SKrzysztof Drewniak  ret void
807697c1883SKrzysztof Drewniak}
808697c1883SKrzysztof Drewniak
809697c1883SKrzysztof Drewniakdefine <4 x float> @load_v4f32(ptr addrspace(8) inreg %buf) {
810697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4f32:
811697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
812697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
813697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
814697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
815697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
816697c1883SKrzysztof Drewniak;
817697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4f32:
818697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
819697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
820697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
821697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
822697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
823697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
824697c1883SKrzysztof Drewniak  %ret = load <4 x float>, ptr addrspace(7) %p
825697c1883SKrzysztof Drewniak  ret <4 x float> %ret
826697c1883SKrzysztof Drewniak}
827697c1883SKrzysztof Drewniak
828697c1883SKrzysztof Drewniakdefine void @store_v4f32(<4 x float> %data, ptr addrspace(8) inreg %buf) {
829697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4f32:
830697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
831697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
832697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
833697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
834697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
835697c1883SKrzysztof Drewniak;
836697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4f32:
837697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
838697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
839697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
840697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
841697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
842697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
843697c1883SKrzysztof Drewniak  store <4 x float> %data, ptr addrspace(7) %p
844697c1883SKrzysztof Drewniak  ret void
845697c1883SKrzysztof Drewniak}
846697c1883SKrzysztof Drewniak
847697c1883SKrzysztof Drewniakdefine ptr addrspace(0) @load_p0(ptr addrspace(8) inreg %buf) {
848697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p0:
849697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
850697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
851697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
852697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
853697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
854697c1883SKrzysztof Drewniak;
855697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p0:
856697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
857697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
858697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
859697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
860697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
861697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
862697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(0), ptr addrspace(7) %p
863697c1883SKrzysztof Drewniak  ret ptr addrspace(0) %ret
864697c1883SKrzysztof Drewniak}
865697c1883SKrzysztof Drewniak
866697c1883SKrzysztof Drewniakdefine void @store_p0(ptr addrspace(0) %data, ptr addrspace(8) inreg %buf) {
867697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p0:
868697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
869697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
870697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
871697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
872697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
873697c1883SKrzysztof Drewniak;
874697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p0:
875697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
876697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
877697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
878697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
879697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
880697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
881697c1883SKrzysztof Drewniak  store ptr addrspace(0) %data, ptr addrspace(7) %p
882697c1883SKrzysztof Drewniak  ret void
883697c1883SKrzysztof Drewniak}
884697c1883SKrzysztof Drewniak
885697c1883SKrzysztof Drewniakdefine ptr addrspace(1) @load_p1(ptr addrspace(8) inreg %buf) {
886697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p1:
887697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
888697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
889697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
890697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
891697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
892697c1883SKrzysztof Drewniak;
893697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p1:
894697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
895697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
896697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
897697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
898697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
899697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
900697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(1), ptr addrspace(7) %p
901697c1883SKrzysztof Drewniak  ret ptr addrspace(1) %ret
902697c1883SKrzysztof Drewniak}
903697c1883SKrzysztof Drewniak
904697c1883SKrzysztof Drewniakdefine void @store_p1(ptr addrspace(1) %data, ptr addrspace(8) inreg %buf) {
905697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p1:
906697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
907697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
908697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
909697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
910697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
911697c1883SKrzysztof Drewniak;
912697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p1:
913697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
914697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
915697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
916697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
917697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
918697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
919697c1883SKrzysztof Drewniak  store ptr addrspace(1) %data, ptr addrspace(7) %p
920697c1883SKrzysztof Drewniak  ret void
921697c1883SKrzysztof Drewniak}
922697c1883SKrzysztof Drewniak
923697c1883SKrzysztof Drewniakdefine ptr addrspace(2) @load_p2(ptr addrspace(8) inreg %buf) {
924697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p2:
925697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
926697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
927697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
928697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
929697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
930697c1883SKrzysztof Drewniak;
931697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p2:
932697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
933697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
934697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
935697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
936697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
937697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
938697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(2), ptr addrspace(7) %p
939697c1883SKrzysztof Drewniak  ret ptr addrspace(2) %ret
940697c1883SKrzysztof Drewniak}
941697c1883SKrzysztof Drewniak
942697c1883SKrzysztof Drewniakdefine void @store_p2(ptr addrspace(2) %data, ptr addrspace(8) inreg %buf) {
943697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p2:
944697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
945697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
946697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
947697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
948697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
949697c1883SKrzysztof Drewniak;
950697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p2:
951697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
952697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
953697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
954697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
955697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
956697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
957697c1883SKrzysztof Drewniak  store ptr addrspace(2) %data, ptr addrspace(7) %p
958697c1883SKrzysztof Drewniak  ret void
959697c1883SKrzysztof Drewniak}
960697c1883SKrzysztof Drewniak
961697c1883SKrzysztof Drewniakdefine ptr addrspace(3) @load_p3(ptr addrspace(8) inreg %buf) {
962697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p3:
963697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
964697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
965697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
966697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
967697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
968697c1883SKrzysztof Drewniak;
969697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p3:
970697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
971697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
972697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
973697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
974697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
975697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
976697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(3), ptr addrspace(7) %p
977697c1883SKrzysztof Drewniak  ret ptr addrspace(3) %ret
978697c1883SKrzysztof Drewniak}
979697c1883SKrzysztof Drewniak
980697c1883SKrzysztof Drewniakdefine void @store_p3(ptr addrspace(3) %data, ptr addrspace(8) inreg %buf) {
981697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p3:
982697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
983697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
984697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
985697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
986697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
987697c1883SKrzysztof Drewniak;
988697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p3:
989697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
990697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
991697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
992697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
993697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
994697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
995697c1883SKrzysztof Drewniak  store ptr addrspace(3) %data, ptr addrspace(7) %p
996697c1883SKrzysztof Drewniak  ret void
997697c1883SKrzysztof Drewniak}
998697c1883SKrzysztof Drewniak
999697c1883SKrzysztof Drewniakdefine ptr addrspace(4) @load_p4(ptr addrspace(8) inreg %buf) {
1000697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p4:
1001697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1002697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1003697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1004697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1005697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1006697c1883SKrzysztof Drewniak;
1007697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p4:
1008697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1009697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1010697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1011697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1012697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1013697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1014697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(4), ptr addrspace(7) %p
1015697c1883SKrzysztof Drewniak  ret ptr addrspace(4) %ret
1016697c1883SKrzysztof Drewniak}
1017697c1883SKrzysztof Drewniak
1018697c1883SKrzysztof Drewniakdefine void @store_p4(ptr addrspace(4) %data, ptr addrspace(8) inreg %buf) {
1019697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p4:
1020697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1021697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1022697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1023697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1024697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1025697c1883SKrzysztof Drewniak;
1026697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p4:
1027697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1028697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1029697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1030697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1031697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1032697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1033697c1883SKrzysztof Drewniak  store ptr addrspace(4) %data, ptr addrspace(7) %p
1034697c1883SKrzysztof Drewniak  ret void
1035697c1883SKrzysztof Drewniak}
1036697c1883SKrzysztof Drewniak
1037697c1883SKrzysztof Drewniakdefine ptr addrspace(5) @load_p5(ptr addrspace(8) inreg %buf) {
1038697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p5:
1039697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1040697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1041697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1042697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1043697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1044697c1883SKrzysztof Drewniak;
1045697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p5:
1046697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1047697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1049697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1050697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1051697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1052697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(5), ptr addrspace(7) %p
1053697c1883SKrzysztof Drewniak  ret ptr addrspace(5) %ret
1054697c1883SKrzysztof Drewniak}
1055697c1883SKrzysztof Drewniak
1056697c1883SKrzysztof Drewniakdefine void @store_p5(ptr addrspace(5) %data, ptr addrspace(8) inreg %buf) {
1057697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p5:
1058697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1059697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1060697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1061697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1062697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1063697c1883SKrzysztof Drewniak;
1064697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p5:
1065697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1066697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1067697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1068697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1069697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1070697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1071697c1883SKrzysztof Drewniak  store ptr addrspace(5) %data, ptr addrspace(7) %p
1072697c1883SKrzysztof Drewniak  ret void
1073697c1883SKrzysztof Drewniak}
1074697c1883SKrzysztof Drewniak
1075697c1883SKrzysztof Drewniakdefine ptr addrspace(6) @load_p6(ptr addrspace(8) inreg %buf) {
1076697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p6:
1077697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1078697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1079697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1080697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1081697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1082697c1883SKrzysztof Drewniak;
1083697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p6:
1084697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1085697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1087697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1088697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1089697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1090697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(6), ptr addrspace(7) %p
1091697c1883SKrzysztof Drewniak  ret ptr addrspace(6) %ret
1092697c1883SKrzysztof Drewniak}
1093697c1883SKrzysztof Drewniak
1094697c1883SKrzysztof Drewniakdefine void @store_p6(ptr addrspace(6) %data, ptr addrspace(8) inreg %buf) {
1095697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p6:
1096697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1097697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1098697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1099697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1100697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1101697c1883SKrzysztof Drewniak;
1102697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p6:
1103697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1104697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1105697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1106697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1107697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1108697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1109697c1883SKrzysztof Drewniak  store ptr addrspace(6) %data, ptr addrspace(7) %p
1110697c1883SKrzysztof Drewniak  ret void
1111697c1883SKrzysztof Drewniak}
1112697c1883SKrzysztof Drewniak
1113697c1883SKrzysztof Drewniakdefine ptr addrspace(8) @load_p8(ptr addrspace(8) inreg %buf) {
1114697c1883SKrzysztof Drewniak; SDAG-LABEL: load_p8:
1115697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1116697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1117697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1118697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1119697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1120697c1883SKrzysztof Drewniak;
1121697c1883SKrzysztof Drewniak; GISEL-LABEL: load_p8:
1122697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1123697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1124697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1125697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1126697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1127697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1128697c1883SKrzysztof Drewniak  %ret = load ptr addrspace(8), ptr addrspace(7) %p
1129697c1883SKrzysztof Drewniak  ret ptr addrspace(8) %ret
1130697c1883SKrzysztof Drewniak}
1131697c1883SKrzysztof Drewniak
1132697c1883SKrzysztof Drewniakdefine void @store_p8(ptr addrspace(8) %data, ptr addrspace(8) inreg %buf) {
1133697c1883SKrzysztof Drewniak; SDAG-LABEL: store_p8:
1134697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1135697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1136697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1137697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1138697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1139697c1883SKrzysztof Drewniak;
1140697c1883SKrzysztof Drewniak; GISEL-LABEL: store_p8:
1141697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1142697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1143697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1144697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1145697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1146697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1147697c1883SKrzysztof Drewniak  store ptr addrspace(8) %data, ptr addrspace(7) %p
1148697c1883SKrzysztof Drewniak  ret void
1149697c1883SKrzysztof Drewniak}
1150697c1883SKrzysztof Drewniak
1151697c1883SKrzysztof Drewniakdefine <2 x ptr addrspace(1)> @load_v2p1(ptr addrspace(8) inreg %buf) {
1152697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2p1:
1153697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1154697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1155697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1156697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1157697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1158697c1883SKrzysztof Drewniak;
1159697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2p1:
1160697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1161697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1162697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1163697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1164697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1165697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1166697c1883SKrzysztof Drewniak  %ret = load <2 x ptr addrspace(1)>, ptr addrspace(7) %p
1167697c1883SKrzysztof Drewniak  ret <2 x ptr addrspace(1)> %ret
1168697c1883SKrzysztof Drewniak}
1169697c1883SKrzysztof Drewniak
1170697c1883SKrzysztof Drewniakdefine void @store_v2p1(<2 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) {
1171697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2p1:
1172697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1173697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1174697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1175697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1176697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1177697c1883SKrzysztof Drewniak;
1178697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2p1:
1179697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1180697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1181697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1182697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1183697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1184697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1185697c1883SKrzysztof Drewniak  store <2 x ptr addrspace(1)> %data, ptr addrspace(7) %p
1186697c1883SKrzysztof Drewniak  ret void
1187697c1883SKrzysztof Drewniak}
1188697c1883SKrzysztof Drewniak
1189697c1883SKrzysztof Drewniakdefine <2 x ptr addrspace(5)> @load_v2p5(ptr addrspace(8) inreg %buf) {
1190697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2p5:
1191697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1192697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1193697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1194697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1195697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1196697c1883SKrzysztof Drewniak;
1197697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2p5:
1198697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1199697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1200697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1201697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1202697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1203697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1204697c1883SKrzysztof Drewniak  %ret = load <2 x ptr addrspace(5)>, ptr addrspace(7) %p
1205697c1883SKrzysztof Drewniak  ret <2 x ptr addrspace(5)> %ret
1206697c1883SKrzysztof Drewniak}
1207697c1883SKrzysztof Drewniak
1208697c1883SKrzysztof Drewniakdefine void @store_v2p5(<2 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1209697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2p5:
1210697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1211697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1212697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1213697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1214697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1215697c1883SKrzysztof Drewniak;
1216697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2p5:
1217697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1218697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1219697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1220697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1221697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1222697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1223697c1883SKrzysztof Drewniak  store <2 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1224697c1883SKrzysztof Drewniak  ret void
1225697c1883SKrzysztof Drewniak}
1226697c1883SKrzysztof Drewniak
1227697c1883SKrzysztof Drewniakdefine <3 x ptr addrspace(5)> @load_v3p5(ptr addrspace(8) inreg %buf) {
1228697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3p5:
1229697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1230697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1231697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1232697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1233697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1234697c1883SKrzysztof Drewniak;
1235697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3p5:
1236697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1237697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1238697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1239697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1240697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1241697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1242697c1883SKrzysztof Drewniak  %ret = load <3 x ptr addrspace(5)>, ptr addrspace(7) %p
1243697c1883SKrzysztof Drewniak  ret <3 x ptr addrspace(5)> %ret
1244697c1883SKrzysztof Drewniak}
1245697c1883SKrzysztof Drewniak
1246697c1883SKrzysztof Drewniakdefine void @store_v3p5(<3 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1247697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3p5:
1248697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1249697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1250697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1251697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1252697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1253697c1883SKrzysztof Drewniak;
1254697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3p5:
1255697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1256697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1257697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1258697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1259697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1260697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1261697c1883SKrzysztof Drewniak  store <3 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1262697c1883SKrzysztof Drewniak  ret void
1263697c1883SKrzysztof Drewniak}
1264697c1883SKrzysztof Drewniak
1265697c1883SKrzysztof Drewniakdefine <4 x ptr addrspace(5)> @load_v4p5(ptr addrspace(8) inreg %buf) {
1266697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4p5:
1267697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1268697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1269697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1270697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1271697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1272697c1883SKrzysztof Drewniak;
1273697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4p5:
1274697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1275697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1276697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1277697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1278697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1279697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1280697c1883SKrzysztof Drewniak  %ret = load <4 x ptr addrspace(5)>, ptr addrspace(7) %p
1281697c1883SKrzysztof Drewniak  ret <4 x ptr addrspace(5)> %ret
1282697c1883SKrzysztof Drewniak}
1283697c1883SKrzysztof Drewniak
1284697c1883SKrzysztof Drewniakdefine void @store_v4p5(<4 x ptr addrspace(5)> %data, ptr addrspace(8) inreg %buf) {
1285697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4p5:
1286697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1287697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1288697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1289697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1290697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1291697c1883SKrzysztof Drewniak;
1292697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4p5:
1293697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1294697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1295697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1296697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1297697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1298697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1299697c1883SKrzysztof Drewniak  store <4 x ptr addrspace(5)> %data, ptr addrspace(7) %p
1300697c1883SKrzysztof Drewniak  ret void
1301697c1883SKrzysztof Drewniak}
1302697c1883SKrzysztof Drewniak
1303697c1883SKrzysztof Drewniak;;; 3 words in a short type. These need to be bitcast to <3 x i32> to be supported.
1304697c1883SKrzysztof Drewniak
1305697c1883SKrzysztof Drewniakdefine <6 x half> @load_v6f16(ptr addrspace(8) inreg %buf) {
1306697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6f16:
1307697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1308697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1309697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1310697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1311697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1312697c1883SKrzysztof Drewniak;
1313697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6f16:
1314697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1315697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1316697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1317697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1318697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1319697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1320697c1883SKrzysztof Drewniak  %ret = load <6 x half>, ptr addrspace(7) %p
1321697c1883SKrzysztof Drewniak  ret <6 x half> %ret
1322697c1883SKrzysztof Drewniak}
1323697c1883SKrzysztof Drewniak
1324697c1883SKrzysztof Drewniakdefine void @store_v6f16(<6 x half> %data, ptr addrspace(8) inreg %buf) {
1325697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6f16:
1326697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1327697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1328697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1329697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1330697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1331697c1883SKrzysztof Drewniak;
1332697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6f16:
1333697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1334697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1335697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1336697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1337697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1338697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1339697c1883SKrzysztof Drewniak  store <6 x half> %data, ptr addrspace(7) %p
1340697c1883SKrzysztof Drewniak  ret void
1341697c1883SKrzysztof Drewniak}
1342697c1883SKrzysztof Drewniak
1343697c1883SKrzysztof Drewniak;;; Long types (32 bit elements). Must be split into multiple operations.
1344697c1883SKrzysztof Drewniak
1345697c1883SKrzysztof Drewniakdefine <5 x float> @load_v5f32(ptr addrspace(8) inreg %buf) {
1346697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5f32:
1347697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1348697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1349697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1350697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v4, off, s[16:19], 0 offset:16
1351697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1352697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1353697c1883SKrzysztof Drewniak;
1354697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5f32:
1355697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1356697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1357697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1358697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v4, off, s[16:19], 0 offset:16
1359697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1360697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1361697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1362697c1883SKrzysztof Drewniak  %ret = load <5 x float>, ptr addrspace(7) %p
1363697c1883SKrzysztof Drewniak  ret <5 x float> %ret
1364697c1883SKrzysztof Drewniak}
1365697c1883SKrzysztof Drewniak
1366697c1883SKrzysztof Drewniakdefine void @store_v5f32(<5 x float> %data, ptr addrspace(8) inreg %buf) {
1367697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5f32:
1368697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1369697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1370697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1371697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
1372697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1373697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1374697c1883SKrzysztof Drewniak;
1375697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5f32:
1376697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1377697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1378697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1379697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
1380697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1381697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1382697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1383697c1883SKrzysztof Drewniak  store <5 x float> %data, ptr addrspace(7) %p
1384697c1883SKrzysztof Drewniak  ret void
1385697c1883SKrzysztof Drewniak}
1386697c1883SKrzysztof Drewniak
1387697c1883SKrzysztof Drewniakdefine <6 x float> @load_v6f32(ptr addrspace(8) inreg %buf) {
1388697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6f32:
1389697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1390697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1391697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1392697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1393697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1394697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1395697c1883SKrzysztof Drewniak;
1396697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6f32:
1397697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1398697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1399697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1400697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1401697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1402697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1403697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1404697c1883SKrzysztof Drewniak  %ret = load <6 x float>, ptr addrspace(7) %p
1405697c1883SKrzysztof Drewniak  ret <6 x float> %ret
1406697c1883SKrzysztof Drewniak}
1407697c1883SKrzysztof Drewniak
1408697c1883SKrzysztof Drewniakdefine void @store_v6f32(<6 x float> %data, ptr addrspace(8) inreg %buf) {
1409697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6f32:
1410697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1411697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1412697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1413697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1414697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1415697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1416697c1883SKrzysztof Drewniak;
1417697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6f32:
1418697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1419697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1420697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1421697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1422697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1423697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1424697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1425697c1883SKrzysztof Drewniak  store <6 x float> %data, ptr addrspace(7) %p
1426697c1883SKrzysztof Drewniak  ret void
1427697c1883SKrzysztof Drewniak}
1428697c1883SKrzysztof Drewniak
1429697c1883SKrzysztof Drewniakdefine <7 x float> @load_v7f32(ptr addrspace(8) inreg %buf) {
1430697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7f32:
1431697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1432697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1433697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1434697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1435697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1436697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1437697c1883SKrzysztof Drewniak;
1438697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7f32:
1439697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1440697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1441697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1442697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1443697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1444697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1445697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1446697c1883SKrzysztof Drewniak  %ret = load <7 x float>, ptr addrspace(7) %p
1447697c1883SKrzysztof Drewniak  ret <7 x float> %ret
1448697c1883SKrzysztof Drewniak}
1449697c1883SKrzysztof Drewniak
1450697c1883SKrzysztof Drewniakdefine void @store_v7f32(<7 x float> %data, ptr addrspace(8) inreg %buf) {
1451697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7f32:
1452697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1453697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1454697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1455697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1456697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1457697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1458697c1883SKrzysztof Drewniak;
1459697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7f32:
1460697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1461697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1462697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1463697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[4:6], off, s[16:19], 0 offset:16
1464697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1465697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1466697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1467697c1883SKrzysztof Drewniak  store <7 x float> %data, ptr addrspace(7) %p
1468697c1883SKrzysztof Drewniak  ret void
1469697c1883SKrzysztof Drewniak}
1470697c1883SKrzysztof Drewniak
1471697c1883SKrzysztof Drewniakdefine <8 x float> @load_v8f32(ptr addrspace(8) inreg %buf) {
1472697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8f32:
1473697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1474697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1475697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1476697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1477697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1478697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1479697c1883SKrzysztof Drewniak;
1480697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8f32:
1481697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1482697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1484697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1485697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1486697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1487697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1488697c1883SKrzysztof Drewniak  %ret = load <8 x float>, ptr addrspace(7) %p
1489697c1883SKrzysztof Drewniak  ret <8 x float> %ret
1490697c1883SKrzysztof Drewniak}
1491697c1883SKrzysztof Drewniak
1492697c1883SKrzysztof Drewniakdefine void @store_v8f32(<8 x float> %data, ptr addrspace(8) inreg %buf) {
1493697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8f32:
1494697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1495697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1496697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1497697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1498697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1499697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1500697c1883SKrzysztof Drewniak;
1501697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8f32:
1502697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1503697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1504697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1505697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1506697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1507697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1508697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1509697c1883SKrzysztof Drewniak  store <8 x float> %data, ptr addrspace(7) %p
1510697c1883SKrzysztof Drewniak  ret void
1511697c1883SKrzysztof Drewniak}
1512697c1883SKrzysztof Drewniak
1513697c1883SKrzysztof Drewniakdefine <10 x float> @load_v10f32(ptr addrspace(8) inreg %buf) {
1514697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v10f32:
1515697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1516697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1517697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1518697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1519697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1520697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1521697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1522697c1883SKrzysztof Drewniak;
1523697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v10f32:
1524697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1525697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1526697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1527697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1528697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1529697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1530697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1531697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1532697c1883SKrzysztof Drewniak  %ret = load <10 x float>, ptr addrspace(7) %p
1533697c1883SKrzysztof Drewniak  ret <10 x float> %ret
1534697c1883SKrzysztof Drewniak}
1535697c1883SKrzysztof Drewniak
1536697c1883SKrzysztof Drewniakdefine void @store_v10f32(<10 x float> %data, ptr addrspace(8) inreg %buf) {
1537697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v10f32:
1538697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1539697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1540697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1541697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1542697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1543697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1544697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1545697c1883SKrzysztof Drewniak;
1546697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v10f32:
1547697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1548697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1549697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1550697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1551697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[8:9], off, s[16:19], 0 offset:32
1552697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1553697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1554697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1555697c1883SKrzysztof Drewniak  store <10 x float> %data, ptr addrspace(7) %p
1556697c1883SKrzysztof Drewniak  ret void
1557697c1883SKrzysztof Drewniak}
1558697c1883SKrzysztof Drewniak
1559697c1883SKrzysztof Drewniakdefine <6 x i32> @load_v6i32(ptr addrspace(8) inreg %buf) {
1560697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i32:
1561697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1562697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1563697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1564697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1565697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1566697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1567697c1883SKrzysztof Drewniak;
1568697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i32:
1569697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1570697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1571697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1572697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1573697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1574697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1575697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1576697c1883SKrzysztof Drewniak  %ret = load <6 x i32>, ptr addrspace(7) %p
1577697c1883SKrzysztof Drewniak  ret <6 x i32> %ret
1578697c1883SKrzysztof Drewniak}
1579697c1883SKrzysztof Drewniak
1580697c1883SKrzysztof Drewniakdefine void @store_v6i32(<6 x i32> %data, ptr addrspace(8) inreg %buf) {
1581697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i32:
1582697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1583697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1584697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1585697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1586697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1587697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1588697c1883SKrzysztof Drewniak;
1589697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i32:
1590697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1591697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1592697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1593697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
1594697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1595697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1596697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1597697c1883SKrzysztof Drewniak  store <6 x i32> %data, ptr addrspace(7) %p
1598697c1883SKrzysztof Drewniak  ret void
1599697c1883SKrzysztof Drewniak}
1600697c1883SKrzysztof Drewniak
1601697c1883SKrzysztof Drewniakdefine <4 x ptr addrspace(1)> @load_v4p1(ptr addrspace(8) inreg %buf) {
1602697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4p1:
1603697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1604697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1605697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1606697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1607697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1608697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1609697c1883SKrzysztof Drewniak;
1610697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4p1:
1611697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1612697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1613697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1614697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1615697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1616697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1617697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1618697c1883SKrzysztof Drewniak  %ret = load <4 x ptr addrspace(1)>, ptr addrspace(7) %p
1619697c1883SKrzysztof Drewniak  ret <4 x ptr addrspace(1)> %ret
1620697c1883SKrzysztof Drewniak}
1621697c1883SKrzysztof Drewniak
1622697c1883SKrzysztof Drewniakdefine void @store_v4p1(<4 x ptr addrspace(1)> %data, ptr addrspace(8) inreg %buf) {
1623697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4p1:
1624697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1625697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1626697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1627697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1628697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1629697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1630697c1883SKrzysztof Drewniak;
1631697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4p1:
1632697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1633697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1634697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1635697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
1636697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1637697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1638697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1639697c1883SKrzysztof Drewniak  store <4 x ptr addrspace(1)> %data, ptr addrspace(7) %p
1640697c1883SKrzysztof Drewniak  ret void
1641697c1883SKrzysztof Drewniak}
1642697c1883SKrzysztof Drewniak
1643697c1883SKrzysztof Drewniak;;; Uneven types with 16-bit elements. Require splitting into multiple operations.
1644697c1883SKrzysztof Drewniak
1645697c1883SKrzysztof Drewniakdefine <1 x i16> @load_v1i16(ptr addrspace(8) inreg %buf) {
1646697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i16:
1647697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1648697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1649697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
1650697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1651697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1652697c1883SKrzysztof Drewniak;
1653697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i16:
1654697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1655697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1656697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
1657697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1658697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1659697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1660697c1883SKrzysztof Drewniak  %ret = load <1 x i16>, ptr addrspace(7) %p
1661697c1883SKrzysztof Drewniak  ret <1 x i16> %ret
1662697c1883SKrzysztof Drewniak}
1663697c1883SKrzysztof Drewniak
1664697c1883SKrzysztof Drewniakdefine void @store_v1i16(<1 x i16> %data, ptr addrspace(8) inreg %buf) {
1665697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i16:
1666697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1667697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1668697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
1669697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1670697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1671697c1883SKrzysztof Drewniak;
1672697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i16:
1673697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1674697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1675697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
1676697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1677697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1678697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1679697c1883SKrzysztof Drewniak  store <1 x i16> %data, ptr addrspace(7) %p
1680697c1883SKrzysztof Drewniak  ret void
1681697c1883SKrzysztof Drewniak}
1682697c1883SKrzysztof Drewniak
1683697c1883SKrzysztof Drewniakdefine <3 x i16> @load_v3i16(ptr addrspace(8) inreg %buf) {
1684697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i16:
1685697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1686697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1687697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1688697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v1, off, s[16:19], 0 offset:4
1689697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1690697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1691697c1883SKrzysztof Drewniak;
1692697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i16:
1693697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1694697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1695697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
1696697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v1, off, s[16:19], 0 offset:4
1697697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1698697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1699697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1700697c1883SKrzysztof Drewniak  %ret = load <3 x i16>, ptr addrspace(7) %p
1701697c1883SKrzysztof Drewniak  ret <3 x i16> %ret
1702697c1883SKrzysztof Drewniak}
1703697c1883SKrzysztof Drewniak
1704697c1883SKrzysztof Drewniakdefine void @store_v3i16(<3 x i16> %data, ptr addrspace(8) inreg %buf) {
1705697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i16:
1706697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1707697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1708697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1709697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v1, off, s[16:19], 0 offset:4
1710697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1711697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1712697c1883SKrzysztof Drewniak;
1713697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i16:
1714697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1715697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1716697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
1717697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v1, off, s[16:19], 0 offset:4
1718697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1719697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1720697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1721697c1883SKrzysztof Drewniak  store <3 x i16> %data, ptr addrspace(7) %p
1722697c1883SKrzysztof Drewniak  ret void
1723697c1883SKrzysztof Drewniak}
1724697c1883SKrzysztof Drewniak
1725697c1883SKrzysztof Drewniakdefine <5 x i16> @load_v5i16(ptr addrspace(8) inreg %buf) {
1726697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5i16:
1727697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1728697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1729697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1730697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v2, off, s[16:19], 0 offset:8
1731697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1732697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1733697c1883SKrzysztof Drewniak;
1734697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5i16:
1735697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1736697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1737697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
1738697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v2, off, s[16:19], 0 offset:8
1739697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_mov_b32 s4, 0xffff
1740697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
1741697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v0, s4, v0, v0
1742697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v1, s4, v1, v1
1743697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1744697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1745697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1746697c1883SKrzysztof Drewniak  %ret = load <5 x i16>, ptr addrspace(7) %p
1747697c1883SKrzysztof Drewniak  ret <5 x i16> %ret
1748697c1883SKrzysztof Drewniak}
1749697c1883SKrzysztof Drewniak
1750697c1883SKrzysztof Drewniakdefine void @store_v5i16(<5 x i16> %data, ptr addrspace(8) inreg %buf) {
1751697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5i16:
1752697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1753697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1754697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1755697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v2, off, s[16:19], 0 offset:8
1756697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1757697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1758697c1883SKrzysztof Drewniak;
1759697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5i16:
1760697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1761697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1762697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
1763697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v2, off, s[16:19], 0 offset:8
1764697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1765697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1766697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1767697c1883SKrzysztof Drewniak  store <5 x i16> %data, ptr addrspace(7) %p
1768697c1883SKrzysztof Drewniak  ret void
1769697c1883SKrzysztof Drewniak}
1770697c1883SKrzysztof Drewniak
1771697c1883SKrzysztof Drewniakdefine <6 x i16> @load_v6i16(ptr addrspace(8) inreg %buf) {
1772697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i16:
1773697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1774697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1775697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1776697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1777697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1778697c1883SKrzysztof Drewniak;
1779697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i16:
1780697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1781697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1782697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1783697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1784697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1785697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1786697c1883SKrzysztof Drewniak  %ret = load <6 x i16>, ptr addrspace(7) %p
1787697c1883SKrzysztof Drewniak  ret <6 x i16> %ret
1788697c1883SKrzysztof Drewniak}
1789697c1883SKrzysztof Drewniak
1790697c1883SKrzysztof Drewniakdefine void @store_v6i16(<6 x i16> %data, ptr addrspace(8) inreg %buf) {
1791697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i16:
1792697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1793697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1795697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1796697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1797697c1883SKrzysztof Drewniak;
1798697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i16:
1799697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1800697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1801697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1802697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1803697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1804697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1805697c1883SKrzysztof Drewniak  store <6 x i16> %data, ptr addrspace(7) %p
1806697c1883SKrzysztof Drewniak  ret void
1807697c1883SKrzysztof Drewniak}
1808697c1883SKrzysztof Drewniak
1809697c1883SKrzysztof Drewniakdefine <7 x i16> @load_v7i16(ptr addrspace(8) inreg %buf) {
1810697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7i16:
1811697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1812697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1813697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1814697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v3, off, s[16:19], 0 offset:12
1815697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1816697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1817697c1883SKrzysztof Drewniak;
1818697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7i16:
1819697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1820697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1821697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
1822697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v3, off, s[16:19], 0 offset:12
1823697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_mov_b32 s4, 0xffff
1824697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
1825697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v0, s4, v0, v0
1826697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v1, s4, v1, v1
1827697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v2, s4, v2, v2
1828697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1829697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1830697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1831697c1883SKrzysztof Drewniak  %ret = load <7 x i16>, ptr addrspace(7) %p
1832697c1883SKrzysztof Drewniak  ret <7 x i16> %ret
1833697c1883SKrzysztof Drewniak}
1834697c1883SKrzysztof Drewniak
1835697c1883SKrzysztof Drewniakdefine void @store_v7i16(<7 x i16> %data, ptr addrspace(8) inreg %buf) {
1836697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7i16:
1837697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1838697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1839697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1840697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v3, off, s[16:19], 0 offset:12
1841697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1842697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1843697c1883SKrzysztof Drewniak;
1844697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7i16:
1845697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1846697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1847697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
1848697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v3, off, s[16:19], 0 offset:12
1849697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1850697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1851697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1852697c1883SKrzysztof Drewniak  store <7 x i16> %data, ptr addrspace(7) %p
1853697c1883SKrzysztof Drewniak  ret void
1854697c1883SKrzysztof Drewniak}
1855697c1883SKrzysztof Drewniak
1856697c1883SKrzysztof Drewniakdefine <9 x i16> @load_v9i16(ptr addrspace(8) inreg %buf) {
1857697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v9i16:
1858697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1859697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1860697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1861697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:16
1862697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1863697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1864697c1883SKrzysztof Drewniak;
1865697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v9i16:
1866697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1867697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1868697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
1869697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:16
1870697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_mov_b32 s4, 0xffff
1871697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
1872697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v0, s4, v0, v0
1873697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v1, s4, v1, v1
1874697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v2, s4, v2, v2
1875697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_bfi_b32 v3, s4, v3, v3
1876697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1877697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1878697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1879697c1883SKrzysztof Drewniak  %ret = load <9 x i16>, ptr addrspace(7) %p
1880697c1883SKrzysztof Drewniak  ret <9 x i16> %ret
1881697c1883SKrzysztof Drewniak}
1882697c1883SKrzysztof Drewniak
1883697c1883SKrzysztof Drewniakdefine void @store_v9i16(<9 x i16> %data, ptr addrspace(8) inreg %buf) {
1884697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v9i16:
1885697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1886697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1887697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1888697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v4, off, s[16:19], 0 offset:16
1889697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1890697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1891697c1883SKrzysztof Drewniak;
1892697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v9i16:
1893697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1894697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1895697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
1896697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v4, off, s[16:19], 0 offset:16
1897697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1898697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1899697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1900697c1883SKrzysztof Drewniak  store <9 x i16> %data, ptr addrspace(7) %p
1901697c1883SKrzysztof Drewniak  ret void
1902697c1883SKrzysztof Drewniak}
1903697c1883SKrzysztof Drewniak
1904697c1883SKrzysztof Drewniak;;; Byte vectors. Need to be
1905697c1883SKrzysztof Drewniak;;; - Split into multiple operations
1906697c1883SKrzysztof Drewniak;;; - Bitcast if they have a natively supported width
1907697c1883SKrzysztof Drewniak
1908697c1883SKrzysztof Drewniakdefine <1 x i8> @load_v1i8(ptr addrspace(8) inreg %buf) {
1909697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v1i8:
1910697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1911697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1912697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
1913697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1914697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1915697c1883SKrzysztof Drewniak;
1916697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v1i8:
1917697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1918697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1919697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
1920697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1921697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1922697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1923697c1883SKrzysztof Drewniak  %ret = load <1 x i8>, ptr addrspace(7) %p
1924697c1883SKrzysztof Drewniak  ret <1 x i8> %ret
1925697c1883SKrzysztof Drewniak}
1926697c1883SKrzysztof Drewniak
1927697c1883SKrzysztof Drewniakdefine void @store_v1i8(<1 x i8> %data, ptr addrspace(8) inreg %buf) {
1928697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v1i8:
1929697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1930697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1931697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
1932697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1933697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1934697c1883SKrzysztof Drewniak;
1935697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v1i8:
1936697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1937697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1938697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
1939697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1940697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1941697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1942697c1883SKrzysztof Drewniak  store <1 x i8> %data, ptr addrspace(7) %p
1943697c1883SKrzysztof Drewniak  ret void
1944697c1883SKrzysztof Drewniak}
1945697c1883SKrzysztof Drewniak
1946697c1883SKrzysztof Drewniakdefine <2 x i8> @load_v2i8(ptr addrspace(8) inreg %buf) {
1947697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i8:
1948697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1949697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1950697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
1951697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1952697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
1953697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1954697c1883SKrzysztof Drewniak;
1955697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i8:
1956697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1957697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1958697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
1959697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1960697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
1961697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1962697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1963697c1883SKrzysztof Drewniak  %ret = load <2 x i8>, ptr addrspace(7) %p
1964697c1883SKrzysztof Drewniak  ret <2 x i8> %ret
1965697c1883SKrzysztof Drewniak}
1966697c1883SKrzysztof Drewniak
1967697c1883SKrzysztof Drewniakdefine void @store_v2i8(<2 x i8> %data, ptr addrspace(8) inreg %buf) {
1968697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i8:
1969697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1970697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1971697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
1972697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1973697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
1974697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
1975697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
1976697c1883SKrzysztof Drewniak;
1977697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i8:
1978697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
1979697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1980697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v1
1981697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
1982697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1983697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
1984697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
1985697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
1986697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
1987697c1883SKrzysztof Drewniak  store <2 x i8> %data, ptr addrspace(7) %p
1988697c1883SKrzysztof Drewniak  ret void
1989697c1883SKrzysztof Drewniak}
1990697c1883SKrzysztof Drewniak
1991697c1883SKrzysztof Drewniakdefine <3 x i8> @load_v3i8(ptr addrspace(8) inreg %buf) {
1992697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v3i8:
1993697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
1994697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1995697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
1996697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
1997697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
1998697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
1999697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2000697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2001697c1883SKrzysztof Drewniak;
2002697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v3i8:
2003697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2004697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2005697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
2006697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
2007697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
2008697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2009697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2010697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2011697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2012697c1883SKrzysztof Drewniak  %ret = load <3 x i8>, ptr addrspace(7) %p
2013697c1883SKrzysztof Drewniak  ret <3 x i8> %ret
2014697c1883SKrzysztof Drewniak}
2015697c1883SKrzysztof Drewniak
2016697c1883SKrzysztof Drewniakdefine void @store_v3i8(<3 x i8> %data, ptr addrspace(8) inreg %buf) {
2017697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v3i8:
2018697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2019697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2020697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2021697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2022697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
2023697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v2, off, s[16:19], 0 offset:2
2024697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2025697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2026697c1883SKrzysztof Drewniak;
2027697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v3i8:
2028697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2029697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2030697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v1
2031697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2032697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2033697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
2034697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v2, off, s[16:19], 0 offset:2
2035697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2036697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2037697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2038697c1883SKrzysztof Drewniak  store <3 x i8> %data, ptr addrspace(7) %p
2039697c1883SKrzysztof Drewniak  ret void
2040697c1883SKrzysztof Drewniak}
2041697c1883SKrzysztof Drewniak
2042697c1883SKrzysztof Drewniakdefine <4 x i8> @load_v4i8(ptr addrspace(8) inreg %buf) {
2043697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i8:
2044697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2045697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2046697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2047697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2048697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2049697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2050697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2051697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2052697c1883SKrzysztof Drewniak;
2053697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i8:
2054697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2055697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2056697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2057697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2058697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2059697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2060697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2061697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2062697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2063697c1883SKrzysztof Drewniak  %ret = load <4 x i8>, ptr addrspace(7) %p
2064697c1883SKrzysztof Drewniak  ret <4 x i8> %ret
2065697c1883SKrzysztof Drewniak}
2066697c1883SKrzysztof Drewniak
2067697c1883SKrzysztof Drewniakdefine void @store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
2068697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i8:
2069697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2070697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2071697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2072697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2073697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2074697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2075697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2076697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2077697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2078697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2079697c1883SKrzysztof Drewniak;
2080697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i8:
2081697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2082697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2083697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v5, 8
2084697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, 0xff
2085697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2086697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v4, v1
2087697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2088697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2089697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2090697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2091697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2092697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2093697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2094697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2095697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2096697c1883SKrzysztof Drewniak  store <4 x i8> %data, ptr addrspace(7) %p
2097697c1883SKrzysztof Drewniak  ret void
2098697c1883SKrzysztof Drewniak}
2099697c1883SKrzysztof Drewniak
2100697c1883SKrzysztof Drewniakdefine <5 x i8> @load_v5i8(ptr addrspace(8) inreg %buf) {
2101697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v5i8:
2102697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2103697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2104697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2105697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v4, off, s[16:19], 0 offset:4
2106697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
2107697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2108697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2109697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2110697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2111697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2112697c1883SKrzysztof Drewniak;
2113697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v5i8:
2114697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2115697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2116697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2117697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v4, off, s[16:19], 0 offset:4
2118697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
2119697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2120697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2121697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2122697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2123697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2124697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2125697c1883SKrzysztof Drewniak  %ret = load <5 x i8>, ptr addrspace(7) %p
2126697c1883SKrzysztof Drewniak  ret <5 x i8> %ret
2127697c1883SKrzysztof Drewniak}
2128697c1883SKrzysztof Drewniak
2129697c1883SKrzysztof Drewniakdefine void @store_v5i8(<5 x i8> %data, ptr addrspace(8) inreg %buf) {
2130697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v5i8:
2131697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2132697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2133697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2134697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2135697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2136697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2137697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2138697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2139697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v4, off, s[16:19], 0 offset:4
2140697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2141697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2142697c1883SKrzysztof Drewniak;
2143697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v5i8:
2144697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2145697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2146697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v6, 8
2147697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v5, 0xff
2148697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v6, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2149697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v5, v1
2150697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2151697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2152697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2153697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2154697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2155697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2156697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v4, off, s[16:19], 0 offset:4
2157697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2158697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2159697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2160697c1883SKrzysztof Drewniak  store <5 x i8> %data, ptr addrspace(7) %p
2161697c1883SKrzysztof Drewniak  ret void
2162697c1883SKrzysztof Drewniak}
2163697c1883SKrzysztof Drewniak
2164697c1883SKrzysztof Drewniakdefine <6 x i8> @load_v6i8(ptr addrspace(8) inreg %buf) {
2165697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v6i8:
2166697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2167697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2168697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v6, off, s[16:19], 0 offset:4
2169697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2170697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
2171697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 0xffff, v6
2172697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2173697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 8, v0
2174697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[0:1]
2175697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2176697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2177697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v4, v6
2178697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, v7
2179697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2180697c1883SKrzysztof Drewniak;
2181697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v6i8:
2182697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2183697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2184697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2185697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:4
2186697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
2187697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2188697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2189697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2190697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2191697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v4
2192697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2193697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2194697c1883SKrzysztof Drewniak  %ret = load <6 x i8>, ptr addrspace(7) %p
2195697c1883SKrzysztof Drewniak  ret <6 x i8> %ret
2196697c1883SKrzysztof Drewniak}
2197697c1883SKrzysztof Drewniak
2198697c1883SKrzysztof Drewniakdefine void @store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
2199697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v6i8:
2200697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2201697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2202697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2203697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2204697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2205697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2206697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
2207697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2208697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2209697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2210697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v4, off, s[16:19], 0 offset:4
2211697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2212697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2213697c1883SKrzysztof Drewniak;
2214697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v6i8:
2215697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2216697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2217697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v1
2218697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2219697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2220697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v3
2221697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2222697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2223697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v5
2224697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2225697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v2, 8, v2
2226697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
2227697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2228697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2229697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v2, off, s[16:19], 0 offset:4
2230697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2231697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2232697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2233697c1883SKrzysztof Drewniak  store <6 x i8> %data, ptr addrspace(7) %p
2234697c1883SKrzysztof Drewniak  ret void
2235697c1883SKrzysztof Drewniak}
2236697c1883SKrzysztof Drewniak
2237697c1883SKrzysztof Drewniakdefine <7 x i8> @load_v7i8(ptr addrspace(8) inreg %buf) {
2238697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v7i8:
2239697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2240697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2241697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2242697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:4
2243697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v6, off, s[16:19], 0 offset:6
2244697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(2)
2245697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2246697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2247697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2248697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
2249697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v4
2250697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2251697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2252697c1883SKrzysztof Drewniak;
2253697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v7i8:
2254697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2255697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2256697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2257697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:4
2258697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v6, off, s[16:19], 0 offset:6
2259697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(2)
2260697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
2261697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2262697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2263697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
2264697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v4
2265697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2266697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2267697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2268697c1883SKrzysztof Drewniak  %ret = load <7 x i8>, ptr addrspace(7) %p
2269697c1883SKrzysztof Drewniak  ret <7 x i8> %ret
2270697c1883SKrzysztof Drewniak}
2271697c1883SKrzysztof Drewniak
2272697c1883SKrzysztof Drewniakdefine void @store_v7i8(<7 x i8> %data, ptr addrspace(8) inreg %buf) {
2273697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v7i8:
2274697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2275697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2276697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2277697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2278697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2279697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2280697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2281697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2282697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v0, 8, v5
2283697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2284697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0 offset:4
2285697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v6, off, s[16:19], 0 offset:6
2286697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2287697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2288697c1883SKrzysztof Drewniak;
2289697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v7i8:
2290697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2291697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2292697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v8, 8
2293697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v7, 0xff
2294697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v8, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2295697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v7, v1
2296697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2297697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2298697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2299697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2300697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2301697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2302697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xff, v5
2303697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v0, 8, v0
2304697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2305697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0 offset:4
2306697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v6, off, s[16:19], 0 offset:6
2307697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2308697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2309697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2310697c1883SKrzysztof Drewniak  store <7 x i8> %data, ptr addrspace(7) %p
2311697c1883SKrzysztof Drewniak  ret void
2312697c1883SKrzysztof Drewniak}
2313697c1883SKrzysztof Drewniak
2314697c1883SKrzysztof Drewniakdefine <8 x i8> @load_v8i8(ptr addrspace(8) inreg %buf) {
2315697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i8:
2316697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2317697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2318697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2319697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2320697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[0:1]
2321697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
2322697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2323697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2324697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2325697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2326697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v4, v1
2327697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, v8
2328697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2329697c1883SKrzysztof Drewniak;
2330697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i8:
2331697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2332697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2333697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2334697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2335697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v8, 8, v0
2336697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
2337697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2338697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2339697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2340697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2341697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, v1
2342697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, v8
2343697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2344697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2345697c1883SKrzysztof Drewniak  %ret = load <8 x i8>, ptr addrspace(7) %p
2346697c1883SKrzysztof Drewniak  ret <8 x i8> %ret
2347697c1883SKrzysztof Drewniak}
2348697c1883SKrzysztof Drewniak
2349697c1883SKrzysztof Drewniakdefine void @store_v8i8(<8 x i8> %data, ptr addrspace(8) inreg %buf) {
2350697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i8:
2351697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2352697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2353697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
2354697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2355697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2356697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v7
2357697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2358697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2359697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2360697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2361697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2362697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v3, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2363697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[3:4], off, s[16:19], 0
2364697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2365697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2366697c1883SKrzysztof Drewniak;
2367697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i8:
2368697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2369697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2370697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v9, 8
2371697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v8, 0xff
2372697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2373697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v8, v1
2374697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2375697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2376697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2377697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2378697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2379697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v9, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2380697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v6
2381697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v7
2382697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v1, v4, v8, v1
2383697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
2384697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 24, v3
2385697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v1, v1, v2, v3
2386697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2387697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2388697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2389697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2390697c1883SKrzysztof Drewniak  store <8 x i8> %data, ptr addrspace(7) %p
2391697c1883SKrzysztof Drewniak  ret void
2392697c1883SKrzysztof Drewniak}
2393697c1883SKrzysztof Drewniak
2394697c1883SKrzysztof Drewniakdefine <12 x i8> @load_v12i8(ptr addrspace(8) inreg %buf) {
2395697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v12i8:
2396697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2397697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2398697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
2399697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2400697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v8, v2
2401697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
2402697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[0:1]
2403697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v14, 8, v0
2404697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v13, 16, v0
2405697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[11:12], 24, v[8:9]
2406697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2407697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2408697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2409697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
2410697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v4, v1
2411697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, v14
2412697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v2, v13
2413697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2414697c1883SKrzysztof Drewniak;
2415697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v12i8:
2416697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2417697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2418697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
2419697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2420697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v13, 8, v0
2421697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v12, 16, v0
2422697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
2423697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2424697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2425697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2426697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
2427697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
2428697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
2429697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, v1
2430697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v8, v2
2431697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, v13
2432697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v2, v12
2433697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2434697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2435697c1883SKrzysztof Drewniak  %ret = load <12 x i8>, ptr addrspace(7) %p
2436697c1883SKrzysztof Drewniak  ret <12 x i8> %ret
2437697c1883SKrzysztof Drewniak}
2438697c1883SKrzysztof Drewniak
2439697c1883SKrzysztof Drewniakdefine void @store_v12i8(<12 x i8> %data, ptr addrspace(8) inreg %buf) {
2440697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v12i8:
2441697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2442697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2443697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v9
2444697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
2445697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2446697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2447697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v11
2448697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2449697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v7
2450697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2451697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2452697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2453697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2454697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2455697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2456697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v7, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2457697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v6, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2458697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[6:8], off, s[16:19], 0
2459697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2460697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2461697c1883SKrzysztof Drewniak;
2462697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v12i8:
2463697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2464697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2465697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v13, 8
2466697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v12, 0xff
2467697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v13, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2468697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v12, v1
2469697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2470697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2471697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2472697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2473697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2474697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v13, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2475697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v6
2476697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v7
2477697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v1, v4, v12, v1
2478697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
2479697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 24, v3
2480697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v1, v1, v2, v3
2481697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v2, v13, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2482697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v10
2483697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v11
2484697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v2, v8, v12, v2
2485697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
2486697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 24, v4
2487697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v2, v2, v3, v4
2488697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
2489697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2490697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2491697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2492697c1883SKrzysztof Drewniak  store <12 x i8> %data, ptr addrspace(7) %p
2493697c1883SKrzysztof Drewniak  ret void
2494697c1883SKrzysztof Drewniak}
2495697c1883SKrzysztof Drewniak
2496697c1883SKrzysztof Drewniakdefine <16 x i8> @load_v16i8(ptr addrspace(8) inreg %buf) {
2497697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v16i8:
2498697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2499697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2500697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2501697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2502697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[18:19], 24, v[0:1]
2503697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[11:12], 24, v[2:3]
2504697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v17, 8, v0
2505697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v16, 16, v0
2506697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2507697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2508697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2509697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
2510697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
2511697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
2512697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
2513697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
2514697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v4, v1
2515697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v8, v2
2516697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v12, v3
2517697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, v17
2518697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v2, v16
2519697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v3, v18
2520697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2521697c1883SKrzysztof Drewniak;
2522697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v16i8:
2523697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2524697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2525697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2526697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2527697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v16, 8, v0
2528697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v17, 16, v0
2529697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v18, 24, v0
2530697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2531697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2532697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2533697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
2534697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
2535697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
2536697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
2537697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
2538697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
2539697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, v1
2540697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v8, v2
2541697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v12, v3
2542697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, v16
2543697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v2, v17
2544697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v3, v18
2545697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2546697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2547697c1883SKrzysztof Drewniak  %ret = load <16 x i8>, ptr addrspace(7) %p
2548697c1883SKrzysztof Drewniak  ret <16 x i8> %ret
2549697c1883SKrzysztof Drewniak}
2550697c1883SKrzysztof Drewniak
2551697c1883SKrzysztof Drewniakdefine void @store_v16i8(<16 x i8> %data, ptr addrspace(8) inreg %buf) {
2552697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v16i8:
2553697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2554697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2555697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v13, 8, v13
2556697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v9
2557697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
2558697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
2559697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2560697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v13, 8, v15
2561697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2562697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v11
2563697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2564697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v7
2565697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2566697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
2567697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2568697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2569697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2570697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2571697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2572697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v11, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2573697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v10, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2574697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v9, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2575697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[9:12], off, s[16:19], 0
2576697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2577697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2578697c1883SKrzysztof Drewniak;
2579697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v16i8:
2580697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2581697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2582697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v17, 8
2583697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v16, 0xff
2584697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v17, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2585697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v16, v1
2586697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
2587697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
2588697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
2589697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
2590697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
2591697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v17, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2592697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v6
2593697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v7
2594697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v1, v4, v16, v1
2595697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
2596697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 24, v3
2597697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v1, v1, v2, v3
2598697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v2, v17, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2599697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v10
2600697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v11
2601697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v2, v8, v16, v2
2602697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
2603697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 24, v4
2604697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v2, v2, v3, v4
2605697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v3, v17, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2606697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v14
2607697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v5, 0xff, v15
2608697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v3, v12, v16, v3
2609697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
2610697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v5, 24, v5
2611697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v3, v3, v4, v5
2612697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2613697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2614697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2615697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2616697c1883SKrzysztof Drewniak  store <16 x i8> %data, ptr addrspace(7) %p
2617697c1883SKrzysztof Drewniak  ret void
2618697c1883SKrzysztof Drewniak}
2619697c1883SKrzysztof Drewniak
2620697c1883SKrzysztof Drewniakdefine <32 x i8> @load_v32i8(ptr addrspace(8) inreg %buf) {
2621697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v32i8:
2622697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2623697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26246206f544SLucas Ramirez; SDAG-NEXT:    buffer_load_dwordx4 v[36:39], off, s[16:19], 0
26256206f544SLucas Ramirez; SDAG-NEXT:    buffer_load_dwordx4 v[32:35], off, s[16:19], 0 offset:16
2626697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
26276206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[36:37]
26286206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b64 v[11:12], 24, v[38:39]
2629697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
26306206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b64 v[19:20], 24, v[32:33]
26316206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b64 v[27:28], 24, v[34:35]
26326206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v36
26336206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v36
26346206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v37
26356206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v6, 16, v37
26366206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 24, v37
26376206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v9, 8, v38
26386206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v10, 16, v38
26396206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v13, 8, v39
26406206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v14, 16, v39
26416206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v15, 24, v39
26426206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v17, 8, v32
26436206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v18, 16, v32
26446206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v21, 8, v33
26456206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v22, 16, v33
26466206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v23, 24, v33
26476206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v25, 8, v34
26486206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v26, 16, v34
26496206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v29, 8, v35
26506206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v30, 16, v35
26516206f544SLucas Ramirez; SDAG-NEXT:    v_lshrrev_b32_e32 v31, 24, v35
26526206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v0, v36
26536206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v4, v37
26546206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v8, v38
26556206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v12, v39
26566206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v16, v32
26576206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v20, v33
26586206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v24, v34
26596206f544SLucas Ramirez; SDAG-NEXT:    v_mov_b32_e32 v28, v35
2660697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2661697c1883SKrzysztof Drewniak;
2662697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v32i8:
2663697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2664697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2665697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2666697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[16:19], off, s[16:19], 0 offset:16
2667697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
2668697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v35, 8, v0
2669697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v36, 16, v0
2670697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v37, 24, v0
2671697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2672697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v32, 8, v16
2673697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
2674697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v34, 24, v16
2675697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
2676697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
2677697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 24, v1
2678697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v9, 8, v2
2679697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
2680697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v11, 24, v2
2681697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v13, 8, v3
2682697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v14, 16, v3
2683697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v15, 24, v3
2684697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v21, 8, v17
2685697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v22, 16, v17
2686697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v23, 24, v17
2687697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v25, 8, v18
2688697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v26, 16, v18
2689697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v27, 24, v18
2690697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v29, 8, v19
2691697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v30, 16, v19
2692697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v31, 24, v19
2693697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, v1
2694697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v8, v2
2695697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v12, v3
2696697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v20, v17
2697697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v24, v18
2698697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v28, v19
2699697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, v35
2700697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v2, v36
2701697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v3, v37
2702697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v17, v32
2703697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v18, v33
2704697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v19, v34
2705697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2706697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2707697c1883SKrzysztof Drewniak  %ret = load <32 x i8>, ptr addrspace(7) %p
2708697c1883SKrzysztof Drewniak  ret <32 x i8> %ret
2709697c1883SKrzysztof Drewniak}
2710697c1883SKrzysztof Drewniak
2711697c1883SKrzysztof Drewniakdefine void @store_v32i8(<32 x i8> %data, ptr addrspace(8) inreg %buf) {
2712697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v32i8:
2713697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2714697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27156206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v9
27166206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v8, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27176206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v9, 8, v11
27186206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27196206f544SLucas Ramirez; SDAG-NEXT:    buffer_load_ubyte v10, off, s[0:3], s32
2720697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v13, 8, v13
2721697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v12, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2722697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v13, 8, v15
2723697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
27246206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v7, 8, v7
2725697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
27266206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v3, 8, v3
27276206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v13, v14, v13 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2728697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27296206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v5, v6, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2730697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27316206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v6, v2, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2732697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v3, v12, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2733697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v2, v8, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2734697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2735697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
27366206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v11, 8, v29
27376206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v14, 8, v25
27386206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v15, 8, v27
27396206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v21, 8, v21
27406206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v23, 8, v23
27416206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v17, 8, v17
27426206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v19, 8, v19
2743697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
27446206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v7, v28, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27456206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v11, v24, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27466206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v14, v26, v15 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27476206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v15, v20, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27486206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v20, v22, v23 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27496206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v16, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27506206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v17, v18, v19 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
27516206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v5, v11, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
27526206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v4, v15, v20 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
27536206f544SLucas Ramirez; SDAG-NEXT:    v_or_b32_sdwa v3, v16, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2754697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
27556206f544SLucas Ramirez; SDAG-NEXT:    v_lshlrev_b16_e32 v0, 8, v10
2756697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v30, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
2757697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v6, v7, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2758697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[3:6], off, s[16:19], 0 offset:16
2759697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2760697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2761697c1883SKrzysztof Drewniak;
2762697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v32i8:
2763697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2764697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2765697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v31, 8
2766697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v31, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2767697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v32, 0xff
2768697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v32, v1
2769697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v31, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2770697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v5, 0xff, v7
2771697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v7, off, s[0:3], s32
2772697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v1, v4, v32, v1
2773697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v2
2774697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v3
2775697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v6
2776697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
2777697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 24, v3
2778697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
2779697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v5, 24, v5
2780697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v2, v3
2781697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v1, v1, v4, v5
2782697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v2, v31, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2783697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v10
2784697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v11
2785697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v2, v8, v32, v2
2786697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
2787697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 24, v4
2788697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v2, v2, v3, v4
2789697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v3, v31, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2790697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v4, 0xff, v14
2791697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v5, 0xff, v15
2792697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v3, v12, v32, v3
2793697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
2794697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v5, 24, v5
2795697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v3, v3, v4, v5
2796697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v4, v31, v17 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2797697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v5, 0xff, v18
2798697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v6, 0xff, v19
2799697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v4, v16, v32, v4
2800697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
2801697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v6, 24, v6
2802697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v8, v31, v21 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2803697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v4, v4, v5, v6
2804697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v5, 0xff, v22
2805697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v6, 0xff, v23
2806697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v8, v20, v32, v8
2807697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
2808697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v6, 24, v6
2809697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v5, v8, v5, v6
2810697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v6, v31, v25 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2811697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v8, 0xff, v26
2812697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v9, 0xff, v27
2813697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v6, v24, v32, v6
2814697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
2815697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v9, 24, v9
2816697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v6, v6, v8, v9
2817697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v8, v31, v29 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
2818697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v9, 0xff, v30
2819697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v8, v28, v32, v8
2820697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
2821697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2822697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v7, 24, v7
2823697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v7, v8, v9, v7
2824697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2825697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
2826697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2827697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2828697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2829697c1883SKrzysztof Drewniak  store <32 x i8> %data, ptr addrspace(7) %p
2830697c1883SKrzysztof Drewniak  ret void
2831697c1883SKrzysztof Drewniak}
2832697c1883SKrzysztof Drewniak
2833697c1883SKrzysztof Drewniak;;; Arrays. Need to become vectors.
2834697c1883SKrzysztof Drewniak
2835697c1883SKrzysztof Drewniakdefine [1 x i32] @load_a1i32(ptr addrspace(8) inreg %buf) {
2836697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a1i32:
2837697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2838697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2839697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2840697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2841697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2842697c1883SKrzysztof Drewniak;
2843697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a1i32:
2844697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2845697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2846697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2847697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2848697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2849697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2850697c1883SKrzysztof Drewniak  %ret = load [1 x i32], ptr addrspace(7) %p
2851697c1883SKrzysztof Drewniak  ret [1 x i32] %ret
2852697c1883SKrzysztof Drewniak}
2853697c1883SKrzysztof Drewniak
2854697c1883SKrzysztof Drewniakdefine void @store_a1i32([1 x i32] %data, ptr addrspace(8) inreg %buf) {
2855697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a1i32:
2856697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2857697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2858697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2859697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2860697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2861697c1883SKrzysztof Drewniak;
2862697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a1i32:
2863697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2864697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2865697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2866697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2867697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2868697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2869697c1883SKrzysztof Drewniak  store [1 x i32] %data, ptr addrspace(7) %p
2870697c1883SKrzysztof Drewniak  ret void
2871697c1883SKrzysztof Drewniak}
2872697c1883SKrzysztof Drewniak
2873697c1883SKrzysztof Drewniakdefine [2 x i32] @load_a2i32(ptr addrspace(8) inreg %buf) {
2874697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2i32:
2875697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2876697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2877697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2878697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2879697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2880697c1883SKrzysztof Drewniak;
2881697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2i32:
2882697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2883697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2884697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
2885697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2886697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2887697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2888697c1883SKrzysztof Drewniak  %ret = load [2 x i32], ptr addrspace(7) %p
2889697c1883SKrzysztof Drewniak  ret [2 x i32] %ret
2890697c1883SKrzysztof Drewniak}
2891697c1883SKrzysztof Drewniak
2892697c1883SKrzysztof Drewniakdefine void @store_a2i32([2 x i32] %data, ptr addrspace(8) inreg %buf) {
2893697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2i32:
2894697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2895697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2896697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2897697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2898697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2899697c1883SKrzysztof Drewniak;
2900697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2i32:
2901697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2902697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2903697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
2904697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2905697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2906697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2907697c1883SKrzysztof Drewniak  store [2 x i32] %data, ptr addrspace(7) %p
2908697c1883SKrzysztof Drewniak  ret void
2909697c1883SKrzysztof Drewniak}
2910697c1883SKrzysztof Drewniak
2911697c1883SKrzysztof Drewniakdefine [2 x half] @load_a2f16(ptr addrspace(8) inreg %buf) {
2912697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2f16:
2913697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2914697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2915697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2916697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2917697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
2918697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2919697c1883SKrzysztof Drewniak;
2920697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2f16:
2921697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2922697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2923697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
2924697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2925697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
2926697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2927697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2928697c1883SKrzysztof Drewniak  %ret = load [2 x half], ptr addrspace(7) %p
2929697c1883SKrzysztof Drewniak  ret [2 x half] %ret
2930697c1883SKrzysztof Drewniak}
2931697c1883SKrzysztof Drewniak
2932697c1883SKrzysztof Drewniakdefine void @store_a2f16([2 x half] %data, ptr addrspace(8) inreg %buf) {
2933697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2f16:
2934697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2935697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2936697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_mov_b32 s4, 0x5040100
2937697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_perm_b32 v0, v1, v0, s4
2938697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2939697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2940697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2941697c1883SKrzysztof Drewniak;
2942697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2f16:
2943697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2944697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2945697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2946697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
2947697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
2948697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2949697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2950697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2951697c1883SKrzysztof Drewniak  store [2 x half] %data, ptr addrspace(7) %p
2952697c1883SKrzysztof Drewniak  ret void
2953697c1883SKrzysztof Drewniak}
2954697c1883SKrzysztof Drewniak
2955697c1883SKrzysztof Drewniakdefine [2 x ptr addrspace(1)] @load_a2p1(ptr addrspace(8) inreg %buf) {
2956697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2p1:
2957697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2958697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2959697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2960697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2961697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2962697c1883SKrzysztof Drewniak;
2963697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2p1:
2964697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2965697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2966697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
2967697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2968697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2969697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2970697c1883SKrzysztof Drewniak  %ret = load [2 x ptr addrspace(1)], ptr addrspace(7) %p
2971697c1883SKrzysztof Drewniak  ret [2 x ptr addrspace(1)] %ret
2972697c1883SKrzysztof Drewniak}
2973697c1883SKrzysztof Drewniak
2974697c1883SKrzysztof Drewniakdefine void @store_a2p1([2 x ptr addrspace(1)] %data, ptr addrspace(8) inreg %buf) {
2975697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2p1:
2976697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2977697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2978697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2979697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
2980697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
2981697c1883SKrzysztof Drewniak;
2982697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2p1:
2983697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
2984697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2985697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2986697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
2987697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
2988697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
2989697c1883SKrzysztof Drewniak  store [2 x ptr addrspace(1)] %data, ptr addrspace(7) %p
2990697c1883SKrzysztof Drewniak  ret void
2991697c1883SKrzysztof Drewniak}
2992697c1883SKrzysztof Drewniak
2993697c1883SKrzysztof Drewniak;;; Scalars of atypical width. Need to be cast to vectors and split.
2994697c1883SKrzysztof Drewniak
2995697c1883SKrzysztof Drewniakdefine i40 @load_i40(ptr addrspace(8) inreg %buf) {
2996697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i40:
2997697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
2998697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2999697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3000697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:4
3001697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3002697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3003697c1883SKrzysztof Drewniak;
3004697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i40:
3005697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3006697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3007697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3008697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:4
3009697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v2, 0xff
3010697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
3011697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 8, v0
3012697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 24, v0
3013697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 0xff, v3
3014697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
3015697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v4, 8, v4
3016697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v3, 8, v3
3017697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v2, v2, v4
3018697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3019697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xffff, v2
3020697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3021697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshl_or_b32 v0, v2, 16, v0
3022697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3023697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3024697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3025697c1883SKrzysztof Drewniak  %ret = load i40, ptr addrspace(7) %p
3026697c1883SKrzysztof Drewniak  ret i40 %ret
3027697c1883SKrzysztof Drewniak}
3028697c1883SKrzysztof Drewniak
3029697c1883SKrzysztof Drewniakdefine void @store_i40(i40 %data, ptr addrspace(8) inreg %buf) {
3030697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i40:
3031697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3032697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3033697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3034697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v1, off, s[16:19], 0 offset:4
3035697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3036697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3037697c1883SKrzysztof Drewniak;
3038697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i40:
3039697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3040697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3041697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3042697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v1, off, s[16:19], 0 offset:4
3043697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3044697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3045697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3046697c1883SKrzysztof Drewniak  store i40 %data, ptr addrspace(7) %p
3047697c1883SKrzysztof Drewniak  ret void
3048697c1883SKrzysztof Drewniak}
3049697c1883SKrzysztof Drewniak
3050697c1883SKrzysztof Drewniakdefine i96 @load_i96(ptr addrspace(8) inreg %buf) {
3051697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i96:
3052697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3053697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3054697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3055697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3056697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3057697c1883SKrzysztof Drewniak;
3058697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i96:
3059697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3060697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3061697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3062697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3063697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3064697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3065697c1883SKrzysztof Drewniak  %ret = load i96, ptr addrspace(7) %p
3066697c1883SKrzysztof Drewniak  ret i96 %ret
3067697c1883SKrzysztof Drewniak}
3068697c1883SKrzysztof Drewniak
3069697c1883SKrzysztof Drewniakdefine void @store_i96(i96 %data, ptr addrspace(8) inreg %buf) {
3070697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i96:
3071697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3072697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3073697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3074697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3075697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3076697c1883SKrzysztof Drewniak;
3077697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i96:
3078697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3079697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3080697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3081697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3082697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3083697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3084697c1883SKrzysztof Drewniak  store i96 %data, ptr addrspace(7) %p
3085697c1883SKrzysztof Drewniak  ret void
3086697c1883SKrzysztof Drewniak}
3087697c1883SKrzysztof Drewniak
3088697c1883SKrzysztof Drewniakdefine i160 @load_i160(ptr addrspace(8) inreg %buf) {
3089697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i160:
3090697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3091697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3092697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3093697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v4, off, s[16:19], 0 offset:16
3094697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_mov_b32 s4, s33
3095697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_add_i32 s33, s32, 0x7c0
3096697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_and_b32 s33, s33, 0xfffff800
309711b04019SAaditya; SDAG-NEXT:    s_mov_b32 s5, s34
309811b04019SAaditya; SDAG-NEXT:    s_mov_b32 s34, s32
3099697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_addk_i32 s32, 0x1800
310011b04019SAaditya; SDAG-NEXT:    s_mov_b32 s32, s34
310111b04019SAaditya; SDAG-NEXT:    s_mov_b32 s34, s5
3102697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_mov_b32 s33, s4
3103697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3104697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3105697c1883SKrzysztof Drewniak;
3106697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i160:
3107697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3108697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3109697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3110697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v4, off, s[16:19], 0 offset:16
3111697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3112697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3113697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3114697c1883SKrzysztof Drewniak  %ret = load i160, ptr addrspace(7) %p
3115697c1883SKrzysztof Drewniak  ret i160 %ret
3116697c1883SKrzysztof Drewniak}
3117697c1883SKrzysztof Drewniak
3118697c1883SKrzysztof Drewniakdefine void @store_i160(i160 %data, ptr addrspace(8) inreg %buf) {
3119697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i160:
3120697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3121697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3122697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_mov_b32 s4, s33
3123697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_add_i32 s33, s32, 0x7c0
3124697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_and_b32 s33, s33, 0xfffff800
312511b04019SAaditya; SDAG-NEXT:    s_mov_b32 s5, s34
312611b04019SAaditya; SDAG-NEXT:    s_mov_b32 s34, s32
3127697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_addk_i32 s32, 0x1000
3128697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3129697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
313011b04019SAaditya; SDAG-NEXT:    s_mov_b32 s32, s34
313111b04019SAaditya; SDAG-NEXT:    s_mov_b32 s34, s5
3132697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_mov_b32 s33, s4
3133697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3134697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3135697c1883SKrzysztof Drewniak;
3136697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i160:
3137697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3138697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3139697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3140697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v4, off, s[16:19], 0 offset:16
3141697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3142697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3143697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3144697c1883SKrzysztof Drewniak  store i160 %data, ptr addrspace(7) %p
3145697c1883SKrzysztof Drewniak  ret void
3146697c1883SKrzysztof Drewniak}
3147697c1883SKrzysztof Drewniak
3148697c1883SKrzysztof Drewniakdefine i256 @load_i256(ptr addrspace(8) inreg %buf) {
3149697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i256:
3150697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3151697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3152697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3153697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3154697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3155697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3156697c1883SKrzysztof Drewniak;
3157697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i256:
3158697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3159697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3160697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3161697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3162697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3163697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3164697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3165697c1883SKrzysztof Drewniak  %ret = load i256, ptr addrspace(7) %p
3166697c1883SKrzysztof Drewniak  ret i256 %ret
3167697c1883SKrzysztof Drewniak}
3168697c1883SKrzysztof Drewniak
3169697c1883SKrzysztof Drewniakdefine void @store_i256(i256 %data, ptr addrspace(8) inreg %buf) {
3170697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i256:
3171697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3172697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3173697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3174697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3175697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3176697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3177697c1883SKrzysztof Drewniak;
3178697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i256:
3179697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3180697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3181697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3182697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[4:7], off, s[16:19], 0 offset:16
3183697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3184697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3185697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3186697c1883SKrzysztof Drewniak  store i256 %data, ptr addrspace(7) %p
3187697c1883SKrzysztof Drewniak  ret void
3188697c1883SKrzysztof Drewniak}
3189697c1883SKrzysztof Drewniak
3190697c1883SKrzysztof Drewniak;;; Non-byte-sized scalars. Require zero-extension.
3191697c1883SKrzysztof Drewniak
3192697c1883SKrzysztof Drewniakdefine i7 @load_i7(ptr addrspace(8) inreg %buf) {
3193697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i7:
3194697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3195697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3196697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3197697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3198697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3199697c1883SKrzysztof Drewniak;
3200697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i7:
3201697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3202697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3203697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3204697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3205697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3206697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3207697c1883SKrzysztof Drewniak  %ret = load i7, ptr addrspace(7) %p
3208697c1883SKrzysztof Drewniak  ret i7 %ret
3209697c1883SKrzysztof Drewniak}
3210697c1883SKrzysztof Drewniak
3211697c1883SKrzysztof Drewniakdefine void @store_i7(i7 %data, ptr addrspace(8) inreg %buf) {
3212697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i7:
3213697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3214697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3215697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3216697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3217697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3218697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3219697c1883SKrzysztof Drewniak;
3220697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i7:
3221697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3222697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3223697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3224697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3225697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3226697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3227697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3228697c1883SKrzysztof Drewniak  store i7 %data, ptr addrspace(7) %p
3229697c1883SKrzysztof Drewniak  ret void
3230697c1883SKrzysztof Drewniak}
3231697c1883SKrzysztof Drewniak
3232697c1883SKrzysztof Drewniakdefine i4 @load_i4(ptr addrspace(8) inreg %buf) {
3233697c1883SKrzysztof Drewniak; SDAG-LABEL: load_i4:
3234697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3235697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3236697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3237697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3238697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3239697c1883SKrzysztof Drewniak;
3240697c1883SKrzysztof Drewniak; GISEL-LABEL: load_i4:
3241697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3242697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3243697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3244697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3245697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3246697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3247697c1883SKrzysztof Drewniak  %ret = load i4, ptr addrspace(7) %p
3248697c1883SKrzysztof Drewniak  ret i4 %ret
3249697c1883SKrzysztof Drewniak}
3250697c1883SKrzysztof Drewniak
3251697c1883SKrzysztof Drewniakdefine void @store_i4(i4 %data, ptr addrspace(8) inreg %buf) {
3252697c1883SKrzysztof Drewniak; SDAG-LABEL: store_i4:
3253697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3254697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3255697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3256697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3257697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3258697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3259697c1883SKrzysztof Drewniak;
3260697c1883SKrzysztof Drewniak; GISEL-LABEL: store_i4:
3261697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3262697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3263697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3264697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3265697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3266697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3267697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3268697c1883SKrzysztof Drewniak  store i4 %data, ptr addrspace(7) %p
3269697c1883SKrzysztof Drewniak  ret void
3270697c1883SKrzysztof Drewniak}
3271697c1883SKrzysztof Drewniak
3272697c1883SKrzysztof Drewniak
3273697c1883SKrzysztof Drewniak;;; Byte-sized vectors of i4. Require casts.
3274697c1883SKrzysztof Drewniak
3275697c1883SKrzysztof Drewniakdefine <2 x i4> @load_v2i4(ptr addrspace(8) inreg %buf) {
3276697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i4:
3277697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3278697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3279697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3280697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3281697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[0:3], s32
3282697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v1, off, s[0:3], s32
3283697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3284697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v1
3285697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b16_e32 v1, 4, v1
3286697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3287697c1883SKrzysztof Drewniak;
3288697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i4:
3289697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3290697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3291697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3292697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3293697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3294697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3295697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3296697c1883SKrzysztof Drewniak  %ret = load <2 x i4>, ptr addrspace(7) %p
3297697c1883SKrzysztof Drewniak  ret <2 x i4> %ret
3298697c1883SKrzysztof Drewniak}
3299697c1883SKrzysztof Drewniak
3300697c1883SKrzysztof Drewniakdefine void @store_v2i4(<2 x i4> %data, ptr addrspace(8) inreg %buf) {
3301697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i4:
3302697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3303697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3304697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3305697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3306697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3307697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[0:3], s32
3308697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[0:3], s32
3309697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3310697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3311697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3312697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3313697c1883SKrzysztof Drewniak;
3314697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i4:
3315697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3316697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3317697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3318697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3319697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3320697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3321697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3322697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3323697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3324697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3325697c1883SKrzysztof Drewniak  store <2 x i4> %data, ptr addrspace(7) %p
3326697c1883SKrzysztof Drewniak  ret void
3327697c1883SKrzysztof Drewniak}
3328697c1883SKrzysztof Drewniak
3329697c1883SKrzysztof Drewniakdefine <4 x i4> @load_v4i4(ptr addrspace(8) inreg %buf) {
3330697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v4i4:
3331697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3332697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3333697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3334697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v2, 15
3335697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3336697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[0:3], s32
3337697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v1, off, s[0:3], s32
3338697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3339697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b16_e32 v4, 4, v1
3340697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v1
3341697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b16_e32 v3, 12, v1
3342697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:DWORD
3343697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 15, v4
3344697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3345697c1883SKrzysztof Drewniak;
3346697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v4i4:
3347697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3348697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3349697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3350697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3351697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3352697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 8, v0
3353697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 12, v0
3354697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3355697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3356697c1883SKrzysztof Drewniak  %ret = load <4 x i4>, ptr addrspace(7) %p
3357697c1883SKrzysztof Drewniak  ret <4 x i4> %ret
3358697c1883SKrzysztof Drewniak}
3359697c1883SKrzysztof Drewniak
3360697c1883SKrzysztof Drewniakdefine void @store_v4i4(<4 x i4> %data, ptr addrspace(8) inreg %buf) {
3361697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v4i4:
3362697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3363697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3364697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 15, v1
3365697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v0
3366697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3367697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3368697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, 15
3369697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3370697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3371697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 12, v3
3372697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3373697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
3374697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3375697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3376697c1883SKrzysztof Drewniak;
3377697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v4i4:
3378697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3379697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3380697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3381697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 15, v0
3382697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 4, v1
3383697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3384697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, 15
3385697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_sdwa v1, v2, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3386697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3387697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 15, v3
3388697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 12, v1
3389697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3390697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
3391697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3392697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3393697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3394697c1883SKrzysztof Drewniak  store <4 x i4> %data, ptr addrspace(7) %p
3395697c1883SKrzysztof Drewniak  ret void
3396697c1883SKrzysztof Drewniak}
3397697c1883SKrzysztof Drewniak
3398697c1883SKrzysztof Drewniakdefine <8 x i4> @load_v8i4(ptr addrspace(8) inreg %buf) {
3399697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v8i4:
3400697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3401697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3402697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v7, off, s[16:19], 0
3403697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3404697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 15, v7
3405697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v1, v7, 4, 4
3406697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v2, v7, 8, 4
3407697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v3, v7, 12, 4
3408697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v4, v7, 16, 4
3409697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v5, v7, 20, 4
3410697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v6, v7, 24, 4
3411697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 28, v7
3412697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3413697c1883SKrzysztof Drewniak;
3414697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v8i4:
3415697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3416697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3417697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3418697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3419697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 4, v0
3420697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 8, v0
3421697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 12, v0
3422697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v4, 16, v0
3423697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 20, v0
3424697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v6, 24, v0
3425697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v7, 28, v0
3426697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3427697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3428697c1883SKrzysztof Drewniak  %ret = load <8 x i4>, ptr addrspace(7) %p
3429697c1883SKrzysztof Drewniak  ret <8 x i4> %ret
3430697c1883SKrzysztof Drewniak}
3431697c1883SKrzysztof Drewniak
3432697c1883SKrzysztof Drewniakdefine void @store_v8i4(<8 x i4> %data, ptr addrspace(8) inreg %buf) {
3433697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v8i4:
3434697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3435697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3436697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 15, v1
3437697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3438697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_or_b32 v0, v0, 15, v1
3439697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 15, v3
3440697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v2, 15, v2
3441697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 12, v1
3442697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b32_e32 v2, 8, v2
3443697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or3_b32 v0, v0, v2, v1
3444697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 15, v5
3445697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v2, 15
3446697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 20, v1
3447697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_sdwa v3, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3448697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or3_b32 v0, v0, v3, v1
3449697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b32_e32 v1, 28, v7
3450697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_sdwa v2, v6, v2 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3451697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or3_b32 v0, v0, v2, v1
3452697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3453697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3454697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3455697c1883SKrzysztof Drewniak;
3456697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v8i4:
3457697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3458697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3459697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 15, v1
3460697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3461697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, 15, v1
3462697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 15, v2
3463697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 15, v3
3464697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 8, v1
3465697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 12, v2
3466697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3467697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v1, 15
3468697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v3, 15, v5
3469697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_sdwa v2, v4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3470697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v3, 20, v3
3471697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v2, v3
3472697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 15, v7
3473697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_sdwa v1, v6, v1 dst_sel:BYTE_3 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
3474697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 28, v2
3475697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3476697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3477697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3478697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3479697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3480697c1883SKrzysztof Drewniak  store <8 x i4> %data, ptr addrspace(7) %p
3481697c1883SKrzysztof Drewniak  ret void
3482697c1883SKrzysztof Drewniak}
3483697c1883SKrzysztof Drewniak
3484697c1883SKrzysztof Drewniak;;; Vectors of non-byte-sized integers.
3485697c1883SKrzysztof Drewniak
3486697c1883SKrzysztof Drewniakdefine <2 x i6> @load_v2i6(ptr addrspace(8) inreg %buf) {
3487697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v2i6:
3488697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3489697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3490697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v1, off, s[16:19], 0
3491697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3492697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 63, v1
3493697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_bfe_u32 v1, v1, 6, 6
3494697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3495697c1883SKrzysztof Drewniak;
3496697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v2i6:
3497697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3498697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3499697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v0, off, s[16:19], 0
3500697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3501697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b16_e32 v1, 6, v0
3502697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3503697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3504697c1883SKrzysztof Drewniak  %ret = load <2 x i6>, ptr addrspace(7) %p
3505697c1883SKrzysztof Drewniak  ret <2 x i6> %ret
3506697c1883SKrzysztof Drewniak}
3507697c1883SKrzysztof Drewniak
3508697c1883SKrzysztof Drewniakdefine void @store_v2i6(<2 x i6> %data, ptr addrspace(8) inreg %buf) {
3509697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v2i6:
3510697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3511697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3512697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 6, v1
3513697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 63, v0
3514697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_e32 v0, v0, v1
3515697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0xfff, v0
3516697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3517697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v0, off, s[16:19], 0
3518697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3519697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3520697c1883SKrzysztof Drewniak;
3521697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v2i6:
3522697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3523697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3524697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 63, v1
3525697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 63, v0
3526697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 6, v1
3527697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_e32 v0, v0, v1
3528697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xfff, v0
3529697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v0, off, s[16:19], 0
3530697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3531697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3532697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3533697c1883SKrzysztof Drewniak  store <2 x i6> %data, ptr addrspace(7) %p
3534697c1883SKrzysztof Drewniak  ret void
3535697c1883SKrzysztof Drewniak}
3536697c1883SKrzysztof Drewniak
3537697c1883SKrzysztof Drewniak;; Blocks of fp6 elements
3538697c1883SKrzysztof Drewniakdefine <6 x i32> @load_v32i6(ptr addrspace(8) inreg %buf) {
3539697c1883SKrzysztof Drewniak; SDAG-LABEL: load_v32i6:
3540697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3541697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3542697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3543697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3544697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3545697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3546697c1883SKrzysztof Drewniak;
3547697c1883SKrzysztof Drewniak; GISEL-LABEL: load_v32i6:
3548697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3549697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3550697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3551697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3552697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3553697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3554697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3555697c1883SKrzysztof Drewniak  %ret = load <32 x i6>, ptr addrspace(7) %p
3556697c1883SKrzysztof Drewniak  %ret.cast = bitcast <32 x i6> %ret to <6 x i32>
3557697c1883SKrzysztof Drewniak  ret <6 x i32> %ret.cast
3558697c1883SKrzysztof Drewniak}
3559697c1883SKrzysztof Drewniak
3560697c1883SKrzysztof Drewniakdefine void @store_v32i6(<6 x i32> %data.abi, ptr addrspace(8) inreg %buf) {
3561697c1883SKrzysztof Drewniak; SDAG-LABEL: store_v32i6:
3562697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3563697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3564697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3565697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3566697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3567697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3568697c1883SKrzysztof Drewniak;
3569697c1883SKrzysztof Drewniak; GISEL-LABEL: store_v32i6:
3570697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3571697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3572697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3573697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[4:5], off, s[16:19], 0 offset:16
3574697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3575697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3576697c1883SKrzysztof Drewniak  %data = bitcast <6 x i32> %data.abi to <32 x i6>
3577697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3578697c1883SKrzysztof Drewniak  store <32 x i6> %data, ptr addrspace(7) %p
3579697c1883SKrzysztof Drewniak  ret void
3580697c1883SKrzysztof Drewniak}
3581697c1883SKrzysztof Drewniak
3582697c1883SKrzysztof Drewniak;;; Modifiers
3583697c1883SKrzysztof Drewniak
3584697c1883SKrzysztof Drewniakdefine <4 x i8> @volatile_load_v4i8(ptr addrspace(8) inreg %buf) {
3585697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_load_v4i8:
3586697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3587697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3588697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3589697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3590697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3591697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3592697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3593697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3594697c1883SKrzysztof Drewniak;
3595697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_load_v4i8:
3596697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3597697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3598697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3599697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3600697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3601697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3602697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3603697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3604697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3605697c1883SKrzysztof Drewniak  %ret = load volatile <4 x i8>, ptr addrspace(7) %p
3606697c1883SKrzysztof Drewniak  ret <4 x i8> %ret
3607697c1883SKrzysztof Drewniak}
3608697c1883SKrzysztof Drewniak
3609697c1883SKrzysztof Drewniakdefine void @volatile_store_v4i8(<4 x i8> %data, ptr addrspace(8) inreg %buf) {
3610697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_store_v4i8:
3611697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3612697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3613697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3614697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3615697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
3616697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3617697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3618697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3619697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3620697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3621697c1883SKrzysztof Drewniak;
3622697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_store_v4i8:
3623697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3624697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3625697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v5, 8
3626697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_mov_b32_e32 v4, 0xff
3627697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_0
3628697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_or_b32 v0, v0, v4, v1
3629697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v2
3630697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v3
3631697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
3632697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b32_e32 v2, 24, v2
3633697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or3_b32 v0, v0, v1, v2
3634697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3635697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3636697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3637697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3638697c1883SKrzysztof Drewniak  store volatile <4 x i8> %data, ptr addrspace(7) %p
3639697c1883SKrzysztof Drewniak  ret void
3640697c1883SKrzysztof Drewniak}
3641697c1883SKrzysztof Drewniak
3642697c1883SKrzysztof Drewniakdefine <6 x i8> @volatile_load_v6i8(ptr addrspace(8) inreg %buf) {
3643697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_load_v6i8:
3644697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3645697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3646697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3647697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ushort v6, off, s[16:19], 0 offset:4 glc
3648697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(1)
3649697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v7, 8, v0
3650697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3651697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v1, 0xffff, v6
3652697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b64 v[3:4], 24, v[0:1]
3653697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3654697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshrrev_b32_e32 v5, 8, v1
3655697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v4, v6
3656697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_mov_b32_e32 v1, v7
3657697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3658697c1883SKrzysztof Drewniak;
3659697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_load_v6i8:
3660697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3661697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0 glc
3663697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ushort v4, off, s[16:19], 0 offset:4 glc
3664697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(1)
3665697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
3666697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v1, 8, v0
3667697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v3, 24, v0
3668697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3669697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshrrev_b32_e32 v5, 8, v4
3670697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3671697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3672697c1883SKrzysztof Drewniak  %ret = load volatile <6 x i8>, ptr addrspace(7) %p
3673697c1883SKrzysztof Drewniak  ret <6 x i8> %ret
3674697c1883SKrzysztof Drewniak}
3675697c1883SKrzysztof Drewniak
3676697c1883SKrzysztof Drewniakdefine void @volatile_store_v6i8(<6 x i8> %data, ptr addrspace(8) inreg %buf) {
3677697c1883SKrzysztof Drewniak; SDAG-LABEL: volatile_store_v6i8:
3678697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3679697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3680697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3681697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3682697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v1, 8, v3
3683697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3684697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_lshlrev_b16_e32 v5, 8, v5
3685697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3686697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_or_b32_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3687697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3688697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_short v4, off, s[16:19], 0 offset:4
3689697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3690697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3691697c1883SKrzysztof Drewniak;
3692697c1883SKrzysztof Drewniak; GISEL-LABEL: volatile_store_v6i8:
3693697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3694697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3695697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v1
3696697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3697697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3698697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v1, 0xff, v3
3699697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v1, 8, v1
3700697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3701697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v2, 0xff, v5
3702697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3703697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshlrev_b16_e32 v2, 8, v2
3704697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
3705697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
3706697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3707697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_short v2, off, s[16:19], 0 offset:4
3708697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3709697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3710697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3711697c1883SKrzysztof Drewniak  store volatile <6 x i8> %data, ptr addrspace(7) %p
3712697c1883SKrzysztof Drewniak  ret void
3713697c1883SKrzysztof Drewniak}
3714697c1883SKrzysztof Drewniak
3715697c1883SKrzysztof Drewniakdefine [2 x [2 x i32]] @load_a2a2i32(ptr addrspace(8) inreg %buf) {
3716697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2a2i32:
3717697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3718697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3719697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3720697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3721697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3722697c1883SKrzysztof Drewniak;
3723697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2a2i32:
3724697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3725697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3727697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3728697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3729697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3730697c1883SKrzysztof Drewniak  %ret = load [2 x [2 x i32]], ptr addrspace(7) %p
3731697c1883SKrzysztof Drewniak  ret [2 x [2 x i32]] %ret
3732697c1883SKrzysztof Drewniak}
3733697c1883SKrzysztof Drewniak
3734697c1883SKrzysztof Drewniakdefine void @store_a2a2i32([2 x [2 x i32]] %data, ptr addrspace(8) inreg %buf) {
3735697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2a2i32:
3736697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3737697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3738697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3739697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3740697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3741697c1883SKrzysztof Drewniak;
3742697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2a2i32:
3743697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3744697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3745697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3746697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3747697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3748697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3749697c1883SKrzysztof Drewniak  store [2 x [2 x i32]] %data, ptr addrspace(7) %p
3750697c1883SKrzysztof Drewniak  ret void
3751697c1883SKrzysztof Drewniak}
3752697c1883SKrzysztof Drewniak
3753697c1883SKrzysztof Drewniakdefine [2 x <2 x i32>] @load_a2v2i32(ptr addrspace(8) inreg %buf) {
3754697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a2v2i32:
3755697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3756697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3757697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3758697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3759697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3760697c1883SKrzysztof Drewniak;
3761697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a2v2i32:
3762697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3763697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3764697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx4 v[0:3], off, s[16:19], 0
3765697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3766697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3767697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3768697c1883SKrzysztof Drewniak  %ret = load [2 x <2 x i32>], ptr addrspace(7) %p
3769697c1883SKrzysztof Drewniak  ret [2 x <2 x i32>] %ret
3770697c1883SKrzysztof Drewniak}
3771697c1883SKrzysztof Drewniak
3772697c1883SKrzysztof Drewniakdefine void @store_a2v2i32([2 x <2 x i32>] %data, ptr addrspace(8) inreg %buf) {
3773697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a2v2i32:
3774697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3775697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3776697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3777697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3778697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3779697c1883SKrzysztof Drewniak;
3780697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a2v2i32:
3781697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3782697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3783697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
3784697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3785697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3786697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3787697c1883SKrzysztof Drewniak  store [2 x <2 x i32>] %data, ptr addrspace(7) %p
3788697c1883SKrzysztof Drewniak  ret void
3789697c1883SKrzysztof Drewniak}
3790697c1883SKrzysztof Drewniak
3791697c1883SKrzysztof Drewniakdefine { i32 } @load_sl_i32s(ptr addrspace(8) inreg %buf) {
3792697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_i32s:
3793697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3794697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3795697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3796697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3797697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3798697c1883SKrzysztof Drewniak;
3799697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_i32s:
3800697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3801697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3802697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3803697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3804697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3805697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3806697c1883SKrzysztof Drewniak  %ret = load { i32 }, ptr addrspace(7) %p
3807697c1883SKrzysztof Drewniak  ret { i32 } %ret
3808697c1883SKrzysztof Drewniak}
3809697c1883SKrzysztof Drewniak
3810697c1883SKrzysztof Drewniakdefine void @store_sl_i32s({ i32 } %data, ptr addrspace(8) inreg %buf) {
3811697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_i32s:
3812697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3813697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3814697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3815697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3816697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3817697c1883SKrzysztof Drewniak;
3818697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_i32s:
3819697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3820697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3821697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3822697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3823697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3824697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3825697c1883SKrzysztof Drewniak  store { i32 } %data, ptr addrspace(7) %p
3826697c1883SKrzysztof Drewniak  ret void
3827697c1883SKrzysztof Drewniak}
3828697c1883SKrzysztof Drewniak
3829697c1883SKrzysztof Drewniakdefine { { float } } @load_sl_sl_f32ss(ptr addrspace(8) inreg %buf) {
3830697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_sl_f32ss:
3831697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3832697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3833697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3834697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3835697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3836697c1883SKrzysztof Drewniak;
3837697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_sl_f32ss:
3838697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3839697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3840697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dword v0, off, s[16:19], 0
3841697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3842697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3843697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3844697c1883SKrzysztof Drewniak  %ret = load { { float } }, ptr addrspace(7) %p
3845697c1883SKrzysztof Drewniak  ret { { float } } %ret
3846697c1883SKrzysztof Drewniak}
3847697c1883SKrzysztof Drewniak
3848697c1883SKrzysztof Drewniakdefine void @store_sl_sl_f32ss({ { float } } %data, ptr addrspace(8) inreg %buf) {
3849697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_sl_f32ss:
3850697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3851697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3852697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3853697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3854697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3855697c1883SKrzysztof Drewniak;
3856697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_sl_f32ss:
3857697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3858697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3859697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dword v0, off, s[16:19], 0
3860697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3861697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3862697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3863697c1883SKrzysztof Drewniak  store { { float } } %data, ptr addrspace(7) %p
3864697c1883SKrzysztof Drewniak  ret void
3865697c1883SKrzysztof Drewniak}
3866697c1883SKrzysztof Drewniak
3867697c1883SKrzysztof Drewniakdefine { <2 x i32> } @load_sl_v2i32s(ptr addrspace(8) inreg %buf) {
3868697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_v2i32s:
3869697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3870697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3871697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3872697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3873697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3874697c1883SKrzysztof Drewniak;
3875697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_v2i32s:
3876697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3877697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3878697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx2 v[0:1], off, s[16:19], 0
3879697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3880697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3881697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3882697c1883SKrzysztof Drewniak  %ret = load { <2 x i32> }, ptr addrspace(7) %p
3883697c1883SKrzysztof Drewniak  ret { <2 x i32> } %ret
3884697c1883SKrzysztof Drewniak}
3885697c1883SKrzysztof Drewniak
3886697c1883SKrzysztof Drewniakdefine void @store_sl_v2i32s({ <2 x i32> } %data, ptr addrspace(8) inreg %buf) {
3887697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_v2i32s:
3888697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3889697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3890697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3891697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3892697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3893697c1883SKrzysztof Drewniak;
3894697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_v2i32s:
3895697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3896697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3897697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx2 v[0:1], off, s[16:19], 0
3898697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3899697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3900697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3901697c1883SKrzysztof Drewniak  store { <2 x i32> } %data, ptr addrspace(7) %p
3902697c1883SKrzysztof Drewniak  ret void
3903697c1883SKrzysztof Drewniak}
3904697c1883SKrzysztof Drewniak
3905697c1883SKrzysztof Drewniakdefine { i64, i32 } @load_sl_i64i32s(ptr addrspace(8) inreg %buf) {
3906697c1883SKrzysztof Drewniak; SDAG-LABEL: load_sl_i64i32s:
3907697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3908697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3909697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3910697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3911697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3912697c1883SKrzysztof Drewniak;
3913697c1883SKrzysztof Drewniak; GISEL-LABEL: load_sl_i64i32s:
3914697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3915697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3916697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_dwordx3 v[0:2], off, s[16:19], 0
3917697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3918697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3919697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3920697c1883SKrzysztof Drewniak  %ret = load { i64, i32 }, ptr addrspace(7) %p
3921697c1883SKrzysztof Drewniak  ret { i64, i32 } %ret
3922697c1883SKrzysztof Drewniak}
3923697c1883SKrzysztof Drewniak
3924697c1883SKrzysztof Drewniakdefine void @store_sl_i64i32s({ i64, i32 } %data, ptr addrspace(8) inreg %buf) {
3925697c1883SKrzysztof Drewniak; SDAG-LABEL: store_sl_i64i32s:
3926697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3927697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3928697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3929697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3930697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3931697c1883SKrzysztof Drewniak;
3932697c1883SKrzysztof Drewniak; GISEL-LABEL: store_sl_i64i32s:
3933697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3934697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3935697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_dwordx3 v[0:2], off, s[16:19], 0
3936697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3937697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3938697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3939697c1883SKrzysztof Drewniak  store { i64, i32 } %data, ptr addrspace(7) %p
3940697c1883SKrzysztof Drewniak  ret void
3941697c1883SKrzysztof Drewniak}
3942697c1883SKrzysztof Drewniak
3943697c1883SKrzysztof Drewniakdefine [4 x i7] @load_a4i7(ptr addrspace(8) inreg %buf) {
3944697c1883SKrzysztof Drewniak; SDAG-LABEL: load_a4i7:
3945697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3946697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3947697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3948697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3949697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3950697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3951697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3952697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3953697c1883SKrzysztof Drewniak;
3954697c1883SKrzysztof Drewniak; GISEL-LABEL: load_a4i7:
3955697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3956697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3957697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v0, off, s[16:19], 0
3958697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v1, off, s[16:19], 0 offset:1
3959697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v2, off, s[16:19], 0 offset:2
3960697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_load_ubyte v3, off, s[16:19], 0 offset:3
3961697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3962697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3963697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3964697c1883SKrzysztof Drewniak  %ret = load [4 x i7], ptr addrspace(7) %p
3965697c1883SKrzysztof Drewniak  ret [4 x i7] %ret
3966697c1883SKrzysztof Drewniak}
3967697c1883SKrzysztof Drewniak
3968697c1883SKrzysztof Drewniakdefine void @store_a4i7([4 x i7] %data, ptr addrspace(8) inreg %buf) {
3969697c1883SKrzysztof Drewniak; SDAG-LABEL: store_a4i7:
3970697c1883SKrzysztof Drewniak; SDAG:       ; %bb.0:
3971697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3972697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3973697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3974697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v1
3975697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:1
3976697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v2
3977697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:2
3978697c1883SKrzysztof Drewniak; SDAG-NEXT:    v_and_b32_e32 v0, 0x7f, v3
3979697c1883SKrzysztof Drewniak; SDAG-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:3
3980697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_waitcnt vmcnt(0)
3981697c1883SKrzysztof Drewniak; SDAG-NEXT:    s_setpc_b64 s[30:31]
3982697c1883SKrzysztof Drewniak;
3983697c1883SKrzysztof Drewniak; GISEL-LABEL: store_a4i7:
3984697c1883SKrzysztof Drewniak; GISEL:       ; %bb.0:
3985697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3986697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v0
3987697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0
3988697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v1
3989697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:1
3990697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v2
3991697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:2
3992697c1883SKrzysztof Drewniak; GISEL-NEXT:    v_and_b32_e32 v0, 0x7f, v3
3993697c1883SKrzysztof Drewniak; GISEL-NEXT:    buffer_store_byte v0, off, s[16:19], 0 offset:3
3994697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_waitcnt vmcnt(0)
3995697c1883SKrzysztof Drewniak; GISEL-NEXT:    s_setpc_b64 s[30:31]
3996697c1883SKrzysztof Drewniak  %p = addrspacecast ptr addrspace(8) %buf to ptr addrspace(7)
3997697c1883SKrzysztof Drewniak  store [4 x i7] %data, ptr addrspace(7) %p
3998697c1883SKrzysztof Drewniak  ret void
3999697c1883SKrzysztof Drewniak}
4000