[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.image.dim.ll
blobfc5f2131071fe1bf68908c05b76fdb4f2ae3ec5d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefixes=VERDE %s
3 ; RUN: llc -march=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=FIJI %s
4 ; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX6789 %s
5 ; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-enable-prt-strict-null -verify-machineinstrs < %s | FileCheck -check-prefixes=NOPRT %s
6 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s
7 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s
9 define amdgpu_ps <4 x float> @load_1d(<8 x i32> inreg %rsrc, i32 %s) {
10 ; VERDE-LABEL: load_1d:
11 ; VERDE:       ; %bb.0: ; %main_body
12 ; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
13 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
14 ; VERDE-NEXT:    ; return to shader part epilog
16 ; FIJI-LABEL: load_1d:
17 ; FIJI:       ; %bb.0: ; %main_body
18 ; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
19 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
20 ; FIJI-NEXT:    ; return to shader part epilog
22 ; GFX6789-LABEL: load_1d:
23 ; GFX6789:       ; %bb.0: ; %main_body
24 ; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
25 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
26 ; GFX6789-NEXT:    ; return to shader part epilog
28 ; NOPRT-LABEL: load_1d:
29 ; NOPRT:       ; %bb.0: ; %main_body
30 ; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
31 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
32 ; NOPRT-NEXT:    ; return to shader part epilog
34 ; GFX10PLUS-LABEL: load_1d:
35 ; GFX10PLUS:       ; %bb.0: ; %main_body
36 ; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
37 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
38 ; GFX10PLUS-NEXT:    ; return to shader part epilog
39 main_body:
40   %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
41   ret <4 x float> %v
44 define amdgpu_ps <4 x float> @load_1d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
45 ; VERDE-LABEL: load_1d_tfe:
46 ; VERDE:       ; %bb.0: ; %main_body
47 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
48 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
49 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
50 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
51 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
52 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
53 ; VERDE-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
54 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
55 ; VERDE-NEXT:    s_mov_b32 s10, -1
56 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
57 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
58 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
59 ; VERDE-NEXT:    ; return to shader part epilog
61 ; FIJI-LABEL: load_1d_tfe:
62 ; FIJI:       ; %bb.0: ; %main_body
63 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
64 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
65 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
66 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
67 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
68 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
69 ; FIJI-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
70 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
71 ; FIJI-NEXT:    s_mov_b32 s10, -1
72 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
73 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
74 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
75 ; FIJI-NEXT:    ; return to shader part epilog
77 ; GFX6789-LABEL: load_1d_tfe:
78 ; GFX6789:       ; %bb.0: ; %main_body
79 ; GFX6789-NEXT:    v_mov_b32_e32 v6, 0
80 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
81 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v6
82 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v6
83 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v6
84 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v6
85 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v6
86 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v7
87 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v8
88 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v9
89 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v10
90 ; GFX6789-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
91 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
92 ; GFX6789-NEXT:    global_store_dword v6, v4, s[8:9]
93 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
94 ; GFX6789-NEXT:    ; return to shader part epilog
96 ; NOPRT-LABEL: load_1d_tfe:
97 ; NOPRT:       ; %bb.0: ; %main_body
98 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
99 ; NOPRT-NEXT:    image_load v[0:4], v0, s[0:7] dmask:0xf unorm tfe
100 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
101 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
102 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
103 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
104 ; NOPRT-NEXT:    ; return to shader part epilog
106 ; GFX10-LABEL: load_1d_tfe:
107 ; GFX10:       ; %bb.0: ; %main_body
108 ; GFX10-NEXT:    v_mov_b32_e32 v6, 0
109 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
110 ; GFX10-NEXT:    v_mov_b32_e32 v7, v6
111 ; GFX10-NEXT:    v_mov_b32_e32 v8, v6
112 ; GFX10-NEXT:    v_mov_b32_e32 v9, v6
113 ; GFX10-NEXT:    v_mov_b32_e32 v10, v6
114 ; GFX10-NEXT:    v_mov_b32_e32 v0, v6
115 ; GFX10-NEXT:    v_mov_b32_e32 v1, v7
116 ; GFX10-NEXT:    v_mov_b32_e32 v2, v8
117 ; GFX10-NEXT:    v_mov_b32_e32 v3, v9
118 ; GFX10-NEXT:    v_mov_b32_e32 v4, v10
119 ; GFX10-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe
120 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
121 ; GFX10-NEXT:    global_store_dword v6, v4, s[8:9]
122 ; GFX10-NEXT:    ; return to shader part epilog
124 ; GFX11-LABEL: load_1d_tfe:
125 ; GFX11:       ; %bb.0: ; %main_body
126 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0
127 ; GFX11-NEXT:    v_mov_b32_e32 v7, v6
128 ; GFX11-NEXT:    v_mov_b32_e32 v8, v6
129 ; GFX11-NEXT:    v_mov_b32_e32 v9, v6
130 ; GFX11-NEXT:    v_mov_b32_e32 v10, v6
131 ; GFX11-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7
132 ; GFX11-NEXT:    v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9
133 ; GFX11-NEXT:    v_mov_b32_e32 v4, v10
134 ; GFX11-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe
135 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
136 ; GFX11-NEXT:    global_store_b32 v6, v4, s[8:9]
137 ; GFX11-NEXT:    ; return to shader part epilog
138 main_body:
139   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
140   %v.vec = extractvalue {<4 x float>, i32} %v, 0
141   %v.err = extractvalue {<4 x float>, i32} %v, 1
142   store i32 %v.err, ptr addrspace(1) %out, align 4
143   ret <4 x float> %v.vec
146 define amdgpu_ps <4 x float> @load_1d_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
147 ; VERDE-LABEL: load_1d_lwe:
148 ; VERDE:       ; %bb.0: ; %main_body
149 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
150 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
151 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
152 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
153 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
154 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
155 ; VERDE-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
156 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
157 ; VERDE-NEXT:    s_mov_b32 s10, -1
158 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
159 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
160 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
161 ; VERDE-NEXT:    ; return to shader part epilog
163 ; FIJI-LABEL: load_1d_lwe:
164 ; FIJI:       ; %bb.0: ; %main_body
165 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
166 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
167 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
168 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
169 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
170 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
171 ; FIJI-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
172 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
173 ; FIJI-NEXT:    s_mov_b32 s10, -1
174 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
175 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
176 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
177 ; FIJI-NEXT:    ; return to shader part epilog
179 ; GFX6789-LABEL: load_1d_lwe:
180 ; GFX6789:       ; %bb.0: ; %main_body
181 ; GFX6789-NEXT:    v_mov_b32_e32 v6, 0
182 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
183 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v6
184 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v6
185 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v6
186 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v6
187 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v6
188 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v7
189 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v8
190 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v9
191 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v10
192 ; GFX6789-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
193 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
194 ; GFX6789-NEXT:    global_store_dword v6, v4, s[8:9]
195 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
196 ; GFX6789-NEXT:    ; return to shader part epilog
198 ; NOPRT-LABEL: load_1d_lwe:
199 ; NOPRT:       ; %bb.0: ; %main_body
200 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
201 ; NOPRT-NEXT:    image_load v[0:4], v0, s[0:7] dmask:0xf unorm lwe
202 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
203 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
204 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
205 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
206 ; NOPRT-NEXT:    ; return to shader part epilog
208 ; GFX10-LABEL: load_1d_lwe:
209 ; GFX10:       ; %bb.0: ; %main_body
210 ; GFX10-NEXT:    v_mov_b32_e32 v6, 0
211 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
212 ; GFX10-NEXT:    v_mov_b32_e32 v7, v6
213 ; GFX10-NEXT:    v_mov_b32_e32 v8, v6
214 ; GFX10-NEXT:    v_mov_b32_e32 v9, v6
215 ; GFX10-NEXT:    v_mov_b32_e32 v10, v6
216 ; GFX10-NEXT:    v_mov_b32_e32 v0, v6
217 ; GFX10-NEXT:    v_mov_b32_e32 v1, v7
218 ; GFX10-NEXT:    v_mov_b32_e32 v2, v8
219 ; GFX10-NEXT:    v_mov_b32_e32 v3, v9
220 ; GFX10-NEXT:    v_mov_b32_e32 v4, v10
221 ; GFX10-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
222 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
223 ; GFX10-NEXT:    global_store_dword v6, v4, s[8:9]
224 ; GFX10-NEXT:    ; return to shader part epilog
226 ; GFX11-LABEL: load_1d_lwe:
227 ; GFX11:       ; %bb.0: ; %main_body
228 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v6, 0
229 ; GFX11-NEXT:    v_mov_b32_e32 v7, v6
230 ; GFX11-NEXT:    v_mov_b32_e32 v8, v6
231 ; GFX11-NEXT:    v_mov_b32_e32 v9, v6
232 ; GFX11-NEXT:    v_mov_b32_e32 v10, v6
233 ; GFX11-NEXT:    v_dual_mov_b32 v0, v6 :: v_dual_mov_b32 v1, v7
234 ; GFX11-NEXT:    v_dual_mov_b32 v2, v8 :: v_dual_mov_b32 v3, v9
235 ; GFX11-NEXT:    v_mov_b32_e32 v4, v10
236 ; GFX11-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
237 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
238 ; GFX11-NEXT:    global_store_b32 v6, v4, s[8:9]
239 ; GFX11-NEXT:    ; return to shader part epilog
240 main_body:
241   %v = call {<4 x float>, i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 2, i32 0)
242   %v.vec = extractvalue {<4 x float>, i32} %v, 0
243   %v.err = extractvalue {<4 x float>, i32} %v, 1
244   store i32 %v.err, ptr addrspace(1) %out, align 4
245   ret <4 x float> %v.vec
248 define amdgpu_ps <4 x float> @load_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t) {
249 ; VERDE-LABEL: load_2d:
250 ; VERDE:       ; %bb.0: ; %main_body
251 ; VERDE-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
252 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
253 ; VERDE-NEXT:    ; return to shader part epilog
255 ; FIJI-LABEL: load_2d:
256 ; FIJI:       ; %bb.0: ; %main_body
257 ; FIJI-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
258 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
259 ; FIJI-NEXT:    ; return to shader part epilog
261 ; GFX6789-LABEL: load_2d:
262 ; GFX6789:       ; %bb.0: ; %main_body
263 ; GFX6789-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
264 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
265 ; GFX6789-NEXT:    ; return to shader part epilog
267 ; NOPRT-LABEL: load_2d:
268 ; NOPRT:       ; %bb.0: ; %main_body
269 ; NOPRT-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
270 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
271 ; NOPRT-NEXT:    ; return to shader part epilog
273 ; GFX10PLUS-LABEL: load_2d:
274 ; GFX10PLUS:       ; %bb.0: ; %main_body
275 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
276 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
277 ; GFX10PLUS-NEXT:    ; return to shader part epilog
278 main_body:
279   %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)
280   ret <4 x float> %v
283 define amdgpu_ps <4 x float> @load_2d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t) {
284 ; VERDE-LABEL: load_2d_tfe:
285 ; VERDE:       ; %bb.0: ; %main_body
286 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
287 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
288 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
289 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
290 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
291 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
292 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
293 ; VERDE-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
294 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
295 ; VERDE-NEXT:    s_mov_b32 s10, -1
296 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
297 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
298 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
299 ; VERDE-NEXT:    ; return to shader part epilog
301 ; FIJI-LABEL: load_2d_tfe:
302 ; FIJI:       ; %bb.0: ; %main_body
303 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
304 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
305 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
306 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
307 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
308 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
309 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
310 ; FIJI-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
311 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
312 ; FIJI-NEXT:    s_mov_b32 s10, -1
313 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
314 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
315 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
316 ; FIJI-NEXT:    ; return to shader part epilog
318 ; GFX6789-LABEL: load_2d_tfe:
319 ; GFX6789:       ; %bb.0: ; %main_body
320 ; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
321 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
322 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
323 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
324 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
325 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
326 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
327 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
328 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
329 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
330 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
331 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
332 ; GFX6789-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
333 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
334 ; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
335 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
336 ; GFX6789-NEXT:    ; return to shader part epilog
338 ; NOPRT-LABEL: load_2d_tfe:
339 ; NOPRT:       ; %bb.0: ; %main_body
340 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
341 ; NOPRT-NEXT:    image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe
342 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
343 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
344 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
345 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
346 ; NOPRT-NEXT:    ; return to shader part epilog
348 ; GFX10-LABEL: load_2d_tfe:
349 ; GFX10:       ; %bb.0: ; %main_body
350 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
351 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
352 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
353 ; GFX10-NEXT:    v_mov_b32_e32 v8, v7
354 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
355 ; GFX10-NEXT:    v_mov_b32_e32 v10, v7
356 ; GFX10-NEXT:    v_mov_b32_e32 v11, v7
357 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
358 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
359 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
360 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
361 ; GFX10-NEXT:    v_mov_b32_e32 v4, v11
362 ; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
363 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
364 ; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
365 ; GFX10-NEXT:    ; return to shader part epilog
367 ; GFX11-LABEL: load_2d_tfe:
368 ; GFX11:       ; %bb.0: ; %main_body
369 ; GFX11-NEXT:    v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1
370 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7
371 ; GFX11-NEXT:    v_mov_b32_e32 v9, v7
372 ; GFX11-NEXT:    v_mov_b32_e32 v10, v7
373 ; GFX11-NEXT:    v_mov_b32_e32 v11, v7
374 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
375 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
376 ; GFX11-NEXT:    v_mov_b32_e32 v4, v11
377 ; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
378 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
379 ; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
380 ; GFX11-NEXT:    ; return to shader part epilog
381 main_body:
382   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 1, i32 0)
383   %v.vec = extractvalue {<4 x float>, i32} %v, 0
384   %v.err = extractvalue {<4 x float>, i32} %v, 1
385   store i32 %v.err, ptr addrspace(1) %out, align 4
386   ret <4 x float> %v.vec
389 define amdgpu_ps <4 x float> @load_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r) {
390 ; VERDE-LABEL: load_3d:
391 ; VERDE:       ; %bb.0: ; %main_body
392 ; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
393 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
394 ; VERDE-NEXT:    ; return to shader part epilog
396 ; FIJI-LABEL: load_3d:
397 ; FIJI:       ; %bb.0: ; %main_body
398 ; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
399 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
400 ; FIJI-NEXT:    ; return to shader part epilog
402 ; GFX6789-LABEL: load_3d:
403 ; GFX6789:       ; %bb.0: ; %main_body
404 ; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
405 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
406 ; GFX6789-NEXT:    ; return to shader part epilog
408 ; NOPRT-LABEL: load_3d:
409 ; NOPRT:       ; %bb.0: ; %main_body
410 ; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
411 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
412 ; NOPRT-NEXT:    ; return to shader part epilog
414 ; GFX10PLUS-LABEL: load_3d:
415 ; GFX10PLUS:       ; %bb.0: ; %main_body
416 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
417 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
418 ; GFX10PLUS-NEXT:    ; return to shader part epilog
419 main_body:
420   %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)
421   ret <4 x float> %v
424 define amdgpu_ps <4 x float> @load_3d_tfe_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %r) {
425 ; VERDE-LABEL: load_3d_tfe_lwe:
426 ; VERDE:       ; %bb.0: ; %main_body
427 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
428 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
429 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
430 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
431 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
432 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
433 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
434 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
435 ; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
436 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
437 ; VERDE-NEXT:    s_mov_b32 s10, -1
438 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
439 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
440 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
441 ; VERDE-NEXT:    ; return to shader part epilog
443 ; FIJI-LABEL: load_3d_tfe_lwe:
444 ; FIJI:       ; %bb.0: ; %main_body
445 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
446 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
447 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
448 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
449 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
450 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
451 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
452 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
453 ; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
454 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
455 ; FIJI-NEXT:    s_mov_b32 s10, -1
456 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
457 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
458 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
459 ; FIJI-NEXT:    ; return to shader part epilog
461 ; GFX6789-LABEL: load_3d_tfe_lwe:
462 ; GFX6789:       ; %bb.0: ; %main_body
463 ; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
464 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
465 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
466 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
467 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
468 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
469 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
470 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
471 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
472 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
473 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
474 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
475 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
476 ; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
477 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
478 ; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
479 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
480 ; GFX6789-NEXT:    ; return to shader part epilog
482 ; NOPRT-LABEL: load_3d_tfe_lwe:
483 ; NOPRT:       ; %bb.0: ; %main_body
484 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
485 ; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe
486 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
487 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
488 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
489 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
490 ; NOPRT-NEXT:    ; return to shader part epilog
492 ; GFX10-LABEL: load_3d_tfe_lwe:
493 ; GFX10:       ; %bb.0: ; %main_body
494 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
495 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
496 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
497 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
498 ; GFX10-NEXT:    v_mov_b32_e32 v9, v8
499 ; GFX10-NEXT:    v_mov_b32_e32 v10, v8
500 ; GFX10-NEXT:    v_mov_b32_e32 v11, v8
501 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
502 ; GFX10-NEXT:    v_mov_b32_e32 v0, v8
503 ; GFX10-NEXT:    v_mov_b32_e32 v1, v9
504 ; GFX10-NEXT:    v_mov_b32_e32 v2, v10
505 ; GFX10-NEXT:    v_mov_b32_e32 v3, v11
506 ; GFX10-NEXT:    v_mov_b32_e32 v4, v12
507 ; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe
508 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
509 ; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
510 ; GFX10-NEXT:    ; return to shader part epilog
512 ; GFX11-LABEL: load_3d_tfe_lwe:
513 ; GFX11:       ; %bb.0: ; %main_body
514 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0
515 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
516 ; GFX11-NEXT:    v_mov_b32_e32 v9, v8
517 ; GFX11-NEXT:    v_mov_b32_e32 v10, v8
518 ; GFX11-NEXT:    v_mov_b32_e32 v11, v8
519 ; GFX11-NEXT:    v_mov_b32_e32 v12, v8
520 ; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
521 ; GFX11-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
522 ; GFX11-NEXT:    v_mov_b32_e32 v4, v12
523 ; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe
524 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
525 ; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
526 ; GFX11-NEXT:    ; return to shader part epilog
527 main_body:
528   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 3, i32 0)
529   %v.vec = extractvalue {<4 x float>, i32} %v, 0
530   %v.err = extractvalue {<4 x float>, i32} %v, 1
531   store i32 %v.err, ptr addrspace(1) %out, align 4
532   ret <4 x float> %v.vec
535 define amdgpu_ps <4 x float> @load_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) {
536 ; VERDE-LABEL: load_cube:
537 ; VERDE:       ; %bb.0: ; %main_body
538 ; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
539 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
540 ; VERDE-NEXT:    ; return to shader part epilog
542 ; FIJI-LABEL: load_cube:
543 ; FIJI:       ; %bb.0: ; %main_body
544 ; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
545 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
546 ; FIJI-NEXT:    ; return to shader part epilog
548 ; GFX6789-LABEL: load_cube:
549 ; GFX6789:       ; %bb.0: ; %main_body
550 ; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
551 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
552 ; GFX6789-NEXT:    ; return to shader part epilog
554 ; NOPRT-LABEL: load_cube:
555 ; NOPRT:       ; %bb.0: ; %main_body
556 ; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
557 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
558 ; NOPRT-NEXT:    ; return to shader part epilog
560 ; GFX10PLUS-LABEL: load_cube:
561 ; GFX10PLUS:       ; %bb.0: ; %main_body
562 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
563 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
564 ; GFX10PLUS-NEXT:    ; return to shader part epilog
565 main_body:
566   %v = call <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
567   ret <4 x float> %v
570 define amdgpu_ps <4 x float> @load_cube_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice) {
571 ; VERDE-LABEL: load_cube_lwe:
572 ; VERDE:       ; %bb.0: ; %main_body
573 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
574 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
575 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
576 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
577 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
578 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
579 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
580 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
581 ; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
582 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
583 ; VERDE-NEXT:    s_mov_b32 s10, -1
584 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
585 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
586 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
587 ; VERDE-NEXT:    ; return to shader part epilog
589 ; FIJI-LABEL: load_cube_lwe:
590 ; FIJI:       ; %bb.0: ; %main_body
591 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
592 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
593 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
594 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
595 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
596 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
597 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
598 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
599 ; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
600 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
601 ; FIJI-NEXT:    s_mov_b32 s10, -1
602 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
603 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
604 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
605 ; FIJI-NEXT:    ; return to shader part epilog
607 ; GFX6789-LABEL: load_cube_lwe:
608 ; GFX6789:       ; %bb.0: ; %main_body
609 ; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
610 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
611 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
612 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
613 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
614 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
615 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
616 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
617 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
618 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
619 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
620 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
621 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
622 ; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
623 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
624 ; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
625 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
626 ; GFX6789-NEXT:    ; return to shader part epilog
628 ; NOPRT-LABEL: load_cube_lwe:
629 ; NOPRT:       ; %bb.0: ; %main_body
630 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
631 ; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da
632 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
633 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
634 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
635 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
636 ; NOPRT-NEXT:    ; return to shader part epilog
638 ; GFX10-LABEL: load_cube_lwe:
639 ; GFX10:       ; %bb.0: ; %main_body
640 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
641 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
642 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
643 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
644 ; GFX10-NEXT:    v_mov_b32_e32 v9, v8
645 ; GFX10-NEXT:    v_mov_b32_e32 v10, v8
646 ; GFX10-NEXT:    v_mov_b32_e32 v11, v8
647 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
648 ; GFX10-NEXT:    v_mov_b32_e32 v0, v8
649 ; GFX10-NEXT:    v_mov_b32_e32 v1, v9
650 ; GFX10-NEXT:    v_mov_b32_e32 v2, v10
651 ; GFX10-NEXT:    v_mov_b32_e32 v3, v11
652 ; GFX10-NEXT:    v_mov_b32_e32 v4, v12
653 ; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe
654 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
655 ; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
656 ; GFX10-NEXT:    ; return to shader part epilog
658 ; GFX11-LABEL: load_cube_lwe:
659 ; GFX11:       ; %bb.0: ; %main_body
660 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0
661 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
662 ; GFX11-NEXT:    v_mov_b32_e32 v9, v8
663 ; GFX11-NEXT:    v_mov_b32_e32 v10, v8
664 ; GFX11-NEXT:    v_mov_b32_e32 v11, v8
665 ; GFX11-NEXT:    v_mov_b32_e32 v12, v8
666 ; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
667 ; GFX11-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
668 ; GFX11-NEXT:    v_mov_b32_e32 v4, v12
669 ; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe
670 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
671 ; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
672 ; GFX11-NEXT:    ; return to shader part epilog
673 main_body:
674   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0)
675   %v.vec = extractvalue {<4 x float>, i32} %v, 0
676   %v.err = extractvalue {<4 x float>, i32} %v, 1
677   store i32 %v.err, ptr addrspace(1) %out, align 4
678   ret <4 x float> %v.vec
681 define amdgpu_ps <4 x float> @load_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice) {
682 ; VERDE-LABEL: load_1darray:
683 ; VERDE:       ; %bb.0: ; %main_body
684 ; VERDE-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
685 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
686 ; VERDE-NEXT:    ; return to shader part epilog
688 ; FIJI-LABEL: load_1darray:
689 ; FIJI:       ; %bb.0: ; %main_body
690 ; FIJI-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
691 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
692 ; FIJI-NEXT:    ; return to shader part epilog
694 ; GFX6789-LABEL: load_1darray:
695 ; GFX6789:       ; %bb.0: ; %main_body
696 ; GFX6789-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
697 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
698 ; GFX6789-NEXT:    ; return to shader part epilog
700 ; NOPRT-LABEL: load_1darray:
701 ; NOPRT:       ; %bb.0: ; %main_body
702 ; NOPRT-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
703 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
704 ; NOPRT-NEXT:    ; return to shader part epilog
706 ; GFX10PLUS-LABEL: load_1darray:
707 ; GFX10PLUS:       ; %bb.0: ; %main_body
708 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
709 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
710 ; GFX10PLUS-NEXT:    ; return to shader part epilog
711 main_body:
712   %v = call <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
713   ret <4 x float> %v
716 define amdgpu_ps <4 x float> @load_1darray_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %slice) {
717 ; VERDE-LABEL: load_1darray_tfe:
718 ; VERDE:       ; %bb.0: ; %main_body
719 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
720 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
721 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
722 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
723 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
724 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
725 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
726 ; VERDE-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
727 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
728 ; VERDE-NEXT:    s_mov_b32 s10, -1
729 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
730 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
731 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
732 ; VERDE-NEXT:    ; return to shader part epilog
734 ; FIJI-LABEL: load_1darray_tfe:
735 ; FIJI:       ; %bb.0: ; %main_body
736 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
737 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
738 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
739 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
740 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
741 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
742 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
743 ; FIJI-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
744 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
745 ; FIJI-NEXT:    s_mov_b32 s10, -1
746 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
747 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
748 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
749 ; FIJI-NEXT:    ; return to shader part epilog
751 ; GFX6789-LABEL: load_1darray_tfe:
752 ; GFX6789:       ; %bb.0: ; %main_body
753 ; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
754 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
755 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
756 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
757 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
758 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
759 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
760 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
761 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
762 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
763 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
764 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
765 ; GFX6789-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
766 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
767 ; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
768 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
769 ; GFX6789-NEXT:    ; return to shader part epilog
771 ; NOPRT-LABEL: load_1darray_tfe:
772 ; NOPRT:       ; %bb.0: ; %main_body
773 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
774 ; NOPRT-NEXT:    image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe da
775 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
776 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
777 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
778 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
779 ; NOPRT-NEXT:    ; return to shader part epilog
781 ; GFX10-LABEL: load_1darray_tfe:
782 ; GFX10:       ; %bb.0: ; %main_body
783 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
784 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
785 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
786 ; GFX10-NEXT:    v_mov_b32_e32 v8, v7
787 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
788 ; GFX10-NEXT:    v_mov_b32_e32 v10, v7
789 ; GFX10-NEXT:    v_mov_b32_e32 v11, v7
790 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
791 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
792 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
793 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
794 ; GFX10-NEXT:    v_mov_b32_e32 v4, v11
795 ; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe
796 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
797 ; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
798 ; GFX10-NEXT:    ; return to shader part epilog
800 ; GFX11-LABEL: load_1darray_tfe:
801 ; GFX11:       ; %bb.0: ; %main_body
802 ; GFX11-NEXT:    v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1
803 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7
804 ; GFX11-NEXT:    v_mov_b32_e32 v9, v7
805 ; GFX11-NEXT:    v_mov_b32_e32 v10, v7
806 ; GFX11-NEXT:    v_mov_b32_e32 v11, v7
807 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
808 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
809 ; GFX11-NEXT:    v_mov_b32_e32 v4, v11
810 ; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe
811 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
812 ; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
813 ; GFX11-NEXT:    ; return to shader part epilog
814 main_body:
815   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 1, i32 0)
816   %v.vec = extractvalue {<4 x float>, i32} %v, 0
817   %v.err = extractvalue {<4 x float>, i32} %v, 1
818   store i32 %v.err, ptr addrspace(1) %out, align 4
819   ret <4 x float> %v.vec
822 define amdgpu_ps <4 x float> @load_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) {
823 ; VERDE-LABEL: load_2darray:
824 ; VERDE:       ; %bb.0: ; %main_body
825 ; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
826 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
827 ; VERDE-NEXT:    ; return to shader part epilog
829 ; FIJI-LABEL: load_2darray:
830 ; FIJI:       ; %bb.0: ; %main_body
831 ; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
832 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
833 ; FIJI-NEXT:    ; return to shader part epilog
835 ; GFX6789-LABEL: load_2darray:
836 ; GFX6789:       ; %bb.0: ; %main_body
837 ; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
838 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
839 ; GFX6789-NEXT:    ; return to shader part epilog
841 ; NOPRT-LABEL: load_2darray:
842 ; NOPRT:       ; %bb.0: ; %main_body
843 ; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
844 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
845 ; NOPRT-NEXT:    ; return to shader part epilog
847 ; GFX10PLUS-LABEL: load_2darray:
848 ; GFX10PLUS:       ; %bb.0: ; %main_body
849 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
850 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
851 ; GFX10PLUS-NEXT:    ; return to shader part epilog
852 main_body:
853   %v = call <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
854   ret <4 x float> %v
857 define amdgpu_ps <4 x float> @load_2darray_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice) {
858 ; VERDE-LABEL: load_2darray_lwe:
859 ; VERDE:       ; %bb.0: ; %main_body
860 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
861 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
862 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
863 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
864 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
865 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
866 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
867 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
868 ; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
869 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
870 ; VERDE-NEXT:    s_mov_b32 s10, -1
871 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
872 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
873 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
874 ; VERDE-NEXT:    ; return to shader part epilog
876 ; FIJI-LABEL: load_2darray_lwe:
877 ; FIJI:       ; %bb.0: ; %main_body
878 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
879 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
880 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
881 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
882 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
883 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
884 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
885 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
886 ; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
887 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
888 ; FIJI-NEXT:    s_mov_b32 s10, -1
889 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
890 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
891 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
892 ; FIJI-NEXT:    ; return to shader part epilog
894 ; GFX6789-LABEL: load_2darray_lwe:
895 ; GFX6789:       ; %bb.0: ; %main_body
896 ; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
897 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
898 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
899 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
900 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
901 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
902 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
903 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
904 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
905 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
906 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
907 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
908 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
909 ; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
910 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
911 ; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
912 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
913 ; GFX6789-NEXT:    ; return to shader part epilog
915 ; NOPRT-LABEL: load_2darray_lwe:
916 ; NOPRT:       ; %bb.0: ; %main_body
917 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
918 ; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da
919 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
920 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
921 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
922 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
923 ; NOPRT-NEXT:    ; return to shader part epilog
925 ; GFX10-LABEL: load_2darray_lwe:
926 ; GFX10:       ; %bb.0: ; %main_body
927 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
928 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
929 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
930 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
931 ; GFX10-NEXT:    v_mov_b32_e32 v9, v8
932 ; GFX10-NEXT:    v_mov_b32_e32 v10, v8
933 ; GFX10-NEXT:    v_mov_b32_e32 v11, v8
934 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
935 ; GFX10-NEXT:    v_mov_b32_e32 v0, v8
936 ; GFX10-NEXT:    v_mov_b32_e32 v1, v9
937 ; GFX10-NEXT:    v_mov_b32_e32 v2, v10
938 ; GFX10-NEXT:    v_mov_b32_e32 v3, v11
939 ; GFX10-NEXT:    v_mov_b32_e32 v4, v12
940 ; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe
941 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
942 ; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
943 ; GFX10-NEXT:    ; return to shader part epilog
945 ; GFX11-LABEL: load_2darray_lwe:
946 ; GFX11:       ; %bb.0: ; %main_body
947 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0
948 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
949 ; GFX11-NEXT:    v_mov_b32_e32 v9, v8
950 ; GFX11-NEXT:    v_mov_b32_e32 v10, v8
951 ; GFX11-NEXT:    v_mov_b32_e32 v11, v8
952 ; GFX11-NEXT:    v_mov_b32_e32 v12, v8
953 ; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
954 ; GFX11-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
955 ; GFX11-NEXT:    v_mov_b32_e32 v4, v12
956 ; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe
957 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
958 ; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
959 ; GFX11-NEXT:    ; return to shader part epilog
960 main_body:
961   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0)
962   %v.vec = extractvalue {<4 x float>, i32} %v, 0
963   %v.err = extractvalue {<4 x float>, i32} %v, 1
964   store i32 %v.err, ptr addrspace(1) %out, align 4
965   ret <4 x float> %v.vec
968 define amdgpu_ps <4 x float> @load_2dmsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %fragid) {
969 ; VERDE-LABEL: load_2dmsaa:
970 ; VERDE:       ; %bb.0: ; %main_body
971 ; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
972 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
973 ; VERDE-NEXT:    ; return to shader part epilog
975 ; FIJI-LABEL: load_2dmsaa:
976 ; FIJI:       ; %bb.0: ; %main_body
977 ; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
978 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
979 ; FIJI-NEXT:    ; return to shader part epilog
981 ; GFX6789-LABEL: load_2dmsaa:
982 ; GFX6789:       ; %bb.0: ; %main_body
983 ; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
984 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
985 ; GFX6789-NEXT:    ; return to shader part epilog
987 ; NOPRT-LABEL: load_2dmsaa:
988 ; NOPRT:       ; %bb.0: ; %main_body
989 ; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
990 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
991 ; NOPRT-NEXT:    ; return to shader part epilog
993 ; GFX10PLUS-LABEL: load_2dmsaa:
994 ; GFX10PLUS:       ; %bb.0: ; %main_body
995 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
996 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
997 ; GFX10PLUS-NEXT:    ; return to shader part epilog
998 main_body:
999   %v = call <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
1000   ret <4 x float> %v
1003 define amdgpu_ps <4 x float> @load_2dmsaa_both(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %fragid) {
1004 ; VERDE-LABEL: load_2dmsaa_both:
1005 ; VERDE:       ; %bb.0: ; %main_body
1006 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1007 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1008 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1009 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1010 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1011 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1012 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1013 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1014 ; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1015 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1016 ; VERDE-NEXT:    s_mov_b32 s10, -1
1017 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1018 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1019 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1020 ; VERDE-NEXT:    ; return to shader part epilog
1022 ; FIJI-LABEL: load_2dmsaa_both:
1023 ; FIJI:       ; %bb.0: ; %main_body
1024 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1025 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1026 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1027 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1028 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1029 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1030 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1031 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1032 ; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1033 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1034 ; FIJI-NEXT:    s_mov_b32 s10, -1
1035 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1036 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1037 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1038 ; FIJI-NEXT:    ; return to shader part epilog
1040 ; GFX6789-LABEL: load_2dmsaa_both:
1041 ; GFX6789:       ; %bb.0: ; %main_body
1042 ; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
1043 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1044 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1045 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1046 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
1047 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
1048 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
1049 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
1050 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
1051 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
1052 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
1053 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
1054 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
1055 ; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1056 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1057 ; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
1058 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1059 ; GFX6789-NEXT:    ; return to shader part epilog
1061 ; NOPRT-LABEL: load_2dmsaa_both:
1062 ; NOPRT:       ; %bb.0: ; %main_body
1063 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1064 ; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe
1065 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1066 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1067 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1068 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1069 ; NOPRT-NEXT:    ; return to shader part epilog
1071 ; GFX10-LABEL: load_2dmsaa_both:
1072 ; GFX10:       ; %bb.0: ; %main_body
1073 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
1074 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1075 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1076 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1077 ; GFX10-NEXT:    v_mov_b32_e32 v9, v8
1078 ; GFX10-NEXT:    v_mov_b32_e32 v10, v8
1079 ; GFX10-NEXT:    v_mov_b32_e32 v11, v8
1080 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
1081 ; GFX10-NEXT:    v_mov_b32_e32 v0, v8
1082 ; GFX10-NEXT:    v_mov_b32_e32 v1, v9
1083 ; GFX10-NEXT:    v_mov_b32_e32 v2, v10
1084 ; GFX10-NEXT:    v_mov_b32_e32 v3, v11
1085 ; GFX10-NEXT:    v_mov_b32_e32 v4, v12
1086 ; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe
1087 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1088 ; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
1089 ; GFX10-NEXT:    ; return to shader part epilog
1091 ; GFX11-LABEL: load_2dmsaa_both:
1092 ; GFX11:       ; %bb.0: ; %main_body
1093 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0
1094 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
1095 ; GFX11-NEXT:    v_mov_b32_e32 v9, v8
1096 ; GFX11-NEXT:    v_mov_b32_e32 v10, v8
1097 ; GFX11-NEXT:    v_mov_b32_e32 v11, v8
1098 ; GFX11-NEXT:    v_mov_b32_e32 v12, v8
1099 ; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
1100 ; GFX11-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
1101 ; GFX11-NEXT:    v_mov_b32_e32 v4, v12
1102 ; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe
1103 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1104 ; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
1105 ; GFX11-NEXT:    ; return to shader part epilog
1106 main_body:
1107   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 3, i32 0)
1108   %v.vec = extractvalue {<4 x float>, i32} %v, 0
1109   %v.err = extractvalue {<4 x float>, i32} %v, 1
1110   store i32 %v.err, ptr addrspace(1) %out, align 4
1111   ret <4 x float> %v.vec
1114 define amdgpu_ps <4 x float> @load_2darraymsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
1115 ; VERDE-LABEL: load_2darraymsaa:
1116 ; VERDE:       ; %bb.0: ; %main_body
1117 ; VERDE-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1118 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1119 ; VERDE-NEXT:    ; return to shader part epilog
1121 ; FIJI-LABEL: load_2darraymsaa:
1122 ; FIJI:       ; %bb.0: ; %main_body
1123 ; FIJI-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1124 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1125 ; FIJI-NEXT:    ; return to shader part epilog
1127 ; GFX6789-LABEL: load_2darraymsaa:
1128 ; GFX6789:       ; %bb.0: ; %main_body
1129 ; GFX6789-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1130 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1131 ; GFX6789-NEXT:    ; return to shader part epilog
1133 ; NOPRT-LABEL: load_2darraymsaa:
1134 ; NOPRT:       ; %bb.0: ; %main_body
1135 ; NOPRT-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1136 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1137 ; NOPRT-NEXT:    ; return to shader part epilog
1139 ; GFX10PLUS-LABEL: load_2darraymsaa:
1140 ; GFX10PLUS:       ; %bb.0: ; %main_body
1141 ; GFX10PLUS-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
1142 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1143 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1144 main_body:
1145   %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
1146   ret <4 x float> %v
1149 define amdgpu_ps <4 x float> @load_2darraymsaa_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
1150 ; VERDE-LABEL: load_2darraymsaa_tfe:
1151 ; VERDE:       ; %bb.0: ; %main_body
1152 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1153 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1154 ; VERDE-NEXT:    v_mov_b32_e32 v8, v3
1155 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1156 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1157 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1158 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1159 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1160 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1161 ; VERDE-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1162 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1163 ; VERDE-NEXT:    s_mov_b32 s10, -1
1164 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1165 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1166 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1167 ; VERDE-NEXT:    ; return to shader part epilog
1169 ; FIJI-LABEL: load_2darraymsaa_tfe:
1170 ; FIJI:       ; %bb.0: ; %main_body
1171 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1172 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1173 ; FIJI-NEXT:    v_mov_b32_e32 v8, v3
1174 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1175 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1176 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1177 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1178 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1179 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1180 ; FIJI-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1181 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1182 ; FIJI-NEXT:    s_mov_b32 s10, -1
1183 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1184 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1185 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1186 ; FIJI-NEXT:    ; return to shader part epilog
1188 ; GFX6789-LABEL: load_2darraymsaa_tfe:
1189 ; GFX6789:       ; %bb.0: ; %main_body
1190 ; GFX6789-NEXT:    v_mov_b32_e32 v9, 0
1191 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v3
1192 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1193 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1194 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1195 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v9
1196 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v9
1197 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v9
1198 ; GFX6789-NEXT:    v_mov_b32_e32 v13, v9
1199 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v9
1200 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v10
1201 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v11
1202 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v12
1203 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v13
1204 ; GFX6789-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1205 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1206 ; GFX6789-NEXT:    global_store_dword v9, v4, s[8:9]
1207 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1208 ; GFX6789-NEXT:    ; return to shader part epilog
1210 ; NOPRT-LABEL: load_2darraymsaa_tfe:
1211 ; NOPRT:       ; %bb.0: ; %main_body
1212 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1213 ; NOPRT-NEXT:    image_load v[0:4], v[0:3], s[0:7] dmask:0xf unorm tfe da
1214 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1215 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1216 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1217 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1218 ; NOPRT-NEXT:    ; return to shader part epilog
1220 ; GFX10-LABEL: load_2darraymsaa_tfe:
1221 ; GFX10:       ; %bb.0: ; %main_body
1222 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
1223 ; GFX10-NEXT:    v_mov_b32_e32 v8, v3
1224 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1225 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1226 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1227 ; GFX10-NEXT:    v_mov_b32_e32 v10, v9
1228 ; GFX10-NEXT:    v_mov_b32_e32 v11, v9
1229 ; GFX10-NEXT:    v_mov_b32_e32 v12, v9
1230 ; GFX10-NEXT:    v_mov_b32_e32 v13, v9
1231 ; GFX10-NEXT:    v_mov_b32_e32 v0, v9
1232 ; GFX10-NEXT:    v_mov_b32_e32 v1, v10
1233 ; GFX10-NEXT:    v_mov_b32_e32 v2, v11
1234 ; GFX10-NEXT:    v_mov_b32_e32 v3, v12
1235 ; GFX10-NEXT:    v_mov_b32_e32 v4, v13
1236 ; GFX10-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe
1237 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1238 ; GFX10-NEXT:    global_store_dword v9, v4, s[8:9]
1239 ; GFX10-NEXT:    ; return to shader part epilog
1241 ; GFX11-LABEL: load_2darraymsaa_tfe:
1242 ; GFX11:       ; %bb.0: ; %main_body
1243 ; GFX11-NEXT:    v_dual_mov_b32 v9, 0 :: v_dual_mov_b32 v8, v3
1244 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
1245 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v10, v9
1246 ; GFX11-NEXT:    v_mov_b32_e32 v11, v9
1247 ; GFX11-NEXT:    v_mov_b32_e32 v12, v9
1248 ; GFX11-NEXT:    v_mov_b32_e32 v13, v9
1249 ; GFX11-NEXT:    v_dual_mov_b32 v0, v9 :: v_dual_mov_b32 v1, v10
1250 ; GFX11-NEXT:    v_dual_mov_b32 v2, v11 :: v_dual_mov_b32 v3, v12
1251 ; GFX11-NEXT:    v_mov_b32_e32 v4, v13
1252 ; GFX11-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe
1253 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1254 ; GFX11-NEXT:    global_store_b32 v9, v4, s[8:9]
1255 ; GFX11-NEXT:    ; return to shader part epilog
1256 main_body:
1257   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 1, i32 0)
1258   %v.vec = extractvalue {<4 x float>, i32} %v, 0
1259   %v.err = extractvalue {<4 x float>, i32} %v, 1
1260   store i32 %v.err, ptr addrspace(1) %out, align 4
1261   ret <4 x float> %v.vec
1264 define amdgpu_ps <4 x float> @load_mip_1d(<8 x i32> inreg %rsrc, i32 %s, i32 %mip) {
1265 ; VERDE-LABEL: load_mip_1d:
1266 ; VERDE:       ; %bb.0: ; %main_body
1267 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1268 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1269 ; VERDE-NEXT:    ; return to shader part epilog
1271 ; FIJI-LABEL: load_mip_1d:
1272 ; FIJI:       ; %bb.0: ; %main_body
1273 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1274 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1275 ; FIJI-NEXT:    ; return to shader part epilog
1277 ; GFX6789-LABEL: load_mip_1d:
1278 ; GFX6789:       ; %bb.0: ; %main_body
1279 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1280 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1281 ; GFX6789-NEXT:    ; return to shader part epilog
1283 ; NOPRT-LABEL: load_mip_1d:
1284 ; NOPRT:       ; %bb.0: ; %main_body
1285 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1286 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1287 ; NOPRT-NEXT:    ; return to shader part epilog
1289 ; GFX10PLUS-LABEL: load_mip_1d:
1290 ; GFX10PLUS:       ; %bb.0: ; %main_body
1291 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
1292 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1293 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1294 main_body:
1295   %v = call <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
1296   ret <4 x float> %v
1299 define amdgpu_ps <4 x float> @load_mip_1d_lwe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %mip) {
1300 ; VERDE-LABEL: load_mip_1d_lwe:
1301 ; VERDE:       ; %bb.0: ; %main_body
1302 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1303 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1304 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1305 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1306 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1307 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1308 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1309 ; VERDE-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1310 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1311 ; VERDE-NEXT:    s_mov_b32 s10, -1
1312 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1313 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1314 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1315 ; VERDE-NEXT:    ; return to shader part epilog
1317 ; FIJI-LABEL: load_mip_1d_lwe:
1318 ; FIJI:       ; %bb.0: ; %main_body
1319 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1320 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1321 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1322 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1323 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1324 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1325 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1326 ; FIJI-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1327 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1328 ; FIJI-NEXT:    s_mov_b32 s10, -1
1329 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1330 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1331 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1332 ; FIJI-NEXT:    ; return to shader part epilog
1334 ; GFX6789-LABEL: load_mip_1d_lwe:
1335 ; GFX6789:       ; %bb.0: ; %main_body
1336 ; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
1337 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1338 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1339 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
1340 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
1341 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
1342 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
1343 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
1344 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
1345 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
1346 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
1347 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
1348 ; GFX6789-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1349 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1350 ; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
1351 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1352 ; GFX6789-NEXT:    ; return to shader part epilog
1354 ; NOPRT-LABEL: load_mip_1d_lwe:
1355 ; NOPRT:       ; %bb.0: ; %main_body
1356 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1357 ; NOPRT-NEXT:    image_load_mip v[0:4], v[0:1], s[0:7] dmask:0xf unorm lwe
1358 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1359 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1360 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1361 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1362 ; NOPRT-NEXT:    ; return to shader part epilog
1364 ; GFX10-LABEL: load_mip_1d_lwe:
1365 ; GFX10:       ; %bb.0: ; %main_body
1366 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
1367 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1368 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1369 ; GFX10-NEXT:    v_mov_b32_e32 v8, v7
1370 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
1371 ; GFX10-NEXT:    v_mov_b32_e32 v10, v7
1372 ; GFX10-NEXT:    v_mov_b32_e32 v11, v7
1373 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
1374 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
1375 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
1376 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
1377 ; GFX10-NEXT:    v_mov_b32_e32 v4, v11
1378 ; GFX10-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
1379 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1380 ; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
1381 ; GFX10-NEXT:    ; return to shader part epilog
1383 ; GFX11-LABEL: load_mip_1d_lwe:
1384 ; GFX11:       ; %bb.0: ; %main_body
1385 ; GFX11-NEXT:    v_dual_mov_b32 v7, 0 :: v_dual_mov_b32 v6, v1
1386 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, v7
1387 ; GFX11-NEXT:    v_mov_b32_e32 v9, v7
1388 ; GFX11-NEXT:    v_mov_b32_e32 v10, v7
1389 ; GFX11-NEXT:    v_mov_b32_e32 v11, v7
1390 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
1391 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
1392 ; GFX11-NEXT:    v_mov_b32_e32 v4, v11
1393 ; GFX11-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
1394 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1395 ; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
1396 ; GFX11-NEXT:    ; return to shader part epilog
1397 main_body:
1398   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 2, i32 0)
1399   %v.vec = extractvalue {<4 x float>, i32} %v, 0
1400   %v.err = extractvalue {<4 x float>, i32} %v, 1
1401   store i32 %v.err, ptr addrspace(1) %out, align 4
1402   ret <4 x float> %v.vec
1405 define amdgpu_ps <4 x float> @load_mip_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1406 ; VERDE-LABEL: load_mip_2d:
1407 ; VERDE:       ; %bb.0: ; %main_body
1408 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1409 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1410 ; VERDE-NEXT:    ; return to shader part epilog
1412 ; FIJI-LABEL: load_mip_2d:
1413 ; FIJI:       ; %bb.0: ; %main_body
1414 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1415 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1416 ; FIJI-NEXT:    ; return to shader part epilog
1418 ; GFX6789-LABEL: load_mip_2d:
1419 ; GFX6789:       ; %bb.0: ; %main_body
1420 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1421 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1422 ; GFX6789-NEXT:    ; return to shader part epilog
1424 ; NOPRT-LABEL: load_mip_2d:
1425 ; NOPRT:       ; %bb.0: ; %main_body
1426 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1427 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1428 ; NOPRT-NEXT:    ; return to shader part epilog
1430 ; GFX10PLUS-LABEL: load_mip_2d:
1431 ; GFX10PLUS:       ; %bb.0: ; %main_body
1432 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
1433 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1434 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1435 main_body:
1436   %v = call <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
1437   ret <4 x float> %v
1440 define amdgpu_ps <4 x float> @load_mip_2d_tfe(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s, i32 %t, i32 %mip) {
1441 ; VERDE-LABEL: load_mip_2d_tfe:
1442 ; VERDE:       ; %bb.0: ; %main_body
1443 ; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1444 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1445 ; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1446 ; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1447 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1448 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1449 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1450 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1451 ; VERDE-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1452 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1453 ; VERDE-NEXT:    s_mov_b32 s10, -1
1454 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1455 ; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1456 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1457 ; VERDE-NEXT:    ; return to shader part epilog
1459 ; FIJI-LABEL: load_mip_2d_tfe:
1460 ; FIJI:       ; %bb.0: ; %main_body
1461 ; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1462 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1463 ; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1464 ; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1465 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1466 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1467 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1468 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1469 ; FIJI-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1470 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1471 ; FIJI-NEXT:    s_mov_b32 s10, -1
1472 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1473 ; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1474 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1475 ; FIJI-NEXT:    ; return to shader part epilog
1477 ; GFX6789-LABEL: load_mip_2d_tfe:
1478 ; GFX6789:       ; %bb.0: ; %main_body
1479 ; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
1480 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1481 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1482 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1483 ; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
1484 ; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
1485 ; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
1486 ; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
1487 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
1488 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
1489 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
1490 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
1491 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
1492 ; GFX6789-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1493 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1494 ; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
1495 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1496 ; GFX6789-NEXT:    ; return to shader part epilog
1498 ; NOPRT-LABEL: load_mip_2d_tfe:
1499 ; NOPRT:       ; %bb.0: ; %main_body
1500 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1501 ; NOPRT-NEXT:    image_load_mip v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe
1502 ; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1503 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1504 ; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1505 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1506 ; NOPRT-NEXT:    ; return to shader part epilog
1508 ; GFX10-LABEL: load_mip_2d_tfe:
1509 ; GFX10:       ; %bb.0: ; %main_body
1510 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
1511 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1512 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1513 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1514 ; GFX10-NEXT:    v_mov_b32_e32 v9, v8
1515 ; GFX10-NEXT:    v_mov_b32_e32 v10, v8
1516 ; GFX10-NEXT:    v_mov_b32_e32 v11, v8
1517 ; GFX10-NEXT:    v_mov_b32_e32 v12, v8
1518 ; GFX10-NEXT:    v_mov_b32_e32 v0, v8
1519 ; GFX10-NEXT:    v_mov_b32_e32 v1, v9
1520 ; GFX10-NEXT:    v_mov_b32_e32 v2, v10
1521 ; GFX10-NEXT:    v_mov_b32_e32 v3, v11
1522 ; GFX10-NEXT:    v_mov_b32_e32 v4, v12
1523 ; GFX10-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
1524 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1525 ; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
1526 ; GFX10-NEXT:    ; return to shader part epilog
1528 ; GFX11-LABEL: load_mip_2d_tfe:
1529 ; GFX11:       ; %bb.0: ; %main_body
1530 ; GFX11-NEXT:    v_dual_mov_b32 v5, v0 :: v_dual_mov_b32 v8, 0
1531 ; GFX11-NEXT:    v_dual_mov_b32 v7, v2 :: v_dual_mov_b32 v6, v1
1532 ; GFX11-NEXT:    v_mov_b32_e32 v9, v8
1533 ; GFX11-NEXT:    v_mov_b32_e32 v10, v8
1534 ; GFX11-NEXT:    v_mov_b32_e32 v11, v8
1535 ; GFX11-NEXT:    v_mov_b32_e32 v12, v8
1536 ; GFX11-NEXT:    v_dual_mov_b32 v0, v8 :: v_dual_mov_b32 v1, v9
1537 ; GFX11-NEXT:    v_dual_mov_b32 v2, v10 :: v_dual_mov_b32 v3, v11
1538 ; GFX11-NEXT:    v_mov_b32_e32 v4, v12
1539 ; GFX11-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
1540 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1541 ; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
1542 ; GFX11-NEXT:    ; return to shader part epilog
1543 main_body:
1544   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1545   %v.vec = extractvalue {<4 x float>, i32} %v, 0
1546   %v.err = extractvalue {<4 x float>, i32} %v, 1
1547   store i32 %v.err, ptr addrspace(1) %out, align 4
1548   ret <4 x float> %v.vec
1551 define amdgpu_ps float @load_1d_V2_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
1552 ; VERDE-LABEL: load_1d_V2_tfe_dmask0:
1553 ; VERDE:       ; %bb.0: ; %main_body
1554 ; VERDE-NEXT:    v_mov_b32_e32 v1, 0
1555 ; VERDE-NEXT:    v_mov_b32_e32 v2, v1
1556 ; VERDE-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1557 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1558 ; VERDE-NEXT:    v_mov_b32_e32 v0, v2
1559 ; VERDE-NEXT:    ; return to shader part epilog
1561 ; FIJI-LABEL: load_1d_V2_tfe_dmask0:
1562 ; FIJI:       ; %bb.0: ; %main_body
1563 ; FIJI-NEXT:    v_mov_b32_e32 v1, 0
1564 ; FIJI-NEXT:    v_mov_b32_e32 v2, v1
1565 ; FIJI-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1566 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1567 ; FIJI-NEXT:    v_mov_b32_e32 v0, v2
1568 ; FIJI-NEXT:    ; return to shader part epilog
1570 ; GFX6789-LABEL: load_1d_V2_tfe_dmask0:
1571 ; GFX6789:       ; %bb.0: ; %main_body
1572 ; GFX6789-NEXT:    v_mov_b32_e32 v1, 0
1573 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v1
1574 ; GFX6789-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1575 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1576 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v2
1577 ; GFX6789-NEXT:    ; return to shader part epilog
1579 ; NOPRT-LABEL: load_1d_V2_tfe_dmask0:
1580 ; NOPRT:       ; %bb.0: ; %main_body
1581 ; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
1582 ; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe
1583 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1584 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
1585 ; NOPRT-NEXT:    ; return to shader part epilog
1587 ; GFX10PLUS-LABEL: load_1d_V2_tfe_dmask0:
1588 ; GFX10PLUS:       ; %bb.0: ; %main_body
1589 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v1, 0
1590 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v2, v1
1591 ; GFX10PLUS-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe
1592 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1593 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v2
1594 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1595 main_body:
1596   %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
1597   %v.err = extractvalue {<2 x float>, i32} %v, 1
1598   %vv = bitcast i32 %v.err to float
1599   ret float %vv
1602 define amdgpu_ps float @load_1d_V1_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
1603 ; VERDE-LABEL: load_1d_V1_tfe_dmask0:
1604 ; VERDE:       ; %bb.0: ; %main_body
1605 ; VERDE-NEXT:    v_mov_b32_e32 v1, 0
1606 ; VERDE-NEXT:    v_mov_b32_e32 v2, v1
1607 ; VERDE-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1608 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1609 ; VERDE-NEXT:    v_mov_b32_e32 v0, v2
1610 ; VERDE-NEXT:    ; return to shader part epilog
1612 ; FIJI-LABEL: load_1d_V1_tfe_dmask0:
1613 ; FIJI:       ; %bb.0: ; %main_body
1614 ; FIJI-NEXT:    v_mov_b32_e32 v1, 0
1615 ; FIJI-NEXT:    v_mov_b32_e32 v2, v1
1616 ; FIJI-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1617 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1618 ; FIJI-NEXT:    v_mov_b32_e32 v0, v2
1619 ; FIJI-NEXT:    ; return to shader part epilog
1621 ; GFX6789-LABEL: load_1d_V1_tfe_dmask0:
1622 ; GFX6789:       ; %bb.0: ; %main_body
1623 ; GFX6789-NEXT:    v_mov_b32_e32 v1, 0
1624 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v1
1625 ; GFX6789-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1626 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1627 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v2
1628 ; GFX6789-NEXT:    ; return to shader part epilog
1630 ; NOPRT-LABEL: load_1d_V1_tfe_dmask0:
1631 ; NOPRT:       ; %bb.0: ; %main_body
1632 ; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
1633 ; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe
1634 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1635 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
1636 ; NOPRT-NEXT:    ; return to shader part epilog
1638 ; GFX10PLUS-LABEL: load_1d_V1_tfe_dmask0:
1639 ; GFX10PLUS:       ; %bb.0: ; %main_body
1640 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v1, 0
1641 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v2, v1
1642 ; GFX10PLUS-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe
1643 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1644 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v2
1645 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1646 main_body:
1647   %v = call {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
1648   %v.err = extractvalue {float, i32} %v, 1
1649   %vv = bitcast i32 %v.err to float
1650   ret float %vv
1653 define amdgpu_ps float @load_mip_2d_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1654 ; VERDE-LABEL: load_mip_2d_tfe_dmask0:
1655 ; VERDE:       ; %bb.0: ; %main_body
1656 ; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1657 ; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1658 ; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1659 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1660 ; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1661 ; VERDE-NEXT:    ; return to shader part epilog
1663 ; FIJI-LABEL: load_mip_2d_tfe_dmask0:
1664 ; FIJI:       ; %bb.0: ; %main_body
1665 ; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1666 ; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1667 ; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1668 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1669 ; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1670 ; FIJI-NEXT:    ; return to shader part epilog
1672 ; GFX6789-LABEL: load_mip_2d_tfe_dmask0:
1673 ; GFX6789:       ; %bb.0: ; %main_body
1674 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1675 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1676 ; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1677 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1678 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1679 ; GFX6789-NEXT:    ; return to shader part epilog
1681 ; NOPRT-LABEL: load_mip_2d_tfe_dmask0:
1682 ; NOPRT:       ; %bb.0: ; %main_body
1683 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1684 ; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1685 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1686 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1687 ; NOPRT-NEXT:    ; return to shader part epilog
1689 ; GFX10PLUS-LABEL: load_mip_2d_tfe_dmask0:
1690 ; GFX10PLUS:       ; %bb.0: ; %main_body
1691 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1692 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1693 ; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1694 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1695 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1696 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1697 main_body:
1698   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 0, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1699   %v.err = extractvalue {<4 x float>, i32} %v, 1
1700   %vv = bitcast i32 %v.err to float
1701   ret float %vv
1704 define amdgpu_ps float @load_mip_2d_tfe_nouse(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1705 ; VERDE-LABEL: load_mip_2d_tfe_nouse:
1706 ; VERDE:       ; %bb.0: ; %main_body
1707 ; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1708 ; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1709 ; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1710 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1711 ; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1712 ; VERDE-NEXT:    ; return to shader part epilog
1714 ; FIJI-LABEL: load_mip_2d_tfe_nouse:
1715 ; FIJI:       ; %bb.0: ; %main_body
1716 ; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1717 ; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1718 ; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1719 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1720 ; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1721 ; FIJI-NEXT:    ; return to shader part epilog
1723 ; GFX6789-LABEL: load_mip_2d_tfe_nouse:
1724 ; GFX6789:       ; %bb.0: ; %main_body
1725 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1726 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1727 ; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1728 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1729 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1730 ; GFX6789-NEXT:    ; return to shader part epilog
1732 ; NOPRT-LABEL: load_mip_2d_tfe_nouse:
1733 ; NOPRT:       ; %bb.0: ; %main_body
1734 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1735 ; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1736 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1737 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1738 ; NOPRT-NEXT:    ; return to shader part epilog
1740 ; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse:
1741 ; GFX10PLUS:       ; %bb.0: ; %main_body
1742 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1743 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1744 ; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1745 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1746 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1747 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1748 main_body:
1749   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1750   %v.err = extractvalue {<4 x float>, i32} %v, 1
1751   %vv = bitcast i32 %v.err to float
1752   ret float %vv
1755 define amdgpu_ps float @load_mip_2d_tfe_nouse_V2(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1756 ; VERDE-LABEL: load_mip_2d_tfe_nouse_V2:
1757 ; VERDE:       ; %bb.0: ; %main_body
1758 ; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1759 ; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1760 ; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1761 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1762 ; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1763 ; VERDE-NEXT:    ; return to shader part epilog
1765 ; FIJI-LABEL: load_mip_2d_tfe_nouse_V2:
1766 ; FIJI:       ; %bb.0: ; %main_body
1767 ; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1768 ; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1769 ; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1770 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1771 ; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1772 ; FIJI-NEXT:    ; return to shader part epilog
1774 ; GFX6789-LABEL: load_mip_2d_tfe_nouse_V2:
1775 ; GFX6789:       ; %bb.0: ; %main_body
1776 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1777 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1778 ; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1779 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1780 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1781 ; GFX6789-NEXT:    ; return to shader part epilog
1783 ; NOPRT-LABEL: load_mip_2d_tfe_nouse_V2:
1784 ; NOPRT:       ; %bb.0: ; %main_body
1785 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1786 ; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1787 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1788 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1789 ; NOPRT-NEXT:    ; return to shader part epilog
1791 ; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V2:
1792 ; GFX10PLUS:       ; %bb.0: ; %main_body
1793 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1794 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1795 ; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1796 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1797 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1798 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1799 main_body:
1800   %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32 6, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1801   %v.err = extractvalue {<2 x float>, i32} %v, 1
1802   %vv = bitcast i32 %v.err to float
1803   ret float %vv
1806 define amdgpu_ps float @load_mip_2d_tfe_nouse_V1(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1807 ; VERDE-LABEL: load_mip_2d_tfe_nouse_V1:
1808 ; VERDE:       ; %bb.0: ; %main_body
1809 ; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1810 ; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1811 ; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1812 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1813 ; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1814 ; VERDE-NEXT:    ; return to shader part epilog
1816 ; FIJI-LABEL: load_mip_2d_tfe_nouse_V1:
1817 ; FIJI:       ; %bb.0: ; %main_body
1818 ; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1819 ; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1820 ; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1821 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1822 ; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1823 ; FIJI-NEXT:    ; return to shader part epilog
1825 ; GFX6789-LABEL: load_mip_2d_tfe_nouse_V1:
1826 ; GFX6789:       ; %bb.0: ; %main_body
1827 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1828 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1829 ; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1830 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1831 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1832 ; GFX6789-NEXT:    ; return to shader part epilog
1834 ; NOPRT-LABEL: load_mip_2d_tfe_nouse_V1:
1835 ; NOPRT:       ; %bb.0: ; %main_body
1836 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1837 ; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x2 unorm tfe
1838 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1839 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1840 ; NOPRT-NEXT:    ; return to shader part epilog
1842 ; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V1:
1843 ; GFX10PLUS:       ; %bb.0: ; %main_body
1844 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1845 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1846 ; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_2D unorm tfe
1847 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1848 ; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1849 ; GFX10PLUS-NEXT:    ; return to shader part epilog
1850 main_body:
1851   %v = call {float, i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32 2, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1852   %v.err = extractvalue {float, i32} %v, 1
1853   %vv = bitcast i32 %v.err to float
1854   ret float %vv
1857 define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask3(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
1858 ; VERDE-LABEL: load_1d_tfe_V4_dmask3:
1859 ; VERDE:       ; %bb.0: ; %main_body
1860 ; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1861 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1862 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1863 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1864 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1865 ; VERDE-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1866 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1867 ; VERDE-NEXT:    s_mov_b32 s10, -1
1868 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1869 ; VERDE-NEXT:    buffer_store_dword v3, off, s[8:11], 0
1870 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1871 ; VERDE-NEXT:    ; return to shader part epilog
1873 ; FIJI-LABEL: load_1d_tfe_V4_dmask3:
1874 ; FIJI:       ; %bb.0: ; %main_body
1875 ; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1876 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1877 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1878 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1879 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1880 ; FIJI-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1881 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1882 ; FIJI-NEXT:    s_mov_b32 s10, -1
1883 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1884 ; FIJI-NEXT:    buffer_store_dword v3, off, s[8:11], 0
1885 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1886 ; FIJI-NEXT:    ; return to shader part epilog
1888 ; GFX6789-LABEL: load_1d_tfe_V4_dmask3:
1889 ; GFX6789:       ; %bb.0: ; %main_body
1890 ; GFX6789-NEXT:    v_mov_b32_e32 v5, 0
1891 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v0
1892 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v5
1893 ; GFX6789-NEXT:    v_mov_b32_e32 v7, v5
1894 ; GFX6789-NEXT:    v_mov_b32_e32 v8, v5
1895 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v5
1896 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v6
1897 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v7
1898 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v8
1899 ; GFX6789-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1900 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1901 ; GFX6789-NEXT:    global_store_dword v5, v3, s[8:9]
1902 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1903 ; GFX6789-NEXT:    ; return to shader part epilog
1905 ; NOPRT-LABEL: load_1d_tfe_V4_dmask3:
1906 ; NOPRT:       ; %bb.0: ; %main_body
1907 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1908 ; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0x7 unorm tfe
1909 ; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1910 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1911 ; NOPRT-NEXT:    global_store_dword v4, v3, s[8:9]
1912 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1913 ; NOPRT-NEXT:    ; return to shader part epilog
1915 ; GFX10-LABEL: load_1d_tfe_V4_dmask3:
1916 ; GFX10:       ; %bb.0: ; %main_body
1917 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
1918 ; GFX10-NEXT:    v_mov_b32_e32 v4, v0
1919 ; GFX10-NEXT:    v_mov_b32_e32 v6, v5
1920 ; GFX10-NEXT:    v_mov_b32_e32 v7, v5
1921 ; GFX10-NEXT:    v_mov_b32_e32 v8, v5
1922 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
1923 ; GFX10-NEXT:    v_mov_b32_e32 v1, v6
1924 ; GFX10-NEXT:    v_mov_b32_e32 v2, v7
1925 ; GFX10-NEXT:    v_mov_b32_e32 v3, v8
1926 ; GFX10-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe
1927 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1928 ; GFX10-NEXT:    global_store_dword v5, v3, s[8:9]
1929 ; GFX10-NEXT:    ; return to shader part epilog
1931 ; GFX11-LABEL: load_1d_tfe_V4_dmask3:
1932 ; GFX11:       ; %bb.0: ; %main_body
1933 ; GFX11-NEXT:    v_dual_mov_b32 v4, v0 :: v_dual_mov_b32 v5, 0
1934 ; GFX11-NEXT:    v_mov_b32_e32 v6, v5
1935 ; GFX11-NEXT:    v_mov_b32_e32 v7, v5
1936 ; GFX11-NEXT:    v_mov_b32_e32 v8, v5
1937 ; GFX11-NEXT:    v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6
1938 ; GFX11-NEXT:    v_dual_mov_b32 v2, v7 :: v_dual_mov_b32 v3, v8
1939 ; GFX11-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe
1940 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1941 ; GFX11-NEXT:    global_store_b32 v5, v3, s[8:9]
1942 ; GFX11-NEXT:    ; return to shader part epilog
1943 main_body:
1944   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
1945   %v.vec = extractvalue {<4 x float>, i32} %v, 0
1946   %v.err = extractvalue {<4 x float>, i32} %v, 1
1947   store i32 %v.err, ptr addrspace(1) %out, align 4
1948   ret <4 x float> %v.vec
1951 define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask2(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
1952 ; VERDE-LABEL: load_1d_tfe_V4_dmask2:
1953 ; VERDE:       ; %bb.0: ; %main_body
1954 ; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1955 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1956 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1957 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1958 ; VERDE-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
1959 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1960 ; VERDE-NEXT:    s_mov_b32 s10, -1
1961 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
1962 ; VERDE-NEXT:    buffer_store_dword v2, off, s[8:11], 0
1963 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1964 ; VERDE-NEXT:    ; return to shader part epilog
1966 ; FIJI-LABEL: load_1d_tfe_V4_dmask2:
1967 ; FIJI:       ; %bb.0: ; %main_body
1968 ; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1969 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1970 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1971 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1972 ; FIJI-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
1973 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1974 ; FIJI-NEXT:    s_mov_b32 s10, -1
1975 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1976 ; FIJI-NEXT:    buffer_store_dword v2, off, s[8:11], 0
1977 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
1978 ; FIJI-NEXT:    ; return to shader part epilog
1980 ; GFX6789-LABEL: load_1d_tfe_V4_dmask2:
1981 ; GFX6789:       ; %bb.0: ; %main_body
1982 ; GFX6789-NEXT:    v_mov_b32_e32 v4, 0
1983 ; GFX6789-NEXT:    v_mov_b32_e32 v3, v0
1984 ; GFX6789-NEXT:    v_mov_b32_e32 v5, v4
1985 ; GFX6789-NEXT:    v_mov_b32_e32 v6, v4
1986 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1987 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v5
1988 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v6
1989 ; GFX6789-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
1990 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1991 ; GFX6789-NEXT:    global_store_dword v4, v2, s[8:9]
1992 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1993 ; GFX6789-NEXT:    ; return to shader part epilog
1995 ; NOPRT-LABEL: load_1d_tfe_V4_dmask2:
1996 ; NOPRT:       ; %bb.0: ; %main_body
1997 ; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
1998 ; NOPRT-NEXT:    image_load v[0:2], v0, s[0:7] dmask:0x6 unorm tfe
1999 ; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
2000 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2001 ; NOPRT-NEXT:    global_store_dword v3, v2, s[8:9]
2002 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2003 ; NOPRT-NEXT:    ; return to shader part epilog
2005 ; GFX10-LABEL: load_1d_tfe_V4_dmask2:
2006 ; GFX10:       ; %bb.0: ; %main_body
2007 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2008 ; GFX10-NEXT:    v_mov_b32_e32 v3, v0
2009 ; GFX10-NEXT:    v_mov_b32_e32 v5, v4
2010 ; GFX10-NEXT:    v_mov_b32_e32 v6, v4
2011 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
2012 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
2013 ; GFX10-NEXT:    v_mov_b32_e32 v2, v6
2014 ; GFX10-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe
2015 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2016 ; GFX10-NEXT:    global_store_dword v4, v2, s[8:9]
2017 ; GFX10-NEXT:    ; return to shader part epilog
2019 ; GFX11-LABEL: load_1d_tfe_V4_dmask2:
2020 ; GFX11:       ; %bb.0: ; %main_body
2021 ; GFX11-NEXT:    v_dual_mov_b32 v3, v0 :: v_dual_mov_b32 v4, 0
2022 ; GFX11-NEXT:    v_mov_b32_e32 v5, v4
2023 ; GFX11-NEXT:    v_mov_b32_e32 v6, v4
2024 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
2025 ; GFX11-NEXT:    v_mov_b32_e32 v2, v6
2026 ; GFX11-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe
2027 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2028 ; GFX11-NEXT:    global_store_b32 v4, v2, s[8:9]
2029 ; GFX11-NEXT:    ; return to shader part epilog
2030 main_body:
2031   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 6, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2032   %v.vec = extractvalue {<4 x float>, i32} %v, 0
2033   %v.err = extractvalue {<4 x float>, i32} %v, 1
2034   store i32 %v.err, ptr addrspace(1) %out, align 4
2035   ret <4 x float> %v.vec
2038 define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask1(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
2039 ; VERDE-LABEL: load_1d_tfe_V4_dmask1:
2040 ; VERDE:       ; %bb.0: ; %main_body
2041 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
2042 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
2043 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
2044 ; VERDE-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2045 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
2046 ; VERDE-NEXT:    s_mov_b32 s10, -1
2047 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2048 ; VERDE-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2049 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2050 ; VERDE-NEXT:    ; return to shader part epilog
2052 ; FIJI-LABEL: load_1d_tfe_V4_dmask1:
2053 ; FIJI:       ; %bb.0: ; %main_body
2054 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
2055 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
2056 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
2057 ; FIJI-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2058 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
2059 ; FIJI-NEXT:    s_mov_b32 s10, -1
2060 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2061 ; FIJI-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2062 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2063 ; FIJI-NEXT:    ; return to shader part epilog
2065 ; GFX6789-LABEL: load_1d_tfe_V4_dmask1:
2066 ; GFX6789:       ; %bb.0: ; %main_body
2067 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
2068 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v0
2069 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
2070 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v3
2071 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v4
2072 ; GFX6789-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2073 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2074 ; GFX6789-NEXT:    global_store_dword v3, v1, s[8:9]
2075 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2076 ; GFX6789-NEXT:    ; return to shader part epilog
2078 ; NOPRT-LABEL: load_1d_tfe_V4_dmask1:
2079 ; NOPRT:       ; %bb.0: ; %main_body
2080 ; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
2081 ; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe
2082 ; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
2083 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2084 ; NOPRT-NEXT:    global_store_dword v2, v1, s[8:9]
2085 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2086 ; NOPRT-NEXT:    ; return to shader part epilog
2088 ; GFX10-LABEL: load_1d_tfe_V4_dmask1:
2089 ; GFX10:       ; %bb.0: ; %main_body
2090 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
2091 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
2092 ; GFX10-NEXT:    v_mov_b32_e32 v4, v3
2093 ; GFX10-NEXT:    v_mov_b32_e32 v0, v3
2094 ; GFX10-NEXT:    v_mov_b32_e32 v1, v4
2095 ; GFX10-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2096 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2097 ; GFX10-NEXT:    global_store_dword v3, v1, s[8:9]
2098 ; GFX10-NEXT:    ; return to shader part epilog
2100 ; GFX11-LABEL: load_1d_tfe_V4_dmask1:
2101 ; GFX11:       ; %bb.0: ; %main_body
2102 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0
2103 ; GFX11-NEXT:    v_mov_b32_e32 v4, v3
2104 ; GFX11-NEXT:    v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4
2105 ; GFX11-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2106 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2107 ; GFX11-NEXT:    global_store_b32 v3, v1, s[8:9]
2108 ; GFX11-NEXT:    ; return to shader part epilog
2109 main_body:
2110   %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2111   %v.vec = extractvalue {<4 x float>, i32} %v, 0
2112   %v.err = extractvalue {<4 x float>, i32} %v, 1
2113   store i32 %v.err, ptr addrspace(1) %out, align 4
2114   ret <4 x float> %v.vec
2117 define amdgpu_ps <2 x float> @load_1d_tfe_V2_dmask1(<8 x i32> inreg %rsrc, ptr addrspace(1) inreg %out, i32 %s) {
2118 ; VERDE-LABEL: load_1d_tfe_V2_dmask1:
2119 ; VERDE:       ; %bb.0: ; %main_body
2120 ; VERDE-NEXT:    v_mov_b32_e32 v2, v0
2121 ; VERDE-NEXT:    v_mov_b32_e32 v0, 0
2122 ; VERDE-NEXT:    v_mov_b32_e32 v1, v0
2123 ; VERDE-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2124 ; VERDE-NEXT:    s_mov_b32 s11, 0xf000
2125 ; VERDE-NEXT:    s_mov_b32 s10, -1
2126 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2127 ; VERDE-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2128 ; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2129 ; VERDE-NEXT:    ; return to shader part epilog
2131 ; FIJI-LABEL: load_1d_tfe_V2_dmask1:
2132 ; FIJI:       ; %bb.0: ; %main_body
2133 ; FIJI-NEXT:    v_mov_b32_e32 v2, v0
2134 ; FIJI-NEXT:    v_mov_b32_e32 v0, 0
2135 ; FIJI-NEXT:    v_mov_b32_e32 v1, v0
2136 ; FIJI-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2137 ; FIJI-NEXT:    s_mov_b32 s11, 0xf000
2138 ; FIJI-NEXT:    s_mov_b32 s10, -1
2139 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2140 ; FIJI-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2141 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2142 ; FIJI-NEXT:    ; return to shader part epilog
2144 ; GFX6789-LABEL: load_1d_tfe_V2_dmask1:
2145 ; GFX6789:       ; %bb.0: ; %main_body
2146 ; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
2147 ; GFX6789-NEXT:    v_mov_b32_e32 v2, v0
2148 ; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
2149 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v3
2150 ; GFX6789-NEXT:    v_mov_b32_e32 v1, v4
2151 ; GFX6789-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2152 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2153 ; GFX6789-NEXT:    global_store_dword v3, v1, s[8:9]
2154 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2155 ; GFX6789-NEXT:    ; return to shader part epilog
2157 ; NOPRT-LABEL: load_1d_tfe_V2_dmask1:
2158 ; NOPRT:       ; %bb.0: ; %main_body
2159 ; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
2160 ; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe
2161 ; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
2162 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2163 ; NOPRT-NEXT:    global_store_dword v2, v1, s[8:9]
2164 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2165 ; NOPRT-NEXT:    ; return to shader part epilog
2167 ; GFX10-LABEL: load_1d_tfe_V2_dmask1:
2168 ; GFX10:       ; %bb.0: ; %main_body
2169 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
2170 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
2171 ; GFX10-NEXT:    v_mov_b32_e32 v4, v3
2172 ; GFX10-NEXT:    v_mov_b32_e32 v0, v3
2173 ; GFX10-NEXT:    v_mov_b32_e32 v1, v4
2174 ; GFX10-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2175 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2176 ; GFX10-NEXT:    global_store_dword v3, v1, s[8:9]
2177 ; GFX10-NEXT:    ; return to shader part epilog
2179 ; GFX11-LABEL: load_1d_tfe_V2_dmask1:
2180 ; GFX11:       ; %bb.0: ; %main_body
2181 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, 0
2182 ; GFX11-NEXT:    v_mov_b32_e32 v4, v3
2183 ; GFX11-NEXT:    v_dual_mov_b32 v0, v3 :: v_dual_mov_b32 v1, v4
2184 ; GFX11-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2185 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2186 ; GFX11-NEXT:    global_store_b32 v3, v1, s[8:9]
2187 ; GFX11-NEXT:    ; return to shader part epilog
2188 main_body:
2189   %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2190   %v.vec = extractvalue {<2 x float>, i32} %v, 0
2191   %v.err = extractvalue {<2 x float>, i32} %v, 1
2192   store i32 %v.err, ptr addrspace(1) %out, align 4
2193   ret <2 x float> %v.vec
2197 define amdgpu_ps <4 x float> @load_mip_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r, i32 %mip) {
2198 ; VERDE-LABEL: load_mip_3d:
2199 ; VERDE:       ; %bb.0: ; %main_body
2200 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2201 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2202 ; VERDE-NEXT:    ; return to shader part epilog
2204 ; FIJI-LABEL: load_mip_3d:
2205 ; FIJI:       ; %bb.0: ; %main_body
2206 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2207 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2208 ; FIJI-NEXT:    ; return to shader part epilog
2210 ; GFX6789-LABEL: load_mip_3d:
2211 ; GFX6789:       ; %bb.0: ; %main_body
2212 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2213 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2214 ; GFX6789-NEXT:    ; return to shader part epilog
2216 ; NOPRT-LABEL: load_mip_3d:
2217 ; NOPRT:       ; %bb.0: ; %main_body
2218 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2219 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2220 ; NOPRT-NEXT:    ; return to shader part epilog
2222 ; GFX10PLUS-LABEL: load_mip_3d:
2223 ; GFX10PLUS:       ; %bb.0: ; %main_body
2224 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2225 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2226 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2227 main_body:
2228   %v = call <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2229   ret <4 x float> %v
2232 define amdgpu_ps <4 x float> @load_mip_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2233 ; VERDE-LABEL: load_mip_cube:
2234 ; VERDE:       ; %bb.0: ; %main_body
2235 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2236 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2237 ; VERDE-NEXT:    ; return to shader part epilog
2239 ; FIJI-LABEL: load_mip_cube:
2240 ; FIJI:       ; %bb.0: ; %main_body
2241 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2242 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2243 ; FIJI-NEXT:    ; return to shader part epilog
2245 ; GFX6789-LABEL: load_mip_cube:
2246 ; GFX6789:       ; %bb.0: ; %main_body
2247 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2248 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2249 ; GFX6789-NEXT:    ; return to shader part epilog
2251 ; NOPRT-LABEL: load_mip_cube:
2252 ; NOPRT:       ; %bb.0: ; %main_body
2253 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2254 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2255 ; NOPRT-NEXT:    ; return to shader part epilog
2257 ; GFX10PLUS-LABEL: load_mip_cube:
2258 ; GFX10PLUS:       ; %bb.0: ; %main_body
2259 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2260 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2261 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2262 main_body:
2263   %v = call <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2264   ret <4 x float> %v
2267 define amdgpu_ps <4 x float> @load_mip_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice, i32 %mip) {
2268 ; VERDE-LABEL: load_mip_1darray:
2269 ; VERDE:       ; %bb.0: ; %main_body
2270 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2271 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2272 ; VERDE-NEXT:    ; return to shader part epilog
2274 ; FIJI-LABEL: load_mip_1darray:
2275 ; FIJI:       ; %bb.0: ; %main_body
2276 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2277 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2278 ; FIJI-NEXT:    ; return to shader part epilog
2280 ; GFX6789-LABEL: load_mip_1darray:
2281 ; GFX6789:       ; %bb.0: ; %main_body
2282 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2283 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2284 ; GFX6789-NEXT:    ; return to shader part epilog
2286 ; NOPRT-LABEL: load_mip_1darray:
2287 ; NOPRT:       ; %bb.0: ; %main_body
2288 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2289 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2290 ; NOPRT-NEXT:    ; return to shader part epilog
2292 ; GFX10PLUS-LABEL: load_mip_1darray:
2293 ; GFX10PLUS:       ; %bb.0: ; %main_body
2294 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2295 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2296 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2297 main_body:
2298   %v = call <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2299   ret <4 x float> %v
2302 define amdgpu_ps <4 x float> @load_mip_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2303 ; VERDE-LABEL: load_mip_2darray:
2304 ; VERDE:       ; %bb.0: ; %main_body
2305 ; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2306 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2307 ; VERDE-NEXT:    ; return to shader part epilog
2309 ; FIJI-LABEL: load_mip_2darray:
2310 ; FIJI:       ; %bb.0: ; %main_body
2311 ; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2312 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2313 ; FIJI-NEXT:    ; return to shader part epilog
2315 ; GFX6789-LABEL: load_mip_2darray:
2316 ; GFX6789:       ; %bb.0: ; %main_body
2317 ; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2318 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2319 ; GFX6789-NEXT:    ; return to shader part epilog
2321 ; NOPRT-LABEL: load_mip_2darray:
2322 ; NOPRT:       ; %bb.0: ; %main_body
2323 ; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2324 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2325 ; NOPRT-NEXT:    ; return to shader part epilog
2327 ; GFX10PLUS-LABEL: load_mip_2darray:
2328 ; GFX10PLUS:       ; %bb.0: ; %main_body
2329 ; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2330 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2331 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2332 main_body:
2333   %v = call <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2334   ret <4 x float> %v
2337 define amdgpu_ps void @store_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
2338 ; VERDE-LABEL: store_1d:
2339 ; VERDE:       ; %bb.0: ; %main_body
2340 ; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2341 ; VERDE-NEXT:    s_endpgm
2343 ; FIJI-LABEL: store_1d:
2344 ; FIJI:       ; %bb.0: ; %main_body
2345 ; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2346 ; FIJI-NEXT:    s_endpgm
2348 ; GFX6789-LABEL: store_1d:
2349 ; GFX6789:       ; %bb.0: ; %main_body
2350 ; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2351 ; GFX6789-NEXT:    s_endpgm
2353 ; NOPRT-LABEL: store_1d:
2354 ; NOPRT:       ; %bb.0: ; %main_body
2355 ; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2356 ; NOPRT-NEXT:    s_endpgm
2358 ; GFX10-LABEL: store_1d:
2359 ; GFX10:       ; %bb.0: ; %main_body
2360 ; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2361 ; GFX10-NEXT:    s_endpgm
2363 ; GFX11-LABEL: store_1d:
2364 ; GFX11:       ; %bb.0: ; %main_body
2365 ; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2366 ; GFX11-NEXT:    s_nop 0
2367 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2368 ; GFX11-NEXT:    s_endpgm
2369 main_body:
2370   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
2371   ret void
2374 define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t) {
2375 ; VERDE-LABEL: store_2d:
2376 ; VERDE:       ; %bb.0: ; %main_body
2377 ; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2378 ; VERDE-NEXT:    s_endpgm
2380 ; FIJI-LABEL: store_2d:
2381 ; FIJI:       ; %bb.0: ; %main_body
2382 ; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2383 ; FIJI-NEXT:    s_endpgm
2385 ; GFX6789-LABEL: store_2d:
2386 ; GFX6789:       ; %bb.0: ; %main_body
2387 ; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2388 ; GFX6789-NEXT:    s_endpgm
2390 ; NOPRT-LABEL: store_2d:
2391 ; NOPRT:       ; %bb.0: ; %main_body
2392 ; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2393 ; NOPRT-NEXT:    s_endpgm
2395 ; GFX10-LABEL: store_2d:
2396 ; GFX10:       ; %bb.0: ; %main_body
2397 ; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2398 ; GFX10-NEXT:    s_endpgm
2400 ; GFX11-LABEL: store_2d:
2401 ; GFX11:       ; %bb.0: ; %main_body
2402 ; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2403 ; GFX11-NEXT:    s_nop 0
2404 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2405 ; GFX11-NEXT:    s_endpgm
2406 main_body:
2407   call void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)
2408   ret void
2411 define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r) {
2412 ; VERDE-LABEL: store_3d:
2413 ; VERDE:       ; %bb.0: ; %main_body
2414 ; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2415 ; VERDE-NEXT:    s_endpgm
2417 ; FIJI-LABEL: store_3d:
2418 ; FIJI:       ; %bb.0: ; %main_body
2419 ; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2420 ; FIJI-NEXT:    s_endpgm
2422 ; GFX6789-LABEL: store_3d:
2423 ; GFX6789:       ; %bb.0: ; %main_body
2424 ; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2425 ; GFX6789-NEXT:    s_endpgm
2427 ; NOPRT-LABEL: store_3d:
2428 ; NOPRT:       ; %bb.0: ; %main_body
2429 ; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2430 ; NOPRT-NEXT:    s_endpgm
2432 ; GFX10-LABEL: store_3d:
2433 ; GFX10:       ; %bb.0: ; %main_body
2434 ; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2435 ; GFX10-NEXT:    s_endpgm
2437 ; GFX11-LABEL: store_3d:
2438 ; GFX11:       ; %bb.0: ; %main_body
2439 ; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2440 ; GFX11-NEXT:    s_nop 0
2441 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2442 ; GFX11-NEXT:    s_endpgm
2443 main_body:
2444   call void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)
2445   ret void
2448 define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2449 ; VERDE-LABEL: store_cube:
2450 ; VERDE:       ; %bb.0: ; %main_body
2451 ; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2452 ; VERDE-NEXT:    s_endpgm
2454 ; FIJI-LABEL: store_cube:
2455 ; FIJI:       ; %bb.0: ; %main_body
2456 ; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2457 ; FIJI-NEXT:    s_endpgm
2459 ; GFX6789-LABEL: store_cube:
2460 ; GFX6789:       ; %bb.0: ; %main_body
2461 ; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2462 ; GFX6789-NEXT:    s_endpgm
2464 ; NOPRT-LABEL: store_cube:
2465 ; NOPRT:       ; %bb.0: ; %main_body
2466 ; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2467 ; NOPRT-NEXT:    s_endpgm
2469 ; GFX10-LABEL: store_cube:
2470 ; GFX10:       ; %bb.0: ; %main_body
2471 ; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2472 ; GFX10-NEXT:    s_endpgm
2474 ; GFX11-LABEL: store_cube:
2475 ; GFX11:       ; %bb.0: ; %main_body
2476 ; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2477 ; GFX11-NEXT:    s_nop 0
2478 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2479 ; GFX11-NEXT:    s_endpgm
2480 main_body:
2481   call void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2482   ret void
2485 define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice) {
2486 ; VERDE-LABEL: store_1darray:
2487 ; VERDE:       ; %bb.0: ; %main_body
2488 ; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2489 ; VERDE-NEXT:    s_endpgm
2491 ; FIJI-LABEL: store_1darray:
2492 ; FIJI:       ; %bb.0: ; %main_body
2493 ; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2494 ; FIJI-NEXT:    s_endpgm
2496 ; GFX6789-LABEL: store_1darray:
2497 ; GFX6789:       ; %bb.0: ; %main_body
2498 ; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2499 ; GFX6789-NEXT:    s_endpgm
2501 ; NOPRT-LABEL: store_1darray:
2502 ; NOPRT:       ; %bb.0: ; %main_body
2503 ; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2504 ; NOPRT-NEXT:    s_endpgm
2506 ; GFX10-LABEL: store_1darray:
2507 ; GFX10:       ; %bb.0: ; %main_body
2508 ; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2509 ; GFX10-NEXT:    s_endpgm
2511 ; GFX11-LABEL: store_1darray:
2512 ; GFX11:       ; %bb.0: ; %main_body
2513 ; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2514 ; GFX11-NEXT:    s_nop 0
2515 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2516 ; GFX11-NEXT:    s_endpgm
2517 main_body:
2518   call void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2519   ret void
2522 define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2523 ; VERDE-LABEL: store_2darray:
2524 ; VERDE:       ; %bb.0: ; %main_body
2525 ; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2526 ; VERDE-NEXT:    s_endpgm
2528 ; FIJI-LABEL: store_2darray:
2529 ; FIJI:       ; %bb.0: ; %main_body
2530 ; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2531 ; FIJI-NEXT:    s_endpgm
2533 ; GFX6789-LABEL: store_2darray:
2534 ; GFX6789:       ; %bb.0: ; %main_body
2535 ; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2536 ; GFX6789-NEXT:    s_endpgm
2538 ; NOPRT-LABEL: store_2darray:
2539 ; NOPRT:       ; %bb.0: ; %main_body
2540 ; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2541 ; NOPRT-NEXT:    s_endpgm
2543 ; GFX10-LABEL: store_2darray:
2544 ; GFX10:       ; %bb.0: ; %main_body
2545 ; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2546 ; GFX10-NEXT:    s_endpgm
2548 ; GFX11-LABEL: store_2darray:
2549 ; GFX11:       ; %bb.0: ; %main_body
2550 ; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2551 ; GFX11-NEXT:    s_nop 0
2552 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2553 ; GFX11-NEXT:    s_endpgm
2554 main_body:
2555   call void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2556   ret void
2559 define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %fragid) {
2560 ; VERDE-LABEL: store_2dmsaa:
2561 ; VERDE:       ; %bb.0: ; %main_body
2562 ; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2563 ; VERDE-NEXT:    s_endpgm
2565 ; FIJI-LABEL: store_2dmsaa:
2566 ; FIJI:       ; %bb.0: ; %main_body
2567 ; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2568 ; FIJI-NEXT:    s_endpgm
2570 ; GFX6789-LABEL: store_2dmsaa:
2571 ; GFX6789:       ; %bb.0: ; %main_body
2572 ; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2573 ; GFX6789-NEXT:    s_endpgm
2575 ; NOPRT-LABEL: store_2dmsaa:
2576 ; NOPRT:       ; %bb.0: ; %main_body
2577 ; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2578 ; NOPRT-NEXT:    s_endpgm
2580 ; GFX10-LABEL: store_2dmsaa:
2581 ; GFX10:       ; %bb.0: ; %main_body
2582 ; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
2583 ; GFX10-NEXT:    s_endpgm
2585 ; GFX11-LABEL: store_2dmsaa:
2586 ; GFX11:       ; %bb.0: ; %main_body
2587 ; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
2588 ; GFX11-NEXT:    s_nop 0
2589 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2590 ; GFX11-NEXT:    s_endpgm
2591 main_body:
2592   call void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2593   ret void
2596 define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
2597 ; VERDE-LABEL: store_2darraymsaa:
2598 ; VERDE:       ; %bb.0: ; %main_body
2599 ; VERDE-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2600 ; VERDE-NEXT:    s_endpgm
2602 ; FIJI-LABEL: store_2darraymsaa:
2603 ; FIJI:       ; %bb.0: ; %main_body
2604 ; FIJI-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2605 ; FIJI-NEXT:    s_endpgm
2607 ; GFX6789-LABEL: store_2darraymsaa:
2608 ; GFX6789:       ; %bb.0: ; %main_body
2609 ; GFX6789-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2610 ; GFX6789-NEXT:    s_endpgm
2612 ; NOPRT-LABEL: store_2darraymsaa:
2613 ; NOPRT:       ; %bb.0: ; %main_body
2614 ; NOPRT-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2615 ; NOPRT-NEXT:    s_endpgm
2617 ; GFX10-LABEL: store_2darraymsaa:
2618 ; GFX10:       ; %bb.0: ; %main_body
2619 ; GFX10-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
2620 ; GFX10-NEXT:    s_endpgm
2622 ; GFX11-LABEL: store_2darraymsaa:
2623 ; GFX11:       ; %bb.0: ; %main_body
2624 ; GFX11-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
2625 ; GFX11-NEXT:    s_nop 0
2626 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2627 ; GFX11-NEXT:    s_endpgm
2628 main_body:
2629   call void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2630   ret void
2633 define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %mip) {
2634 ; VERDE-LABEL: store_mip_1d:
2635 ; VERDE:       ; %bb.0: ; %main_body
2636 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2637 ; VERDE-NEXT:    s_endpgm
2639 ; FIJI-LABEL: store_mip_1d:
2640 ; FIJI:       ; %bb.0: ; %main_body
2641 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2642 ; FIJI-NEXT:    s_endpgm
2644 ; GFX6789-LABEL: store_mip_1d:
2645 ; GFX6789:       ; %bb.0: ; %main_body
2646 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2647 ; GFX6789-NEXT:    s_endpgm
2649 ; NOPRT-LABEL: store_mip_1d:
2650 ; NOPRT:       ; %bb.0: ; %main_body
2651 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2652 ; NOPRT-NEXT:    s_endpgm
2654 ; GFX10-LABEL: store_mip_1d:
2655 ; GFX10:       ; %bb.0: ; %main_body
2656 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2657 ; GFX10-NEXT:    s_endpgm
2659 ; GFX11-LABEL: store_mip_1d:
2660 ; GFX11:       ; %bb.0: ; %main_body
2661 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2662 ; GFX11-NEXT:    s_nop 0
2663 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2664 ; GFX11-NEXT:    s_endpgm
2665 main_body:
2666   call void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2667   ret void
2670 define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %mip) {
2671 ; VERDE-LABEL: store_mip_2d:
2672 ; VERDE:       ; %bb.0: ; %main_body
2673 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2674 ; VERDE-NEXT:    s_endpgm
2676 ; FIJI-LABEL: store_mip_2d:
2677 ; FIJI:       ; %bb.0: ; %main_body
2678 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2679 ; FIJI-NEXT:    s_endpgm
2681 ; GFX6789-LABEL: store_mip_2d:
2682 ; GFX6789:       ; %bb.0: ; %main_body
2683 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2684 ; GFX6789-NEXT:    s_endpgm
2686 ; NOPRT-LABEL: store_mip_2d:
2687 ; NOPRT:       ; %bb.0: ; %main_body
2688 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2689 ; NOPRT-NEXT:    s_endpgm
2691 ; GFX10-LABEL: store_mip_2d:
2692 ; GFX10:       ; %bb.0: ; %main_body
2693 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2694 ; GFX10-NEXT:    s_endpgm
2696 ; GFX11-LABEL: store_mip_2d:
2697 ; GFX11:       ; %bb.0: ; %main_body
2698 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2699 ; GFX11-NEXT:    s_nop 0
2700 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2701 ; GFX11-NEXT:    s_endpgm
2702 main_body:
2703   call void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2704   ret void
2707 define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r, i32 %mip) {
2708 ; VERDE-LABEL: store_mip_3d:
2709 ; VERDE:       ; %bb.0: ; %main_body
2710 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2711 ; VERDE-NEXT:    s_endpgm
2713 ; FIJI-LABEL: store_mip_3d:
2714 ; FIJI:       ; %bb.0: ; %main_body
2715 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2716 ; FIJI-NEXT:    s_endpgm
2718 ; GFX6789-LABEL: store_mip_3d:
2719 ; GFX6789:       ; %bb.0: ; %main_body
2720 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2721 ; GFX6789-NEXT:    s_endpgm
2723 ; NOPRT-LABEL: store_mip_3d:
2724 ; NOPRT:       ; %bb.0: ; %main_body
2725 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2726 ; NOPRT-NEXT:    s_endpgm
2728 ; GFX10-LABEL: store_mip_3d:
2729 ; GFX10:       ; %bb.0: ; %main_body
2730 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2731 ; GFX10-NEXT:    s_endpgm
2733 ; GFX11-LABEL: store_mip_3d:
2734 ; GFX11:       ; %bb.0: ; %main_body
2735 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2736 ; GFX11-NEXT:    s_nop 0
2737 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2738 ; GFX11-NEXT:    s_endpgm
2739 main_body:
2740   call void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2741   ret void
2744 define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2745 ; VERDE-LABEL: store_mip_cube:
2746 ; VERDE:       ; %bb.0: ; %main_body
2747 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2748 ; VERDE-NEXT:    s_endpgm
2750 ; FIJI-LABEL: store_mip_cube:
2751 ; FIJI:       ; %bb.0: ; %main_body
2752 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2753 ; FIJI-NEXT:    s_endpgm
2755 ; GFX6789-LABEL: store_mip_cube:
2756 ; GFX6789:       ; %bb.0: ; %main_body
2757 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2758 ; GFX6789-NEXT:    s_endpgm
2760 ; NOPRT-LABEL: store_mip_cube:
2761 ; NOPRT:       ; %bb.0: ; %main_body
2762 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2763 ; NOPRT-NEXT:    s_endpgm
2765 ; GFX10-LABEL: store_mip_cube:
2766 ; GFX10:       ; %bb.0: ; %main_body
2767 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2768 ; GFX10-NEXT:    s_endpgm
2770 ; GFX11-LABEL: store_mip_cube:
2771 ; GFX11:       ; %bb.0: ; %main_body
2772 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2773 ; GFX11-NEXT:    s_nop 0
2774 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2775 ; GFX11-NEXT:    s_endpgm
2776 main_body:
2777   call void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2778   ret void
2781 define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice, i32 %mip) {
2782 ; VERDE-LABEL: store_mip_1darray:
2783 ; VERDE:       ; %bb.0: ; %main_body
2784 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2785 ; VERDE-NEXT:    s_endpgm
2787 ; FIJI-LABEL: store_mip_1darray:
2788 ; FIJI:       ; %bb.0: ; %main_body
2789 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2790 ; FIJI-NEXT:    s_endpgm
2792 ; GFX6789-LABEL: store_mip_1darray:
2793 ; GFX6789:       ; %bb.0: ; %main_body
2794 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2795 ; GFX6789-NEXT:    s_endpgm
2797 ; NOPRT-LABEL: store_mip_1darray:
2798 ; NOPRT:       ; %bb.0: ; %main_body
2799 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2800 ; NOPRT-NEXT:    s_endpgm
2802 ; GFX10-LABEL: store_mip_1darray:
2803 ; GFX10:       ; %bb.0: ; %main_body
2804 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2805 ; GFX10-NEXT:    s_endpgm
2807 ; GFX11-LABEL: store_mip_1darray:
2808 ; GFX11:       ; %bb.0: ; %main_body
2809 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2810 ; GFX11-NEXT:    s_nop 0
2811 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2812 ; GFX11-NEXT:    s_endpgm
2813 main_body:
2814   call void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2815   ret void
2818 define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2819 ; VERDE-LABEL: store_mip_2darray:
2820 ; VERDE:       ; %bb.0: ; %main_body
2821 ; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2822 ; VERDE-NEXT:    s_endpgm
2824 ; FIJI-LABEL: store_mip_2darray:
2825 ; FIJI:       ; %bb.0: ; %main_body
2826 ; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2827 ; FIJI-NEXT:    s_endpgm
2829 ; GFX6789-LABEL: store_mip_2darray:
2830 ; GFX6789:       ; %bb.0: ; %main_body
2831 ; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2832 ; GFX6789-NEXT:    s_endpgm
2834 ; NOPRT-LABEL: store_mip_2darray:
2835 ; NOPRT:       ; %bb.0: ; %main_body
2836 ; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2837 ; NOPRT-NEXT:    s_endpgm
2839 ; GFX10-LABEL: store_mip_2darray:
2840 ; GFX10:       ; %bb.0: ; %main_body
2841 ; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2842 ; GFX10-NEXT:    s_endpgm
2844 ; GFX11-LABEL: store_mip_2darray:
2845 ; GFX11:       ; %bb.0: ; %main_body
2846 ; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2847 ; GFX11-NEXT:    s_nop 0
2848 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2849 ; GFX11-NEXT:    s_endpgm
2850 main_body:
2851   call void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2852   ret void
2855 define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) {
2856 ; VERDE-LABEL: getresinfo_1d:
2857 ; VERDE:       ; %bb.0: ; %main_body
2858 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2859 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2860 ; VERDE-NEXT:    ; return to shader part epilog
2862 ; FIJI-LABEL: getresinfo_1d:
2863 ; FIJI:       ; %bb.0: ; %main_body
2864 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2865 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2866 ; FIJI-NEXT:    ; return to shader part epilog
2868 ; GFX6789-LABEL: getresinfo_1d:
2869 ; GFX6789:       ; %bb.0: ; %main_body
2870 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2871 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2872 ; GFX6789-NEXT:    ; return to shader part epilog
2874 ; NOPRT-LABEL: getresinfo_1d:
2875 ; NOPRT:       ; %bb.0: ; %main_body
2876 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2877 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2878 ; NOPRT-NEXT:    ; return to shader part epilog
2880 ; GFX10PLUS-LABEL: getresinfo_1d:
2881 ; GFX10PLUS:       ; %bb.0: ; %main_body
2882 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2883 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2884 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2885 main_body:
2886   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2887   ret <4 x float> %v
2890 define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) {
2891 ; VERDE-LABEL: getresinfo_2d:
2892 ; VERDE:       ; %bb.0: ; %main_body
2893 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2894 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2895 ; VERDE-NEXT:    ; return to shader part epilog
2897 ; FIJI-LABEL: getresinfo_2d:
2898 ; FIJI:       ; %bb.0: ; %main_body
2899 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2900 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2901 ; FIJI-NEXT:    ; return to shader part epilog
2903 ; GFX6789-LABEL: getresinfo_2d:
2904 ; GFX6789:       ; %bb.0: ; %main_body
2905 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2906 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2907 ; GFX6789-NEXT:    ; return to shader part epilog
2909 ; NOPRT-LABEL: getresinfo_2d:
2910 ; NOPRT:       ; %bb.0: ; %main_body
2911 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2912 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2913 ; NOPRT-NEXT:    ; return to shader part epilog
2915 ; GFX10PLUS-LABEL: getresinfo_2d:
2916 ; GFX10PLUS:       ; %bb.0: ; %main_body
2917 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2918 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2919 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2920 main_body:
2921   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2922   ret <4 x float> %v
2925 define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) {
2926 ; VERDE-LABEL: getresinfo_3d:
2927 ; VERDE:       ; %bb.0: ; %main_body
2928 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2929 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2930 ; VERDE-NEXT:    ; return to shader part epilog
2932 ; FIJI-LABEL: getresinfo_3d:
2933 ; FIJI:       ; %bb.0: ; %main_body
2934 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2935 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2936 ; FIJI-NEXT:    ; return to shader part epilog
2938 ; GFX6789-LABEL: getresinfo_3d:
2939 ; GFX6789:       ; %bb.0: ; %main_body
2940 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2941 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2942 ; GFX6789-NEXT:    ; return to shader part epilog
2944 ; NOPRT-LABEL: getresinfo_3d:
2945 ; NOPRT:       ; %bb.0: ; %main_body
2946 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2947 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2948 ; NOPRT-NEXT:    ; return to shader part epilog
2950 ; GFX10PLUS-LABEL: getresinfo_3d:
2951 ; GFX10PLUS:       ; %bb.0: ; %main_body
2952 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2953 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2954 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2955 main_body:
2956   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2957   ret <4 x float> %v
2960 define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) {
2961 ; VERDE-LABEL: getresinfo_cube:
2962 ; VERDE:       ; %bb.0: ; %main_body
2963 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2964 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
2965 ; VERDE-NEXT:    ; return to shader part epilog
2967 ; FIJI-LABEL: getresinfo_cube:
2968 ; FIJI:       ; %bb.0: ; %main_body
2969 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2970 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
2971 ; FIJI-NEXT:    ; return to shader part epilog
2973 ; GFX6789-LABEL: getresinfo_cube:
2974 ; GFX6789:       ; %bb.0: ; %main_body
2975 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2976 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2977 ; GFX6789-NEXT:    ; return to shader part epilog
2979 ; NOPRT-LABEL: getresinfo_cube:
2980 ; NOPRT:       ; %bb.0: ; %main_body
2981 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2982 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2983 ; NOPRT-NEXT:    ; return to shader part epilog
2985 ; GFX10PLUS-LABEL: getresinfo_cube:
2986 ; GFX10PLUS:       ; %bb.0: ; %main_body
2987 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2988 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2989 ; GFX10PLUS-NEXT:    ; return to shader part epilog
2990 main_body:
2991   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2992   ret <4 x float> %v
2995 define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) {
2996 ; VERDE-LABEL: getresinfo_1darray:
2997 ; VERDE:       ; %bb.0: ; %main_body
2998 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2999 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3000 ; VERDE-NEXT:    ; return to shader part epilog
3002 ; FIJI-LABEL: getresinfo_1darray:
3003 ; FIJI:       ; %bb.0: ; %main_body
3004 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3005 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3006 ; FIJI-NEXT:    ; return to shader part epilog
3008 ; GFX6789-LABEL: getresinfo_1darray:
3009 ; GFX6789:       ; %bb.0: ; %main_body
3010 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3011 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3012 ; GFX6789-NEXT:    ; return to shader part epilog
3014 ; NOPRT-LABEL: getresinfo_1darray:
3015 ; NOPRT:       ; %bb.0: ; %main_body
3016 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3017 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3018 ; NOPRT-NEXT:    ; return to shader part epilog
3020 ; GFX10PLUS-LABEL: getresinfo_1darray:
3021 ; GFX10PLUS:       ; %bb.0: ; %main_body
3022 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
3023 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3024 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3025 main_body:
3026   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3027   ret <4 x float> %v
3030 define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) {
3031 ; VERDE-LABEL: getresinfo_2darray:
3032 ; VERDE:       ; %bb.0: ; %main_body
3033 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3034 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3035 ; VERDE-NEXT:    ; return to shader part epilog
3037 ; FIJI-LABEL: getresinfo_2darray:
3038 ; FIJI:       ; %bb.0: ; %main_body
3039 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3040 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3041 ; FIJI-NEXT:    ; return to shader part epilog
3043 ; GFX6789-LABEL: getresinfo_2darray:
3044 ; GFX6789:       ; %bb.0: ; %main_body
3045 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3046 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3047 ; GFX6789-NEXT:    ; return to shader part epilog
3049 ; NOPRT-LABEL: getresinfo_2darray:
3050 ; NOPRT:       ; %bb.0: ; %main_body
3051 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3052 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3053 ; NOPRT-NEXT:    ; return to shader part epilog
3055 ; GFX10PLUS-LABEL: getresinfo_2darray:
3056 ; GFX10PLUS:       ; %bb.0: ; %main_body
3057 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
3058 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3059 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3060 main_body:
3061   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3062   ret <4 x float> %v
3065 define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3066 ; VERDE-LABEL: getresinfo_2dmsaa:
3067 ; VERDE:       ; %bb.0: ; %main_body
3068 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3069 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3070 ; VERDE-NEXT:    ; return to shader part epilog
3072 ; FIJI-LABEL: getresinfo_2dmsaa:
3073 ; FIJI:       ; %bb.0: ; %main_body
3074 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3075 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3076 ; FIJI-NEXT:    ; return to shader part epilog
3078 ; GFX6789-LABEL: getresinfo_2dmsaa:
3079 ; GFX6789:       ; %bb.0: ; %main_body
3080 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3081 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3082 ; GFX6789-NEXT:    ; return to shader part epilog
3084 ; NOPRT-LABEL: getresinfo_2dmsaa:
3085 ; NOPRT:       ; %bb.0: ; %main_body
3086 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3087 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3088 ; NOPRT-NEXT:    ; return to shader part epilog
3090 ; GFX10PLUS-LABEL: getresinfo_2dmsaa:
3091 ; GFX10PLUS:       ; %bb.0: ; %main_body
3092 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
3093 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3094 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3095 main_body:
3096   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3097   ret <4 x float> %v
3100 define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3101 ; VERDE-LABEL: getresinfo_2darraymsaa:
3102 ; VERDE:       ; %bb.0: ; %main_body
3103 ; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3104 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3105 ; VERDE-NEXT:    ; return to shader part epilog
3107 ; FIJI-LABEL: getresinfo_2darraymsaa:
3108 ; FIJI:       ; %bb.0: ; %main_body
3109 ; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3110 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3111 ; FIJI-NEXT:    ; return to shader part epilog
3113 ; GFX6789-LABEL: getresinfo_2darraymsaa:
3114 ; GFX6789:       ; %bb.0: ; %main_body
3115 ; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3116 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3117 ; GFX6789-NEXT:    ; return to shader part epilog
3119 ; NOPRT-LABEL: getresinfo_2darraymsaa:
3120 ; NOPRT:       ; %bb.0: ; %main_body
3121 ; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3122 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3123 ; NOPRT-NEXT:    ; return to shader part epilog
3125 ; GFX10PLUS-LABEL: getresinfo_2darraymsaa:
3126 ; GFX10PLUS:       ; %bb.0: ; %main_body
3127 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
3128 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3129 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3130 main_body:
3131   %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3132   ret <4 x float> %v
3135 define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, i32 %s) {
3136 ; VERDE-LABEL: load_1d_V1:
3137 ; VERDE:       ; %bb.0: ; %main_body
3138 ; VERDE-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3139 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3140 ; VERDE-NEXT:    ; return to shader part epilog
3142 ; FIJI-LABEL: load_1d_V1:
3143 ; FIJI:       ; %bb.0: ; %main_body
3144 ; FIJI-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3145 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3146 ; FIJI-NEXT:    ; return to shader part epilog
3148 ; GFX6789-LABEL: load_1d_V1:
3149 ; GFX6789:       ; %bb.0: ; %main_body
3150 ; GFX6789-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3151 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3152 ; GFX6789-NEXT:    ; return to shader part epilog
3154 ; NOPRT-LABEL: load_1d_V1:
3155 ; NOPRT:       ; %bb.0: ; %main_body
3156 ; NOPRT-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3157 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3158 ; NOPRT-NEXT:    ; return to shader part epilog
3160 ; GFX10PLUS-LABEL: load_1d_V1:
3161 ; GFX10PLUS:       ; %bb.0: ; %main_body
3162 ; GFX10PLUS-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm
3163 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3164 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3165 main_body:
3166   %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3167   ret float %v
3170 define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, i32 %s) {
3171 ; VERDE-LABEL: load_1d_V2:
3172 ; VERDE:       ; %bb.0: ; %main_body
3173 ; VERDE-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3174 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3175 ; VERDE-NEXT:    ; return to shader part epilog
3177 ; FIJI-LABEL: load_1d_V2:
3178 ; FIJI:       ; %bb.0: ; %main_body
3179 ; FIJI-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3180 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3181 ; FIJI-NEXT:    ; return to shader part epilog
3183 ; GFX6789-LABEL: load_1d_V2:
3184 ; GFX6789:       ; %bb.0: ; %main_body
3185 ; GFX6789-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3186 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3187 ; GFX6789-NEXT:    ; return to shader part epilog
3189 ; NOPRT-LABEL: load_1d_V2:
3190 ; NOPRT:       ; %bb.0: ; %main_body
3191 ; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3192 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3193 ; NOPRT-NEXT:    ; return to shader part epilog
3195 ; GFX10PLUS-LABEL: load_1d_V2:
3196 ; GFX10PLUS:       ; %bb.0: ; %main_body
3197 ; GFX10PLUS-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm
3198 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3199 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3200 main_body:
3201   %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3202   ret <2 x float> %v
3205 define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, i32 %s) {
3206 ; VERDE-LABEL: store_1d_V1:
3207 ; VERDE:       ; %bb.0: ; %main_body
3208 ; VERDE-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3209 ; VERDE-NEXT:    s_endpgm
3211 ; FIJI-LABEL: store_1d_V1:
3212 ; FIJI:       ; %bb.0: ; %main_body
3213 ; FIJI-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3214 ; FIJI-NEXT:    s_endpgm
3216 ; GFX6789-LABEL: store_1d_V1:
3217 ; GFX6789:       ; %bb.0: ; %main_body
3218 ; GFX6789-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3219 ; GFX6789-NEXT:    s_endpgm
3221 ; NOPRT-LABEL: store_1d_V1:
3222 ; NOPRT:       ; %bb.0: ; %main_body
3223 ; NOPRT-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3224 ; NOPRT-NEXT:    s_endpgm
3226 ; GFX10-LABEL: store_1d_V1:
3227 ; GFX10:       ; %bb.0: ; %main_body
3228 ; GFX10-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm
3229 ; GFX10-NEXT:    s_endpgm
3231 ; GFX11-LABEL: store_1d_V1:
3232 ; GFX11:       ; %bb.0: ; %main_body
3233 ; GFX11-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm
3234 ; GFX11-NEXT:    s_nop 0
3235 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3236 ; GFX11-NEXT:    s_endpgm
3237 main_body:
3238   call void @llvm.amdgcn.image.store.1d.f32.i32(float %vdata, i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3239   ret void
3242 define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, i32 %s) {
3243 ; VERDE-LABEL: store_1d_V2:
3244 ; VERDE:       ; %bb.0: ; %main_body
3245 ; VERDE-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3246 ; VERDE-NEXT:    s_endpgm
3248 ; FIJI-LABEL: store_1d_V2:
3249 ; FIJI:       ; %bb.0: ; %main_body
3250 ; FIJI-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3251 ; FIJI-NEXT:    s_endpgm
3253 ; GFX6789-LABEL: store_1d_V2:
3254 ; GFX6789:       ; %bb.0: ; %main_body
3255 ; GFX6789-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3256 ; GFX6789-NEXT:    s_endpgm
3258 ; NOPRT-LABEL: store_1d_V2:
3259 ; NOPRT:       ; %bb.0: ; %main_body
3260 ; NOPRT-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3261 ; NOPRT-NEXT:    s_endpgm
3263 ; GFX10-LABEL: store_1d_V2:
3264 ; GFX10:       ; %bb.0: ; %main_body
3265 ; GFX10-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm
3266 ; GFX10-NEXT:    s_endpgm
3268 ; GFX11-LABEL: store_1d_V2:
3269 ; GFX11:       ; %bb.0: ; %main_body
3270 ; GFX11-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm
3271 ; GFX11-NEXT:    s_nop 0
3272 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3273 ; GFX11-NEXT:    s_endpgm
3274 main_body:
3275   call void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float> %vdata, i32 12, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3276   ret void
3279 define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, i32 %s) {
3280 ; VERDE-LABEL: load_1d_glc:
3281 ; VERDE:       ; %bb.0: ; %main_body
3282 ; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3283 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3284 ; VERDE-NEXT:    ; return to shader part epilog
3286 ; FIJI-LABEL: load_1d_glc:
3287 ; FIJI:       ; %bb.0: ; %main_body
3288 ; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3289 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3290 ; FIJI-NEXT:    ; return to shader part epilog
3292 ; GFX6789-LABEL: load_1d_glc:
3293 ; GFX6789:       ; %bb.0: ; %main_body
3294 ; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3295 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3296 ; GFX6789-NEXT:    ; return to shader part epilog
3298 ; NOPRT-LABEL: load_1d_glc:
3299 ; NOPRT:       ; %bb.0: ; %main_body
3300 ; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3301 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3302 ; NOPRT-NEXT:    ; return to shader part epilog
3304 ; GFX10PLUS-LABEL: load_1d_glc:
3305 ; GFX10PLUS:       ; %bb.0: ; %main_body
3306 ; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3307 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3308 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3309 main_body:
3310   %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1)
3311   ret <4 x float> %v
3314 define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, i32 %s) {
3315 ; VERDE-LABEL: load_1d_slc:
3316 ; VERDE:       ; %bb.0: ; %main_body
3317 ; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3318 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3319 ; VERDE-NEXT:    ; return to shader part epilog
3321 ; FIJI-LABEL: load_1d_slc:
3322 ; FIJI:       ; %bb.0: ; %main_body
3323 ; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3324 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3325 ; FIJI-NEXT:    ; return to shader part epilog
3327 ; GFX6789-LABEL: load_1d_slc:
3328 ; GFX6789:       ; %bb.0: ; %main_body
3329 ; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3330 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3331 ; GFX6789-NEXT:    ; return to shader part epilog
3333 ; NOPRT-LABEL: load_1d_slc:
3334 ; NOPRT:       ; %bb.0: ; %main_body
3335 ; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3336 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3337 ; NOPRT-NEXT:    ; return to shader part epilog
3339 ; GFX10PLUS-LABEL: load_1d_slc:
3340 ; GFX10PLUS:       ; %bb.0: ; %main_body
3341 ; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3342 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3343 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3344 main_body:
3345   %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)
3346   ret <4 x float> %v
3349 define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, i32 %s) {
3350 ; VERDE-LABEL: load_1d_glc_slc:
3351 ; VERDE:       ; %bb.0: ; %main_body
3352 ; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3353 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3354 ; VERDE-NEXT:    ; return to shader part epilog
3356 ; FIJI-LABEL: load_1d_glc_slc:
3357 ; FIJI:       ; %bb.0: ; %main_body
3358 ; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3359 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3360 ; FIJI-NEXT:    ; return to shader part epilog
3362 ; GFX6789-LABEL: load_1d_glc_slc:
3363 ; GFX6789:       ; %bb.0: ; %main_body
3364 ; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3365 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3366 ; GFX6789-NEXT:    ; return to shader part epilog
3368 ; NOPRT-LABEL: load_1d_glc_slc:
3369 ; NOPRT:       ; %bb.0: ; %main_body
3370 ; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3371 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3372 ; NOPRT-NEXT:    ; return to shader part epilog
3374 ; GFX10PLUS-LABEL: load_1d_glc_slc:
3375 ; GFX10PLUS:       ; %bb.0: ; %main_body
3376 ; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3377 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3378 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3379 main_body:
3380   %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3)
3381   ret <4 x float> %v
3384 define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3385 ; VERDE-LABEL: store_1d_glc:
3386 ; VERDE:       ; %bb.0: ; %main_body
3387 ; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3388 ; VERDE-NEXT:    s_endpgm
3390 ; FIJI-LABEL: store_1d_glc:
3391 ; FIJI:       ; %bb.0: ; %main_body
3392 ; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3393 ; FIJI-NEXT:    s_endpgm
3395 ; GFX6789-LABEL: store_1d_glc:
3396 ; GFX6789:       ; %bb.0: ; %main_body
3397 ; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3398 ; GFX6789-NEXT:    s_endpgm
3400 ; NOPRT-LABEL: store_1d_glc:
3401 ; NOPRT:       ; %bb.0: ; %main_body
3402 ; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3403 ; NOPRT-NEXT:    s_endpgm
3405 ; GFX10-LABEL: store_1d_glc:
3406 ; GFX10:       ; %bb.0: ; %main_body
3407 ; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3408 ; GFX10-NEXT:    s_endpgm
3410 ; GFX11-LABEL: store_1d_glc:
3411 ; GFX11:       ; %bb.0: ; %main_body
3412 ; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3413 ; GFX11-NEXT:    s_nop 0
3414 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3415 ; GFX11-NEXT:    s_endpgm
3416 main_body:
3417   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1)
3418   ret void
3421 define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3422 ; VERDE-LABEL: store_1d_slc:
3423 ; VERDE:       ; %bb.0: ; %main_body
3424 ; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3425 ; VERDE-NEXT:    s_endpgm
3427 ; FIJI-LABEL: store_1d_slc:
3428 ; FIJI:       ; %bb.0: ; %main_body
3429 ; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3430 ; FIJI-NEXT:    s_endpgm
3432 ; GFX6789-LABEL: store_1d_slc:
3433 ; GFX6789:       ; %bb.0: ; %main_body
3434 ; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3435 ; GFX6789-NEXT:    s_endpgm
3437 ; NOPRT-LABEL: store_1d_slc:
3438 ; NOPRT:       ; %bb.0: ; %main_body
3439 ; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3440 ; NOPRT-NEXT:    s_endpgm
3442 ; GFX10-LABEL: store_1d_slc:
3443 ; GFX10:       ; %bb.0: ; %main_body
3444 ; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3445 ; GFX10-NEXT:    s_endpgm
3447 ; GFX11-LABEL: store_1d_slc:
3448 ; GFX11:       ; %bb.0: ; %main_body
3449 ; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3450 ; GFX11-NEXT:    s_nop 0
3451 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3452 ; GFX11-NEXT:    s_endpgm
3453 main_body:
3454   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)
3455   ret void
3458 define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3459 ; VERDE-LABEL: store_1d_glc_slc:
3460 ; VERDE:       ; %bb.0: ; %main_body
3461 ; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3462 ; VERDE-NEXT:    s_endpgm
3464 ; FIJI-LABEL: store_1d_glc_slc:
3465 ; FIJI:       ; %bb.0: ; %main_body
3466 ; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3467 ; FIJI-NEXT:    s_endpgm
3469 ; GFX6789-LABEL: store_1d_glc_slc:
3470 ; GFX6789:       ; %bb.0: ; %main_body
3471 ; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3472 ; GFX6789-NEXT:    s_endpgm
3474 ; NOPRT-LABEL: store_1d_glc_slc:
3475 ; NOPRT:       ; %bb.0: ; %main_body
3476 ; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3477 ; NOPRT-NEXT:    s_endpgm
3479 ; GFX10-LABEL: store_1d_glc_slc:
3480 ; GFX10:       ; %bb.0: ; %main_body
3481 ; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3482 ; GFX10-NEXT:    s_endpgm
3484 ; GFX11-LABEL: store_1d_glc_slc:
3485 ; GFX11:       ; %bb.0: ; %main_body
3486 ; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3487 ; GFX11-NEXT:    s_nop 0
3488 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3489 ; GFX11-NEXT:    s_endpgm
3490 main_body:
3491   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3)
3492   ret void
3495 define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3496 ; VERDE-LABEL: getresinfo_dmask7:
3497 ; VERDE:       ; %bb.0: ; %main_body
3498 ; VERDE-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3499 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3500 ; VERDE-NEXT:    ; return to shader part epilog
3502 ; FIJI-LABEL: getresinfo_dmask7:
3503 ; FIJI:       ; %bb.0: ; %main_body
3504 ; FIJI-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3505 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3506 ; FIJI-NEXT:    ; return to shader part epilog
3508 ; GFX6789-LABEL: getresinfo_dmask7:
3509 ; GFX6789:       ; %bb.0: ; %main_body
3510 ; GFX6789-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3511 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3512 ; GFX6789-NEXT:    ; return to shader part epilog
3514 ; NOPRT-LABEL: getresinfo_dmask7:
3515 ; NOPRT:       ; %bb.0: ; %main_body
3516 ; NOPRT-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3517 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3518 ; NOPRT-NEXT:    ; return to shader part epilog
3520 ; GFX10PLUS-LABEL: getresinfo_dmask7:
3521 ; GFX10PLUS:       ; %bb.0: ; %main_body
3522 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm
3523 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3524 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3525 main_body:
3526   %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3527   ret <3 x float> %r
3530 define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3531 ; VERDE-LABEL: getresinfo_dmask3:
3532 ; VERDE:       ; %bb.0: ; %main_body
3533 ; VERDE-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3534 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3535 ; VERDE-NEXT:    ; return to shader part epilog
3537 ; FIJI-LABEL: getresinfo_dmask3:
3538 ; FIJI:       ; %bb.0: ; %main_body
3539 ; FIJI-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3540 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3541 ; FIJI-NEXT:    ; return to shader part epilog
3543 ; GFX6789-LABEL: getresinfo_dmask3:
3544 ; GFX6789:       ; %bb.0: ; %main_body
3545 ; GFX6789-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3546 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3547 ; GFX6789-NEXT:    ; return to shader part epilog
3549 ; NOPRT-LABEL: getresinfo_dmask3:
3550 ; NOPRT:       ; %bb.0: ; %main_body
3551 ; NOPRT-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3552 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3553 ; NOPRT-NEXT:    ; return to shader part epilog
3555 ; GFX10PLUS-LABEL: getresinfo_dmask3:
3556 ; GFX10PLUS:       ; %bb.0: ; %main_body
3557 ; GFX10PLUS-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm
3558 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3559 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3560 main_body:
3561   %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3562   ret <2 x float> %r
3565 define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3566 ; VERDE-LABEL: getresinfo_dmask1:
3567 ; VERDE:       ; %bb.0: ; %main_body
3568 ; VERDE-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3569 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3570 ; VERDE-NEXT:    ; return to shader part epilog
3572 ; FIJI-LABEL: getresinfo_dmask1:
3573 ; FIJI:       ; %bb.0: ; %main_body
3574 ; FIJI-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3575 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3576 ; FIJI-NEXT:    ; return to shader part epilog
3578 ; GFX6789-LABEL: getresinfo_dmask1:
3579 ; GFX6789:       ; %bb.0: ; %main_body
3580 ; GFX6789-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3581 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3582 ; GFX6789-NEXT:    ; return to shader part epilog
3584 ; NOPRT-LABEL: getresinfo_dmask1:
3585 ; NOPRT:       ; %bb.0: ; %main_body
3586 ; NOPRT-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3587 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3588 ; NOPRT-NEXT:    ; return to shader part epilog
3590 ; GFX10PLUS-LABEL: getresinfo_dmask1:
3591 ; GFX10PLUS:       ; %bb.0: ; %main_body
3592 ; GFX10PLUS-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm
3593 ; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3594 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3595 main_body:
3596   %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3597   ret float %r
3600 define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) #0 {
3601 ; VERDE-LABEL: getresinfo_dmask0:
3602 ; VERDE:       ; %bb.0: ; %main_body
3603 ; VERDE-NEXT:    ; return to shader part epilog
3605 ; FIJI-LABEL: getresinfo_dmask0:
3606 ; FIJI:       ; %bb.0: ; %main_body
3607 ; FIJI-NEXT:    ; return to shader part epilog
3609 ; GFX6789-LABEL: getresinfo_dmask0:
3610 ; GFX6789:       ; %bb.0: ; %main_body
3611 ; GFX6789-NEXT:    ; return to shader part epilog
3613 ; NOPRT-LABEL: getresinfo_dmask0:
3614 ; NOPRT:       ; %bb.0: ; %main_body
3615 ; NOPRT-NEXT:    ; return to shader part epilog
3617 ; GFX10PLUS-LABEL: getresinfo_dmask0:
3618 ; GFX10PLUS:       ; %bb.0: ; %main_body
3619 ; GFX10PLUS-NEXT:    ; return to shader part epilog
3620 main_body:
3621   %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3622   ret <4 x float> %r
3626 define amdgpu_ps void @image_store_wait(<8 x i32> inreg %arg, <8 x i32> inreg %arg1, <8 x i32> inreg %arg2, <4 x float> %arg3, i32 %arg4) #0 {
3627 ; VERDE-LABEL: image_store_wait:
3628 ; VERDE:       ; %bb.0: ; %main_body
3629 ; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3630 ; VERDE-NEXT:    s_waitcnt expcnt(0)
3631 ; VERDE-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3632 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3633 ; VERDE-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3634 ; VERDE-NEXT:    s_endpgm
3636 ; FIJI-LABEL: image_store_wait:
3637 ; FIJI:       ; %bb.0: ; %main_body
3638 ; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3639 ; FIJI-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3640 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3641 ; FIJI-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3642 ; FIJI-NEXT:    s_endpgm
3644 ; GFX6789-LABEL: image_store_wait:
3645 ; GFX6789:       ; %bb.0: ; %main_body
3646 ; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3647 ; GFX6789-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3648 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3649 ; GFX6789-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3650 ; GFX6789-NEXT:    s_endpgm
3652 ; NOPRT-LABEL: image_store_wait:
3653 ; NOPRT:       ; %bb.0: ; %main_body
3654 ; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3655 ; NOPRT-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3656 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3657 ; NOPRT-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3658 ; NOPRT-NEXT:    s_endpgm
3660 ; GFX10-LABEL: image_store_wait:
3661 ; GFX10:       ; %bb.0: ; %main_body
3662 ; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3663 ; GFX10-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3664 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3665 ; GFX10-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3666 ; GFX10-NEXT:    s_endpgm
3668 ; GFX11-LABEL: image_store_wait:
3669 ; GFX11:       ; %bb.0: ; %main_body
3670 ; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3671 ; GFX11-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3672 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3673 ; GFX11-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3674 ; GFX11-NEXT:    s_nop 0
3675 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3676 ; GFX11-NEXT:    s_endpgm
3677 main_body:
3678   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %arg3, i32 15, i32 %arg4, <8 x i32> %arg, i32 0, i32 0)
3679   %data = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %arg4, <8 x i32> %arg1, i32 0, i32 0)
3680   call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %data, i32 15, i32 %arg4, <8 x i32> %arg2, i32 0, i32 0)
3681   ret void
3684 define amdgpu_ps float @image_load_mmo(<8 x i32> inreg %rsrc, ptr addrspace(3) %lds, <2 x i32> %c) #0 {
3685 ; VERDE-LABEL: image_load_mmo:
3686 ; VERDE:       ; %bb.0:
3687 ; VERDE-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3688 ; VERDE-NEXT:    v_mov_b32_e32 v2, 0
3689 ; VERDE-NEXT:    s_mov_b32 m0, -1
3690 ; VERDE-NEXT:    ds_write_b32 v0, v2
3691 ; VERDE-NEXT:    v_add_i32_e32 v0, vcc, 16, v0
3692 ; VERDE-NEXT:    ds_write_b32 v0, v2
3693 ; VERDE-NEXT:    s_waitcnt vmcnt(0)
3694 ; VERDE-NEXT:    v_mov_b32_e32 v0, v1
3695 ; VERDE-NEXT:    s_waitcnt lgkmcnt(0)
3696 ; VERDE-NEXT:    ; return to shader part epilog
3698 ; FIJI-LABEL: image_load_mmo:
3699 ; FIJI:       ; %bb.0:
3700 ; FIJI-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3701 ; FIJI-NEXT:    v_mov_b32_e32 v2, 0
3702 ; FIJI-NEXT:    s_mov_b32 m0, -1
3703 ; FIJI-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3704 ; FIJI-NEXT:    s_waitcnt vmcnt(0)
3705 ; FIJI-NEXT:    v_mov_b32_e32 v0, v1
3706 ; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
3707 ; FIJI-NEXT:    ; return to shader part epilog
3709 ; GFX6789-LABEL: image_load_mmo:
3710 ; GFX6789:       ; %bb.0:
3711 ; GFX6789-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3712 ; GFX6789-NEXT:    v_mov_b32_e32 v2, 0
3713 ; GFX6789-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3714 ; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3715 ; GFX6789-NEXT:    v_mov_b32_e32 v0, v1
3716 ; GFX6789-NEXT:    s_waitcnt lgkmcnt(0)
3717 ; GFX6789-NEXT:    ; return to shader part epilog
3719 ; NOPRT-LABEL: image_load_mmo:
3720 ; NOPRT:       ; %bb.0:
3721 ; NOPRT-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3722 ; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
3723 ; NOPRT-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3724 ; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3725 ; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
3726 ; NOPRT-NEXT:    s_waitcnt lgkmcnt(0)
3727 ; NOPRT-NEXT:    ; return to shader part epilog
3729 ; GFX10-LABEL: image_load_mmo:
3730 ; GFX10:       ; %bb.0:
3731 ; GFX10-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3732 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
3733 ; GFX10-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3734 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3735 ; GFX10-NEXT:    v_mov_b32_e32 v0, v1
3736 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3737 ; GFX10-NEXT:    ; return to shader part epilog
3739 ; GFX11-LABEL: image_load_mmo:
3740 ; GFX11:       ; %bb.0:
3741 ; GFX11-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3742 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
3743 ; GFX11-NEXT:    ds_store_2addr_b32 v0, v2, v2 offset1:4
3744 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3745 ; GFX11-NEXT:    v_mov_b32_e32 v0, v1
3746 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3747 ; GFX11-NEXT:    ; return to shader part epilog
3748   store float 0.000000e+00, ptr addrspace(3) %lds
3749   %c0 = extractelement <2 x i32> %c, i32 0
3750   %c1 = extractelement <2 x i32> %c, i32 1
3751   %tex = call float @llvm.amdgcn.image.load.2d.f32.i32(i32 1, i32 %c0, i32 %c1, <8 x i32> %rsrc, i32 0, i32 0)
3752   %tmp2 = getelementptr float, ptr addrspace(3) %lds, i32 4
3753   store float 0.000000e+00, ptr addrspace(3) %tmp2
3754   ret float %tex
3757 declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3758 declare {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3759 declare {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3760 declare {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3761 declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3762 declare {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3763 declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3764 declare {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3765 declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3766 declare {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3767 declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3768 declare {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3769 declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3770 declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3771 declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3772 declare {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3773 declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3774 declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3776 declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3777 declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3778 declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3779 declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3780 declare {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3781 declare {float,i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3782 declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3783 declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3784 declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3785 declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3787 declare void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float>, i32, i32, <8 x i32>, i32, i32) #0
3788 declare void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3789 declare void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3790 declare void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3791 declare void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3792 declare void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3793 declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3794 declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3796 declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3797 declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3798 declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3799 declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3800 declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3801 declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3803 declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3804 declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3805 declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3806 declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3807 declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3808 declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3809 declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3810 declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3811 declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3812 declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3813 declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3815 declare float @llvm.amdgcn.image.load.1d.f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3816 declare float @llvm.amdgcn.image.load.2d.f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3817 declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3818 declare void @llvm.amdgcn.image.store.1d.f32.i32(float, i32, i32, <8 x i32>, i32, i32) #0
3819 declare void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float>, i32, i32, <8 x i32>, i32, i32) #0
3821 attributes #0 = { nounwind }
3822 attributes #1 = { nounwind readonly }
3823 attributes #2 = { nounwind readnone }