[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.image.sample.a16.dim.ll
blob3cb7b659de5eb04e6fd8ea7f187f8ec977ea425f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX9 %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
4 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -amdgpu-enable-vopd=0 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s
6 define amdgpu_ps <4 x float> @sample_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s) {
7 ; GFX9-LABEL: sample_1d:
8 ; GFX9:       ; %bb.0: ; %main_body
9 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
10 ; GFX9-NEXT:    s_wqm_b64 exec, exec
11 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
12 ; GFX9-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
13 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
14 ; GFX9-NEXT:    ; return to shader part epilog
16 ; GFX10-LABEL: sample_1d:
17 ; GFX10:       ; %bb.0: ; %main_body
18 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
19 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
20 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
21 ; GFX10-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
22 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
23 ; GFX10-NEXT:    ; return to shader part epilog
25 ; GFX11-LABEL: sample_1d:
26 ; GFX11:       ; %bb.0: ; %main_body
27 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
28 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
29 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
30 ; GFX11-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
31 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
32 ; GFX11-NEXT:    ; return to shader part epilog
33 main_body:
34   %v = call <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f16(i32 15, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
35   ret <4 x float> %v
38 define amdgpu_ps <4 x float> @sample_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t) {
39 ; GFX9-LABEL: sample_2d:
40 ; GFX9:       ; %bb.0: ; %main_body
41 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
42 ; GFX9-NEXT:    s_wqm_b64 exec, exec
43 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
44 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s14
45 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
46 ; GFX9-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
47 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
48 ; GFX9-NEXT:    ; return to shader part epilog
50 ; GFX10-LABEL: sample_2d:
51 ; GFX10:       ; %bb.0: ; %main_body
52 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
53 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
54 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
55 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
56 ; GFX10-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
57 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
58 ; GFX10-NEXT:    ; return to shader part epilog
60 ; GFX11-LABEL: sample_2d:
61 ; GFX11:       ; %bb.0: ; %main_body
62 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
63 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
64 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
65 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
66 ; GFX11-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
67 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX11-NEXT:    ; return to shader part epilog
69 main_body:
70   %v = call <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f16(i32 15, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
71   ret <4 x float> %v
74 define amdgpu_ps <4 x float> @sample_3d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t, half %r) {
75 ; GFX9-LABEL: sample_3d:
76 ; GFX9:       ; %bb.0: ; %main_body
77 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
78 ; GFX9-NEXT:    s_wqm_b64 exec, exec
79 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
80 ; GFX9-NEXT:    v_perm_b32 v1, v1, v0, s14
81 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
82 ; GFX9-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf a16
83 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
84 ; GFX9-NEXT:    ; return to shader part epilog
86 ; GFX10-LABEL: sample_3d:
87 ; GFX10:       ; %bb.0: ; %main_body
88 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
89 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
90 ; GFX10-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
91 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
92 ; GFX10-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_3D a16
93 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
94 ; GFX10-NEXT:    ; return to shader part epilog
96 ; GFX11-LABEL: sample_3d:
97 ; GFX11:       ; %bb.0: ; %main_body
98 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
99 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
100 ; GFX11-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
101 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
102 ; GFX11-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_3D a16
103 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
104 ; GFX11-NEXT:    ; return to shader part epilog
105 main_body:
106   %v = call <4 x float> @llvm.amdgcn.image.sample.3d.v4f32.f16(i32 15, half %s, half %t, half %r, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
107   ret <4 x float> %v
110 define amdgpu_ps <4 x float> @sample_cube(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t, half %face) {
111 ; GFX9-LABEL: sample_cube:
112 ; GFX9:       ; %bb.0: ; %main_body
113 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
114 ; GFX9-NEXT:    s_wqm_b64 exec, exec
115 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
116 ; GFX9-NEXT:    v_perm_b32 v1, v1, v0, s14
117 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
118 ; GFX9-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf a16 da
119 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
120 ; GFX9-NEXT:    ; return to shader part epilog
122 ; GFX10-LABEL: sample_cube:
123 ; GFX10:       ; %bb.0: ; %main_body
124 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
125 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
126 ; GFX10-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
127 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
128 ; GFX10-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_CUBE a16
129 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
130 ; GFX10-NEXT:    ; return to shader part epilog
132 ; GFX11-LABEL: sample_cube:
133 ; GFX11:       ; %bb.0: ; %main_body
134 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
135 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
136 ; GFX11-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
137 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
138 ; GFX11-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_CUBE a16
139 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
140 ; GFX11-NEXT:    ; return to shader part epilog
141 main_body:
142   %v = call <4 x float> @llvm.amdgcn.image.sample.cube.v4f32.f16(i32 15, half %s, half %t, half %face, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
143   ret <4 x float> %v
146 define amdgpu_ps <4 x float> @sample_1darray(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %slice) {
147 ; GFX9-LABEL: sample_1darray:
148 ; GFX9:       ; %bb.0: ; %main_body
149 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
150 ; GFX9-NEXT:    s_wqm_b64 exec, exec
151 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
152 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s14
153 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
154 ; GFX9-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16 da
155 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
156 ; GFX9-NEXT:    ; return to shader part epilog
158 ; GFX10-LABEL: sample_1darray:
159 ; GFX10:       ; %bb.0: ; %main_body
160 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
161 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
162 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
163 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
164 ; GFX10-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY a16
165 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
166 ; GFX10-NEXT:    ; return to shader part epilog
168 ; GFX11-LABEL: sample_1darray:
169 ; GFX11:       ; %bb.0: ; %main_body
170 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
171 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
172 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
173 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
174 ; GFX11-NEXT:    image_sample v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY a16
175 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
176 ; GFX11-NEXT:    ; return to shader part epilog
177 main_body:
178   %v = call <4 x float> @llvm.amdgcn.image.sample.1darray.v4f32.f16(i32 15, half %s, half %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
179   ret <4 x float> %v
182 define amdgpu_ps <4 x float> @sample_2darray(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t, half %slice) {
183 ; GFX9-LABEL: sample_2darray:
184 ; GFX9:       ; %bb.0: ; %main_body
185 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
186 ; GFX9-NEXT:    s_wqm_b64 exec, exec
187 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
188 ; GFX9-NEXT:    v_perm_b32 v1, v1, v0, s14
189 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
190 ; GFX9-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf a16 da
191 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
192 ; GFX9-NEXT:    ; return to shader part epilog
194 ; GFX10-LABEL: sample_2darray:
195 ; GFX10:       ; %bb.0: ; %main_body
196 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
197 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
198 ; GFX10-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
199 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
200 ; GFX10-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY a16
201 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
202 ; GFX10-NEXT:    ; return to shader part epilog
204 ; GFX11-LABEL: sample_2darray:
205 ; GFX11:       ; %bb.0: ; %main_body
206 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
207 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
208 ; GFX11-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
209 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
210 ; GFX11-NEXT:    image_sample v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY a16
211 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
212 ; GFX11-NEXT:    ; return to shader part epilog
213 main_body:
214   %v = call <4 x float> @llvm.amdgcn.image.sample.2darray.v4f32.f16(i32 15, half %s, half %t, half %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
215   ret <4 x float> %v
218 define amdgpu_ps <4 x float> @sample_c_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s) {
219 ; GFX9-LABEL: sample_c_1d:
220 ; GFX9:       ; %bb.0: ; %main_body
221 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
222 ; GFX9-NEXT:    s_wqm_b64 exec, exec
223 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
224 ; GFX9-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
225 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
226 ; GFX9-NEXT:    ; return to shader part epilog
228 ; GFX10-LABEL: sample_c_1d:
229 ; GFX10:       ; %bb.0: ; %main_body
230 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
231 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
232 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
233 ; GFX10-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
234 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
235 ; GFX10-NEXT:    ; return to shader part epilog
237 ; GFX11-LABEL: sample_c_1d:
238 ; GFX11:       ; %bb.0: ; %main_body
239 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
240 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
241 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
242 ; GFX11-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
243 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
244 ; GFX11-NEXT:    ; return to shader part epilog
245 main_body:
246   %v = call <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f16(i32 15, float %zcompare, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
247   ret <4 x float> %v
250 define amdgpu_ps <4 x float> @sample_c_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %t) {
251 ; GFX9-LABEL: sample_c_2d:
252 ; GFX9:       ; %bb.0: ; %main_body
253 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
254 ; GFX9-NEXT:    s_wqm_b64 exec, exec
255 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
256 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s14
257 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
258 ; GFX9-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
259 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
260 ; GFX9-NEXT:    ; return to shader part epilog
262 ; GFX10-LABEL: sample_c_2d:
263 ; GFX10:       ; %bb.0: ; %main_body
264 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
265 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
266 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
267 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
268 ; GFX10-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
269 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
270 ; GFX10-NEXT:    ; return to shader part epilog
272 ; GFX11-LABEL: sample_c_2d:
273 ; GFX11:       ; %bb.0: ; %main_body
274 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
275 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
276 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
277 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
278 ; GFX11-NEXT:    image_sample_c v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
279 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
280 ; GFX11-NEXT:    ; return to shader part epilog
281 main_body:
282   %v = call <4 x float> @llvm.amdgcn.image.sample.c.2d.v4f32.f16(i32 15, float %zcompare, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
283   ret <4 x float> %v
286 define amdgpu_ps <4 x float> @sample_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %clamp) {
287 ; GFX9-LABEL: sample_cl_1d:
288 ; GFX9:       ; %bb.0: ; %main_body
289 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
290 ; GFX9-NEXT:    s_wqm_b64 exec, exec
291 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
292 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s14
293 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
294 ; GFX9-NEXT:    image_sample_cl v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
295 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
296 ; GFX9-NEXT:    ; return to shader part epilog
298 ; GFX10-LABEL: sample_cl_1d:
299 ; GFX10:       ; %bb.0: ; %main_body
300 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
301 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
302 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
303 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
304 ; GFX10-NEXT:    image_sample_cl v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
305 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
306 ; GFX10-NEXT:    ; return to shader part epilog
308 ; GFX11-LABEL: sample_cl_1d:
309 ; GFX11:       ; %bb.0: ; %main_body
310 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
311 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
312 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
313 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
314 ; GFX11-NEXT:    image_sample_cl v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
315 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX11-NEXT:    ; return to shader part epilog
317 main_body:
318   %v = call <4 x float> @llvm.amdgcn.image.sample.cl.1d.v4f32.f16(i32 15, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
319   ret <4 x float> %v
322 define amdgpu_ps <4 x float> @sample_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t, half %clamp) {
323 ; GFX9-LABEL: sample_cl_2d:
324 ; GFX9:       ; %bb.0: ; %main_body
325 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
326 ; GFX9-NEXT:    s_wqm_b64 exec, exec
327 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
328 ; GFX9-NEXT:    v_perm_b32 v1, v1, v0, s14
329 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
330 ; GFX9-NEXT:    image_sample_cl v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf a16
331 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
332 ; GFX9-NEXT:    ; return to shader part epilog
334 ; GFX10-LABEL: sample_cl_2d:
335 ; GFX10:       ; %bb.0: ; %main_body
336 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
337 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
338 ; GFX10-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
339 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
340 ; GFX10-NEXT:    image_sample_cl v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
341 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
342 ; GFX10-NEXT:    ; return to shader part epilog
344 ; GFX11-LABEL: sample_cl_2d:
345 ; GFX11:       ; %bb.0: ; %main_body
346 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
347 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
348 ; GFX11-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
349 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
350 ; GFX11-NEXT:    image_sample_cl v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
351 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
352 ; GFX11-NEXT:    ; return to shader part epilog
353 main_body:
354   %v = call <4 x float> @llvm.amdgcn.image.sample.cl.2d.v4f32.f16(i32 15, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
355   ret <4 x float> %v
358 define amdgpu_ps <4 x float> @sample_c_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %clamp) {
359 ; GFX9-LABEL: sample_c_cl_1d:
360 ; GFX9:       ; %bb.0: ; %main_body
361 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
362 ; GFX9-NEXT:    s_wqm_b64 exec, exec
363 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
364 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s14
365 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
366 ; GFX9-NEXT:    image_sample_c_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
367 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
368 ; GFX9-NEXT:    ; return to shader part epilog
370 ; GFX10-LABEL: sample_c_cl_1d:
371 ; GFX10:       ; %bb.0: ; %main_body
372 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
373 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
374 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
375 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
376 ; GFX10-NEXT:    image_sample_c_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
377 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
378 ; GFX10-NEXT:    ; return to shader part epilog
380 ; GFX11-LABEL: sample_c_cl_1d:
381 ; GFX11:       ; %bb.0: ; %main_body
382 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
383 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
384 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
385 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
386 ; GFX11-NEXT:    image_sample_c_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
387 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
388 ; GFX11-NEXT:    ; return to shader part epilog
389 main_body:
390   %v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.1d.v4f32.f16(i32 15, float %zcompare, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
391   ret <4 x float> %v
394 define amdgpu_ps <4 x float> @sample_c_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %t, half %clamp) {
395 ; GFX9-LABEL: sample_c_cl_2d:
396 ; GFX9:       ; %bb.0: ; %main_body
397 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
398 ; GFX9-NEXT:    s_wqm_b64 exec, exec
399 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
400 ; GFX9-NEXT:    v_mov_b32_e32 v5, v3
401 ; GFX9-NEXT:    v_mov_b32_e32 v3, v0
402 ; GFX9-NEXT:    v_perm_b32 v4, v2, v1, s14
403 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
404 ; GFX9-NEXT:    image_sample_c_cl v[0:3], v[3:5], s[0:7], s[8:11] dmask:0xf a16
405 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
406 ; GFX9-NEXT:    ; return to shader part epilog
408 ; GFX10-LABEL: sample_c_cl_2d:
409 ; GFX10:       ; %bb.0: ; %main_body
410 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
411 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
412 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
413 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
414 ; GFX10-NEXT:    image_sample_c_cl v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
415 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
416 ; GFX10-NEXT:    ; return to shader part epilog
418 ; GFX11-LABEL: sample_c_cl_2d:
419 ; GFX11:       ; %bb.0: ; %main_body
420 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
421 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
422 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
423 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
424 ; GFX11-NEXT:    image_sample_c_cl v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
425 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
426 ; GFX11-NEXT:    ; return to shader part epilog
427 main_body:
428   %v = call <4 x float> @llvm.amdgcn.image.sample.c.cl.2d.v4f32.f16(i32 15, float %zcompare, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
429   ret <4 x float> %v
432 define amdgpu_ps <4 x float> @sample_b_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, half %s) {
433 ; GFX9-LABEL: sample_b_1d:
434 ; GFX9:       ; %bb.0: ; %main_body
435 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
436 ; GFX9-NEXT:    s_wqm_b64 exec, exec
437 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
438 ; GFX9-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
439 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
440 ; GFX9-NEXT:    ; return to shader part epilog
442 ; GFX10-LABEL: sample_b_1d:
443 ; GFX10:       ; %bb.0: ; %main_body
444 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
445 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
446 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
447 ; GFX10-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
448 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
449 ; GFX10-NEXT:    ; return to shader part epilog
451 ; GFX11-LABEL: sample_b_1d:
452 ; GFX11:       ; %bb.0: ; %main_body
453 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
454 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
455 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
456 ; GFX11-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
457 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
458 ; GFX11-NEXT:    ; return to shader part epilog
459 main_body:
460   %v = call <4 x float> @llvm.amdgcn.image.sample.b.1d.v4f32.f16.f16(i32 15, half %bias, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
461   ret <4 x float> %v
464 define amdgpu_ps <4 x float> @sample_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, half %s, half %t) {
465 ; GFX9-LABEL: sample_b_2d:
466 ; GFX9:       ; %bb.0: ; %main_body
467 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
468 ; GFX9-NEXT:    s_wqm_b64 exec, exec
469 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
470 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s14
471 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
472 ; GFX9-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
473 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
474 ; GFX9-NEXT:    ; return to shader part epilog
476 ; GFX10-LABEL: sample_b_2d:
477 ; GFX10:       ; %bb.0: ; %main_body
478 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
479 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
480 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
481 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
482 ; GFX10-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
483 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
484 ; GFX10-NEXT:    ; return to shader part epilog
486 ; GFX11-LABEL: sample_b_2d:
487 ; GFX11:       ; %bb.0: ; %main_body
488 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
489 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
490 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
491 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
492 ; GFX11-NEXT:    image_sample_b v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
493 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
494 ; GFX11-NEXT:    ; return to shader part epilog
495 main_body:
496   %v = call <4 x float> @llvm.amdgcn.image.sample.b.2d.v4f32.f16.f16(i32 15, half %bias, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
497   ret <4 x float> %v
500 define amdgpu_ps <4 x float> @sample_c_b_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, float %zcompare, half %s) {
501 ; GFX9-LABEL: sample_c_b_1d:
502 ; GFX9:       ; %bb.0: ; %main_body
503 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
504 ; GFX9-NEXT:    s_wqm_b64 exec, exec
505 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
506 ; GFX9-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf a16
507 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
508 ; GFX9-NEXT:    ; return to shader part epilog
510 ; GFX10-LABEL: sample_c_b_1d:
511 ; GFX10:       ; %bb.0: ; %main_body
512 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
513 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
514 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
515 ; GFX10-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
516 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
517 ; GFX10-NEXT:    ; return to shader part epilog
519 ; GFX11-LABEL: sample_c_b_1d:
520 ; GFX11:       ; %bb.0: ; %main_body
521 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
522 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
523 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
524 ; GFX11-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
525 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
526 ; GFX11-NEXT:    ; return to shader part epilog
527 main_body:
528   %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.1d.v4f32.f16.f16(i32 15, half %bias, float %zcompare, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
529   ret <4 x float> %v
532 define amdgpu_ps <4 x float> @sample_c_b_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, float %zcompare, half %s, half %t) {
533 ; GFX9-LABEL: sample_c_b_2d:
534 ; GFX9:       ; %bb.0: ; %main_body
535 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
536 ; GFX9-NEXT:    s_wqm_b64 exec, exec
537 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
538 ; GFX9-NEXT:    v_perm_b32 v2, v3, v2, s14
539 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
540 ; GFX9-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf a16
541 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
542 ; GFX9-NEXT:    ; return to shader part epilog
544 ; GFX10-LABEL: sample_c_b_2d:
545 ; GFX10:       ; %bb.0: ; %main_body
546 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
547 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
548 ; GFX10-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
549 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
550 ; GFX10-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
551 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
552 ; GFX10-NEXT:    ; return to shader part epilog
554 ; GFX11-LABEL: sample_c_b_2d:
555 ; GFX11:       ; %bb.0: ; %main_body
556 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
557 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
558 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
559 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
560 ; GFX11-NEXT:    image_sample_c_b v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
561 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
562 ; GFX11-NEXT:    ; return to shader part epilog
563 main_body:
564   %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.2d.v4f32.f16.f16(i32 15, half %bias, float %zcompare, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
565   ret <4 x float> %v
568 define amdgpu_ps <4 x float> @sample_b_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, half %s, half %clamp) {
569 ; GFX9-LABEL: sample_b_cl_1d:
570 ; GFX9:       ; %bb.0: ; %main_body
571 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
572 ; GFX9-NEXT:    s_wqm_b64 exec, exec
573 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
574 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s14
575 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
576 ; GFX9-NEXT:    image_sample_b_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
577 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
578 ; GFX9-NEXT:    ; return to shader part epilog
580 ; GFX10-LABEL: sample_b_cl_1d:
581 ; GFX10:       ; %bb.0: ; %main_body
582 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
583 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
584 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
585 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
586 ; GFX10-NEXT:    image_sample_b_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
587 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
588 ; GFX10-NEXT:    ; return to shader part epilog
590 ; GFX11-LABEL: sample_b_cl_1d:
591 ; GFX11:       ; %bb.0: ; %main_body
592 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
593 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
594 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
595 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
596 ; GFX11-NEXT:    image_sample_b_cl v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
597 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
598 ; GFX11-NEXT:    ; return to shader part epilog
599 main_body:
600   %v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.1d.v4f32.f16.f16(i32 15, half %bias, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
601   ret <4 x float> %v
604 define amdgpu_ps <4 x float> @sample_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, half %s, half %t, half %clamp) {
605 ; GFX9-LABEL: sample_b_cl_2d:
606 ; GFX9:       ; %bb.0: ; %main_body
607 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
608 ; GFX9-NEXT:    s_wqm_b64 exec, exec
609 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
610 ; GFX9-NEXT:    v_mov_b32_e32 v5, v3
611 ; GFX9-NEXT:    v_mov_b32_e32 v3, v0
612 ; GFX9-NEXT:    v_perm_b32 v4, v2, v1, s14
613 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
614 ; GFX9-NEXT:    image_sample_b_cl v[0:3], v[3:5], s[0:7], s[8:11] dmask:0xf a16
615 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
616 ; GFX9-NEXT:    ; return to shader part epilog
618 ; GFX10-LABEL: sample_b_cl_2d:
619 ; GFX10:       ; %bb.0: ; %main_body
620 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
621 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
622 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
623 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
624 ; GFX10-NEXT:    image_sample_b_cl v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
625 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
626 ; GFX10-NEXT:    ; return to shader part epilog
628 ; GFX11-LABEL: sample_b_cl_2d:
629 ; GFX11:       ; %bb.0: ; %main_body
630 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
631 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
632 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
633 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
634 ; GFX11-NEXT:    image_sample_b_cl v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
635 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
636 ; GFX11-NEXT:    ; return to shader part epilog
637 main_body:
638   %v = call <4 x float> @llvm.amdgcn.image.sample.b.cl.2d.v4f32.f16.f16(i32 15, half %bias, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
639   ret <4 x float> %v
642 define amdgpu_ps <4 x float> @sample_c_b_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, float %zcompare, half %s, half %clamp) {
643 ; GFX9-LABEL: sample_c_b_cl_1d:
644 ; GFX9:       ; %bb.0: ; %main_body
645 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
646 ; GFX9-NEXT:    s_wqm_b64 exec, exec
647 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
648 ; GFX9-NEXT:    v_perm_b32 v2, v3, v2, s14
649 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
650 ; GFX9-NEXT:    image_sample_c_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf a16
651 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
652 ; GFX9-NEXT:    ; return to shader part epilog
654 ; GFX10-LABEL: sample_c_b_cl_1d:
655 ; GFX10:       ; %bb.0: ; %main_body
656 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
657 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
658 ; GFX10-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
659 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
660 ; GFX10-NEXT:    image_sample_c_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
661 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
662 ; GFX10-NEXT:    ; return to shader part epilog
664 ; GFX11-LABEL: sample_c_b_cl_1d:
665 ; GFX11:       ; %bb.0: ; %main_body
666 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
667 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
668 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
669 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
670 ; GFX11-NEXT:    image_sample_c_b_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
671 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
672 ; GFX11-NEXT:    ; return to shader part epilog
673 main_body:
674   %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.1d.v4f32.f16.f16(i32 15, half %bias, float %zcompare, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
675   ret <4 x float> %v
678 define amdgpu_ps <4 x float> @sample_c_b_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %bias, float %zcompare, half %s, half %t, half %clamp) {
679 ; GFX9-LABEL: sample_c_b_cl_2d:
680 ; GFX9:       ; %bb.0: ; %main_body
681 ; GFX9-NEXT:    s_mov_b64 s[12:13], exec
682 ; GFX9-NEXT:    s_wqm_b64 exec, exec
683 ; GFX9-NEXT:    s_mov_b32 s14, 0x5040100
684 ; GFX9-NEXT:    v_mov_b32_e32 v7, v4
685 ; GFX9-NEXT:    v_mov_b32_e32 v5, v1
686 ; GFX9-NEXT:    v_mov_b32_e32 v4, v0
687 ; GFX9-NEXT:    v_perm_b32 v6, v3, v2, s14
688 ; GFX9-NEXT:    s_and_b64 exec, exec, s[12:13]
689 ; GFX9-NEXT:    image_sample_c_b_cl v[0:3], v[4:7], s[0:7], s[8:11] dmask:0xf a16
690 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
691 ; GFX9-NEXT:    ; return to shader part epilog
693 ; GFX10-LABEL: sample_c_b_cl_2d:
694 ; GFX10:       ; %bb.0: ; %main_body
695 ; GFX10-NEXT:    s_mov_b32 s12, exec_lo
696 ; GFX10-NEXT:    s_wqm_b32 exec_lo, exec_lo
697 ; GFX10-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
698 ; GFX10-NEXT:    s_and_b32 exec_lo, exec_lo, s12
699 ; GFX10-NEXT:    image_sample_c_b_cl v[0:3], [v0, v1, v2, v4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
700 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
701 ; GFX10-NEXT:    ; return to shader part epilog
703 ; GFX11-LABEL: sample_c_b_cl_2d:
704 ; GFX11:       ; %bb.0: ; %main_body
705 ; GFX11-NEXT:    s_mov_b32 s12, exec_lo
706 ; GFX11-NEXT:    s_wqm_b32 exec_lo, exec_lo
707 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
708 ; GFX11-NEXT:    s_and_b32 exec_lo, exec_lo, s12
709 ; GFX11-NEXT:    image_sample_c_b_cl v[0:3], [v0, v1, v2, v4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
710 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
711 ; GFX11-NEXT:    ; return to shader part epilog
712 main_body:
713   %v = call <4 x float> @llvm.amdgcn.image.sample.c.b.cl.2d.v4f32.f16.f16(i32 15, half %bias, float %zcompare, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
714   ret <4 x float> %v
717 define amdgpu_ps <4 x float> @sample_d_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %dsdh, half %dsdv, half %s) {
718 ; GFX9-LABEL: sample_d_1d:
719 ; GFX9:       ; %bb.0: ; %main_body
720 ; GFX9-NEXT:    image_sample_d v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf a16
721 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
722 ; GFX9-NEXT:    ; return to shader part epilog
724 ; GFX10-LABEL: sample_d_1d:
725 ; GFX10:       ; %bb.0: ; %main_body
726 ; GFX10-NEXT:    image_sample_d_g16 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
727 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
728 ; GFX10-NEXT:    ; return to shader part epilog
730 ; GFX11-LABEL: sample_d_1d:
731 ; GFX11:       ; %bb.0: ; %main_body
732 ; GFX11-NEXT:    image_sample_d_g16 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
733 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
734 ; GFX11-NEXT:    ; return to shader part epilog
735 main_body:
736   %v = call <4 x float> @llvm.amdgcn.image.sample.d.1d.v4f32.f16.f16(i32 15, half %dsdh, half %dsdv, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
737   ret <4 x float> %v
740 define amdgpu_ps <4 x float> @sample_d_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t) {
741 ; GFX9-LABEL: sample_d_2d:
742 ; GFX9:       ; %bb.0: ; %main_body
743 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
744 ; GFX9-NEXT:    v_perm_b32 v4, v5, v4, s12
745 ; GFX9-NEXT:    v_perm_b32 v3, v3, v2, s12
746 ; GFX9-NEXT:    v_perm_b32 v2, v1, v0, s12
747 ; GFX9-NEXT:    image_sample_d v[0:3], v[2:4], s[0:7], s[8:11] dmask:0xf a16
748 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
749 ; GFX9-NEXT:    ; return to shader part epilog
751 ; GFX10-LABEL: sample_d_2d:
752 ; GFX10:       ; %bb.0: ; %main_body
753 ; GFX10-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
754 ; GFX10-NEXT:    v_perm_b32 v3, v3, v2, 0x5040100
755 ; GFX10-NEXT:    v_perm_b32 v2, v1, v0, 0x5040100
756 ; GFX10-NEXT:    image_sample_d_g16 v[0:3], v[2:4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
757 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
758 ; GFX10-NEXT:    ; return to shader part epilog
760 ; GFX11-LABEL: sample_d_2d:
761 ; GFX11:       ; %bb.0: ; %main_body
762 ; GFX11-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
763 ; GFX11-NEXT:    v_perm_b32 v3, v3, v2, 0x5040100
764 ; GFX11-NEXT:    v_perm_b32 v2, v1, v0, 0x5040100
765 ; GFX11-NEXT:    image_sample_d_g16 v[0:3], v[2:4], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
766 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
767 ; GFX11-NEXT:    ; return to shader part epilog
768 main_body:
769   %v = call <4 x float> @llvm.amdgcn.image.sample.d.2d.v4f32.f16.f16(i32 15, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
770   ret <4 x float> %v
773 define amdgpu_ps <4 x float> @sample_d_3d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %dsdh, half %dtdh, half %drdh, half %dsdv, half %dtdv, half %drdv, half %s, half %t, half %r) {
774 ; GFX9-LABEL: sample_d_3d:
775 ; GFX9:       ; %bb.0: ; %main_body
776 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
777 ; GFX9-NEXT:    v_mov_b32_e32 v12, v8
778 ; GFX9-NEXT:    v_mov_b32_e32 v10, v5
779 ; GFX9-NEXT:    v_mov_b32_e32 v8, v2
780 ; GFX9-NEXT:    v_perm_b32 v11, v7, v6, s12
781 ; GFX9-NEXT:    v_perm_b32 v9, v4, v3, s12
782 ; GFX9-NEXT:    v_perm_b32 v7, v1, v0, s12
783 ; GFX9-NEXT:    image_sample_d v[0:3], v[7:12], s[0:7], s[8:11] dmask:0xf a16
784 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
785 ; GFX9-NEXT:    ; return to shader part epilog
787 ; GFX10-LABEL: sample_d_3d:
788 ; GFX10:       ; %bb.0: ; %main_body
789 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
790 ; GFX10-NEXT:    v_mov_b32_e32 v10, v5
791 ; GFX10-NEXT:    v_mov_b32_e32 v8, v2
792 ; GFX10-NEXT:    v_perm_b32 v11, v7, v6, 0x5040100
793 ; GFX10-NEXT:    v_perm_b32 v9, v4, v3, 0x5040100
794 ; GFX10-NEXT:    v_perm_b32 v7, v1, v0, 0x5040100
795 ; GFX10-NEXT:    image_sample_d_g16 v[0:3], v[7:12], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_3D a16
796 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
797 ; GFX10-NEXT:    ; return to shader part epilog
799 ; GFX11-LABEL: sample_d_3d:
800 ; GFX11:       ; %bb.0: ; %main_body
801 ; GFX11-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
802 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
803 ; GFX11-NEXT:    v_perm_b32 v7, v7, v6, 0x5040100
804 ; GFX11-NEXT:    image_sample_d_g16 v[0:3], [v0, v2, v3, v5, v[7:8]], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_3D a16
805 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
806 ; GFX11-NEXT:    ; return to shader part epilog
807 main_body:
808   %v = call <4 x float> @llvm.amdgcn.image.sample.d.3d.v4f32.f16.f16(i32 15, half %dsdh, half %dtdh, half %drdh, half %dsdv, half %dtdv, half %drdv, half %s, half %t, half %r, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
809   ret <4 x float> %v
812 define amdgpu_ps <4 x float> @sample_c_d_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %dsdh, half %dsdv, half %s) {
813 ; GFX9-LABEL: sample_c_d_1d:
814 ; GFX9:       ; %bb.0: ; %main_body
815 ; GFX9-NEXT:    image_sample_c_d v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf a16
816 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
817 ; GFX9-NEXT:    ; return to shader part epilog
819 ; GFX10-LABEL: sample_c_d_1d:
820 ; GFX10:       ; %bb.0: ; %main_body
821 ; GFX10-NEXT:    image_sample_c_d_g16 v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
822 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
823 ; GFX10-NEXT:    ; return to shader part epilog
825 ; GFX11-LABEL: sample_c_d_1d:
826 ; GFX11:       ; %bb.0: ; %main_body
827 ; GFX11-NEXT:    image_sample_c_d_g16 v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
828 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
829 ; GFX11-NEXT:    ; return to shader part epilog
830 main_body:
831   %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.1d.v4f32.f32.f16(i32 15, float %zcompare, half %dsdh, half %dsdv, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
832   ret <4 x float> %v
835 define amdgpu_ps <4 x float> @sample_c_d_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t) {
836 ; GFX9-LABEL: sample_c_d_2d:
837 ; GFX9:       ; %bb.0: ; %main_body
838 ; GFX9-NEXT:    v_mov_b32_e32 v7, v3
839 ; GFX9-NEXT:    v_mov_b32_e32 v8, v2
840 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
841 ; GFX9-NEXT:    v_perm_b32 v3, v6, v5, s12
842 ; GFX9-NEXT:    v_perm_b32 v2, v4, v7, s12
843 ; GFX9-NEXT:    v_perm_b32 v1, v8, v1, s12
844 ; GFX9-NEXT:    image_sample_c_d v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf a16
845 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
846 ; GFX9-NEXT:    ; return to shader part epilog
848 ; GFX10-LABEL: sample_c_d_2d:
849 ; GFX10:       ; %bb.0: ; %main_body
850 ; GFX10-NEXT:    v_perm_b32 v5, v6, v5, 0x5040100
851 ; GFX10-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
852 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
853 ; GFX10-NEXT:    image_sample_c_d_g16 v[0:3], [v0, v1, v3, v5], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
854 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
855 ; GFX10-NEXT:    ; return to shader part epilog
857 ; GFX11-LABEL: sample_c_d_2d:
858 ; GFX11:       ; %bb.0: ; %main_body
859 ; GFX11-NEXT:    v_perm_b32 v5, v6, v5, 0x5040100
860 ; GFX11-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
861 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
862 ; GFX11-NEXT:    image_sample_c_d_g16 v[0:3], [v0, v1, v3, v5], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
863 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
864 ; GFX11-NEXT:    ; return to shader part epilog
865 main_body:
866   %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.2d.v4f32.f32.f16(i32 15, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
867   ret <4 x float> %v
870 define amdgpu_ps <4 x float> @sample_d_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %dsdh, half %dsdv, half %s, half %clamp) {
871 ; GFX9-LABEL: sample_d_cl_1d:
872 ; GFX9:       ; %bb.0: ; %main_body
873 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
874 ; GFX9-NEXT:    v_perm_b32 v2, v3, v2, s12
875 ; GFX9-NEXT:    image_sample_d_cl v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf a16
876 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
877 ; GFX9-NEXT:    ; return to shader part epilog
879 ; GFX10-LABEL: sample_d_cl_1d:
880 ; GFX10:       ; %bb.0: ; %main_body
881 ; GFX10-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
882 ; GFX10-NEXT:    image_sample_d_cl_g16 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
883 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
884 ; GFX10-NEXT:    ; return to shader part epilog
886 ; GFX11-LABEL: sample_d_cl_1d:
887 ; GFX11:       ; %bb.0: ; %main_body
888 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
889 ; GFX11-NEXT:    image_sample_d_cl_g16 v[0:3], v[0:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
890 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
891 ; GFX11-NEXT:    ; return to shader part epilog
892 main_body:
893   %v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.1d.v4f32.f16.f16(i32 15, half %dsdh, half %dsdv, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
894   ret <4 x float> %v
897 define amdgpu_ps <4 x float> @sample_d_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %clamp) {
898 ; GFX9-LABEL: sample_d_cl_2d:
899 ; GFX9:       ; %bb.0: ; %main_body
900 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
901 ; GFX9-NEXT:    v_perm_b32 v5, v5, v4, s12
902 ; GFX9-NEXT:    v_perm_b32 v4, v3, v2, s12
903 ; GFX9-NEXT:    v_perm_b32 v3, v1, v0, s12
904 ; GFX9-NEXT:    image_sample_d_cl v[0:3], v[3:6], s[0:7], s[8:11] dmask:0xf a16
905 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
906 ; GFX9-NEXT:    ; return to shader part epilog
908 ; GFX10-LABEL: sample_d_cl_2d:
909 ; GFX10:       ; %bb.0: ; %main_body
910 ; GFX10-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
911 ; GFX10-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
912 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
913 ; GFX10-NEXT:    image_sample_d_cl_g16 v[0:3], [v0, v2, v4, v6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
914 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
915 ; GFX10-NEXT:    ; return to shader part epilog
917 ; GFX11-LABEL: sample_d_cl_2d:
918 ; GFX11:       ; %bb.0: ; %main_body
919 ; GFX11-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
920 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
921 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
922 ; GFX11-NEXT:    image_sample_d_cl_g16 v[0:3], [v0, v2, v4, v6], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
923 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
924 ; GFX11-NEXT:    ; return to shader part epilog
925 main_body:
926   %v = call <4 x float> @llvm.amdgcn.image.sample.d.cl.2d.v4f32.f16.f16(i32 15, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
927   ret <4 x float> %v
930 define amdgpu_ps <4 x float> @sample_c_d_cl_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %dsdh, half %dsdv, half %s, half %clamp) {
931 ; GFX9-LABEL: sample_c_d_cl_1d:
932 ; GFX9:       ; %bb.0: ; %main_body
933 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
934 ; GFX9-NEXT:    v_perm_b32 v3, v4, v3, s12
935 ; GFX9-NEXT:    image_sample_c_d_cl v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf a16
936 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
937 ; GFX9-NEXT:    ; return to shader part epilog
939 ; GFX10-LABEL: sample_c_d_cl_1d:
940 ; GFX10:       ; %bb.0: ; %main_body
941 ; GFX10-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
942 ; GFX10-NEXT:    image_sample_c_d_cl_g16 v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
943 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
944 ; GFX10-NEXT:    ; return to shader part epilog
946 ; GFX11-LABEL: sample_c_d_cl_1d:
947 ; GFX11:       ; %bb.0: ; %main_body
948 ; GFX11-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
949 ; GFX11-NEXT:    image_sample_c_d_cl_g16 v[0:3], v[0:3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
950 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
951 ; GFX11-NEXT:    ; return to shader part epilog
952 main_body:
953   %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.1d.v4f32.f32.f16(i32 15, float %zcompare, half %dsdh, half %dsdv, half %s, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
954   ret <4 x float> %v
957 define amdgpu_ps <4 x float> @sample_c_d_cl_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %clamp) {
958 ; GFX9-LABEL: sample_c_d_cl_2d:
959 ; GFX9:       ; %bb.0: ; %main_body
960 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
961 ; GFX9-NEXT:    v_mov_b32_e32 v11, v7
962 ; GFX9-NEXT:    v_mov_b32_e32 v7, v0
963 ; GFX9-NEXT:    v_perm_b32 v10, v6, v5, s12
964 ; GFX9-NEXT:    v_perm_b32 v9, v4, v3, s12
965 ; GFX9-NEXT:    v_perm_b32 v8, v2, v1, s12
966 ; GFX9-NEXT:    image_sample_c_d_cl v[0:3], v[7:11], s[0:7], s[8:11] dmask:0xf a16
967 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
968 ; GFX9-NEXT:    ; return to shader part epilog
970 ; GFX10-LABEL: sample_c_d_cl_2d:
971 ; GFX10:       ; %bb.0: ; %main_body
972 ; GFX10-NEXT:    v_perm_b32 v5, v6, v5, 0x5040100
973 ; GFX10-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
974 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
975 ; GFX10-NEXT:    image_sample_c_d_cl_g16 v[0:3], [v0, v1, v3, v5, v7], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
976 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
977 ; GFX10-NEXT:    ; return to shader part epilog
979 ; GFX11-LABEL: sample_c_d_cl_2d:
980 ; GFX11:       ; %bb.0: ; %main_body
981 ; GFX11-NEXT:    v_perm_b32 v5, v6, v5, 0x5040100
982 ; GFX11-NEXT:    v_perm_b32 v3, v4, v3, 0x5040100
983 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
984 ; GFX11-NEXT:    image_sample_c_d_cl_g16 v[0:3], [v0, v1, v3, v5, v7], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
985 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
986 ; GFX11-NEXT:    ; return to shader part epilog
987 main_body:
988   %v = call <4 x float> @llvm.amdgcn.image.sample.c.d.cl.2d.v4f32.f32.f16(i32 15, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %clamp, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
989   ret <4 x float> %v
992 define amdgpu_ps <4 x float> @sample_l_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %lod) {
993 ; GFX9-LABEL: sample_l_1d:
994 ; GFX9:       ; %bb.0: ; %main_body
995 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
996 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s12
997 ; GFX9-NEXT:    image_sample_l v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
998 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
999 ; GFX9-NEXT:    ; return to shader part epilog
1001 ; GFX10-LABEL: sample_l_1d:
1002 ; GFX10:       ; %bb.0: ; %main_body
1003 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
1004 ; GFX10-NEXT:    image_sample_l v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1005 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1006 ; GFX10-NEXT:    ; return to shader part epilog
1008 ; GFX11-LABEL: sample_l_1d:
1009 ; GFX11:       ; %bb.0: ; %main_body
1010 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
1011 ; GFX11-NEXT:    image_sample_l v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1012 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1013 ; GFX11-NEXT:    ; return to shader part epilog
1014 main_body:
1015   %v = call <4 x float> @llvm.amdgcn.image.sample.l.1d.v4f32.f16(i32 15, half %s, half %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1016   ret <4 x float> %v
1019 define amdgpu_ps <4 x float> @sample_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t, half %lod) {
1020 ; GFX9-LABEL: sample_l_2d:
1021 ; GFX9:       ; %bb.0: ; %main_body
1022 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1023 ; GFX9-NEXT:    v_perm_b32 v1, v1, v0, s12
1024 ; GFX9-NEXT:    image_sample_l v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf a16
1025 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1026 ; GFX9-NEXT:    ; return to shader part epilog
1028 ; GFX10-LABEL: sample_l_2d:
1029 ; GFX10:       ; %bb.0: ; %main_body
1030 ; GFX10-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
1031 ; GFX10-NEXT:    image_sample_l v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1032 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1033 ; GFX10-NEXT:    ; return to shader part epilog
1035 ; GFX11-LABEL: sample_l_2d:
1036 ; GFX11:       ; %bb.0: ; %main_body
1037 ; GFX11-NEXT:    v_perm_b32 v1, v1, v0, 0x5040100
1038 ; GFX11-NEXT:    image_sample_l v[0:3], v[1:2], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1039 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1040 ; GFX11-NEXT:    ; return to shader part epilog
1041 main_body:
1042   %v = call <4 x float> @llvm.amdgcn.image.sample.l.2d.v4f32.f16(i32 15, half %s, half %t, half %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1043   ret <4 x float> %v
1046 define amdgpu_ps <4 x float> @sample_c_l_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %lod) {
1047 ; GFX9-LABEL: sample_c_l_1d:
1048 ; GFX9:       ; %bb.0: ; %main_body
1049 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1050 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s12
1051 ; GFX9-NEXT:    image_sample_c_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
1052 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1053 ; GFX9-NEXT:    ; return to shader part epilog
1055 ; GFX10-LABEL: sample_c_l_1d:
1056 ; GFX10:       ; %bb.0: ; %main_body
1057 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1058 ; GFX10-NEXT:    image_sample_c_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1059 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1060 ; GFX10-NEXT:    ; return to shader part epilog
1062 ; GFX11-LABEL: sample_c_l_1d:
1063 ; GFX11:       ; %bb.0: ; %main_body
1064 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1065 ; GFX11-NEXT:    image_sample_c_l v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1066 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1067 ; GFX11-NEXT:    ; return to shader part epilog
1068 main_body:
1069   %v = call <4 x float> @llvm.amdgcn.image.sample.c.l.1d.v4f32.f16(i32 15, float %zcompare, half %s, half %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1070   ret <4 x float> %v
1073 define amdgpu_ps <4 x float> @sample_c_l_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %t, half %lod) {
1074 ; GFX9-LABEL: sample_c_l_2d:
1075 ; GFX9:       ; %bb.0: ; %main_body
1076 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1077 ; GFX9-NEXT:    v_mov_b32_e32 v5, v3
1078 ; GFX9-NEXT:    v_mov_b32_e32 v3, v0
1079 ; GFX9-NEXT:    v_perm_b32 v4, v2, v1, s12
1080 ; GFX9-NEXT:    image_sample_c_l v[0:3], v[3:5], s[0:7], s[8:11] dmask:0xf a16
1081 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1082 ; GFX9-NEXT:    ; return to shader part epilog
1084 ; GFX10-LABEL: sample_c_l_2d:
1085 ; GFX10:       ; %bb.0: ; %main_body
1086 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1087 ; GFX10-NEXT:    image_sample_c_l v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1088 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1089 ; GFX10-NEXT:    ; return to shader part epilog
1091 ; GFX11-LABEL: sample_c_l_2d:
1092 ; GFX11:       ; %bb.0: ; %main_body
1093 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1094 ; GFX11-NEXT:    image_sample_c_l v[0:3], [v0, v1, v3], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1095 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1096 ; GFX11-NEXT:    ; return to shader part epilog
1097 main_body:
1098   %v = call <4 x float> @llvm.amdgcn.image.sample.c.l.2d.v4f32.f16(i32 15, float %zcompare, half %s, half %t, half %lod, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1099   ret <4 x float> %v
1102 define amdgpu_ps <4 x float> @sample_lz_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s) {
1103 ; GFX9-LABEL: sample_lz_1d:
1104 ; GFX9:       ; %bb.0: ; %main_body
1105 ; GFX9-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
1106 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1107 ; GFX9-NEXT:    ; return to shader part epilog
1109 ; GFX10-LABEL: sample_lz_1d:
1110 ; GFX10:       ; %bb.0: ; %main_body
1111 ; GFX10-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1112 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1113 ; GFX10-NEXT:    ; return to shader part epilog
1115 ; GFX11-LABEL: sample_lz_1d:
1116 ; GFX11:       ; %bb.0: ; %main_body
1117 ; GFX11-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1118 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1119 ; GFX11-NEXT:    ; return to shader part epilog
1120 main_body:
1121   %v = call <4 x float> @llvm.amdgcn.image.sample.lz.1d.v4f32.f16(i32 15, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1122   ret <4 x float> %v
1125 define amdgpu_ps <4 x float> @sample_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, half %s, half %t) {
1126 ; GFX9-LABEL: sample_lz_2d:
1127 ; GFX9:       ; %bb.0: ; %main_body
1128 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1129 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s12
1130 ; GFX9-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf a16
1131 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1132 ; GFX9-NEXT:    ; return to shader part epilog
1134 ; GFX10-LABEL: sample_lz_2d:
1135 ; GFX10:       ; %bb.0: ; %main_body
1136 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
1137 ; GFX10-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1138 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1139 ; GFX10-NEXT:    ; return to shader part epilog
1141 ; GFX11-LABEL: sample_lz_2d:
1142 ; GFX11:       ; %bb.0: ; %main_body
1143 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
1144 ; GFX11-NEXT:    image_sample_lz v[0:3], v0, s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1145 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1146 ; GFX11-NEXT:    ; return to shader part epilog
1147 main_body:
1148   %v = call <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f16(i32 15, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1149   ret <4 x float> %v
1152 define amdgpu_ps <4 x float> @sample_c_lz_1d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s) {
1153 ; GFX9-LABEL: sample_c_lz_1d:
1154 ; GFX9:       ; %bb.0: ; %main_body
1155 ; GFX9-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
1156 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1157 ; GFX9-NEXT:    ; return to shader part epilog
1159 ; GFX10-LABEL: sample_c_lz_1d:
1160 ; GFX10:       ; %bb.0: ; %main_body
1161 ; GFX10-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1162 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1163 ; GFX10-NEXT:    ; return to shader part epilog
1165 ; GFX11-LABEL: sample_c_lz_1d:
1166 ; GFX11:       ; %bb.0: ; %main_body
1167 ; GFX11-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_1D a16
1168 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1169 ; GFX11-NEXT:    ; return to shader part epilog
1170 main_body:
1171   %v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.1d.v4f32.f16(i32 15, float %zcompare, half %s, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1172   ret <4 x float> %v
1175 define amdgpu_ps <4 x float> @sample_c_lz_2d(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, float %zcompare, half %s, half %t) {
1176 ; GFX9-LABEL: sample_c_lz_2d:
1177 ; GFX9:       ; %bb.0: ; %main_body
1178 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1179 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s12
1180 ; GFX9-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf a16
1181 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1182 ; GFX9-NEXT:    ; return to shader part epilog
1184 ; GFX10-LABEL: sample_c_lz_2d:
1185 ; GFX10:       ; %bb.0: ; %main_body
1186 ; GFX10-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1187 ; GFX10-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1188 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1189 ; GFX10-NEXT:    ; return to shader part epilog
1191 ; GFX11-LABEL: sample_c_lz_2d:
1192 ; GFX11:       ; %bb.0: ; %main_body
1193 ; GFX11-NEXT:    v_perm_b32 v1, v2, v1, 0x5040100
1194 ; GFX11-NEXT:    image_sample_c_lz v[0:3], v[0:1], s[0:7], s[8:11] dmask:0xf dim:SQ_RSRC_IMG_2D a16
1195 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1196 ; GFX11-NEXT:    ; return to shader part epilog
1197 main_body:
1198   %v = call <4 x float> @llvm.amdgcn.image.sample.c.lz.2d.v4f32.f16(i32 15, float %zcompare, half %s, half %t, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1199   ret <4 x float> %v
1202 define amdgpu_ps float @sample_c_d_o_2darray_V1(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %slice) {
1203 ; GFX9-LABEL: sample_c_d_o_2darray_V1:
1204 ; GFX9:       ; %bb.0: ; %main_body
1205 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1206 ; GFX9-NEXT:    v_mov_b32_e32 v13, v8
1207 ; GFX9-NEXT:    v_mov_b32_e32 v9, v1
1208 ; GFX9-NEXT:    v_mov_b32_e32 v8, v0
1209 ; GFX9-NEXT:    v_perm_b32 v12, v7, v6, s12
1210 ; GFX9-NEXT:    v_perm_b32 v11, v5, v4, s12
1211 ; GFX9-NEXT:    v_perm_b32 v10, v3, v2, s12
1212 ; GFX9-NEXT:    image_sample_c_d_o v0, v[8:13], s[0:7], s[8:11] dmask:0x4 a16 da
1213 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1214 ; GFX9-NEXT:    ; return to shader part epilog
1216 ; GFX10-LABEL: sample_c_d_o_2darray_V1:
1217 ; GFX10:       ; %bb.0: ; %main_body
1218 ; GFX10-NEXT:    v_mov_b32_e32 v13, v8
1219 ; GFX10-NEXT:    v_mov_b32_e32 v9, v1
1220 ; GFX10-NEXT:    v_mov_b32_e32 v8, v0
1221 ; GFX10-NEXT:    v_perm_b32 v12, v7, v6, 0x5040100
1222 ; GFX10-NEXT:    v_perm_b32 v11, v5, v4, 0x5040100
1223 ; GFX10-NEXT:    v_perm_b32 v10, v3, v2, 0x5040100
1224 ; GFX10-NEXT:    image_sample_c_d_o_g16 v0, v[8:13], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY a16
1225 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1226 ; GFX10-NEXT:    ; return to shader part epilog
1228 ; GFX11-LABEL: sample_c_d_o_2darray_V1:
1229 ; GFX11:       ; %bb.0: ; %main_body
1230 ; GFX11-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
1231 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
1232 ; GFX11-NEXT:    v_perm_b32 v7, v7, v6, 0x5040100
1233 ; GFX11-NEXT:    image_sample_c_d_o_g16 v0, [v0, v1, v2, v4, v[7:8]], s[0:7], s[8:11] dmask:0x4 dim:SQ_RSRC_IMG_2D_ARRAY a16
1234 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1235 ; GFX11-NEXT:    ; return to shader part epilog
1236 main_body:
1237   %v = call float @llvm.amdgcn.image.sample.c.d.o.2darray.f32.f16.f16(i32 4, i32 %offset, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1238   ret float %v
1241 define amdgpu_ps <2 x float> @sample_c_d_o_2darray_V2(<8 x i32> inreg %rsrc, <4 x i32> inreg %samp, i32 %offset, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %slice) {
1242 ; GFX9-LABEL: sample_c_d_o_2darray_V2:
1243 ; GFX9:       ; %bb.0: ; %main_body
1244 ; GFX9-NEXT:    s_mov_b32 s12, 0x5040100
1245 ; GFX9-NEXT:    v_mov_b32_e32 v13, v8
1246 ; GFX9-NEXT:    v_mov_b32_e32 v9, v1
1247 ; GFX9-NEXT:    v_mov_b32_e32 v8, v0
1248 ; GFX9-NEXT:    v_perm_b32 v12, v7, v6, s12
1249 ; GFX9-NEXT:    v_perm_b32 v11, v5, v4, s12
1250 ; GFX9-NEXT:    v_perm_b32 v10, v3, v2, s12
1251 ; GFX9-NEXT:    image_sample_c_d_o v[0:1], v[8:13], s[0:7], s[8:11] dmask:0x6 a16 da
1252 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1253 ; GFX9-NEXT:    ; return to shader part epilog
1255 ; GFX10-LABEL: sample_c_d_o_2darray_V2:
1256 ; GFX10:       ; %bb.0: ; %main_body
1257 ; GFX10-NEXT:    v_mov_b32_e32 v13, v8
1258 ; GFX10-NEXT:    v_mov_b32_e32 v9, v1
1259 ; GFX10-NEXT:    v_mov_b32_e32 v8, v0
1260 ; GFX10-NEXT:    v_perm_b32 v12, v7, v6, 0x5040100
1261 ; GFX10-NEXT:    v_perm_b32 v11, v5, v4, 0x5040100
1262 ; GFX10-NEXT:    v_perm_b32 v10, v3, v2, 0x5040100
1263 ; GFX10-NEXT:    image_sample_c_d_o_g16 v[0:1], v[8:13], s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY a16
1264 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1265 ; GFX10-NEXT:    ; return to shader part epilog
1267 ; GFX11-LABEL: sample_c_d_o_2darray_V2:
1268 ; GFX11:       ; %bb.0: ; %main_body
1269 ; GFX11-NEXT:    v_perm_b32 v4, v5, v4, 0x5040100
1270 ; GFX11-NEXT:    v_perm_b32 v2, v3, v2, 0x5040100
1271 ; GFX11-NEXT:    v_perm_b32 v7, v7, v6, 0x5040100
1272 ; GFX11-NEXT:    image_sample_c_d_o_g16 v[0:1], [v0, v1, v2, v4, v[7:8]], s[0:7], s[8:11] dmask:0x6 dim:SQ_RSRC_IMG_2D_ARRAY a16
1273 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1274 ; GFX11-NEXT:    ; return to shader part epilog
1275 main_body:
1276   %v = call <2 x float> @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32.f32.f16(i32 6, i32 %offset, float %zcompare, half %dsdh, half %dtdh, half %dsdv, half %dtdv, half %s, half %t, half %slice, <8 x i32> %rsrc, <4 x i32> %samp, i1 0, i32 0, i32 0)
1277   ret <2 x float> %v
1280 declare <4 x float> @llvm.amdgcn.image.sample.1d.v4f32.f16(i32, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1281 declare <8 x float> @llvm.amdgcn.image.sample.1d.v8f32.f16(i32, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1282 declare <4 x float> @llvm.amdgcn.image.sample.2d.v4f32.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1283 declare <4 x float> @llvm.amdgcn.image.sample.3d.v4f32.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1284 declare <4 x float> @llvm.amdgcn.image.sample.cube.v4f32.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1285 declare <4 x float> @llvm.amdgcn.image.sample.1darray.v4f32.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1286 declare <4 x float> @llvm.amdgcn.image.sample.2darray.v4f32.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1288 declare <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f16(i32, float, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1289 declare <4 x float> @llvm.amdgcn.image.sample.c.2d.v4f32.f16(i32, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1290 declare <4 x float> @llvm.amdgcn.image.sample.cl.1d.v4f32.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1291 declare <4 x float> @llvm.amdgcn.image.sample.cl.2d.v4f32.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1292 declare <4 x float> @llvm.amdgcn.image.sample.c.cl.1d.v4f32.f16(i32, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1293 declare <4 x float> @llvm.amdgcn.image.sample.c.cl.2d.v4f32.f16(i32, float, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1295 declare <4 x float> @llvm.amdgcn.image.sample.b.1d.v4f32.f16.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1296 declare <4 x float> @llvm.amdgcn.image.sample.b.2d.v4f32.f16.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1297 declare <4 x float> @llvm.amdgcn.image.sample.c.b.1d.v4f32.f16.f16(i32, half, float, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1298 declare <4 x float> @llvm.amdgcn.image.sample.c.b.2d.v4f32.f16.f16(i32, half, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1299 declare <4 x float> @llvm.amdgcn.image.sample.b.cl.1d.v4f32.f16.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1300 declare <4 x float> @llvm.amdgcn.image.sample.b.cl.2d.v4f32.f16.f16(i32, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1301 declare <4 x float> @llvm.amdgcn.image.sample.c.b.cl.1d.v4f32.f16.f16(i32, half, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1302 declare <4 x float> @llvm.amdgcn.image.sample.c.b.cl.2d.v4f32.f16.f16(i32, half, float, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1304 declare <4 x float> @llvm.amdgcn.image.sample.d.1d.v4f32.f16.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1305 declare <4 x float> @llvm.amdgcn.image.sample.d.2d.v4f32.f16.f16(i32, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1306 declare <4 x float> @llvm.amdgcn.image.sample.d.3d.v4f32.f16.f16(i32, half, half, half, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1307 declare <4 x float> @llvm.amdgcn.image.sample.c.d.1d.v4f32.f32.f16(i32, float, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1308 declare <4 x float> @llvm.amdgcn.image.sample.c.d.2d.v4f32.f32.f16(i32, float, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1309 declare <4 x float> @llvm.amdgcn.image.sample.d.cl.1d.v4f32.f16.f16(i32, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1310 declare <4 x float> @llvm.amdgcn.image.sample.d.cl.2d.v4f32.f16.f16(i32, half, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1311 declare <4 x float> @llvm.amdgcn.image.sample.c.d.cl.1d.v4f32.f32.f16(i32, float, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1312 declare <4 x float> @llvm.amdgcn.image.sample.c.d.cl.2d.v4f32.f32.f16(i32, float, half, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1314 declare <4 x float> @llvm.amdgcn.image.sample.l.1d.v4f32.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1315 declare <4 x float> @llvm.amdgcn.image.sample.l.2d.v4f32.f16(i32, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1316 declare <4 x float> @llvm.amdgcn.image.sample.c.l.1d.v4f32.f16(i32, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1317 declare <4 x float> @llvm.amdgcn.image.sample.c.l.2d.v4f32.f16(i32, float, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1319 declare <4 x float> @llvm.amdgcn.image.sample.lz.1d.v4f32.f16(i32, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1320 declare <4 x float> @llvm.amdgcn.image.sample.lz.2d.v4f32.f16(i32, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1321 declare <4 x float> @llvm.amdgcn.image.sample.c.lz.1d.v4f32.f16(i32, float, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1322 declare <4 x float> @llvm.amdgcn.image.sample.c.lz.2d.v4f32.f16(i32, float, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1324 declare float @llvm.amdgcn.image.sample.c.d.o.2darray.f32.f16.f16(i32, i32, float, half, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1325 declare <2 x float> @llvm.amdgcn.image.sample.c.d.o.2darray.v2f32.f32.f16(i32, i32, float, half, half, half, half, half, half, half, <8 x i32>, <4 x i32>, i1, i32, i32) #1
1327 attributes #0 = { nounwind }
1328 attributes #1 = { nounwind readonly }
1329 attributes #2 = { nounwind readnone }