[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / image-load-d16-tfe.ll
blob83b650e2d755e23cbb43e0b88dc8bbacff2a446f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX9 %s
3 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX10 %s
4 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX11 %s
5 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8-UNPACKED %s
7 define amdgpu_ps void @load_1d_f16_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
8 ; GFX9-LABEL: load_1d_f16_tfe_dmask0:
9 ; GFX9:       ; %bb.0:
10 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
11 ; GFX9-NEXT:    s_mov_b32 s11, s9
12 ; GFX9-NEXT:    s_mov_b32 s10, s8
13 ; GFX9-NEXT:    s_mov_b32 s9, s7
14 ; GFX9-NEXT:    s_mov_b32 s8, s6
15 ; GFX9-NEXT:    s_mov_b32 s7, s5
16 ; GFX9-NEXT:    s_mov_b32 s6, s4
17 ; GFX9-NEXT:    s_mov_b32 s5, s3
18 ; GFX9-NEXT:    s_mov_b32 s4, s2
19 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
20 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
21 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
22 ; GFX9-NEXT:    global_store_short v[0:1], v1, off
23 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
24 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
25 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
26 ; GFX9-NEXT:    s_endpgm
28 ; GFX10-LABEL: load_1d_f16_tfe_dmask0:
29 ; GFX10:       ; %bb.0:
30 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
31 ; GFX10-NEXT:    s_mov_b32 s11, s9
32 ; GFX10-NEXT:    s_mov_b32 s10, s8
33 ; GFX10-NEXT:    s_mov_b32 s9, s7
34 ; GFX10-NEXT:    s_mov_b32 s8, s6
35 ; GFX10-NEXT:    s_mov_b32 s7, s5
36 ; GFX10-NEXT:    s_mov_b32 s6, s4
37 ; GFX10-NEXT:    s_mov_b32 s5, s3
38 ; GFX10-NEXT:    s_mov_b32 s4, s2
39 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
40 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
41 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
42 ; GFX10-NEXT:    global_store_short v[0:1], v1, off
43 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
44 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
45 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
46 ; GFX10-NEXT:    s_endpgm
48 ; GFX11-LABEL: load_1d_f16_tfe_dmask0:
49 ; GFX11:       ; %bb.0:
50 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
51 ; GFX11-NEXT:    s_mov_b32 s11, s9
52 ; GFX11-NEXT:    s_mov_b32 s10, s8
53 ; GFX11-NEXT:    s_mov_b32 s9, s7
54 ; GFX11-NEXT:    s_mov_b32 s8, s6
55 ; GFX11-NEXT:    s_mov_b32 s7, s5
56 ; GFX11-NEXT:    s_mov_b32 s6, s4
57 ; GFX11-NEXT:    s_mov_b32 s5, s3
58 ; GFX11-NEXT:    s_mov_b32 s4, s2
59 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
60 ; GFX11-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
61 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
62 ; GFX11-NEXT:    global_store_b16 v[0:1], v1, off dlc
63 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
64 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off dlc
65 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
66 ; GFX11-NEXT:    s_nop 0
67 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
68 ; GFX11-NEXT:    s_endpgm
70 ; GFX8-UNPACKED-LABEL: load_1d_f16_tfe_dmask0:
71 ; GFX8-UNPACKED:       ; %bb.0:
72 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
73 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
74 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
75 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
76 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
77 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
78 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
79 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
80 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
81 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
82 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
83 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
84 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v1
85 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
86 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
87 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
88 ; GFX8-UNPACKED-NEXT:    s_endpgm
89   %v = call { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
90   %v.data = extractvalue { half, i32 } %v, 0
91   %v.err = extractvalue { half, i32 } %v, 1
92   store volatile half %v.data, ptr addrspace(1) undef
93   store volatile i32 %v.err, ptr addrspace(1) undef
94   ret void
97 define amdgpu_ps void @load_1d_f16_tfe_dmask1(<8 x i32> inreg %rsrc, i32 %s) {
98 ; GFX9-LABEL: load_1d_f16_tfe_dmask1:
99 ; GFX9:       ; %bb.0:
100 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
101 ; GFX9-NEXT:    s_mov_b32 s11, s9
102 ; GFX9-NEXT:    s_mov_b32 s10, s8
103 ; GFX9-NEXT:    s_mov_b32 s9, s7
104 ; GFX9-NEXT:    s_mov_b32 s8, s6
105 ; GFX9-NEXT:    s_mov_b32 s7, s5
106 ; GFX9-NEXT:    s_mov_b32 s6, s4
107 ; GFX9-NEXT:    s_mov_b32 s5, s3
108 ; GFX9-NEXT:    s_mov_b32 s4, s2
109 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
110 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
111 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
112 ; GFX9-NEXT:    global_store_short v[0:1], v1, off
113 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
114 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
115 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
116 ; GFX9-NEXT:    s_endpgm
118 ; GFX10-LABEL: load_1d_f16_tfe_dmask1:
119 ; GFX10:       ; %bb.0:
120 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
121 ; GFX10-NEXT:    s_mov_b32 s11, s9
122 ; GFX10-NEXT:    s_mov_b32 s10, s8
123 ; GFX10-NEXT:    s_mov_b32 s9, s7
124 ; GFX10-NEXT:    s_mov_b32 s8, s6
125 ; GFX10-NEXT:    s_mov_b32 s7, s5
126 ; GFX10-NEXT:    s_mov_b32 s6, s4
127 ; GFX10-NEXT:    s_mov_b32 s5, s3
128 ; GFX10-NEXT:    s_mov_b32 s4, s2
129 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
130 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
131 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
132 ; GFX10-NEXT:    global_store_short v[0:1], v1, off
133 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
134 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
135 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
136 ; GFX10-NEXT:    s_endpgm
138 ; GFX11-LABEL: load_1d_f16_tfe_dmask1:
139 ; GFX11:       ; %bb.0:
140 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
141 ; GFX11-NEXT:    s_mov_b32 s11, s9
142 ; GFX11-NEXT:    s_mov_b32 s10, s8
143 ; GFX11-NEXT:    s_mov_b32 s9, s7
144 ; GFX11-NEXT:    s_mov_b32 s8, s6
145 ; GFX11-NEXT:    s_mov_b32 s7, s5
146 ; GFX11-NEXT:    s_mov_b32 s6, s4
147 ; GFX11-NEXT:    s_mov_b32 s5, s3
148 ; GFX11-NEXT:    s_mov_b32 s4, s2
149 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
150 ; GFX11-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
151 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
152 ; GFX11-NEXT:    global_store_b16 v[0:1], v1, off dlc
153 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
154 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off dlc
155 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
156 ; GFX11-NEXT:    s_nop 0
157 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
158 ; GFX11-NEXT:    s_endpgm
160 ; GFX8-UNPACKED-LABEL: load_1d_f16_tfe_dmask1:
161 ; GFX8-UNPACKED:       ; %bb.0:
162 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
163 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
164 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
165 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
166 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
167 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
168 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
169 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
170 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
171 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
172 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
173 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
174 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v1
175 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
176 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
177 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
178 ; GFX8-UNPACKED-NEXT:    s_endpgm
179   %v = call { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
180   %v.data = extractvalue { half, i32 } %v, 0
181   %v.err = extractvalue { half, i32 } %v, 1
182   store volatile half %v.data, ptr addrspace(1) undef
183   store volatile i32 %v.err, ptr addrspace(1) undef
184   ret void
187 define amdgpu_ps void @load_1d_v2f16_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
188 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask0:
189 ; GFX9:       ; %bb.0:
190 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
191 ; GFX9-NEXT:    s_mov_b32 s11, s9
192 ; GFX9-NEXT:    s_mov_b32 s10, s8
193 ; GFX9-NEXT:    s_mov_b32 s9, s7
194 ; GFX9-NEXT:    s_mov_b32 s8, s6
195 ; GFX9-NEXT:    s_mov_b32 s7, s5
196 ; GFX9-NEXT:    s_mov_b32 s6, s4
197 ; GFX9-NEXT:    s_mov_b32 s5, s3
198 ; GFX9-NEXT:    s_mov_b32 s4, s2
199 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
200 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
201 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
202 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
203 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
204 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
205 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
206 ; GFX9-NEXT:    s_endpgm
208 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask0:
209 ; GFX10:       ; %bb.0:
210 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
211 ; GFX10-NEXT:    s_mov_b32 s11, s9
212 ; GFX10-NEXT:    s_mov_b32 s10, s8
213 ; GFX10-NEXT:    s_mov_b32 s9, s7
214 ; GFX10-NEXT:    s_mov_b32 s8, s6
215 ; GFX10-NEXT:    s_mov_b32 s7, s5
216 ; GFX10-NEXT:    s_mov_b32 s6, s4
217 ; GFX10-NEXT:    s_mov_b32 s5, s3
218 ; GFX10-NEXT:    s_mov_b32 s4, s2
219 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
220 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
221 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
222 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
223 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
224 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
225 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
226 ; GFX10-NEXT:    s_endpgm
228 ; GFX11-LABEL: load_1d_v2f16_tfe_dmask0:
229 ; GFX11:       ; %bb.0:
230 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
231 ; GFX11-NEXT:    s_mov_b32 s11, s9
232 ; GFX11-NEXT:    s_mov_b32 s10, s8
233 ; GFX11-NEXT:    s_mov_b32 s9, s7
234 ; GFX11-NEXT:    s_mov_b32 s8, s6
235 ; GFX11-NEXT:    s_mov_b32 s7, s5
236 ; GFX11-NEXT:    s_mov_b32 s6, s4
237 ; GFX11-NEXT:    s_mov_b32 s5, s3
238 ; GFX11-NEXT:    s_mov_b32 s4, s2
239 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
240 ; GFX11-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
241 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
242 ; GFX11-NEXT:    global_store_b32 v[0:1], v1, off dlc
243 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
244 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off dlc
245 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
246 ; GFX11-NEXT:    s_nop 0
247 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
248 ; GFX11-NEXT:    s_endpgm
250 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask0:
251 ; GFX8-UNPACKED:       ; %bb.0:
252 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
253 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
254 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
255 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
256 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
257 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
258 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
259 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
260 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
261 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
262 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
263 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
264 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v1
265 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
266 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
267 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
268 ; GFX8-UNPACKED-NEXT:    s_endpgm
269   %v = call { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
270   %v.data = extractvalue { <2 x half>, i32 } %v, 0
271   %v.err = extractvalue { <2 x half>, i32 } %v, 1
272   store volatile <2 x half> %v.data, ptr addrspace(1) undef
273   store volatile i32 %v.err, ptr addrspace(1) undef
274   ret void
277 define amdgpu_ps void @load_1d_v2f16_tfe_dmask1(<8 x i32> inreg %rsrc, i32 %s) {
278 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask1:
279 ; GFX9:       ; %bb.0:
280 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
281 ; GFX9-NEXT:    s_mov_b32 s11, s9
282 ; GFX9-NEXT:    s_mov_b32 s10, s8
283 ; GFX9-NEXT:    s_mov_b32 s9, s7
284 ; GFX9-NEXT:    s_mov_b32 s8, s6
285 ; GFX9-NEXT:    s_mov_b32 s7, s5
286 ; GFX9-NEXT:    s_mov_b32 s6, s4
287 ; GFX9-NEXT:    s_mov_b32 s5, s3
288 ; GFX9-NEXT:    s_mov_b32 s4, s2
289 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
290 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
291 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
292 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
293 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
294 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
295 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
296 ; GFX9-NEXT:    s_endpgm
298 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask1:
299 ; GFX10:       ; %bb.0:
300 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
301 ; GFX10-NEXT:    s_mov_b32 s11, s9
302 ; GFX10-NEXT:    s_mov_b32 s10, s8
303 ; GFX10-NEXT:    s_mov_b32 s9, s7
304 ; GFX10-NEXT:    s_mov_b32 s8, s6
305 ; GFX10-NEXT:    s_mov_b32 s7, s5
306 ; GFX10-NEXT:    s_mov_b32 s6, s4
307 ; GFX10-NEXT:    s_mov_b32 s5, s3
308 ; GFX10-NEXT:    s_mov_b32 s4, s2
309 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
310 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
311 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
312 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
313 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
314 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
315 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
316 ; GFX10-NEXT:    s_endpgm
318 ; GFX11-LABEL: load_1d_v2f16_tfe_dmask1:
319 ; GFX11:       ; %bb.0:
320 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
321 ; GFX11-NEXT:    s_mov_b32 s11, s9
322 ; GFX11-NEXT:    s_mov_b32 s10, s8
323 ; GFX11-NEXT:    s_mov_b32 s9, s7
324 ; GFX11-NEXT:    s_mov_b32 s8, s6
325 ; GFX11-NEXT:    s_mov_b32 s7, s5
326 ; GFX11-NEXT:    s_mov_b32 s6, s4
327 ; GFX11-NEXT:    s_mov_b32 s5, s3
328 ; GFX11-NEXT:    s_mov_b32 s4, s2
329 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
330 ; GFX11-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
331 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
332 ; GFX11-NEXT:    global_store_b32 v[0:1], v1, off dlc
333 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
334 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off dlc
335 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
336 ; GFX11-NEXT:    s_nop 0
337 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
338 ; GFX11-NEXT:    s_endpgm
340 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask1:
341 ; GFX8-UNPACKED:       ; %bb.0:
342 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
343 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
344 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
345 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
346 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
347 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
348 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
349 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
350 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
351 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
352 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
353 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
354 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v1
355 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
356 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
357 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
358 ; GFX8-UNPACKED-NEXT:    s_endpgm
359   %v = call { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
360   %v.data = extractvalue { <2 x half>, i32 } %v, 0
361   %v.err = extractvalue { <2 x half>, i32 } %v, 1
362   store volatile <2 x half> %v.data, ptr addrspace(1) undef
363   store volatile i32 %v.err, ptr addrspace(1) undef
364   ret void
367 define amdgpu_ps void @load_1d_v2f16_tfe_dmask3(<8 x i32> inreg %rsrc, i32 %s) {
368 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask3:
369 ; GFX9:       ; %bb.0:
370 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
371 ; GFX9-NEXT:    s_mov_b32 s11, s9
372 ; GFX9-NEXT:    s_mov_b32 s10, s8
373 ; GFX9-NEXT:    s_mov_b32 s9, s7
374 ; GFX9-NEXT:    s_mov_b32 s8, s6
375 ; GFX9-NEXT:    s_mov_b32 s7, s5
376 ; GFX9-NEXT:    s_mov_b32 s6, s4
377 ; GFX9-NEXT:    s_mov_b32 s5, s3
378 ; GFX9-NEXT:    s_mov_b32 s4, s2
379 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
380 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x3 unorm tfe d16
381 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
382 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
383 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
384 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
385 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
386 ; GFX9-NEXT:    s_endpgm
388 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask3:
389 ; GFX10:       ; %bb.0:
390 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
391 ; GFX10-NEXT:    s_mov_b32 s11, s9
392 ; GFX10-NEXT:    s_mov_b32 s10, s8
393 ; GFX10-NEXT:    s_mov_b32 s9, s7
394 ; GFX10-NEXT:    s_mov_b32 s8, s6
395 ; GFX10-NEXT:    s_mov_b32 s7, s5
396 ; GFX10-NEXT:    s_mov_b32 s6, s4
397 ; GFX10-NEXT:    s_mov_b32 s5, s3
398 ; GFX10-NEXT:    s_mov_b32 s4, s2
399 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
400 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe d16
401 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
402 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
403 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
404 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
405 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
406 ; GFX10-NEXT:    s_endpgm
408 ; GFX11-LABEL: load_1d_v2f16_tfe_dmask3:
409 ; GFX11:       ; %bb.0:
410 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
411 ; GFX11-NEXT:    s_mov_b32 s11, s9
412 ; GFX11-NEXT:    s_mov_b32 s10, s8
413 ; GFX11-NEXT:    s_mov_b32 s9, s7
414 ; GFX11-NEXT:    s_mov_b32 s8, s6
415 ; GFX11-NEXT:    s_mov_b32 s7, s5
416 ; GFX11-NEXT:    s_mov_b32 s6, s4
417 ; GFX11-NEXT:    s_mov_b32 s5, s3
418 ; GFX11-NEXT:    s_mov_b32 s4, s2
419 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
420 ; GFX11-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe d16
421 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
422 ; GFX11-NEXT:    global_store_b32 v[0:1], v1, off dlc
423 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
424 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off dlc
425 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
426 ; GFX11-NEXT:    s_nop 0
427 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
428 ; GFX11-NEXT:    s_endpgm
430 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask3:
431 ; GFX8-UNPACKED:       ; %bb.0:
432 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
433 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
434 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
435 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
436 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
437 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
438 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
439 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
440 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
441 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
442 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
443 ; GFX8-UNPACKED-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x3 unorm tfe d16
444 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
445 ; GFX8-UNPACKED-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
446 ; GFX8-UNPACKED-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
447 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v0
448 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
449 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v3
450 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
451 ; GFX8-UNPACKED-NEXT:    s_endpgm
452   %v = call { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 3, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
453   %v.data = extractvalue { <2 x half>, i32 } %v, 0
454   %v.err = extractvalue { <2 x half>, i32 } %v, 1
455   store volatile <2 x half> %v.data, ptr addrspace(1) undef
456   store volatile i32 %v.err, ptr addrspace(1) undef
457   ret void
460 define amdgpu_ps void @load_1d_v3f16_tfe_dmask7(<8 x i32> inreg %rsrc, i32 %s) {
461 ; GFX9-LABEL: load_1d_v3f16_tfe_dmask7:
462 ; GFX9:       ; %bb.0:
463 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
464 ; GFX9-NEXT:    s_mov_b32 s11, s9
465 ; GFX9-NEXT:    s_mov_b32 s10, s8
466 ; GFX9-NEXT:    s_mov_b32 s9, s7
467 ; GFX9-NEXT:    s_mov_b32 s8, s6
468 ; GFX9-NEXT:    s_mov_b32 s7, s5
469 ; GFX9-NEXT:    s_mov_b32 s6, s4
470 ; GFX9-NEXT:    s_mov_b32 s5, s3
471 ; GFX9-NEXT:    s_mov_b32 s4, s2
472 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
473 ; GFX9-NEXT:    v_mov_b32_e32 v3, v1
474 ; GFX9-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x7 unorm tfe d16
475 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
476 ; GFX9-NEXT:    global_store_short v[0:1], v2, off
477 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
478 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
479 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
480 ; GFX9-NEXT:    global_store_dword v[0:1], v3, off
481 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
482 ; GFX9-NEXT:    s_endpgm
484 ; GFX10-LABEL: load_1d_v3f16_tfe_dmask7:
485 ; GFX10:       ; %bb.0:
486 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
487 ; GFX10-NEXT:    s_mov_b32 s11, s9
488 ; GFX10-NEXT:    s_mov_b32 s10, s8
489 ; GFX10-NEXT:    s_mov_b32 s9, s7
490 ; GFX10-NEXT:    s_mov_b32 s8, s6
491 ; GFX10-NEXT:    s_mov_b32 s7, s5
492 ; GFX10-NEXT:    s_mov_b32 s6, s4
493 ; GFX10-NEXT:    s_mov_b32 s5, s3
494 ; GFX10-NEXT:    s_mov_b32 s4, s2
495 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
496 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
497 ; GFX10-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe d16
498 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
499 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
500 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
501 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
502 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
503 ; GFX10-NEXT:    global_store_dword v[0:1], v3, off
504 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
505 ; GFX10-NEXT:    s_endpgm
507 ; GFX11-LABEL: load_1d_v3f16_tfe_dmask7:
508 ; GFX11:       ; %bb.0:
509 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
510 ; GFX11-NEXT:    s_mov_b32 s11, s9
511 ; GFX11-NEXT:    s_mov_b32 s10, s8
512 ; GFX11-NEXT:    s_mov_b32 s9, s7
513 ; GFX11-NEXT:    s_mov_b32 s8, s6
514 ; GFX11-NEXT:    s_mov_b32 s7, s5
515 ; GFX11-NEXT:    s_mov_b32 s6, s4
516 ; GFX11-NEXT:    s_mov_b32 s5, s3
517 ; GFX11-NEXT:    s_mov_b32 s4, s2
518 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
519 ; GFX11-NEXT:    v_mov_b32_e32 v3, v1
520 ; GFX11-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe d16
521 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
522 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off dlc
523 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
524 ; GFX11-NEXT:    global_store_b32 v[0:1], v1, off dlc
525 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
526 ; GFX11-NEXT:    global_store_b32 v[0:1], v3, off dlc
527 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
528 ; GFX11-NEXT:    s_nop 0
529 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
530 ; GFX11-NEXT:    s_endpgm
532 ; GFX8-UNPACKED-LABEL: load_1d_v3f16_tfe_dmask7:
533 ; GFX8-UNPACKED:       ; %bb.0:
534 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
535 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
536 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
537 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
538 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
539 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
540 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
541 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
542 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
543 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
544 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
545 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v4, v1
546 ; GFX8-UNPACKED-NEXT:    image_load v[1:4], v0, s[4:11] dmask:0x7 unorm tfe d16
547 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s0, 0x1000504
548 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
549 ; GFX8-UNPACKED-NEXT:    v_perm_b32 v0, v1, v2, s0
550 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v3
551 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
552 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v0
553 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
554 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v4
555 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
556 ; GFX8-UNPACKED-NEXT:    s_endpgm
557   %v = call { <3 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f16i32s.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
558   %v.data = extractvalue { <3 x half>, i32 } %v, 0
559   %v.err = extractvalue { <3 x half>, i32 } %v, 1
560   store volatile <3 x half> %v.data, ptr addrspace(1) undef
561   store volatile i32 %v.err, ptr addrspace(1) undef
562   ret void
565 define amdgpu_ps void @load_1d_v4f16_tfe_dmask15(<8 x i32> inreg %rsrc, i32 %s) {
566 ; GFX9-LABEL: load_1d_v4f16_tfe_dmask15:
567 ; GFX9:       ; %bb.0:
568 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
569 ; GFX9-NEXT:    s_mov_b32 s11, s9
570 ; GFX9-NEXT:    s_mov_b32 s10, s8
571 ; GFX9-NEXT:    s_mov_b32 s9, s7
572 ; GFX9-NEXT:    s_mov_b32 s8, s6
573 ; GFX9-NEXT:    s_mov_b32 s7, s5
574 ; GFX9-NEXT:    s_mov_b32 s6, s4
575 ; GFX9-NEXT:    s_mov_b32 s5, s3
576 ; GFX9-NEXT:    s_mov_b32 s4, s2
577 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
578 ; GFX9-NEXT:    v_mov_b32_e32 v3, v1
579 ; GFX9-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0xf unorm tfe d16
580 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
581 ; GFX9-NEXT:    global_store_dwordx2 v[0:1], v[1:2], off
582 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
583 ; GFX9-NEXT:    global_store_dword v[0:1], v3, off
584 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
585 ; GFX9-NEXT:    s_endpgm
587 ; GFX10-LABEL: load_1d_v4f16_tfe_dmask15:
588 ; GFX10:       ; %bb.0:
589 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
590 ; GFX10-NEXT:    s_mov_b32 s11, s9
591 ; GFX10-NEXT:    s_mov_b32 s10, s8
592 ; GFX10-NEXT:    s_mov_b32 s9, s7
593 ; GFX10-NEXT:    s_mov_b32 s8, s6
594 ; GFX10-NEXT:    s_mov_b32 s7, s5
595 ; GFX10-NEXT:    s_mov_b32 s6, s4
596 ; GFX10-NEXT:    s_mov_b32 s5, s3
597 ; GFX10-NEXT:    s_mov_b32 s4, s2
598 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
599 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
600 ; GFX10-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe d16
601 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
602 ; GFX10-NEXT:    global_store_dwordx2 v[0:1], v[1:2], off
603 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
604 ; GFX10-NEXT:    global_store_dword v[0:1], v3, off
605 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
606 ; GFX10-NEXT:    s_endpgm
608 ; GFX11-LABEL: load_1d_v4f16_tfe_dmask15:
609 ; GFX11:       ; %bb.0:
610 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
611 ; GFX11-NEXT:    s_mov_b32 s11, s9
612 ; GFX11-NEXT:    s_mov_b32 s10, s8
613 ; GFX11-NEXT:    s_mov_b32 s9, s7
614 ; GFX11-NEXT:    s_mov_b32 s8, s6
615 ; GFX11-NEXT:    s_mov_b32 s7, s5
616 ; GFX11-NEXT:    s_mov_b32 s6, s4
617 ; GFX11-NEXT:    s_mov_b32 s5, s3
618 ; GFX11-NEXT:    s_mov_b32 s4, s2
619 ; GFX11-NEXT:    v_mov_b32_e32 v2, v1
620 ; GFX11-NEXT:    v_mov_b32_e32 v3, v1
621 ; GFX11-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe d16
622 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
623 ; GFX11-NEXT:    global_store_b64 v[0:1], v[1:2], off dlc
624 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
625 ; GFX11-NEXT:    global_store_b32 v[0:1], v3, off dlc
626 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
627 ; GFX11-NEXT:    s_nop 0
628 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
629 ; GFX11-NEXT:    s_endpgm
631 ; GFX8-UNPACKED-LABEL: load_1d_v4f16_tfe_dmask15:
632 ; GFX8-UNPACKED:       ; %bb.0:
633 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
634 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
635 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
636 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
637 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
638 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
639 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
640 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
641 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
642 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
643 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
644 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v4, v1
645 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v5, v1
646 ; GFX8-UNPACKED-NEXT:    image_load v[1:5], v0, s[4:11] dmask:0xf unorm tfe d16
647 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s0, 0x1000504
648 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
649 ; GFX8-UNPACKED-NEXT:    v_perm_b32 v3, v3, v4, s0
650 ; GFX8-UNPACKED-NEXT:    v_perm_b32 v2, v1, v2, s0
651 ; GFX8-UNPACKED-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
652 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
653 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v5
654 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
655 ; GFX8-UNPACKED-NEXT:    s_endpgm
656   %v = call { <4 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f16i32s.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
657   %v.data = extractvalue { <4 x half>, i32 } %v, 0
658   %v.err = extractvalue { <4 x half>, i32 } %v, 1
659   store volatile <4 x half> %v.data, ptr addrspace(1) undef
660   store volatile i32 %v.err, ptr addrspace(1) undef
661   ret void
664 declare { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
665 declare { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
666 declare { <3 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
667 declare { <4 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
669 attributes #0 = { nounwind readonly }