[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / image-load-d16-tfe.ll
blob3ac0b09f327e72abe8bc4bdb2bc153b5a6e82750
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=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8-UNPACKED %s
6 define amdgpu_ps void @load_1d_f16_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
7 ; GFX9-LABEL: load_1d_f16_tfe_dmask0:
8 ; GFX9:       ; %bb.0:
9 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
10 ; GFX9-NEXT:    s_mov_b32 s11, s9
11 ; GFX9-NEXT:    s_mov_b32 s10, s8
12 ; GFX9-NEXT:    s_mov_b32 s9, s7
13 ; GFX9-NEXT:    s_mov_b32 s8, s6
14 ; GFX9-NEXT:    s_mov_b32 s7, s5
15 ; GFX9-NEXT:    s_mov_b32 s6, s4
16 ; GFX9-NEXT:    s_mov_b32 s5, s3
17 ; GFX9-NEXT:    s_mov_b32 s4, s2
18 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
19 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
20 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
21 ; GFX9-NEXT:    global_store_short v[0:1], v1, off
22 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
23 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
24 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
25 ; GFX9-NEXT:    s_endpgm
27 ; GFX10-LABEL: load_1d_f16_tfe_dmask0:
28 ; GFX10:       ; %bb.0:
29 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
30 ; GFX10-NEXT:    s_mov_b32 s11, s9
31 ; GFX10-NEXT:    s_mov_b32 s10, s8
32 ; GFX10-NEXT:    s_mov_b32 s9, s7
33 ; GFX10-NEXT:    s_mov_b32 s8, s6
34 ; GFX10-NEXT:    s_mov_b32 s7, s5
35 ; GFX10-NEXT:    s_mov_b32 s6, s4
36 ; GFX10-NEXT:    s_mov_b32 s5, s3
37 ; GFX10-NEXT:    s_mov_b32 s4, s2
38 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
39 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
40 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
41 ; GFX10-NEXT:    global_store_short v[0:1], v1, off
42 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
43 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
44 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
45 ; GFX10-NEXT:    s_endpgm
47 ; GFX8-UNPACKED-LABEL: load_1d_f16_tfe_dmask0:
48 ; GFX8-UNPACKED:       ; %bb.0:
49 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
50 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
51 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
52 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
53 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
54 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
55 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
56 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
57 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
58 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
59 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
60 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
61 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v1
62 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
63 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
64 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
65 ; GFX8-UNPACKED-NEXT:    s_endpgm
66   %v = call { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
67   %v.data = extractvalue { half, i32 } %v, 0
68   %v.err = extractvalue { half, i32 } %v, 1
69   store volatile half %v.data, half addrspace(1)* undef
70   store volatile i32 %v.err, i32 addrspace(1)* undef
71   ret void
74 define amdgpu_ps void @load_1d_f16_tfe_dmask1(<8 x i32> inreg %rsrc, i32 %s) {
75 ; GFX9-LABEL: load_1d_f16_tfe_dmask1:
76 ; GFX9:       ; %bb.0:
77 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
78 ; GFX9-NEXT:    s_mov_b32 s11, s9
79 ; GFX9-NEXT:    s_mov_b32 s10, s8
80 ; GFX9-NEXT:    s_mov_b32 s9, s7
81 ; GFX9-NEXT:    s_mov_b32 s8, s6
82 ; GFX9-NEXT:    s_mov_b32 s7, s5
83 ; GFX9-NEXT:    s_mov_b32 s6, s4
84 ; GFX9-NEXT:    s_mov_b32 s5, s3
85 ; GFX9-NEXT:    s_mov_b32 s4, s2
86 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
87 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
88 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
89 ; GFX9-NEXT:    global_store_short v[0:1], v1, off
90 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
91 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
92 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
93 ; GFX9-NEXT:    s_endpgm
95 ; GFX10-LABEL: load_1d_f16_tfe_dmask1:
96 ; GFX10:       ; %bb.0:
97 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
98 ; GFX10-NEXT:    s_mov_b32 s11, s9
99 ; GFX10-NEXT:    s_mov_b32 s10, s8
100 ; GFX10-NEXT:    s_mov_b32 s9, s7
101 ; GFX10-NEXT:    s_mov_b32 s8, s6
102 ; GFX10-NEXT:    s_mov_b32 s7, s5
103 ; GFX10-NEXT:    s_mov_b32 s6, s4
104 ; GFX10-NEXT:    s_mov_b32 s5, s3
105 ; GFX10-NEXT:    s_mov_b32 s4, s2
106 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
107 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
108 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
109 ; GFX10-NEXT:    global_store_short v[0:1], v1, off
110 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
111 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
112 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
113 ; GFX10-NEXT:    s_endpgm
115 ; GFX8-UNPACKED-LABEL: load_1d_f16_tfe_dmask1:
116 ; GFX8-UNPACKED:       ; %bb.0:
117 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
118 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
119 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
120 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
121 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
122 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
123 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
124 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
125 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
126 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
127 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
128 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
129 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v1
130 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
131 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
132 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
133 ; GFX8-UNPACKED-NEXT:    s_endpgm
134   %v = call { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 1, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
135   %v.data = extractvalue { half, i32 } %v, 0
136   %v.err = extractvalue { half, i32 } %v, 1
137   store volatile half %v.data, half addrspace(1)* undef
138   store volatile i32 %v.err, i32 addrspace(1)* undef
139   ret void
142 define amdgpu_ps void @load_1d_v2f16_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
143 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask0:
144 ; GFX9:       ; %bb.0:
145 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
146 ; GFX9-NEXT:    s_mov_b32 s11, s9
147 ; GFX9-NEXT:    s_mov_b32 s10, s8
148 ; GFX9-NEXT:    s_mov_b32 s9, s7
149 ; GFX9-NEXT:    s_mov_b32 s8, s6
150 ; GFX9-NEXT:    s_mov_b32 s7, s5
151 ; GFX9-NEXT:    s_mov_b32 s6, s4
152 ; GFX9-NEXT:    s_mov_b32 s5, s3
153 ; GFX9-NEXT:    s_mov_b32 s4, s2
154 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
155 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
156 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
157 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
158 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
159 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
160 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
161 ; GFX9-NEXT:    s_endpgm
163 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask0:
164 ; GFX10:       ; %bb.0:
165 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
166 ; GFX10-NEXT:    s_mov_b32 s11, s9
167 ; GFX10-NEXT:    s_mov_b32 s10, s8
168 ; GFX10-NEXT:    s_mov_b32 s9, s7
169 ; GFX10-NEXT:    s_mov_b32 s8, s6
170 ; GFX10-NEXT:    s_mov_b32 s7, s5
171 ; GFX10-NEXT:    s_mov_b32 s6, s4
172 ; GFX10-NEXT:    s_mov_b32 s5, s3
173 ; GFX10-NEXT:    s_mov_b32 s4, s2
174 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
175 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
176 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
177 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
178 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
179 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
180 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
181 ; GFX10-NEXT:    s_endpgm
183 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask0:
184 ; GFX8-UNPACKED:       ; %bb.0:
185 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
186 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
187 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
188 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
189 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
190 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
191 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
192 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
193 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
194 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
195 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
196 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
197 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v1
198 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
199 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
200 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
201 ; GFX8-UNPACKED-NEXT:    s_endpgm
202   %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)
203   %v.data = extractvalue { <2 x half>, i32 } %v, 0
204   %v.err = extractvalue { <2 x half>, i32 } %v, 1
205   store volatile <2 x half> %v.data, <2 x half> addrspace(1)* undef
206   store volatile i32 %v.err, i32 addrspace(1)* undef
207   ret void
210 define amdgpu_ps void @load_1d_v2f16_tfe_dmask1(<8 x i32> inreg %rsrc, i32 %s) {
211 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask1:
212 ; GFX9:       ; %bb.0:
213 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
214 ; GFX9-NEXT:    s_mov_b32 s11, s9
215 ; GFX9-NEXT:    s_mov_b32 s10, s8
216 ; GFX9-NEXT:    s_mov_b32 s9, s7
217 ; GFX9-NEXT:    s_mov_b32 s8, s6
218 ; GFX9-NEXT:    s_mov_b32 s7, s5
219 ; GFX9-NEXT:    s_mov_b32 s6, s4
220 ; GFX9-NEXT:    s_mov_b32 s5, s3
221 ; GFX9-NEXT:    s_mov_b32 s4, s2
222 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
223 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
224 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
225 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
226 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
227 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
228 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
229 ; GFX9-NEXT:    s_endpgm
231 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask1:
232 ; GFX10:       ; %bb.0:
233 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
234 ; GFX10-NEXT:    s_mov_b32 s11, s9
235 ; GFX10-NEXT:    s_mov_b32 s10, s8
236 ; GFX10-NEXT:    s_mov_b32 s9, s7
237 ; GFX10-NEXT:    s_mov_b32 s8, s6
238 ; GFX10-NEXT:    s_mov_b32 s7, s5
239 ; GFX10-NEXT:    s_mov_b32 s6, s4
240 ; GFX10-NEXT:    s_mov_b32 s5, s3
241 ; GFX10-NEXT:    s_mov_b32 s4, s2
242 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
243 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe d16
244 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
245 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
246 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
247 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
248 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
249 ; GFX10-NEXT:    s_endpgm
251 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask1:
252 ; GFX8-UNPACKED:       ; %bb.0:
253 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
254 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
255 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
256 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
257 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
258 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
259 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
260 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
261 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
262 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
263 ; GFX8-UNPACKED-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x1 unorm tfe d16
264 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
265 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v1
266 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
267 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v2
268 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
269 ; GFX8-UNPACKED-NEXT:    s_endpgm
270   %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)
271   %v.data = extractvalue { <2 x half>, i32 } %v, 0
272   %v.err = extractvalue { <2 x half>, i32 } %v, 1
273   store volatile <2 x half> %v.data, <2 x half> addrspace(1)* undef
274   store volatile i32 %v.err, i32 addrspace(1)* undef
275   ret void
278 define amdgpu_ps void @load_1d_v2f16_tfe_dmask3(<8 x i32> inreg %rsrc, i32 %s) {
279 ; GFX9-LABEL: load_1d_v2f16_tfe_dmask3:
280 ; GFX9:       ; %bb.0:
281 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
282 ; GFX9-NEXT:    s_mov_b32 s11, s9
283 ; GFX9-NEXT:    s_mov_b32 s10, s8
284 ; GFX9-NEXT:    s_mov_b32 s9, s7
285 ; GFX9-NEXT:    s_mov_b32 s8, s6
286 ; GFX9-NEXT:    s_mov_b32 s7, s5
287 ; GFX9-NEXT:    s_mov_b32 s6, s4
288 ; GFX9-NEXT:    s_mov_b32 s5, s3
289 ; GFX9-NEXT:    s_mov_b32 s4, s2
290 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
291 ; GFX9-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x3 unorm tfe d16
292 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
293 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
294 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
295 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
296 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
297 ; GFX9-NEXT:    s_endpgm
299 ; GFX10-LABEL: load_1d_v2f16_tfe_dmask3:
300 ; GFX10:       ; %bb.0:
301 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
302 ; GFX10-NEXT:    s_mov_b32 s11, s9
303 ; GFX10-NEXT:    s_mov_b32 s10, s8
304 ; GFX10-NEXT:    s_mov_b32 s9, s7
305 ; GFX10-NEXT:    s_mov_b32 s8, s6
306 ; GFX10-NEXT:    s_mov_b32 s7, s5
307 ; GFX10-NEXT:    s_mov_b32 s6, s4
308 ; GFX10-NEXT:    s_mov_b32 s5, s3
309 ; GFX10-NEXT:    s_mov_b32 s4, s2
310 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
311 ; GFX10-NEXT:    image_load v[1:2], v0, s[4:11] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm tfe d16
312 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
313 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
314 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
315 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
316 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
317 ; GFX10-NEXT:    s_endpgm
319 ; GFX8-UNPACKED-LABEL: load_1d_v2f16_tfe_dmask3:
320 ; GFX8-UNPACKED:       ; %bb.0:
321 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
322 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
323 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
324 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
325 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
326 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
327 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
328 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
329 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
330 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
331 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
332 ; GFX8-UNPACKED-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x3 unorm tfe d16
333 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
334 ; GFX8-UNPACKED-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
335 ; GFX8-UNPACKED-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
336 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v0
337 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
338 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v3
339 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
340 ; GFX8-UNPACKED-NEXT:    s_endpgm
341   %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)
342   %v.data = extractvalue { <2 x half>, i32 } %v, 0
343   %v.err = extractvalue { <2 x half>, i32 } %v, 1
344   store volatile <2 x half> %v.data, <2 x half> addrspace(1)* undef
345   store volatile i32 %v.err, i32 addrspace(1)* undef
346   ret void
349 define amdgpu_ps void @load_1d_v3f16_tfe_dmask7(<8 x i32> inreg %rsrc, i32 %s) {
350 ; GFX9-LABEL: load_1d_v3f16_tfe_dmask7:
351 ; GFX9:       ; %bb.0:
352 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
353 ; GFX9-NEXT:    s_mov_b32 s11, s9
354 ; GFX9-NEXT:    s_mov_b32 s10, s8
355 ; GFX9-NEXT:    s_mov_b32 s9, s7
356 ; GFX9-NEXT:    s_mov_b32 s8, s6
357 ; GFX9-NEXT:    s_mov_b32 s7, s5
358 ; GFX9-NEXT:    s_mov_b32 s6, s4
359 ; GFX9-NEXT:    s_mov_b32 s5, s3
360 ; GFX9-NEXT:    s_mov_b32 s4, s2
361 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
362 ; GFX9-NEXT:    v_mov_b32_e32 v3, v1
363 ; GFX9-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x7 unorm tfe d16
364 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
365 ; GFX9-NEXT:    global_store_short v[0:1], v2, off
366 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
367 ; GFX9-NEXT:    global_store_dword v[0:1], v1, off
368 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
369 ; GFX9-NEXT:    global_store_dword v[0:1], v3, off
370 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
371 ; GFX9-NEXT:    s_endpgm
373 ; GFX10-LABEL: load_1d_v3f16_tfe_dmask7:
374 ; GFX10:       ; %bb.0:
375 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
376 ; GFX10-NEXT:    s_mov_b32 s11, s9
377 ; GFX10-NEXT:    s_mov_b32 s10, s8
378 ; GFX10-NEXT:    s_mov_b32 s9, s7
379 ; GFX10-NEXT:    s_mov_b32 s8, s6
380 ; GFX10-NEXT:    s_mov_b32 s7, s5
381 ; GFX10-NEXT:    s_mov_b32 s6, s4
382 ; GFX10-NEXT:    s_mov_b32 s5, s3
383 ; GFX10-NEXT:    s_mov_b32 s4, s2
384 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
385 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
386 ; GFX10-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe d16
387 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
388 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
389 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
390 ; GFX10-NEXT:    global_store_dword v[0:1], v1, off
391 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
392 ; GFX10-NEXT:    global_store_dword v[0:1], v3, off
393 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
394 ; GFX10-NEXT:    s_endpgm
396 ; GFX8-UNPACKED-LABEL: load_1d_v3f16_tfe_dmask7:
397 ; GFX8-UNPACKED:       ; %bb.0:
398 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
399 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
400 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
401 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
402 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
403 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
404 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
405 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
406 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
407 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
408 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
409 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v4, v1
410 ; GFX8-UNPACKED-NEXT:    image_load v[1:4], v0, s[4:11] dmask:0x7 unorm tfe d16
411 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
412 ; GFX8-UNPACKED-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
413 ; GFX8-UNPACKED-NEXT:    flat_store_short v[0:1], v3
414 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
415 ; GFX8-UNPACKED-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
416 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v0
417 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
418 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v4
419 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
420 ; GFX8-UNPACKED-NEXT:    s_endpgm
421   %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)
422   %v.data = extractvalue { <3 x half>, i32 } %v, 0
423   %v.err = extractvalue { <3 x half>, i32 } %v, 1
424   store volatile <3 x half> %v.data, <3 x half> addrspace(1)* undef
425   store volatile i32 %v.err, i32 addrspace(1)* undef
426   ret void
429 define amdgpu_ps void @load_1d_v4f16_tfe_dmask15(<8 x i32> inreg %rsrc, i32 %s) {
430 ; GFX9-LABEL: load_1d_v4f16_tfe_dmask15:
431 ; GFX9:       ; %bb.0:
432 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
433 ; GFX9-NEXT:    s_mov_b32 s11, s9
434 ; GFX9-NEXT:    s_mov_b32 s10, s8
435 ; GFX9-NEXT:    s_mov_b32 s9, s7
436 ; GFX9-NEXT:    s_mov_b32 s8, s6
437 ; GFX9-NEXT:    s_mov_b32 s7, s5
438 ; GFX9-NEXT:    s_mov_b32 s6, s4
439 ; GFX9-NEXT:    s_mov_b32 s5, s3
440 ; GFX9-NEXT:    s_mov_b32 s4, s2
441 ; GFX9-NEXT:    v_mov_b32_e32 v2, v1
442 ; GFX9-NEXT:    v_mov_b32_e32 v3, v1
443 ; GFX9-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0xf unorm tfe d16
444 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
445 ; GFX9-NEXT:    global_store_dwordx2 v[0:1], v[1:2], off
446 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
447 ; GFX9-NEXT:    global_store_dword v[0:1], v3, off
448 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
449 ; GFX9-NEXT:    s_endpgm
451 ; GFX10-LABEL: load_1d_v4f16_tfe_dmask15:
452 ; GFX10:       ; %bb.0:
453 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
454 ; GFX10-NEXT:    s_mov_b32 s11, s9
455 ; GFX10-NEXT:    s_mov_b32 s10, s8
456 ; GFX10-NEXT:    s_mov_b32 s9, s7
457 ; GFX10-NEXT:    s_mov_b32 s8, s6
458 ; GFX10-NEXT:    s_mov_b32 s7, s5
459 ; GFX10-NEXT:    s_mov_b32 s6, s4
460 ; GFX10-NEXT:    s_mov_b32 s5, s3
461 ; GFX10-NEXT:    s_mov_b32 s4, s2
462 ; GFX10-NEXT:    v_mov_b32_e32 v2, v1
463 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
464 ; GFX10-NEXT:    image_load v[1:3], v0, s[4:11] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe d16
465 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
466 ; GFX10-NEXT:    global_store_dwordx2 v[0:1], v[1:2], off
467 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
468 ; GFX10-NEXT:    global_store_dword v[0:1], v3, off
469 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
470 ; GFX10-NEXT:    s_endpgm
472 ; GFX8-UNPACKED-LABEL: load_1d_v4f16_tfe_dmask15:
473 ; GFX8-UNPACKED:       ; %bb.0:
474 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v1, 0
475 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s11, s9
476 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s10, s8
477 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s9, s7
478 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s8, s6
479 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s7, s5
480 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s6, s4
481 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s5, s3
482 ; GFX8-UNPACKED-NEXT:    s_mov_b32 s4, s2
483 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v2, v1
484 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v3, v1
485 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v4, v1
486 ; GFX8-UNPACKED-NEXT:    v_mov_b32_e32 v5, v1
487 ; GFX8-UNPACKED-NEXT:    image_load v[1:5], v0, s[4:11] dmask:0xf unorm tfe d16
488 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
489 ; GFX8-UNPACKED-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
490 ; GFX8-UNPACKED-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
491 ; GFX8-UNPACKED-NEXT:    v_or_b32_sdwa v2, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
492 ; GFX8-UNPACKED-NEXT:    v_or_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
493 ; GFX8-UNPACKED-NEXT:    flat_store_dwordx2 v[0:1], v[1:2]
494 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
495 ; GFX8-UNPACKED-NEXT:    flat_store_dword v[0:1], v5
496 ; GFX8-UNPACKED-NEXT:    s_waitcnt vmcnt(0)
497 ; GFX8-UNPACKED-NEXT:    s_endpgm
498   %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)
499   %v.data = extractvalue { <4 x half>, i32 } %v, 0
500   %v.err = extractvalue { <4 x half>, i32 } %v, 1
501   store volatile <4 x half> %v.data, <4 x half> addrspace(1)* undef
502   store volatile i32 %v.err, i32 addrspace(1)* undef
503   ret void
506 declare { half, i32 } @llvm.amdgcn.image.load.1d.sl_f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
507 declare { <2 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v2f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
508 declare { <3 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v3f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
509 declare { <4 x half>, i32 } @llvm.amdgcn.image.load.1d.sl_v4f16i32s.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #0
511 attributes #0 = { nounwind readonly }