Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / llvm.amdgcn.image.getresinfo.ll
blobc79860d56a84e9767076ff11ab6ecdfe6533d5e3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefix=GFX6 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GFX8 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX10 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefix=GFX10 %s
7 define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) {
8 ; GFX6-LABEL: getresinfo_1d:
9 ; GFX6:       ; %bb.0: ; %main_body
10 ; GFX6-NEXT:    s_mov_b32 s0, s2
11 ; GFX6-NEXT:    s_mov_b32 s1, s3
12 ; GFX6-NEXT:    s_mov_b32 s2, s4
13 ; GFX6-NEXT:    s_mov_b32 s3, s5
14 ; GFX6-NEXT:    s_mov_b32 s4, s6
15 ; GFX6-NEXT:    s_mov_b32 s5, s7
16 ; GFX6-NEXT:    s_mov_b32 s6, s8
17 ; GFX6-NEXT:    s_mov_b32 s7, s9
18 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
19 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
20 ; GFX6-NEXT:    ; return to shader part epilog
22 ; GFX8-LABEL: getresinfo_1d:
23 ; GFX8:       ; %bb.0: ; %main_body
24 ; GFX8-NEXT:    s_mov_b32 s0, s2
25 ; GFX8-NEXT:    s_mov_b32 s1, s3
26 ; GFX8-NEXT:    s_mov_b32 s2, s4
27 ; GFX8-NEXT:    s_mov_b32 s3, s5
28 ; GFX8-NEXT:    s_mov_b32 s4, s6
29 ; GFX8-NEXT:    s_mov_b32 s5, s7
30 ; GFX8-NEXT:    s_mov_b32 s6, s8
31 ; GFX8-NEXT:    s_mov_b32 s7, s9
32 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
33 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
34 ; GFX8-NEXT:    ; return to shader part epilog
36 ; GFX10-LABEL: getresinfo_1d:
37 ; GFX10:       ; %bb.0: ; %main_body
38 ; GFX10-NEXT:    s_mov_b32 s0, s2
39 ; GFX10-NEXT:    s_mov_b32 s1, s3
40 ; GFX10-NEXT:    s_mov_b32 s2, s4
41 ; GFX10-NEXT:    s_mov_b32 s3, s5
42 ; GFX10-NEXT:    s_mov_b32 s4, s6
43 ; GFX10-NEXT:    s_mov_b32 s5, s7
44 ; GFX10-NEXT:    s_mov_b32 s6, s8
45 ; GFX10-NEXT:    s_mov_b32 s7, s9
46 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
47 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
48 ; GFX10-NEXT:    ; return to shader part epilog
49 main_body:
50   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
51   ret <4 x float> %v
54 define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) {
55 ; GFX6-LABEL: getresinfo_2d:
56 ; GFX6:       ; %bb.0: ; %main_body
57 ; GFX6-NEXT:    s_mov_b32 s0, s2
58 ; GFX6-NEXT:    s_mov_b32 s1, s3
59 ; GFX6-NEXT:    s_mov_b32 s2, s4
60 ; GFX6-NEXT:    s_mov_b32 s3, s5
61 ; GFX6-NEXT:    s_mov_b32 s4, s6
62 ; GFX6-NEXT:    s_mov_b32 s5, s7
63 ; GFX6-NEXT:    s_mov_b32 s6, s8
64 ; GFX6-NEXT:    s_mov_b32 s7, s9
65 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
66 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
67 ; GFX6-NEXT:    ; return to shader part epilog
69 ; GFX8-LABEL: getresinfo_2d:
70 ; GFX8:       ; %bb.0: ; %main_body
71 ; GFX8-NEXT:    s_mov_b32 s0, s2
72 ; GFX8-NEXT:    s_mov_b32 s1, s3
73 ; GFX8-NEXT:    s_mov_b32 s2, s4
74 ; GFX8-NEXT:    s_mov_b32 s3, s5
75 ; GFX8-NEXT:    s_mov_b32 s4, s6
76 ; GFX8-NEXT:    s_mov_b32 s5, s7
77 ; GFX8-NEXT:    s_mov_b32 s6, s8
78 ; GFX8-NEXT:    s_mov_b32 s7, s9
79 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
80 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
81 ; GFX8-NEXT:    ; return to shader part epilog
83 ; GFX10-LABEL: getresinfo_2d:
84 ; GFX10:       ; %bb.0: ; %main_body
85 ; GFX10-NEXT:    s_mov_b32 s0, s2
86 ; GFX10-NEXT:    s_mov_b32 s1, s3
87 ; GFX10-NEXT:    s_mov_b32 s2, s4
88 ; GFX10-NEXT:    s_mov_b32 s3, s5
89 ; GFX10-NEXT:    s_mov_b32 s4, s6
90 ; GFX10-NEXT:    s_mov_b32 s5, s7
91 ; GFX10-NEXT:    s_mov_b32 s6, s8
92 ; GFX10-NEXT:    s_mov_b32 s7, s9
93 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
94 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
95 ; GFX10-NEXT:    ; return to shader part epilog
96 main_body:
97   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
98   ret <4 x float> %v
101 define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) {
102 ; GFX6-LABEL: getresinfo_3d:
103 ; GFX6:       ; %bb.0: ; %main_body
104 ; GFX6-NEXT:    s_mov_b32 s0, s2
105 ; GFX6-NEXT:    s_mov_b32 s1, s3
106 ; GFX6-NEXT:    s_mov_b32 s2, s4
107 ; GFX6-NEXT:    s_mov_b32 s3, s5
108 ; GFX6-NEXT:    s_mov_b32 s4, s6
109 ; GFX6-NEXT:    s_mov_b32 s5, s7
110 ; GFX6-NEXT:    s_mov_b32 s6, s8
111 ; GFX6-NEXT:    s_mov_b32 s7, s9
112 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
113 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
114 ; GFX6-NEXT:    ; return to shader part epilog
116 ; GFX8-LABEL: getresinfo_3d:
117 ; GFX8:       ; %bb.0: ; %main_body
118 ; GFX8-NEXT:    s_mov_b32 s0, s2
119 ; GFX8-NEXT:    s_mov_b32 s1, s3
120 ; GFX8-NEXT:    s_mov_b32 s2, s4
121 ; GFX8-NEXT:    s_mov_b32 s3, s5
122 ; GFX8-NEXT:    s_mov_b32 s4, s6
123 ; GFX8-NEXT:    s_mov_b32 s5, s7
124 ; GFX8-NEXT:    s_mov_b32 s6, s8
125 ; GFX8-NEXT:    s_mov_b32 s7, s9
126 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
127 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
128 ; GFX8-NEXT:    ; return to shader part epilog
130 ; GFX10-LABEL: getresinfo_3d:
131 ; GFX10:       ; %bb.0: ; %main_body
132 ; GFX10-NEXT:    s_mov_b32 s0, s2
133 ; GFX10-NEXT:    s_mov_b32 s1, s3
134 ; GFX10-NEXT:    s_mov_b32 s2, s4
135 ; GFX10-NEXT:    s_mov_b32 s3, s5
136 ; GFX10-NEXT:    s_mov_b32 s4, s6
137 ; GFX10-NEXT:    s_mov_b32 s5, s7
138 ; GFX10-NEXT:    s_mov_b32 s6, s8
139 ; GFX10-NEXT:    s_mov_b32 s7, s9
140 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
141 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
142 ; GFX10-NEXT:    ; return to shader part epilog
143 main_body:
144   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
145   ret <4 x float> %v
148 define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) {
149 ; GFX6-LABEL: getresinfo_cube:
150 ; GFX6:       ; %bb.0: ; %main_body
151 ; GFX6-NEXT:    s_mov_b32 s0, s2
152 ; GFX6-NEXT:    s_mov_b32 s1, s3
153 ; GFX6-NEXT:    s_mov_b32 s2, s4
154 ; GFX6-NEXT:    s_mov_b32 s3, s5
155 ; GFX6-NEXT:    s_mov_b32 s4, s6
156 ; GFX6-NEXT:    s_mov_b32 s5, s7
157 ; GFX6-NEXT:    s_mov_b32 s6, s8
158 ; GFX6-NEXT:    s_mov_b32 s7, s9
159 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
160 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
161 ; GFX6-NEXT:    ; return to shader part epilog
163 ; GFX8-LABEL: getresinfo_cube:
164 ; GFX8:       ; %bb.0: ; %main_body
165 ; GFX8-NEXT:    s_mov_b32 s0, s2
166 ; GFX8-NEXT:    s_mov_b32 s1, s3
167 ; GFX8-NEXT:    s_mov_b32 s2, s4
168 ; GFX8-NEXT:    s_mov_b32 s3, s5
169 ; GFX8-NEXT:    s_mov_b32 s4, s6
170 ; GFX8-NEXT:    s_mov_b32 s5, s7
171 ; GFX8-NEXT:    s_mov_b32 s6, s8
172 ; GFX8-NEXT:    s_mov_b32 s7, s9
173 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
174 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
175 ; GFX8-NEXT:    ; return to shader part epilog
177 ; GFX10-LABEL: getresinfo_cube:
178 ; GFX10:       ; %bb.0: ; %main_body
179 ; GFX10-NEXT:    s_mov_b32 s0, s2
180 ; GFX10-NEXT:    s_mov_b32 s1, s3
181 ; GFX10-NEXT:    s_mov_b32 s2, s4
182 ; GFX10-NEXT:    s_mov_b32 s3, s5
183 ; GFX10-NEXT:    s_mov_b32 s4, s6
184 ; GFX10-NEXT:    s_mov_b32 s5, s7
185 ; GFX10-NEXT:    s_mov_b32 s6, s8
186 ; GFX10-NEXT:    s_mov_b32 s7, s9
187 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
188 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
189 ; GFX10-NEXT:    ; return to shader part epilog
190 main_body:
191   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
192   ret <4 x float> %v
195 define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) {
196 ; GFX6-LABEL: getresinfo_1darray:
197 ; GFX6:       ; %bb.0: ; %main_body
198 ; GFX6-NEXT:    s_mov_b32 s0, s2
199 ; GFX6-NEXT:    s_mov_b32 s1, s3
200 ; GFX6-NEXT:    s_mov_b32 s2, s4
201 ; GFX6-NEXT:    s_mov_b32 s3, s5
202 ; GFX6-NEXT:    s_mov_b32 s4, s6
203 ; GFX6-NEXT:    s_mov_b32 s5, s7
204 ; GFX6-NEXT:    s_mov_b32 s6, s8
205 ; GFX6-NEXT:    s_mov_b32 s7, s9
206 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
207 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
208 ; GFX6-NEXT:    ; return to shader part epilog
210 ; GFX8-LABEL: getresinfo_1darray:
211 ; GFX8:       ; %bb.0: ; %main_body
212 ; GFX8-NEXT:    s_mov_b32 s0, s2
213 ; GFX8-NEXT:    s_mov_b32 s1, s3
214 ; GFX8-NEXT:    s_mov_b32 s2, s4
215 ; GFX8-NEXT:    s_mov_b32 s3, s5
216 ; GFX8-NEXT:    s_mov_b32 s4, s6
217 ; GFX8-NEXT:    s_mov_b32 s5, s7
218 ; GFX8-NEXT:    s_mov_b32 s6, s8
219 ; GFX8-NEXT:    s_mov_b32 s7, s9
220 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
221 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
222 ; GFX8-NEXT:    ; return to shader part epilog
224 ; GFX10-LABEL: getresinfo_1darray:
225 ; GFX10:       ; %bb.0: ; %main_body
226 ; GFX10-NEXT:    s_mov_b32 s0, s2
227 ; GFX10-NEXT:    s_mov_b32 s1, s3
228 ; GFX10-NEXT:    s_mov_b32 s2, s4
229 ; GFX10-NEXT:    s_mov_b32 s3, s5
230 ; GFX10-NEXT:    s_mov_b32 s4, s6
231 ; GFX10-NEXT:    s_mov_b32 s5, s7
232 ; GFX10-NEXT:    s_mov_b32 s6, s8
233 ; GFX10-NEXT:    s_mov_b32 s7, s9
234 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
235 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
236 ; GFX10-NEXT:    ; return to shader part epilog
237 main_body:
238   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
239   ret <4 x float> %v
242 define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) {
243 ; GFX6-LABEL: getresinfo_2darray:
244 ; GFX6:       ; %bb.0: ; %main_body
245 ; GFX6-NEXT:    s_mov_b32 s0, s2
246 ; GFX6-NEXT:    s_mov_b32 s1, s3
247 ; GFX6-NEXT:    s_mov_b32 s2, s4
248 ; GFX6-NEXT:    s_mov_b32 s3, s5
249 ; GFX6-NEXT:    s_mov_b32 s4, s6
250 ; GFX6-NEXT:    s_mov_b32 s5, s7
251 ; GFX6-NEXT:    s_mov_b32 s6, s8
252 ; GFX6-NEXT:    s_mov_b32 s7, s9
253 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
254 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
255 ; GFX6-NEXT:    ; return to shader part epilog
257 ; GFX8-LABEL: getresinfo_2darray:
258 ; GFX8:       ; %bb.0: ; %main_body
259 ; GFX8-NEXT:    s_mov_b32 s0, s2
260 ; GFX8-NEXT:    s_mov_b32 s1, s3
261 ; GFX8-NEXT:    s_mov_b32 s2, s4
262 ; GFX8-NEXT:    s_mov_b32 s3, s5
263 ; GFX8-NEXT:    s_mov_b32 s4, s6
264 ; GFX8-NEXT:    s_mov_b32 s5, s7
265 ; GFX8-NEXT:    s_mov_b32 s6, s8
266 ; GFX8-NEXT:    s_mov_b32 s7, s9
267 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
268 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
269 ; GFX8-NEXT:    ; return to shader part epilog
271 ; GFX10-LABEL: getresinfo_2darray:
272 ; GFX10:       ; %bb.0: ; %main_body
273 ; GFX10-NEXT:    s_mov_b32 s0, s2
274 ; GFX10-NEXT:    s_mov_b32 s1, s3
275 ; GFX10-NEXT:    s_mov_b32 s2, s4
276 ; GFX10-NEXT:    s_mov_b32 s3, s5
277 ; GFX10-NEXT:    s_mov_b32 s4, s6
278 ; GFX10-NEXT:    s_mov_b32 s5, s7
279 ; GFX10-NEXT:    s_mov_b32 s6, s8
280 ; GFX10-NEXT:    s_mov_b32 s7, s9
281 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
282 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
283 ; GFX10-NEXT:    ; return to shader part epilog
284 main_body:
285   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
286   ret <4 x float> %v
289 define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) {
290 ; GFX6-LABEL: getresinfo_2dmsaa:
291 ; GFX6:       ; %bb.0: ; %main_body
292 ; GFX6-NEXT:    s_mov_b32 s0, s2
293 ; GFX6-NEXT:    s_mov_b32 s1, s3
294 ; GFX6-NEXT:    s_mov_b32 s2, s4
295 ; GFX6-NEXT:    s_mov_b32 s3, s5
296 ; GFX6-NEXT:    s_mov_b32 s4, s6
297 ; GFX6-NEXT:    s_mov_b32 s5, s7
298 ; GFX6-NEXT:    s_mov_b32 s6, s8
299 ; GFX6-NEXT:    s_mov_b32 s7, s9
300 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
301 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
302 ; GFX6-NEXT:    ; return to shader part epilog
304 ; GFX8-LABEL: getresinfo_2dmsaa:
305 ; GFX8:       ; %bb.0: ; %main_body
306 ; GFX8-NEXT:    s_mov_b32 s0, s2
307 ; GFX8-NEXT:    s_mov_b32 s1, s3
308 ; GFX8-NEXT:    s_mov_b32 s2, s4
309 ; GFX8-NEXT:    s_mov_b32 s3, s5
310 ; GFX8-NEXT:    s_mov_b32 s4, s6
311 ; GFX8-NEXT:    s_mov_b32 s5, s7
312 ; GFX8-NEXT:    s_mov_b32 s6, s8
313 ; GFX8-NEXT:    s_mov_b32 s7, s9
314 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
315 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX8-NEXT:    ; return to shader part epilog
318 ; GFX10-LABEL: getresinfo_2dmsaa:
319 ; GFX10:       ; %bb.0: ; %main_body
320 ; GFX10-NEXT:    s_mov_b32 s0, s2
321 ; GFX10-NEXT:    s_mov_b32 s1, s3
322 ; GFX10-NEXT:    s_mov_b32 s2, s4
323 ; GFX10-NEXT:    s_mov_b32 s3, s5
324 ; GFX10-NEXT:    s_mov_b32 s4, s6
325 ; GFX10-NEXT:    s_mov_b32 s5, s7
326 ; GFX10-NEXT:    s_mov_b32 s6, s8
327 ; GFX10-NEXT:    s_mov_b32 s7, s9
328 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
329 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
330 ; GFX10-NEXT:    ; return to shader part epilog
331 main_body:
332   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
333   ret <4 x float> %v
336 define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) {
337 ; GFX6-LABEL: getresinfo_2darraymsaa:
338 ; GFX6:       ; %bb.0: ; %main_body
339 ; GFX6-NEXT:    s_mov_b32 s0, s2
340 ; GFX6-NEXT:    s_mov_b32 s1, s3
341 ; GFX6-NEXT:    s_mov_b32 s2, s4
342 ; GFX6-NEXT:    s_mov_b32 s3, s5
343 ; GFX6-NEXT:    s_mov_b32 s4, s6
344 ; GFX6-NEXT:    s_mov_b32 s5, s7
345 ; GFX6-NEXT:    s_mov_b32 s6, s8
346 ; GFX6-NEXT:    s_mov_b32 s7, s9
347 ; GFX6-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
348 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
349 ; GFX6-NEXT:    ; return to shader part epilog
351 ; GFX8-LABEL: getresinfo_2darraymsaa:
352 ; GFX8:       ; %bb.0: ; %main_body
353 ; GFX8-NEXT:    s_mov_b32 s0, s2
354 ; GFX8-NEXT:    s_mov_b32 s1, s3
355 ; GFX8-NEXT:    s_mov_b32 s2, s4
356 ; GFX8-NEXT:    s_mov_b32 s3, s5
357 ; GFX8-NEXT:    s_mov_b32 s4, s6
358 ; GFX8-NEXT:    s_mov_b32 s5, s7
359 ; GFX8-NEXT:    s_mov_b32 s6, s8
360 ; GFX8-NEXT:    s_mov_b32 s7, s9
361 ; GFX8-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
362 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
363 ; GFX8-NEXT:    ; return to shader part epilog
365 ; GFX10-LABEL: getresinfo_2darraymsaa:
366 ; GFX10:       ; %bb.0: ; %main_body
367 ; GFX10-NEXT:    s_mov_b32 s0, s2
368 ; GFX10-NEXT:    s_mov_b32 s1, s3
369 ; GFX10-NEXT:    s_mov_b32 s2, s4
370 ; GFX10-NEXT:    s_mov_b32 s3, s5
371 ; GFX10-NEXT:    s_mov_b32 s4, s6
372 ; GFX10-NEXT:    s_mov_b32 s5, s7
373 ; GFX10-NEXT:    s_mov_b32 s6, s8
374 ; GFX10-NEXT:    s_mov_b32 s7, s9
375 ; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
376 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
377 ; GFX10-NEXT:    ; return to shader part epilog
378 main_body:
379   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
380   ret <4 x float> %v
383 define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
384 ; GFX6-LABEL: getresinfo_dmask7:
385 ; GFX6:       ; %bb.0: ; %main_body
386 ; GFX6-NEXT:    s_mov_b32 s0, s2
387 ; GFX6-NEXT:    s_mov_b32 s1, s3
388 ; GFX6-NEXT:    s_mov_b32 s2, s4
389 ; GFX6-NEXT:    s_mov_b32 s3, s5
390 ; GFX6-NEXT:    s_mov_b32 s4, s6
391 ; GFX6-NEXT:    s_mov_b32 s5, s7
392 ; GFX6-NEXT:    s_mov_b32 s6, s8
393 ; GFX6-NEXT:    s_mov_b32 s7, s9
394 ; GFX6-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
395 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
396 ; GFX6-NEXT:    ; return to shader part epilog
398 ; GFX8-LABEL: getresinfo_dmask7:
399 ; GFX8:       ; %bb.0: ; %main_body
400 ; GFX8-NEXT:    s_mov_b32 s0, s2
401 ; GFX8-NEXT:    s_mov_b32 s1, s3
402 ; GFX8-NEXT:    s_mov_b32 s2, s4
403 ; GFX8-NEXT:    s_mov_b32 s3, s5
404 ; GFX8-NEXT:    s_mov_b32 s4, s6
405 ; GFX8-NEXT:    s_mov_b32 s5, s7
406 ; GFX8-NEXT:    s_mov_b32 s6, s8
407 ; GFX8-NEXT:    s_mov_b32 s7, s9
408 ; GFX8-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
409 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
410 ; GFX8-NEXT:    ; return to shader part epilog
412 ; GFX10-LABEL: getresinfo_dmask7:
413 ; GFX10:       ; %bb.0: ; %main_body
414 ; GFX10-NEXT:    s_mov_b32 s0, s2
415 ; GFX10-NEXT:    s_mov_b32 s1, s3
416 ; GFX10-NEXT:    s_mov_b32 s2, s4
417 ; GFX10-NEXT:    s_mov_b32 s3, s5
418 ; GFX10-NEXT:    s_mov_b32 s4, s6
419 ; GFX10-NEXT:    s_mov_b32 s5, s7
420 ; GFX10-NEXT:    s_mov_b32 s6, s8
421 ; GFX10-NEXT:    s_mov_b32 s7, s9
422 ; GFX10-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm
423 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
424 ; GFX10-NEXT:    ; return to shader part epilog
425 main_body:
426   %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
427   ret <3 x float> %r
430 define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
431 ; GFX6-LABEL: getresinfo_dmask3:
432 ; GFX6:       ; %bb.0: ; %main_body
433 ; GFX6-NEXT:    s_mov_b32 s0, s2
434 ; GFX6-NEXT:    s_mov_b32 s1, s3
435 ; GFX6-NEXT:    s_mov_b32 s2, s4
436 ; GFX6-NEXT:    s_mov_b32 s3, s5
437 ; GFX6-NEXT:    s_mov_b32 s4, s6
438 ; GFX6-NEXT:    s_mov_b32 s5, s7
439 ; GFX6-NEXT:    s_mov_b32 s6, s8
440 ; GFX6-NEXT:    s_mov_b32 s7, s9
441 ; GFX6-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
442 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
443 ; GFX6-NEXT:    ; return to shader part epilog
445 ; GFX8-LABEL: getresinfo_dmask3:
446 ; GFX8:       ; %bb.0: ; %main_body
447 ; GFX8-NEXT:    s_mov_b32 s0, s2
448 ; GFX8-NEXT:    s_mov_b32 s1, s3
449 ; GFX8-NEXT:    s_mov_b32 s2, s4
450 ; GFX8-NEXT:    s_mov_b32 s3, s5
451 ; GFX8-NEXT:    s_mov_b32 s4, s6
452 ; GFX8-NEXT:    s_mov_b32 s5, s7
453 ; GFX8-NEXT:    s_mov_b32 s6, s8
454 ; GFX8-NEXT:    s_mov_b32 s7, s9
455 ; GFX8-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
456 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
457 ; GFX8-NEXT:    ; return to shader part epilog
459 ; GFX10-LABEL: getresinfo_dmask3:
460 ; GFX10:       ; %bb.0: ; %main_body
461 ; GFX10-NEXT:    s_mov_b32 s0, s2
462 ; GFX10-NEXT:    s_mov_b32 s1, s3
463 ; GFX10-NEXT:    s_mov_b32 s2, s4
464 ; GFX10-NEXT:    s_mov_b32 s3, s5
465 ; GFX10-NEXT:    s_mov_b32 s4, s6
466 ; GFX10-NEXT:    s_mov_b32 s5, s7
467 ; GFX10-NEXT:    s_mov_b32 s6, s8
468 ; GFX10-NEXT:    s_mov_b32 s7, s9
469 ; GFX10-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm
470 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
471 ; GFX10-NEXT:    ; return to shader part epilog
472 main_body:
473   %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
474   ret <2 x float> %r
477 define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
478 ; GFX6-LABEL: getresinfo_dmask1:
479 ; GFX6:       ; %bb.0: ; %main_body
480 ; GFX6-NEXT:    s_mov_b32 s0, s2
481 ; GFX6-NEXT:    s_mov_b32 s1, s3
482 ; GFX6-NEXT:    s_mov_b32 s2, s4
483 ; GFX6-NEXT:    s_mov_b32 s3, s5
484 ; GFX6-NEXT:    s_mov_b32 s4, s6
485 ; GFX6-NEXT:    s_mov_b32 s5, s7
486 ; GFX6-NEXT:    s_mov_b32 s6, s8
487 ; GFX6-NEXT:    s_mov_b32 s7, s9
488 ; GFX6-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
489 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
490 ; GFX6-NEXT:    ; return to shader part epilog
492 ; GFX8-LABEL: getresinfo_dmask1:
493 ; GFX8:       ; %bb.0: ; %main_body
494 ; GFX8-NEXT:    s_mov_b32 s0, s2
495 ; GFX8-NEXT:    s_mov_b32 s1, s3
496 ; GFX8-NEXT:    s_mov_b32 s2, s4
497 ; GFX8-NEXT:    s_mov_b32 s3, s5
498 ; GFX8-NEXT:    s_mov_b32 s4, s6
499 ; GFX8-NEXT:    s_mov_b32 s5, s7
500 ; GFX8-NEXT:    s_mov_b32 s6, s8
501 ; GFX8-NEXT:    s_mov_b32 s7, s9
502 ; GFX8-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
503 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
504 ; GFX8-NEXT:    ; return to shader part epilog
506 ; GFX10-LABEL: getresinfo_dmask1:
507 ; GFX10:       ; %bb.0: ; %main_body
508 ; GFX10-NEXT:    s_mov_b32 s0, s2
509 ; GFX10-NEXT:    s_mov_b32 s1, s3
510 ; GFX10-NEXT:    s_mov_b32 s2, s4
511 ; GFX10-NEXT:    s_mov_b32 s3, s5
512 ; GFX10-NEXT:    s_mov_b32 s4, s6
513 ; GFX10-NEXT:    s_mov_b32 s5, s7
514 ; GFX10-NEXT:    s_mov_b32 s6, s8
515 ; GFX10-NEXT:    s_mov_b32 s7, s9
516 ; GFX10-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm
517 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
518 ; GFX10-NEXT:    ; return to shader part epilog
519 main_body:
520   %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
521   ret float %r
524 define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
525 ; GFX6-LABEL: getresinfo_dmask0:
526 ; GFX6:       ; %bb.0: ; %main_body
527 ; GFX6-NEXT:    ; return to shader part epilog
529 ; GFX8-LABEL: getresinfo_dmask0:
530 ; GFX8:       ; %bb.0: ; %main_body
531 ; GFX8-NEXT:    ; return to shader part epilog
533 ; GFX10-LABEL: getresinfo_dmask0:
534 ; GFX10:       ; %bb.0: ; %main_body
535 ; GFX10-NEXT:    ; return to shader part epilog
536 main_body:
537   %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
538   ret <4 x float> %r
541 declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
542 declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
543 declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
544 declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
545 declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
546 declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
547 declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
548 declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
549 declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
550 declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
551 declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
553 attributes #0 = { nounwind }
554 attributes #1 = { nounwind readnone }