Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / llvm.amdgcn.image.atomic.dim.a16.ll
bloba3796197e4c53415a962d31be1906212ad14cc87
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -o - %s | FileCheck -check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -o - %s | FileCheck -check-prefix=GFX10 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -o - %s | FileCheck -check-prefix=GFX10 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1200 -o - %s | FileCheck -check-prefix=GFX12 %s
7 define amdgpu_ps float @atomic_swap_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
8 ; GFX9-LABEL: atomic_swap_i32_1d:
9 ; GFX9:       ; %bb.0: ; %main_body
10 ; GFX9-NEXT:    s_mov_b32 s0, s2
11 ; GFX9-NEXT:    s_mov_b32 s1, s3
12 ; GFX9-NEXT:    s_mov_b32 s2, s4
13 ; GFX9-NEXT:    s_mov_b32 s3, s5
14 ; GFX9-NEXT:    s_mov_b32 s4, s6
15 ; GFX9-NEXT:    s_mov_b32 s5, s7
16 ; GFX9-NEXT:    s_mov_b32 s6, s8
17 ; GFX9-NEXT:    s_mov_b32 s7, s9
18 ; GFX9-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 unorm glc a16
19 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
20 ; GFX9-NEXT:    ; return to shader part epilog
22 ; GFX10-LABEL: atomic_swap_i32_1d:
23 ; GFX10:       ; %bb.0: ; %main_body
24 ; GFX10-NEXT:    s_mov_b32 s0, s2
25 ; GFX10-NEXT:    s_mov_b32 s1, s3
26 ; GFX10-NEXT:    s_mov_b32 s2, s4
27 ; GFX10-NEXT:    s_mov_b32 s3, s5
28 ; GFX10-NEXT:    s_mov_b32 s4, s6
29 ; GFX10-NEXT:    s_mov_b32 s5, s7
30 ; GFX10-NEXT:    s_mov_b32 s6, s8
31 ; GFX10-NEXT:    s_mov_b32 s7, s9
32 ; GFX10-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
33 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
34 ; GFX10-NEXT:    ; return to shader part epilog
36 ; GFX12-LABEL: atomic_swap_i32_1d:
37 ; GFX12:       ; %bb.0: ; %main_body
38 ; GFX12-NEXT:    s_mov_b32 s0, s2
39 ; GFX12-NEXT:    s_mov_b32 s1, s3
40 ; GFX12-NEXT:    s_mov_b32 s2, s4
41 ; GFX12-NEXT:    s_mov_b32 s3, s5
42 ; GFX12-NEXT:    s_mov_b32 s4, s6
43 ; GFX12-NEXT:    s_mov_b32 s5, s7
44 ; GFX12-NEXT:    s_mov_b32 s6, s8
45 ; GFX12-NEXT:    s_mov_b32 s7, s9
46 ; GFX12-NEXT:    image_atomic_swap v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
47 ; GFX12-NEXT:    s_wait_loadcnt 0x0
48 ; GFX12-NEXT:    ; return to shader part epilog
49 main_body:
50   %v = call i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
51   %out = bitcast i32 %v to float
52   ret float %out
55 define amdgpu_ps float @atomic_add_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
56 ; GFX9-LABEL: atomic_add_i32_1d:
57 ; GFX9:       ; %bb.0: ; %main_body
58 ; GFX9-NEXT:    s_mov_b32 s0, s2
59 ; GFX9-NEXT:    s_mov_b32 s1, s3
60 ; GFX9-NEXT:    s_mov_b32 s2, s4
61 ; GFX9-NEXT:    s_mov_b32 s3, s5
62 ; GFX9-NEXT:    s_mov_b32 s4, s6
63 ; GFX9-NEXT:    s_mov_b32 s5, s7
64 ; GFX9-NEXT:    s_mov_b32 s6, s8
65 ; GFX9-NEXT:    s_mov_b32 s7, s9
66 ; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a16
67 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX9-NEXT:    ; return to shader part epilog
70 ; GFX10-LABEL: atomic_add_i32_1d:
71 ; GFX10:       ; %bb.0: ; %main_body
72 ; GFX10-NEXT:    s_mov_b32 s0, s2
73 ; GFX10-NEXT:    s_mov_b32 s1, s3
74 ; GFX10-NEXT:    s_mov_b32 s2, s4
75 ; GFX10-NEXT:    s_mov_b32 s3, s5
76 ; GFX10-NEXT:    s_mov_b32 s4, s6
77 ; GFX10-NEXT:    s_mov_b32 s5, s7
78 ; GFX10-NEXT:    s_mov_b32 s6, s8
79 ; GFX10-NEXT:    s_mov_b32 s7, s9
80 ; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
81 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
82 ; GFX10-NEXT:    ; return to shader part epilog
84 ; GFX12-LABEL: atomic_add_i32_1d:
85 ; GFX12:       ; %bb.0: ; %main_body
86 ; GFX12-NEXT:    s_mov_b32 s0, s2
87 ; GFX12-NEXT:    s_mov_b32 s1, s3
88 ; GFX12-NEXT:    s_mov_b32 s2, s4
89 ; GFX12-NEXT:    s_mov_b32 s3, s5
90 ; GFX12-NEXT:    s_mov_b32 s4, s6
91 ; GFX12-NEXT:    s_mov_b32 s5, s7
92 ; GFX12-NEXT:    s_mov_b32 s6, s8
93 ; GFX12-NEXT:    s_mov_b32 s7, s9
94 ; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
95 ; GFX12-NEXT:    s_wait_loadcnt 0x0
96 ; GFX12-NEXT:    ; return to shader part epilog
97 main_body:
98   %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
99   %out = bitcast i32 %v to float
100   ret float %out
103 define amdgpu_ps float @atomic_sub_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
104 ; GFX9-LABEL: atomic_sub_i32_1d:
105 ; GFX9:       ; %bb.0: ; %main_body
106 ; GFX9-NEXT:    s_mov_b32 s0, s2
107 ; GFX9-NEXT:    s_mov_b32 s1, s3
108 ; GFX9-NEXT:    s_mov_b32 s2, s4
109 ; GFX9-NEXT:    s_mov_b32 s3, s5
110 ; GFX9-NEXT:    s_mov_b32 s4, s6
111 ; GFX9-NEXT:    s_mov_b32 s5, s7
112 ; GFX9-NEXT:    s_mov_b32 s6, s8
113 ; GFX9-NEXT:    s_mov_b32 s7, s9
114 ; GFX9-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 unorm glc a16
115 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
116 ; GFX9-NEXT:    ; return to shader part epilog
118 ; GFX10-LABEL: atomic_sub_i32_1d:
119 ; GFX10:       ; %bb.0: ; %main_body
120 ; GFX10-NEXT:    s_mov_b32 s0, s2
121 ; GFX10-NEXT:    s_mov_b32 s1, s3
122 ; GFX10-NEXT:    s_mov_b32 s2, s4
123 ; GFX10-NEXT:    s_mov_b32 s3, s5
124 ; GFX10-NEXT:    s_mov_b32 s4, s6
125 ; GFX10-NEXT:    s_mov_b32 s5, s7
126 ; GFX10-NEXT:    s_mov_b32 s6, s8
127 ; GFX10-NEXT:    s_mov_b32 s7, s9
128 ; GFX10-NEXT:    image_atomic_sub v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
129 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
130 ; GFX10-NEXT:    ; return to shader part epilog
132 ; GFX12-LABEL: atomic_sub_i32_1d:
133 ; GFX12:       ; %bb.0: ; %main_body
134 ; GFX12-NEXT:    s_mov_b32 s0, s2
135 ; GFX12-NEXT:    s_mov_b32 s1, s3
136 ; GFX12-NEXT:    s_mov_b32 s2, s4
137 ; GFX12-NEXT:    s_mov_b32 s3, s5
138 ; GFX12-NEXT:    s_mov_b32 s4, s6
139 ; GFX12-NEXT:    s_mov_b32 s5, s7
140 ; GFX12-NEXT:    s_mov_b32 s6, s8
141 ; GFX12-NEXT:    s_mov_b32 s7, s9
142 ; GFX12-NEXT:    image_atomic_sub_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
143 ; GFX12-NEXT:    s_wait_loadcnt 0x0
144 ; GFX12-NEXT:    ; return to shader part epilog
145 main_body:
146   %v = call i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
147   %out = bitcast i32 %v to float
148   ret float %out
151 define amdgpu_ps float @atomic_smin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
152 ; GFX9-LABEL: atomic_smin_i32_1d:
153 ; GFX9:       ; %bb.0: ; %main_body
154 ; GFX9-NEXT:    s_mov_b32 s0, s2
155 ; GFX9-NEXT:    s_mov_b32 s1, s3
156 ; GFX9-NEXT:    s_mov_b32 s2, s4
157 ; GFX9-NEXT:    s_mov_b32 s3, s5
158 ; GFX9-NEXT:    s_mov_b32 s4, s6
159 ; GFX9-NEXT:    s_mov_b32 s5, s7
160 ; GFX9-NEXT:    s_mov_b32 s6, s8
161 ; GFX9-NEXT:    s_mov_b32 s7, s9
162 ; GFX9-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 unorm glc a16
163 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
164 ; GFX9-NEXT:    ; return to shader part epilog
166 ; GFX10-LABEL: atomic_smin_i32_1d:
167 ; GFX10:       ; %bb.0: ; %main_body
168 ; GFX10-NEXT:    s_mov_b32 s0, s2
169 ; GFX10-NEXT:    s_mov_b32 s1, s3
170 ; GFX10-NEXT:    s_mov_b32 s2, s4
171 ; GFX10-NEXT:    s_mov_b32 s3, s5
172 ; GFX10-NEXT:    s_mov_b32 s4, s6
173 ; GFX10-NEXT:    s_mov_b32 s5, s7
174 ; GFX10-NEXT:    s_mov_b32 s6, s8
175 ; GFX10-NEXT:    s_mov_b32 s7, s9
176 ; GFX10-NEXT:    image_atomic_smin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
177 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
178 ; GFX10-NEXT:    ; return to shader part epilog
180 ; GFX12-LABEL: atomic_smin_i32_1d:
181 ; GFX12:       ; %bb.0: ; %main_body
182 ; GFX12-NEXT:    s_mov_b32 s0, s2
183 ; GFX12-NEXT:    s_mov_b32 s1, s3
184 ; GFX12-NEXT:    s_mov_b32 s2, s4
185 ; GFX12-NEXT:    s_mov_b32 s3, s5
186 ; GFX12-NEXT:    s_mov_b32 s4, s6
187 ; GFX12-NEXT:    s_mov_b32 s5, s7
188 ; GFX12-NEXT:    s_mov_b32 s6, s8
189 ; GFX12-NEXT:    s_mov_b32 s7, s9
190 ; GFX12-NEXT:    image_atomic_min_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
191 ; GFX12-NEXT:    s_wait_loadcnt 0x0
192 ; GFX12-NEXT:    ; return to shader part epilog
193 main_body:
194   %v = call i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
195   %out = bitcast i32 %v to float
196   ret float %out
199 define amdgpu_ps float @atomic_umin_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
200 ; GFX9-LABEL: atomic_umin_i32_1d:
201 ; GFX9:       ; %bb.0: ; %main_body
202 ; GFX9-NEXT:    s_mov_b32 s0, s2
203 ; GFX9-NEXT:    s_mov_b32 s1, s3
204 ; GFX9-NEXT:    s_mov_b32 s2, s4
205 ; GFX9-NEXT:    s_mov_b32 s3, s5
206 ; GFX9-NEXT:    s_mov_b32 s4, s6
207 ; GFX9-NEXT:    s_mov_b32 s5, s7
208 ; GFX9-NEXT:    s_mov_b32 s6, s8
209 ; GFX9-NEXT:    s_mov_b32 s7, s9
210 ; GFX9-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 unorm glc a16
211 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
212 ; GFX9-NEXT:    ; return to shader part epilog
214 ; GFX10-LABEL: atomic_umin_i32_1d:
215 ; GFX10:       ; %bb.0: ; %main_body
216 ; GFX10-NEXT:    s_mov_b32 s0, s2
217 ; GFX10-NEXT:    s_mov_b32 s1, s3
218 ; GFX10-NEXT:    s_mov_b32 s2, s4
219 ; GFX10-NEXT:    s_mov_b32 s3, s5
220 ; GFX10-NEXT:    s_mov_b32 s4, s6
221 ; GFX10-NEXT:    s_mov_b32 s5, s7
222 ; GFX10-NEXT:    s_mov_b32 s6, s8
223 ; GFX10-NEXT:    s_mov_b32 s7, s9
224 ; GFX10-NEXT:    image_atomic_umin v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
225 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
226 ; GFX10-NEXT:    ; return to shader part epilog
228 ; GFX12-LABEL: atomic_umin_i32_1d:
229 ; GFX12:       ; %bb.0: ; %main_body
230 ; GFX12-NEXT:    s_mov_b32 s0, s2
231 ; GFX12-NEXT:    s_mov_b32 s1, s3
232 ; GFX12-NEXT:    s_mov_b32 s2, s4
233 ; GFX12-NEXT:    s_mov_b32 s3, s5
234 ; GFX12-NEXT:    s_mov_b32 s4, s6
235 ; GFX12-NEXT:    s_mov_b32 s5, s7
236 ; GFX12-NEXT:    s_mov_b32 s6, s8
237 ; GFX12-NEXT:    s_mov_b32 s7, s9
238 ; GFX12-NEXT:    image_atomic_min_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
239 ; GFX12-NEXT:    s_wait_loadcnt 0x0
240 ; GFX12-NEXT:    ; return to shader part epilog
241 main_body:
242   %v = call i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
243   %out = bitcast i32 %v to float
244   ret float %out
247 define amdgpu_ps float @atomic_smax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
248 ; GFX9-LABEL: atomic_smax_i32_1d:
249 ; GFX9:       ; %bb.0: ; %main_body
250 ; GFX9-NEXT:    s_mov_b32 s0, s2
251 ; GFX9-NEXT:    s_mov_b32 s1, s3
252 ; GFX9-NEXT:    s_mov_b32 s2, s4
253 ; GFX9-NEXT:    s_mov_b32 s3, s5
254 ; GFX9-NEXT:    s_mov_b32 s4, s6
255 ; GFX9-NEXT:    s_mov_b32 s5, s7
256 ; GFX9-NEXT:    s_mov_b32 s6, s8
257 ; GFX9-NEXT:    s_mov_b32 s7, s9
258 ; GFX9-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 unorm glc a16
259 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
260 ; GFX9-NEXT:    ; return to shader part epilog
262 ; GFX10-LABEL: atomic_smax_i32_1d:
263 ; GFX10:       ; %bb.0: ; %main_body
264 ; GFX10-NEXT:    s_mov_b32 s0, s2
265 ; GFX10-NEXT:    s_mov_b32 s1, s3
266 ; GFX10-NEXT:    s_mov_b32 s2, s4
267 ; GFX10-NEXT:    s_mov_b32 s3, s5
268 ; GFX10-NEXT:    s_mov_b32 s4, s6
269 ; GFX10-NEXT:    s_mov_b32 s5, s7
270 ; GFX10-NEXT:    s_mov_b32 s6, s8
271 ; GFX10-NEXT:    s_mov_b32 s7, s9
272 ; GFX10-NEXT:    image_atomic_smax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
273 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
274 ; GFX10-NEXT:    ; return to shader part epilog
276 ; GFX12-LABEL: atomic_smax_i32_1d:
277 ; GFX12:       ; %bb.0: ; %main_body
278 ; GFX12-NEXT:    s_mov_b32 s0, s2
279 ; GFX12-NEXT:    s_mov_b32 s1, s3
280 ; GFX12-NEXT:    s_mov_b32 s2, s4
281 ; GFX12-NEXT:    s_mov_b32 s3, s5
282 ; GFX12-NEXT:    s_mov_b32 s4, s6
283 ; GFX12-NEXT:    s_mov_b32 s5, s7
284 ; GFX12-NEXT:    s_mov_b32 s6, s8
285 ; GFX12-NEXT:    s_mov_b32 s7, s9
286 ; GFX12-NEXT:    image_atomic_max_int v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
287 ; GFX12-NEXT:    s_wait_loadcnt 0x0
288 ; GFX12-NEXT:    ; return to shader part epilog
289 main_body:
290   %v = call i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
291   %out = bitcast i32 %v to float
292   ret float %out
295 define amdgpu_ps float @atomic_umax_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
296 ; GFX9-LABEL: atomic_umax_i32_1d:
297 ; GFX9:       ; %bb.0: ; %main_body
298 ; GFX9-NEXT:    s_mov_b32 s0, s2
299 ; GFX9-NEXT:    s_mov_b32 s1, s3
300 ; GFX9-NEXT:    s_mov_b32 s2, s4
301 ; GFX9-NEXT:    s_mov_b32 s3, s5
302 ; GFX9-NEXT:    s_mov_b32 s4, s6
303 ; GFX9-NEXT:    s_mov_b32 s5, s7
304 ; GFX9-NEXT:    s_mov_b32 s6, s8
305 ; GFX9-NEXT:    s_mov_b32 s7, s9
306 ; GFX9-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 unorm glc a16
307 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
308 ; GFX9-NEXT:    ; return to shader part epilog
310 ; GFX10-LABEL: atomic_umax_i32_1d:
311 ; GFX10:       ; %bb.0: ; %main_body
312 ; GFX10-NEXT:    s_mov_b32 s0, s2
313 ; GFX10-NEXT:    s_mov_b32 s1, s3
314 ; GFX10-NEXT:    s_mov_b32 s2, s4
315 ; GFX10-NEXT:    s_mov_b32 s3, s5
316 ; GFX10-NEXT:    s_mov_b32 s4, s6
317 ; GFX10-NEXT:    s_mov_b32 s5, s7
318 ; GFX10-NEXT:    s_mov_b32 s6, s8
319 ; GFX10-NEXT:    s_mov_b32 s7, s9
320 ; GFX10-NEXT:    image_atomic_umax v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
321 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
322 ; GFX10-NEXT:    ; return to shader part epilog
324 ; GFX12-LABEL: atomic_umax_i32_1d:
325 ; GFX12:       ; %bb.0: ; %main_body
326 ; GFX12-NEXT:    s_mov_b32 s0, s2
327 ; GFX12-NEXT:    s_mov_b32 s1, s3
328 ; GFX12-NEXT:    s_mov_b32 s2, s4
329 ; GFX12-NEXT:    s_mov_b32 s3, s5
330 ; GFX12-NEXT:    s_mov_b32 s4, s6
331 ; GFX12-NEXT:    s_mov_b32 s5, s7
332 ; GFX12-NEXT:    s_mov_b32 s6, s8
333 ; GFX12-NEXT:    s_mov_b32 s7, s9
334 ; GFX12-NEXT:    image_atomic_max_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
335 ; GFX12-NEXT:    s_wait_loadcnt 0x0
336 ; GFX12-NEXT:    ; return to shader part epilog
337 main_body:
338   %v = call i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
339   %out = bitcast i32 %v to float
340   ret float %out
343 define amdgpu_ps float @atomic_and_i321d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
344 ; GFX9-LABEL: atomic_and_i321d:
345 ; GFX9:       ; %bb.0: ; %main_body
346 ; GFX9-NEXT:    s_mov_b32 s0, s2
347 ; GFX9-NEXT:    s_mov_b32 s1, s3
348 ; GFX9-NEXT:    s_mov_b32 s2, s4
349 ; GFX9-NEXT:    s_mov_b32 s3, s5
350 ; GFX9-NEXT:    s_mov_b32 s4, s6
351 ; GFX9-NEXT:    s_mov_b32 s5, s7
352 ; GFX9-NEXT:    s_mov_b32 s6, s8
353 ; GFX9-NEXT:    s_mov_b32 s7, s9
354 ; GFX9-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 unorm glc a16
355 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
356 ; GFX9-NEXT:    ; return to shader part epilog
358 ; GFX10-LABEL: atomic_and_i321d:
359 ; GFX10:       ; %bb.0: ; %main_body
360 ; GFX10-NEXT:    s_mov_b32 s0, s2
361 ; GFX10-NEXT:    s_mov_b32 s1, s3
362 ; GFX10-NEXT:    s_mov_b32 s2, s4
363 ; GFX10-NEXT:    s_mov_b32 s3, s5
364 ; GFX10-NEXT:    s_mov_b32 s4, s6
365 ; GFX10-NEXT:    s_mov_b32 s5, s7
366 ; GFX10-NEXT:    s_mov_b32 s6, s8
367 ; GFX10-NEXT:    s_mov_b32 s7, s9
368 ; GFX10-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
369 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
370 ; GFX10-NEXT:    ; return to shader part epilog
372 ; GFX12-LABEL: atomic_and_i321d:
373 ; GFX12:       ; %bb.0: ; %main_body
374 ; GFX12-NEXT:    s_mov_b32 s0, s2
375 ; GFX12-NEXT:    s_mov_b32 s1, s3
376 ; GFX12-NEXT:    s_mov_b32 s2, s4
377 ; GFX12-NEXT:    s_mov_b32 s3, s5
378 ; GFX12-NEXT:    s_mov_b32 s4, s6
379 ; GFX12-NEXT:    s_mov_b32 s5, s7
380 ; GFX12-NEXT:    s_mov_b32 s6, s8
381 ; GFX12-NEXT:    s_mov_b32 s7, s9
382 ; GFX12-NEXT:    image_atomic_and v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
383 ; GFX12-NEXT:    s_wait_loadcnt 0x0
384 ; GFX12-NEXT:    ; return to shader part epilog
385 main_body:
386   %v = call i32 @llvm.amdgcn.image.atomic.and.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
387   %out = bitcast i32 %v to float
388   ret float %out
391 define amdgpu_ps float @atomic_or_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
392 ; GFX9-LABEL: atomic_or_i32_1d:
393 ; GFX9:       ; %bb.0: ; %main_body
394 ; GFX9-NEXT:    s_mov_b32 s0, s2
395 ; GFX9-NEXT:    s_mov_b32 s1, s3
396 ; GFX9-NEXT:    s_mov_b32 s2, s4
397 ; GFX9-NEXT:    s_mov_b32 s3, s5
398 ; GFX9-NEXT:    s_mov_b32 s4, s6
399 ; GFX9-NEXT:    s_mov_b32 s5, s7
400 ; GFX9-NEXT:    s_mov_b32 s6, s8
401 ; GFX9-NEXT:    s_mov_b32 s7, s9
402 ; GFX9-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 unorm glc a16
403 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
404 ; GFX9-NEXT:    ; return to shader part epilog
406 ; GFX10-LABEL: atomic_or_i32_1d:
407 ; GFX10:       ; %bb.0: ; %main_body
408 ; GFX10-NEXT:    s_mov_b32 s0, s2
409 ; GFX10-NEXT:    s_mov_b32 s1, s3
410 ; GFX10-NEXT:    s_mov_b32 s2, s4
411 ; GFX10-NEXT:    s_mov_b32 s3, s5
412 ; GFX10-NEXT:    s_mov_b32 s4, s6
413 ; GFX10-NEXT:    s_mov_b32 s5, s7
414 ; GFX10-NEXT:    s_mov_b32 s6, s8
415 ; GFX10-NEXT:    s_mov_b32 s7, s9
416 ; GFX10-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
417 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
418 ; GFX10-NEXT:    ; return to shader part epilog
420 ; GFX12-LABEL: atomic_or_i32_1d:
421 ; GFX12:       ; %bb.0: ; %main_body
422 ; GFX12-NEXT:    s_mov_b32 s0, s2
423 ; GFX12-NEXT:    s_mov_b32 s1, s3
424 ; GFX12-NEXT:    s_mov_b32 s2, s4
425 ; GFX12-NEXT:    s_mov_b32 s3, s5
426 ; GFX12-NEXT:    s_mov_b32 s4, s6
427 ; GFX12-NEXT:    s_mov_b32 s5, s7
428 ; GFX12-NEXT:    s_mov_b32 s6, s8
429 ; GFX12-NEXT:    s_mov_b32 s7, s9
430 ; GFX12-NEXT:    image_atomic_or v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
431 ; GFX12-NEXT:    s_wait_loadcnt 0x0
432 ; GFX12-NEXT:    ; return to shader part epilog
433 main_body:
434   %v = call i32 @llvm.amdgcn.image.atomic.or.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
435   %out = bitcast i32 %v to float
436   ret float %out
439 define amdgpu_ps float @atomic_xor_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
440 ; GFX9-LABEL: atomic_xor_i32_1d:
441 ; GFX9:       ; %bb.0: ; %main_body
442 ; GFX9-NEXT:    s_mov_b32 s0, s2
443 ; GFX9-NEXT:    s_mov_b32 s1, s3
444 ; GFX9-NEXT:    s_mov_b32 s2, s4
445 ; GFX9-NEXT:    s_mov_b32 s3, s5
446 ; GFX9-NEXT:    s_mov_b32 s4, s6
447 ; GFX9-NEXT:    s_mov_b32 s5, s7
448 ; GFX9-NEXT:    s_mov_b32 s6, s8
449 ; GFX9-NEXT:    s_mov_b32 s7, s9
450 ; GFX9-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 unorm glc a16
451 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
452 ; GFX9-NEXT:    ; return to shader part epilog
454 ; GFX10-LABEL: atomic_xor_i32_1d:
455 ; GFX10:       ; %bb.0: ; %main_body
456 ; GFX10-NEXT:    s_mov_b32 s0, s2
457 ; GFX10-NEXT:    s_mov_b32 s1, s3
458 ; GFX10-NEXT:    s_mov_b32 s2, s4
459 ; GFX10-NEXT:    s_mov_b32 s3, s5
460 ; GFX10-NEXT:    s_mov_b32 s4, s6
461 ; GFX10-NEXT:    s_mov_b32 s5, s7
462 ; GFX10-NEXT:    s_mov_b32 s6, s8
463 ; GFX10-NEXT:    s_mov_b32 s7, s9
464 ; GFX10-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
465 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
466 ; GFX10-NEXT:    ; return to shader part epilog
468 ; GFX12-LABEL: atomic_xor_i32_1d:
469 ; GFX12:       ; %bb.0: ; %main_body
470 ; GFX12-NEXT:    s_mov_b32 s0, s2
471 ; GFX12-NEXT:    s_mov_b32 s1, s3
472 ; GFX12-NEXT:    s_mov_b32 s2, s4
473 ; GFX12-NEXT:    s_mov_b32 s3, s5
474 ; GFX12-NEXT:    s_mov_b32 s4, s6
475 ; GFX12-NEXT:    s_mov_b32 s5, s7
476 ; GFX12-NEXT:    s_mov_b32 s6, s8
477 ; GFX12-NEXT:    s_mov_b32 s7, s9
478 ; GFX12-NEXT:    image_atomic_xor v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
479 ; GFX12-NEXT:    s_wait_loadcnt 0x0
480 ; GFX12-NEXT:    ; return to shader part epilog
481 main_body:
482   %v = call i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
483   %out = bitcast i32 %v to float
484   ret float %out
487 define amdgpu_ps float @atomic_inc_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
488 ; GFX9-LABEL: atomic_inc_i32_1d:
489 ; GFX9:       ; %bb.0: ; %main_body
490 ; GFX9-NEXT:    s_mov_b32 s0, s2
491 ; GFX9-NEXT:    s_mov_b32 s1, s3
492 ; GFX9-NEXT:    s_mov_b32 s2, s4
493 ; GFX9-NEXT:    s_mov_b32 s3, s5
494 ; GFX9-NEXT:    s_mov_b32 s4, s6
495 ; GFX9-NEXT:    s_mov_b32 s5, s7
496 ; GFX9-NEXT:    s_mov_b32 s6, s8
497 ; GFX9-NEXT:    s_mov_b32 s7, s9
498 ; GFX9-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 unorm glc a16
499 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
500 ; GFX9-NEXT:    ; return to shader part epilog
502 ; GFX10-LABEL: atomic_inc_i32_1d:
503 ; GFX10:       ; %bb.0: ; %main_body
504 ; GFX10-NEXT:    s_mov_b32 s0, s2
505 ; GFX10-NEXT:    s_mov_b32 s1, s3
506 ; GFX10-NEXT:    s_mov_b32 s2, s4
507 ; GFX10-NEXT:    s_mov_b32 s3, s5
508 ; GFX10-NEXT:    s_mov_b32 s4, s6
509 ; GFX10-NEXT:    s_mov_b32 s5, s7
510 ; GFX10-NEXT:    s_mov_b32 s6, s8
511 ; GFX10-NEXT:    s_mov_b32 s7, s9
512 ; GFX10-NEXT:    image_atomic_inc v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
513 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
514 ; GFX10-NEXT:    ; return to shader part epilog
516 ; GFX12-LABEL: atomic_inc_i32_1d:
517 ; GFX12:       ; %bb.0: ; %main_body
518 ; GFX12-NEXT:    s_mov_b32 s0, s2
519 ; GFX12-NEXT:    s_mov_b32 s1, s3
520 ; GFX12-NEXT:    s_mov_b32 s2, s4
521 ; GFX12-NEXT:    s_mov_b32 s3, s5
522 ; GFX12-NEXT:    s_mov_b32 s4, s6
523 ; GFX12-NEXT:    s_mov_b32 s5, s7
524 ; GFX12-NEXT:    s_mov_b32 s6, s8
525 ; GFX12-NEXT:    s_mov_b32 s7, s9
526 ; GFX12-NEXT:    image_atomic_inc_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
527 ; GFX12-NEXT:    s_wait_loadcnt 0x0
528 ; GFX12-NEXT:    ; return to shader part epilog
529 main_body:
530   %v = call i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
531   %out = bitcast i32 %v to float
532   ret float %out
535 define amdgpu_ps float @atomic_dec_i32_1d(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
536 ; GFX9-LABEL: atomic_dec_i32_1d:
537 ; GFX9:       ; %bb.0: ; %main_body
538 ; GFX9-NEXT:    s_mov_b32 s0, s2
539 ; GFX9-NEXT:    s_mov_b32 s1, s3
540 ; GFX9-NEXT:    s_mov_b32 s2, s4
541 ; GFX9-NEXT:    s_mov_b32 s3, s5
542 ; GFX9-NEXT:    s_mov_b32 s4, s6
543 ; GFX9-NEXT:    s_mov_b32 s5, s7
544 ; GFX9-NEXT:    s_mov_b32 s6, s8
545 ; GFX9-NEXT:    s_mov_b32 s7, s9
546 ; GFX9-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 unorm glc a16
547 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
548 ; GFX9-NEXT:    ; return to shader part epilog
550 ; GFX10-LABEL: atomic_dec_i32_1d:
551 ; GFX10:       ; %bb.0: ; %main_body
552 ; GFX10-NEXT:    s_mov_b32 s0, s2
553 ; GFX10-NEXT:    s_mov_b32 s1, s3
554 ; GFX10-NEXT:    s_mov_b32 s2, s4
555 ; GFX10-NEXT:    s_mov_b32 s3, s5
556 ; GFX10-NEXT:    s_mov_b32 s4, s6
557 ; GFX10-NEXT:    s_mov_b32 s5, s7
558 ; GFX10-NEXT:    s_mov_b32 s6, s8
559 ; GFX10-NEXT:    s_mov_b32 s7, s9
560 ; GFX10-NEXT:    image_atomic_dec v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc a16
561 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
562 ; GFX10-NEXT:    ; return to shader part epilog
564 ; GFX12-LABEL: atomic_dec_i32_1d:
565 ; GFX12:       ; %bb.0: ; %main_body
566 ; GFX12-NEXT:    s_mov_b32 s0, s2
567 ; GFX12-NEXT:    s_mov_b32 s1, s3
568 ; GFX12-NEXT:    s_mov_b32 s2, s4
569 ; GFX12-NEXT:    s_mov_b32 s3, s5
570 ; GFX12-NEXT:    s_mov_b32 s4, s6
571 ; GFX12-NEXT:    s_mov_b32 s5, s7
572 ; GFX12-NEXT:    s_mov_b32 s6, s8
573 ; GFX12-NEXT:    s_mov_b32 s7, s9
574 ; GFX12-NEXT:    image_atomic_dec_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
575 ; GFX12-NEXT:    s_wait_loadcnt 0x0
576 ; GFX12-NEXT:    ; return to shader part epilog
577 main_body:
578   %v = call i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
579   %out = bitcast i32 %v to float
580   ret float %out
583 define amdgpu_ps float @atomic_cmpswap_i32_1d(<8 x i32> inreg %rsrc, i32 %cmp, i32 %swap, i16 %s) {
584 ; GFX9-LABEL: atomic_cmpswap_i32_1d:
585 ; GFX9:       ; %bb.0: ; %main_body
586 ; GFX9-NEXT:    s_mov_b32 s0, s2
587 ; GFX9-NEXT:    s_mov_b32 s1, s3
588 ; GFX9-NEXT:    s_mov_b32 s2, s4
589 ; GFX9-NEXT:    s_mov_b32 s3, s5
590 ; GFX9-NEXT:    s_mov_b32 s4, s6
591 ; GFX9-NEXT:    s_mov_b32 s5, s7
592 ; GFX9-NEXT:    s_mov_b32 s6, s8
593 ; GFX9-NEXT:    s_mov_b32 s7, s9
594 ; GFX9-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
595 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
596 ; GFX9-NEXT:    ; return to shader part epilog
598 ; GFX10-LABEL: atomic_cmpswap_i32_1d:
599 ; GFX10:       ; %bb.0: ; %main_body
600 ; GFX10-NEXT:    s_mov_b32 s0, s2
601 ; GFX10-NEXT:    s_mov_b32 s1, s3
602 ; GFX10-NEXT:    s_mov_b32 s2, s4
603 ; GFX10-NEXT:    s_mov_b32 s3, s5
604 ; GFX10-NEXT:    s_mov_b32 s4, s6
605 ; GFX10-NEXT:    s_mov_b32 s5, s7
606 ; GFX10-NEXT:    s_mov_b32 s6, s8
607 ; GFX10-NEXT:    s_mov_b32 s7, s9
608 ; GFX10-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
609 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
610 ; GFX10-NEXT:    ; return to shader part epilog
612 ; GFX12-LABEL: atomic_cmpswap_i32_1d:
613 ; GFX12:       ; %bb.0: ; %main_body
614 ; GFX12-NEXT:    s_mov_b32 s0, s2
615 ; GFX12-NEXT:    s_mov_b32 s1, s3
616 ; GFX12-NEXT:    s_mov_b32 s2, s4
617 ; GFX12-NEXT:    s_mov_b32 s3, s5
618 ; GFX12-NEXT:    s_mov_b32 s4, s6
619 ; GFX12-NEXT:    s_mov_b32 s5, s7
620 ; GFX12-NEXT:    s_mov_b32 s6, s8
621 ; GFX12-NEXT:    s_mov_b32 s7, s9
622 ; GFX12-NEXT:    image_atomic_cmpswap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
623 ; GFX12-NEXT:    s_wait_loadcnt 0x0
624 ; GFX12-NEXT:    ; return to shader part epilog
625 main_body:
626   %v = call i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i16(i32 %cmp, i32 %swap, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
627   %out = bitcast i32 %v to float
628   ret float %out
631 define amdgpu_ps float @atomic_add_i32_2d(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t) {
632 ; GFX9-LABEL: atomic_add_i32_2d:
633 ; GFX9:       ; %bb.0: ; %main_body
634 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
635 ; GFX9-NEXT:    s_mov_b32 s0, s2
636 ; GFX9-NEXT:    s_mov_b32 s1, s3
637 ; GFX9-NEXT:    s_mov_b32 s2, s4
638 ; GFX9-NEXT:    s_mov_b32 s3, s5
639 ; GFX9-NEXT:    s_mov_b32 s4, s6
640 ; GFX9-NEXT:    s_mov_b32 s5, s7
641 ; GFX9-NEXT:    s_mov_b32 s6, s8
642 ; GFX9-NEXT:    s_mov_b32 s7, s9
643 ; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
644 ; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a16
645 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
646 ; GFX9-NEXT:    ; return to shader part epilog
648 ; GFX10-LABEL: atomic_add_i32_2d:
649 ; GFX10:       ; %bb.0: ; %main_body
650 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
651 ; GFX10-NEXT:    s_mov_b32 s0, s2
652 ; GFX10-NEXT:    s_mov_b32 s1, s3
653 ; GFX10-NEXT:    s_mov_b32 s2, s4
654 ; GFX10-NEXT:    s_mov_b32 s3, s5
655 ; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
656 ; GFX10-NEXT:    s_mov_b32 s4, s6
657 ; GFX10-NEXT:    s_mov_b32 s5, s7
658 ; GFX10-NEXT:    s_mov_b32 s6, s8
659 ; GFX10-NEXT:    s_mov_b32 s7, s9
660 ; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm glc a16
661 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
662 ; GFX10-NEXT:    ; return to shader part epilog
664 ; GFX12-LABEL: atomic_add_i32_2d:
665 ; GFX12:       ; %bb.0: ; %main_body
666 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
667 ; GFX12-NEXT:    s_mov_b32 s0, s2
668 ; GFX12-NEXT:    s_mov_b32 s1, s3
669 ; GFX12-NEXT:    s_mov_b32 s2, s4
670 ; GFX12-NEXT:    s_mov_b32 s3, s5
671 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
672 ; GFX12-NEXT:    s_mov_b32 s4, s6
673 ; GFX12-NEXT:    s_mov_b32 s5, s7
674 ; GFX12-NEXT:    s_mov_b32 s6, s8
675 ; GFX12-NEXT:    s_mov_b32 s7, s9
676 ; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN a16
677 ; GFX12-NEXT:    s_wait_loadcnt 0x0
678 ; GFX12-NEXT:    ; return to shader part epilog
679 main_body:
680   %v = call i32 @llvm.amdgcn.image.atomic.add.2d.i32.i16(i32 %data, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)
681   %out = bitcast i32 %v to float
682   ret float %out
685 define amdgpu_ps float @atomic_add_i32_3d(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %r) {
686 ; GFX9-LABEL: atomic_add_i32_3d:
687 ; GFX9:       ; %bb.0: ; %main_body
688 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
689 ; GFX9-NEXT:    s_mov_b32 s0, s2
690 ; GFX9-NEXT:    s_mov_b32 s1, s3
691 ; GFX9-NEXT:    s_mov_b32 s2, s4
692 ; GFX9-NEXT:    s_mov_b32 s3, s5
693 ; GFX9-NEXT:    s_mov_b32 s4, s6
694 ; GFX9-NEXT:    s_mov_b32 s5, s7
695 ; GFX9-NEXT:    s_mov_b32 s6, s8
696 ; GFX9-NEXT:    s_mov_b32 s7, s9
697 ; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
698 ; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16
699 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
700 ; GFX9-NEXT:    ; return to shader part epilog
702 ; GFX10-LABEL: atomic_add_i32_3d:
703 ; GFX10:       ; %bb.0: ; %main_body
704 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
705 ; GFX10-NEXT:    s_mov_b32 s0, s2
706 ; GFX10-NEXT:    s_mov_b32 s1, s3
707 ; GFX10-NEXT:    s_mov_b32 s2, s4
708 ; GFX10-NEXT:    s_mov_b32 s3, s5
709 ; GFX10-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
710 ; GFX10-NEXT:    s_mov_b32 s4, s6
711 ; GFX10-NEXT:    s_mov_b32 s5, s7
712 ; GFX10-NEXT:    s_mov_b32 s6, s8
713 ; GFX10-NEXT:    s_mov_b32 s7, s9
714 ; GFX10-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm glc a16
715 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
716 ; GFX10-NEXT:    ; return to shader part epilog
718 ; GFX12-LABEL: atomic_add_i32_3d:
719 ; GFX12:       ; %bb.0: ; %main_body
720 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
721 ; GFX12-NEXT:    s_mov_b32 s0, s2
722 ; GFX12-NEXT:    s_mov_b32 s1, s3
723 ; GFX12-NEXT:    s_mov_b32 s2, s4
724 ; GFX12-NEXT:    s_mov_b32 s3, s5
725 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
726 ; GFX12-NEXT:    s_mov_b32 s4, s6
727 ; GFX12-NEXT:    s_mov_b32 s5, s7
728 ; GFX12-NEXT:    s_mov_b32 s6, s8
729 ; GFX12-NEXT:    s_mov_b32 s7, s9
730 ; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN a16
731 ; GFX12-NEXT:    s_wait_loadcnt 0x0
732 ; GFX12-NEXT:    ; return to shader part epilog
733 main_body:
734   %v = call i32 @llvm.amdgcn.image.atomic.add.3d.i32.i16(i32 %data, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)
735   %out = bitcast i32 %v to float
736   ret float %out
739 define amdgpu_ps float @atomic_add_i32_cube(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %face) {
740 ; GFX9-LABEL: atomic_add_i32_cube:
741 ; GFX9:       ; %bb.0: ; %main_body
742 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
743 ; GFX9-NEXT:    s_mov_b32 s0, s2
744 ; GFX9-NEXT:    s_mov_b32 s1, s3
745 ; GFX9-NEXT:    s_mov_b32 s2, s4
746 ; GFX9-NEXT:    s_mov_b32 s3, s5
747 ; GFX9-NEXT:    s_mov_b32 s4, s6
748 ; GFX9-NEXT:    s_mov_b32 s5, s7
749 ; GFX9-NEXT:    s_mov_b32 s6, s8
750 ; GFX9-NEXT:    s_mov_b32 s7, s9
751 ; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
752 ; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16 da
753 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
754 ; GFX9-NEXT:    ; return to shader part epilog
756 ; GFX10-LABEL: atomic_add_i32_cube:
757 ; GFX10:       ; %bb.0: ; %main_body
758 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
759 ; GFX10-NEXT:    s_mov_b32 s0, s2
760 ; GFX10-NEXT:    s_mov_b32 s1, s3
761 ; GFX10-NEXT:    s_mov_b32 s2, s4
762 ; GFX10-NEXT:    s_mov_b32 s3, s5
763 ; GFX10-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
764 ; GFX10-NEXT:    s_mov_b32 s4, s6
765 ; GFX10-NEXT:    s_mov_b32 s5, s7
766 ; GFX10-NEXT:    s_mov_b32 s6, s8
767 ; GFX10-NEXT:    s_mov_b32 s7, s9
768 ; GFX10-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE unorm glc a16
769 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
770 ; GFX10-NEXT:    ; return to shader part epilog
772 ; GFX12-LABEL: atomic_add_i32_cube:
773 ; GFX12:       ; %bb.0: ; %main_body
774 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
775 ; GFX12-NEXT:    s_mov_b32 s0, s2
776 ; GFX12-NEXT:    s_mov_b32 s1, s3
777 ; GFX12-NEXT:    s_mov_b32 s2, s4
778 ; GFX12-NEXT:    s_mov_b32 s3, s5
779 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
780 ; GFX12-NEXT:    s_mov_b32 s4, s6
781 ; GFX12-NEXT:    s_mov_b32 s5, s7
782 ; GFX12-NEXT:    s_mov_b32 s6, s8
783 ; GFX12-NEXT:    s_mov_b32 s7, s9
784 ; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN a16
785 ; GFX12-NEXT:    s_wait_loadcnt 0x0
786 ; GFX12-NEXT:    ; return to shader part epilog
787 main_body:
788   %v = call i32 @llvm.amdgcn.image.atomic.add.cube.i32.i16(i32 %data, i16 %s, i16 %t, i16 %face, <8 x i32> %rsrc, i32 0, i32 0)
789   %out = bitcast i32 %v to float
790   ret float %out
793 define amdgpu_ps float @atomic_add_i32_1darray(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %slice) {
794 ; GFX9-LABEL: atomic_add_i32_1darray:
795 ; GFX9:       ; %bb.0: ; %main_body
796 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
797 ; GFX9-NEXT:    s_mov_b32 s0, s2
798 ; GFX9-NEXT:    s_mov_b32 s1, s3
799 ; GFX9-NEXT:    s_mov_b32 s2, s4
800 ; GFX9-NEXT:    s_mov_b32 s3, s5
801 ; GFX9-NEXT:    s_mov_b32 s4, s6
802 ; GFX9-NEXT:    s_mov_b32 s5, s7
803 ; GFX9-NEXT:    s_mov_b32 s6, s8
804 ; GFX9-NEXT:    s_mov_b32 s7, s9
805 ; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
806 ; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc a16 da
807 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
808 ; GFX9-NEXT:    ; return to shader part epilog
810 ; GFX10-LABEL: atomic_add_i32_1darray:
811 ; GFX10:       ; %bb.0: ; %main_body
812 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
813 ; GFX10-NEXT:    s_mov_b32 s0, s2
814 ; GFX10-NEXT:    s_mov_b32 s1, s3
815 ; GFX10-NEXT:    s_mov_b32 s2, s4
816 ; GFX10-NEXT:    s_mov_b32 s3, s5
817 ; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
818 ; GFX10-NEXT:    s_mov_b32 s4, s6
819 ; GFX10-NEXT:    s_mov_b32 s5, s7
820 ; GFX10-NEXT:    s_mov_b32 s6, s8
821 ; GFX10-NEXT:    s_mov_b32 s7, s9
822 ; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc a16
823 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
824 ; GFX10-NEXT:    ; return to shader part epilog
826 ; GFX12-LABEL: atomic_add_i32_1darray:
827 ; GFX12:       ; %bb.0: ; %main_body
828 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
829 ; GFX12-NEXT:    s_mov_b32 s0, s2
830 ; GFX12-NEXT:    s_mov_b32 s1, s3
831 ; GFX12-NEXT:    s_mov_b32 s2, s4
832 ; GFX12-NEXT:    s_mov_b32 s3, s5
833 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
834 ; GFX12-NEXT:    s_mov_b32 s4, s6
835 ; GFX12-NEXT:    s_mov_b32 s5, s7
836 ; GFX12-NEXT:    s_mov_b32 s6, s8
837 ; GFX12-NEXT:    s_mov_b32 s7, s9
838 ; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN a16
839 ; GFX12-NEXT:    s_wait_loadcnt 0x0
840 ; GFX12-NEXT:    ; return to shader part epilog
841 main_body:
842   %v = call i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i16(i32 %data, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
843   %out = bitcast i32 %v to float
844   ret float %out
847 define amdgpu_ps float @atomic_add_i32_2darray(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %slice) {
848 ; GFX9-LABEL: atomic_add_i32_2darray:
849 ; GFX9:       ; %bb.0: ; %main_body
850 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
851 ; GFX9-NEXT:    s_mov_b32 s0, s2
852 ; GFX9-NEXT:    s_mov_b32 s1, s3
853 ; GFX9-NEXT:    s_mov_b32 s2, s4
854 ; GFX9-NEXT:    s_mov_b32 s3, s5
855 ; GFX9-NEXT:    s_mov_b32 s4, s6
856 ; GFX9-NEXT:    s_mov_b32 s5, s7
857 ; GFX9-NEXT:    s_mov_b32 s6, s8
858 ; GFX9-NEXT:    s_mov_b32 s7, s9
859 ; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
860 ; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16 da
861 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
862 ; GFX9-NEXT:    ; return to shader part epilog
864 ; GFX10-LABEL: atomic_add_i32_2darray:
865 ; GFX10:       ; %bb.0: ; %main_body
866 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
867 ; GFX10-NEXT:    s_mov_b32 s0, s2
868 ; GFX10-NEXT:    s_mov_b32 s1, s3
869 ; GFX10-NEXT:    s_mov_b32 s2, s4
870 ; GFX10-NEXT:    s_mov_b32 s3, s5
871 ; GFX10-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
872 ; GFX10-NEXT:    s_mov_b32 s4, s6
873 ; GFX10-NEXT:    s_mov_b32 s5, s7
874 ; GFX10-NEXT:    s_mov_b32 s6, s8
875 ; GFX10-NEXT:    s_mov_b32 s7, s9
876 ; GFX10-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc a16
877 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
878 ; GFX10-NEXT:    ; return to shader part epilog
880 ; GFX12-LABEL: atomic_add_i32_2darray:
881 ; GFX12:       ; %bb.0: ; %main_body
882 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
883 ; GFX12-NEXT:    s_mov_b32 s0, s2
884 ; GFX12-NEXT:    s_mov_b32 s1, s3
885 ; GFX12-NEXT:    s_mov_b32 s2, s4
886 ; GFX12-NEXT:    s_mov_b32 s3, s5
887 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
888 ; GFX12-NEXT:    s_mov_b32 s4, s6
889 ; GFX12-NEXT:    s_mov_b32 s5, s7
890 ; GFX12-NEXT:    s_mov_b32 s6, s8
891 ; GFX12-NEXT:    s_mov_b32 s7, s9
892 ; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN a16
893 ; GFX12-NEXT:    s_wait_loadcnt 0x0
894 ; GFX12-NEXT:    ; return to shader part epilog
895 main_body:
896   %v = call i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i16(i32 %data, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
897   %out = bitcast i32 %v to float
898   ret float %out
901 define amdgpu_ps float @atomic_add_i32_2dmsaa(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %fragid) {
902 ; GFX9-LABEL: atomic_add_i32_2dmsaa:
903 ; GFX9:       ; %bb.0: ; %main_body
904 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
905 ; GFX9-NEXT:    s_mov_b32 s0, s2
906 ; GFX9-NEXT:    s_mov_b32 s1, s3
907 ; GFX9-NEXT:    s_mov_b32 s2, s4
908 ; GFX9-NEXT:    s_mov_b32 s3, s5
909 ; GFX9-NEXT:    s_mov_b32 s4, s6
910 ; GFX9-NEXT:    s_mov_b32 s5, s7
911 ; GFX9-NEXT:    s_mov_b32 s6, s8
912 ; GFX9-NEXT:    s_mov_b32 s7, s9
913 ; GFX9-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
914 ; GFX9-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 unorm glc a16
915 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
916 ; GFX9-NEXT:    ; return to shader part epilog
918 ; GFX10-LABEL: atomic_add_i32_2dmsaa:
919 ; GFX10:       ; %bb.0: ; %main_body
920 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
921 ; GFX10-NEXT:    s_mov_b32 s0, s2
922 ; GFX10-NEXT:    s_mov_b32 s1, s3
923 ; GFX10-NEXT:    s_mov_b32 s2, s4
924 ; GFX10-NEXT:    s_mov_b32 s3, s5
925 ; GFX10-NEXT:    v_lshl_or_b32 v2, v2, 16, v1
926 ; GFX10-NEXT:    s_mov_b32 s4, s6
927 ; GFX10-NEXT:    s_mov_b32 s5, s7
928 ; GFX10-NEXT:    s_mov_b32 s6, s8
929 ; GFX10-NEXT:    s_mov_b32 s7, s9
930 ; GFX10-NEXT:    image_atomic_add v0, v[2:3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA unorm glc a16
931 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
932 ; GFX10-NEXT:    ; return to shader part epilog
934 ; GFX12-LABEL: atomic_add_i32_2dmsaa:
935 ; GFX12:       ; %bb.0: ; %main_body
936 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
937 ; GFX12-NEXT:    s_mov_b32 s0, s2
938 ; GFX12-NEXT:    s_mov_b32 s1, s3
939 ; GFX12-NEXT:    s_mov_b32 s2, s4
940 ; GFX12-NEXT:    s_mov_b32 s3, s5
941 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
942 ; GFX12-NEXT:    s_mov_b32 s4, s6
943 ; GFX12-NEXT:    s_mov_b32 s5, s7
944 ; GFX12-NEXT:    s_mov_b32 s6, s8
945 ; GFX12-NEXT:    s_mov_b32 s7, s9
946 ; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v3], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN a16
947 ; GFX12-NEXT:    s_wait_loadcnt 0x0
948 ; GFX12-NEXT:    ; return to shader part epilog
949 main_body:
950   %v = call i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i16(i32 %data, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
951   %out = bitcast i32 %v to float
952   ret float %out
955 define amdgpu_ps float @atomic_add_i32_2darraymsaa(<8 x i32> inreg %rsrc, i32 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid) {
956 ; GFX9-LABEL: atomic_add_i32_2darraymsaa:
957 ; GFX9:       ; %bb.0: ; %main_body
958 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
959 ; GFX9-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
960 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v3
961 ; GFX9-NEXT:    s_mov_b32 s0, s2
962 ; GFX9-NEXT:    s_mov_b32 s1, s3
963 ; GFX9-NEXT:    s_mov_b32 s2, s4
964 ; GFX9-NEXT:    s_mov_b32 s3, s5
965 ; GFX9-NEXT:    s_mov_b32 s4, s6
966 ; GFX9-NEXT:    s_mov_b32 s5, s7
967 ; GFX9-NEXT:    s_mov_b32 s6, s8
968 ; GFX9-NEXT:    s_mov_b32 s7, s9
969 ; GFX9-NEXT:    v_lshl_or_b32 v2, v4, 16, v2
970 ; GFX9-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 unorm glc a16 da
971 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
972 ; GFX9-NEXT:    ; return to shader part epilog
974 ; GFX10-LABEL: atomic_add_i32_2darraymsaa:
975 ; GFX10:       ; %bb.0: ; %main_body
976 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
977 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff, v3
978 ; GFX10-NEXT:    s_mov_b32 s0, s2
979 ; GFX10-NEXT:    s_mov_b32 s1, s3
980 ; GFX10-NEXT:    s_mov_b32 s2, s4
981 ; GFX10-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
982 ; GFX10-NEXT:    v_lshl_or_b32 v2, v4, 16, v3
983 ; GFX10-NEXT:    s_mov_b32 s3, s5
984 ; GFX10-NEXT:    s_mov_b32 s4, s6
985 ; GFX10-NEXT:    s_mov_b32 s5, s7
986 ; GFX10-NEXT:    s_mov_b32 s6, s8
987 ; GFX10-NEXT:    s_mov_b32 s7, s9
988 ; GFX10-NEXT:    image_atomic_add v0, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc a16
989 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
990 ; GFX10-NEXT:    ; return to shader part epilog
992 ; GFX12-LABEL: atomic_add_i32_2darraymsaa:
993 ; GFX12:       ; %bb.0: ; %main_body
994 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
995 ; GFX12-NEXT:    v_and_b32_e32 v3, 0xffff, v3
996 ; GFX12-NEXT:    s_mov_b32 s0, s2
997 ; GFX12-NEXT:    s_mov_b32 s1, s3
998 ; GFX12-NEXT:    s_mov_b32 s2, s4
999 ; GFX12-NEXT:    v_lshl_or_b32 v1, v2, 16, v1
1000 ; GFX12-NEXT:    v_lshl_or_b32 v2, v4, 16, v3
1001 ; GFX12-NEXT:    s_mov_b32 s3, s5
1002 ; GFX12-NEXT:    s_mov_b32 s4, s6
1003 ; GFX12-NEXT:    s_mov_b32 s5, s7
1004 ; GFX12-NEXT:    s_mov_b32 s6, s8
1005 ; GFX12-NEXT:    s_mov_b32 s7, s9
1006 ; GFX12-NEXT:    image_atomic_add_uint v0, [v1, v2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN a16
1007 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1008 ; GFX12-NEXT:    ; return to shader part epilog
1009 main_body:
1010   %v = call i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i16(i32 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
1011   %out = bitcast i32 %v to float
1012   ret float %out
1015 define amdgpu_ps float @atomic_add_i32_1d_slc(<8 x i32> inreg %rsrc, i32 %data, i16 %s) {
1016 ; GFX9-LABEL: atomic_add_i32_1d_slc:
1017 ; GFX9:       ; %bb.0: ; %main_body
1018 ; GFX9-NEXT:    s_mov_b32 s0, s2
1019 ; GFX9-NEXT:    s_mov_b32 s1, s3
1020 ; GFX9-NEXT:    s_mov_b32 s2, s4
1021 ; GFX9-NEXT:    s_mov_b32 s3, s5
1022 ; GFX9-NEXT:    s_mov_b32 s4, s6
1023 ; GFX9-NEXT:    s_mov_b32 s5, s7
1024 ; GFX9-NEXT:    s_mov_b32 s6, s8
1025 ; GFX9-NEXT:    s_mov_b32 s7, s9
1026 ; GFX9-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 unorm glc slc a16
1027 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1028 ; GFX9-NEXT:    ; return to shader part epilog
1030 ; GFX10-LABEL: atomic_add_i32_1d_slc:
1031 ; GFX10:       ; %bb.0: ; %main_body
1032 ; GFX10-NEXT:    s_mov_b32 s0, s2
1033 ; GFX10-NEXT:    s_mov_b32 s1, s3
1034 ; GFX10-NEXT:    s_mov_b32 s2, s4
1035 ; GFX10-NEXT:    s_mov_b32 s3, s5
1036 ; GFX10-NEXT:    s_mov_b32 s4, s6
1037 ; GFX10-NEXT:    s_mov_b32 s5, s7
1038 ; GFX10-NEXT:    s_mov_b32 s6, s8
1039 ; GFX10-NEXT:    s_mov_b32 s7, s9
1040 ; GFX10-NEXT:    image_atomic_add v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm glc slc a16
1041 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1042 ; GFX10-NEXT:    ; return to shader part epilog
1044 ; GFX12-LABEL: atomic_add_i32_1d_slc:
1045 ; GFX12:       ; %bb.0: ; %main_body
1046 ; GFX12-NEXT:    s_mov_b32 s0, s2
1047 ; GFX12-NEXT:    s_mov_b32 s1, s3
1048 ; GFX12-NEXT:    s_mov_b32 s2, s4
1049 ; GFX12-NEXT:    s_mov_b32 s3, s5
1050 ; GFX12-NEXT:    s_mov_b32 s4, s6
1051 ; GFX12-NEXT:    s_mov_b32 s5, s7
1052 ; GFX12-NEXT:    s_mov_b32 s6, s8
1053 ; GFX12-NEXT:    s_mov_b32 s7, s9
1054 ; GFX12-NEXT:    image_atomic_add_uint v0, v1, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN a16
1055 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1056 ; GFX12-NEXT:    ; return to shader part epilog
1057 main_body:
1058   %v = call i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)
1059   %out = bitcast i32 %v to float
1060   ret float %out
1063 define amdgpu_ps <2 x float> @atomic_swap_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1064 ; GFX9-LABEL: atomic_swap_i64_1d:
1065 ; GFX9:       ; %bb.0: ; %main_body
1066 ; GFX9-NEXT:    s_mov_b32 s0, s2
1067 ; GFX9-NEXT:    s_mov_b32 s1, s3
1068 ; GFX9-NEXT:    s_mov_b32 s2, s4
1069 ; GFX9-NEXT:    s_mov_b32 s3, s5
1070 ; GFX9-NEXT:    s_mov_b32 s4, s6
1071 ; GFX9-NEXT:    s_mov_b32 s5, s7
1072 ; GFX9-NEXT:    s_mov_b32 s6, s8
1073 ; GFX9-NEXT:    s_mov_b32 s7, s9
1074 ; GFX9-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1075 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1076 ; GFX9-NEXT:    ; return to shader part epilog
1078 ; GFX10-LABEL: atomic_swap_i64_1d:
1079 ; GFX10:       ; %bb.0: ; %main_body
1080 ; GFX10-NEXT:    s_mov_b32 s0, s2
1081 ; GFX10-NEXT:    s_mov_b32 s1, s3
1082 ; GFX10-NEXT:    s_mov_b32 s2, s4
1083 ; GFX10-NEXT:    s_mov_b32 s3, s5
1084 ; GFX10-NEXT:    s_mov_b32 s4, s6
1085 ; GFX10-NEXT:    s_mov_b32 s5, s7
1086 ; GFX10-NEXT:    s_mov_b32 s6, s8
1087 ; GFX10-NEXT:    s_mov_b32 s7, s9
1088 ; GFX10-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1089 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1090 ; GFX10-NEXT:    ; return to shader part epilog
1092 ; GFX12-LABEL: atomic_swap_i64_1d:
1093 ; GFX12:       ; %bb.0: ; %main_body
1094 ; GFX12-NEXT:    s_mov_b32 s0, s2
1095 ; GFX12-NEXT:    s_mov_b32 s1, s3
1096 ; GFX12-NEXT:    s_mov_b32 s2, s4
1097 ; GFX12-NEXT:    s_mov_b32 s3, s5
1098 ; GFX12-NEXT:    s_mov_b32 s4, s6
1099 ; GFX12-NEXT:    s_mov_b32 s5, s7
1100 ; GFX12-NEXT:    s_mov_b32 s6, s8
1101 ; GFX12-NEXT:    s_mov_b32 s7, s9
1102 ; GFX12-NEXT:    image_atomic_swap v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1103 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1104 ; GFX12-NEXT:    ; return to shader part epilog
1105 main_body:
1106   %v = call i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1107   %out = bitcast i64 %v to <2 x float>
1108   ret <2 x float> %out
1111 define amdgpu_ps <2 x float> @atomic_add_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1112 ; GFX9-LABEL: atomic_add_i64_1d:
1113 ; GFX9:       ; %bb.0: ; %main_body
1114 ; GFX9-NEXT:    s_mov_b32 s0, s2
1115 ; GFX9-NEXT:    s_mov_b32 s1, s3
1116 ; GFX9-NEXT:    s_mov_b32 s2, s4
1117 ; GFX9-NEXT:    s_mov_b32 s3, s5
1118 ; GFX9-NEXT:    s_mov_b32 s4, s6
1119 ; GFX9-NEXT:    s_mov_b32 s5, s7
1120 ; GFX9-NEXT:    s_mov_b32 s6, s8
1121 ; GFX9-NEXT:    s_mov_b32 s7, s9
1122 ; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1123 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1124 ; GFX9-NEXT:    ; return to shader part epilog
1126 ; GFX10-LABEL: atomic_add_i64_1d:
1127 ; GFX10:       ; %bb.0: ; %main_body
1128 ; GFX10-NEXT:    s_mov_b32 s0, s2
1129 ; GFX10-NEXT:    s_mov_b32 s1, s3
1130 ; GFX10-NEXT:    s_mov_b32 s2, s4
1131 ; GFX10-NEXT:    s_mov_b32 s3, s5
1132 ; GFX10-NEXT:    s_mov_b32 s4, s6
1133 ; GFX10-NEXT:    s_mov_b32 s5, s7
1134 ; GFX10-NEXT:    s_mov_b32 s6, s8
1135 ; GFX10-NEXT:    s_mov_b32 s7, s9
1136 ; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1137 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1138 ; GFX10-NEXT:    ; return to shader part epilog
1140 ; GFX12-LABEL: atomic_add_i64_1d:
1141 ; GFX12:       ; %bb.0: ; %main_body
1142 ; GFX12-NEXT:    s_mov_b32 s0, s2
1143 ; GFX12-NEXT:    s_mov_b32 s1, s3
1144 ; GFX12-NEXT:    s_mov_b32 s2, s4
1145 ; GFX12-NEXT:    s_mov_b32 s3, s5
1146 ; GFX12-NEXT:    s_mov_b32 s4, s6
1147 ; GFX12-NEXT:    s_mov_b32 s5, s7
1148 ; GFX12-NEXT:    s_mov_b32 s6, s8
1149 ; GFX12-NEXT:    s_mov_b32 s7, s9
1150 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1151 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1152 ; GFX12-NEXT:    ; return to shader part epilog
1153 main_body:
1154   %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1155   %out = bitcast i64 %v to <2 x float>
1156   ret <2 x float> %out
1159 define amdgpu_ps <2 x float> @atomic_sub_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1160 ; GFX9-LABEL: atomic_sub_i64_1d:
1161 ; GFX9:       ; %bb.0: ; %main_body
1162 ; GFX9-NEXT:    s_mov_b32 s0, s2
1163 ; GFX9-NEXT:    s_mov_b32 s1, s3
1164 ; GFX9-NEXT:    s_mov_b32 s2, s4
1165 ; GFX9-NEXT:    s_mov_b32 s3, s5
1166 ; GFX9-NEXT:    s_mov_b32 s4, s6
1167 ; GFX9-NEXT:    s_mov_b32 s5, s7
1168 ; GFX9-NEXT:    s_mov_b32 s6, s8
1169 ; GFX9-NEXT:    s_mov_b32 s7, s9
1170 ; GFX9-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1171 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1172 ; GFX9-NEXT:    ; return to shader part epilog
1174 ; GFX10-LABEL: atomic_sub_i64_1d:
1175 ; GFX10:       ; %bb.0: ; %main_body
1176 ; GFX10-NEXT:    s_mov_b32 s0, s2
1177 ; GFX10-NEXT:    s_mov_b32 s1, s3
1178 ; GFX10-NEXT:    s_mov_b32 s2, s4
1179 ; GFX10-NEXT:    s_mov_b32 s3, s5
1180 ; GFX10-NEXT:    s_mov_b32 s4, s6
1181 ; GFX10-NEXT:    s_mov_b32 s5, s7
1182 ; GFX10-NEXT:    s_mov_b32 s6, s8
1183 ; GFX10-NEXT:    s_mov_b32 s7, s9
1184 ; GFX10-NEXT:    image_atomic_sub v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1185 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1186 ; GFX10-NEXT:    ; return to shader part epilog
1188 ; GFX12-LABEL: atomic_sub_i64_1d:
1189 ; GFX12:       ; %bb.0: ; %main_body
1190 ; GFX12-NEXT:    s_mov_b32 s0, s2
1191 ; GFX12-NEXT:    s_mov_b32 s1, s3
1192 ; GFX12-NEXT:    s_mov_b32 s2, s4
1193 ; GFX12-NEXT:    s_mov_b32 s3, s5
1194 ; GFX12-NEXT:    s_mov_b32 s4, s6
1195 ; GFX12-NEXT:    s_mov_b32 s5, s7
1196 ; GFX12-NEXT:    s_mov_b32 s6, s8
1197 ; GFX12-NEXT:    s_mov_b32 s7, s9
1198 ; GFX12-NEXT:    image_atomic_sub_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1199 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1200 ; GFX12-NEXT:    ; return to shader part epilog
1201 main_body:
1202   %v = call i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1203   %out = bitcast i64 %v to <2 x float>
1204   ret <2 x float> %out
1207 define amdgpu_ps <2 x float> @atomic_smin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1208 ; GFX9-LABEL: atomic_smin_i64_1d:
1209 ; GFX9:       ; %bb.0: ; %main_body
1210 ; GFX9-NEXT:    s_mov_b32 s0, s2
1211 ; GFX9-NEXT:    s_mov_b32 s1, s3
1212 ; GFX9-NEXT:    s_mov_b32 s2, s4
1213 ; GFX9-NEXT:    s_mov_b32 s3, s5
1214 ; GFX9-NEXT:    s_mov_b32 s4, s6
1215 ; GFX9-NEXT:    s_mov_b32 s5, s7
1216 ; GFX9-NEXT:    s_mov_b32 s6, s8
1217 ; GFX9-NEXT:    s_mov_b32 s7, s9
1218 ; GFX9-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1219 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1220 ; GFX9-NEXT:    ; return to shader part epilog
1222 ; GFX10-LABEL: atomic_smin_i64_1d:
1223 ; GFX10:       ; %bb.0: ; %main_body
1224 ; GFX10-NEXT:    s_mov_b32 s0, s2
1225 ; GFX10-NEXT:    s_mov_b32 s1, s3
1226 ; GFX10-NEXT:    s_mov_b32 s2, s4
1227 ; GFX10-NEXT:    s_mov_b32 s3, s5
1228 ; GFX10-NEXT:    s_mov_b32 s4, s6
1229 ; GFX10-NEXT:    s_mov_b32 s5, s7
1230 ; GFX10-NEXT:    s_mov_b32 s6, s8
1231 ; GFX10-NEXT:    s_mov_b32 s7, s9
1232 ; GFX10-NEXT:    image_atomic_smin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1233 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1234 ; GFX10-NEXT:    ; return to shader part epilog
1236 ; GFX12-LABEL: atomic_smin_i64_1d:
1237 ; GFX12:       ; %bb.0: ; %main_body
1238 ; GFX12-NEXT:    s_mov_b32 s0, s2
1239 ; GFX12-NEXT:    s_mov_b32 s1, s3
1240 ; GFX12-NEXT:    s_mov_b32 s2, s4
1241 ; GFX12-NEXT:    s_mov_b32 s3, s5
1242 ; GFX12-NEXT:    s_mov_b32 s4, s6
1243 ; GFX12-NEXT:    s_mov_b32 s5, s7
1244 ; GFX12-NEXT:    s_mov_b32 s6, s8
1245 ; GFX12-NEXT:    s_mov_b32 s7, s9
1246 ; GFX12-NEXT:    image_atomic_min_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1247 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1248 ; GFX12-NEXT:    ; return to shader part epilog
1249 main_body:
1250   %v = call i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1251   %out = bitcast i64 %v to <2 x float>
1252   ret <2 x float> %out
1255 define amdgpu_ps <2 x float> @atomic_umin_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1256 ; GFX9-LABEL: atomic_umin_i64_1d:
1257 ; GFX9:       ; %bb.0: ; %main_body
1258 ; GFX9-NEXT:    s_mov_b32 s0, s2
1259 ; GFX9-NEXT:    s_mov_b32 s1, s3
1260 ; GFX9-NEXT:    s_mov_b32 s2, s4
1261 ; GFX9-NEXT:    s_mov_b32 s3, s5
1262 ; GFX9-NEXT:    s_mov_b32 s4, s6
1263 ; GFX9-NEXT:    s_mov_b32 s5, s7
1264 ; GFX9-NEXT:    s_mov_b32 s6, s8
1265 ; GFX9-NEXT:    s_mov_b32 s7, s9
1266 ; GFX9-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1267 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1268 ; GFX9-NEXT:    ; return to shader part epilog
1270 ; GFX10-LABEL: atomic_umin_i64_1d:
1271 ; GFX10:       ; %bb.0: ; %main_body
1272 ; GFX10-NEXT:    s_mov_b32 s0, s2
1273 ; GFX10-NEXT:    s_mov_b32 s1, s3
1274 ; GFX10-NEXT:    s_mov_b32 s2, s4
1275 ; GFX10-NEXT:    s_mov_b32 s3, s5
1276 ; GFX10-NEXT:    s_mov_b32 s4, s6
1277 ; GFX10-NEXT:    s_mov_b32 s5, s7
1278 ; GFX10-NEXT:    s_mov_b32 s6, s8
1279 ; GFX10-NEXT:    s_mov_b32 s7, s9
1280 ; GFX10-NEXT:    image_atomic_umin v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1281 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1282 ; GFX10-NEXT:    ; return to shader part epilog
1284 ; GFX12-LABEL: atomic_umin_i64_1d:
1285 ; GFX12:       ; %bb.0: ; %main_body
1286 ; GFX12-NEXT:    s_mov_b32 s0, s2
1287 ; GFX12-NEXT:    s_mov_b32 s1, s3
1288 ; GFX12-NEXT:    s_mov_b32 s2, s4
1289 ; GFX12-NEXT:    s_mov_b32 s3, s5
1290 ; GFX12-NEXT:    s_mov_b32 s4, s6
1291 ; GFX12-NEXT:    s_mov_b32 s5, s7
1292 ; GFX12-NEXT:    s_mov_b32 s6, s8
1293 ; GFX12-NEXT:    s_mov_b32 s7, s9
1294 ; GFX12-NEXT:    image_atomic_min_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1295 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1296 ; GFX12-NEXT:    ; return to shader part epilog
1297 main_body:
1298   %v = call i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1299   %out = bitcast i64 %v to <2 x float>
1300   ret <2 x float> %out
1303 define amdgpu_ps <2 x float> @atomic_smax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1304 ; GFX9-LABEL: atomic_smax_i64_1d:
1305 ; GFX9:       ; %bb.0: ; %main_body
1306 ; GFX9-NEXT:    s_mov_b32 s0, s2
1307 ; GFX9-NEXT:    s_mov_b32 s1, s3
1308 ; GFX9-NEXT:    s_mov_b32 s2, s4
1309 ; GFX9-NEXT:    s_mov_b32 s3, s5
1310 ; GFX9-NEXT:    s_mov_b32 s4, s6
1311 ; GFX9-NEXT:    s_mov_b32 s5, s7
1312 ; GFX9-NEXT:    s_mov_b32 s6, s8
1313 ; GFX9-NEXT:    s_mov_b32 s7, s9
1314 ; GFX9-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1315 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1316 ; GFX9-NEXT:    ; return to shader part epilog
1318 ; GFX10-LABEL: atomic_smax_i64_1d:
1319 ; GFX10:       ; %bb.0: ; %main_body
1320 ; GFX10-NEXT:    s_mov_b32 s0, s2
1321 ; GFX10-NEXT:    s_mov_b32 s1, s3
1322 ; GFX10-NEXT:    s_mov_b32 s2, s4
1323 ; GFX10-NEXT:    s_mov_b32 s3, s5
1324 ; GFX10-NEXT:    s_mov_b32 s4, s6
1325 ; GFX10-NEXT:    s_mov_b32 s5, s7
1326 ; GFX10-NEXT:    s_mov_b32 s6, s8
1327 ; GFX10-NEXT:    s_mov_b32 s7, s9
1328 ; GFX10-NEXT:    image_atomic_smax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1329 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1330 ; GFX10-NEXT:    ; return to shader part epilog
1332 ; GFX12-LABEL: atomic_smax_i64_1d:
1333 ; GFX12:       ; %bb.0: ; %main_body
1334 ; GFX12-NEXT:    s_mov_b32 s0, s2
1335 ; GFX12-NEXT:    s_mov_b32 s1, s3
1336 ; GFX12-NEXT:    s_mov_b32 s2, s4
1337 ; GFX12-NEXT:    s_mov_b32 s3, s5
1338 ; GFX12-NEXT:    s_mov_b32 s4, s6
1339 ; GFX12-NEXT:    s_mov_b32 s5, s7
1340 ; GFX12-NEXT:    s_mov_b32 s6, s8
1341 ; GFX12-NEXT:    s_mov_b32 s7, s9
1342 ; GFX12-NEXT:    image_atomic_max_int v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1343 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1344 ; GFX12-NEXT:    ; return to shader part epilog
1345 main_body:
1346   %v = call i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1347   %out = bitcast i64 %v to <2 x float>
1348   ret <2 x float> %out
1351 define amdgpu_ps <2 x float> @atomic_umax_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1352 ; GFX9-LABEL: atomic_umax_i64_1d:
1353 ; GFX9:       ; %bb.0: ; %main_body
1354 ; GFX9-NEXT:    s_mov_b32 s0, s2
1355 ; GFX9-NEXT:    s_mov_b32 s1, s3
1356 ; GFX9-NEXT:    s_mov_b32 s2, s4
1357 ; GFX9-NEXT:    s_mov_b32 s3, s5
1358 ; GFX9-NEXT:    s_mov_b32 s4, s6
1359 ; GFX9-NEXT:    s_mov_b32 s5, s7
1360 ; GFX9-NEXT:    s_mov_b32 s6, s8
1361 ; GFX9-NEXT:    s_mov_b32 s7, s9
1362 ; GFX9-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1363 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1364 ; GFX9-NEXT:    ; return to shader part epilog
1366 ; GFX10-LABEL: atomic_umax_i64_1d:
1367 ; GFX10:       ; %bb.0: ; %main_body
1368 ; GFX10-NEXT:    s_mov_b32 s0, s2
1369 ; GFX10-NEXT:    s_mov_b32 s1, s3
1370 ; GFX10-NEXT:    s_mov_b32 s2, s4
1371 ; GFX10-NEXT:    s_mov_b32 s3, s5
1372 ; GFX10-NEXT:    s_mov_b32 s4, s6
1373 ; GFX10-NEXT:    s_mov_b32 s5, s7
1374 ; GFX10-NEXT:    s_mov_b32 s6, s8
1375 ; GFX10-NEXT:    s_mov_b32 s7, s9
1376 ; GFX10-NEXT:    image_atomic_umax v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1377 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1378 ; GFX10-NEXT:    ; return to shader part epilog
1380 ; GFX12-LABEL: atomic_umax_i64_1d:
1381 ; GFX12:       ; %bb.0: ; %main_body
1382 ; GFX12-NEXT:    s_mov_b32 s0, s2
1383 ; GFX12-NEXT:    s_mov_b32 s1, s3
1384 ; GFX12-NEXT:    s_mov_b32 s2, s4
1385 ; GFX12-NEXT:    s_mov_b32 s3, s5
1386 ; GFX12-NEXT:    s_mov_b32 s4, s6
1387 ; GFX12-NEXT:    s_mov_b32 s5, s7
1388 ; GFX12-NEXT:    s_mov_b32 s6, s8
1389 ; GFX12-NEXT:    s_mov_b32 s7, s9
1390 ; GFX12-NEXT:    image_atomic_max_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1391 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1392 ; GFX12-NEXT:    ; return to shader part epilog
1393 main_body:
1394   %v = call i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1395   %out = bitcast i64 %v to <2 x float>
1396   ret <2 x float> %out
1399 define amdgpu_ps <2 x float> @atomic_and_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1400 ; GFX9-LABEL: atomic_and_i64_1d:
1401 ; GFX9:       ; %bb.0: ; %main_body
1402 ; GFX9-NEXT:    s_mov_b32 s0, s2
1403 ; GFX9-NEXT:    s_mov_b32 s1, s3
1404 ; GFX9-NEXT:    s_mov_b32 s2, s4
1405 ; GFX9-NEXT:    s_mov_b32 s3, s5
1406 ; GFX9-NEXT:    s_mov_b32 s4, s6
1407 ; GFX9-NEXT:    s_mov_b32 s5, s7
1408 ; GFX9-NEXT:    s_mov_b32 s6, s8
1409 ; GFX9-NEXT:    s_mov_b32 s7, s9
1410 ; GFX9-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1411 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1412 ; GFX9-NEXT:    ; return to shader part epilog
1414 ; GFX10-LABEL: atomic_and_i64_1d:
1415 ; GFX10:       ; %bb.0: ; %main_body
1416 ; GFX10-NEXT:    s_mov_b32 s0, s2
1417 ; GFX10-NEXT:    s_mov_b32 s1, s3
1418 ; GFX10-NEXT:    s_mov_b32 s2, s4
1419 ; GFX10-NEXT:    s_mov_b32 s3, s5
1420 ; GFX10-NEXT:    s_mov_b32 s4, s6
1421 ; GFX10-NEXT:    s_mov_b32 s5, s7
1422 ; GFX10-NEXT:    s_mov_b32 s6, s8
1423 ; GFX10-NEXT:    s_mov_b32 s7, s9
1424 ; GFX10-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1425 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1426 ; GFX10-NEXT:    ; return to shader part epilog
1428 ; GFX12-LABEL: atomic_and_i64_1d:
1429 ; GFX12:       ; %bb.0: ; %main_body
1430 ; GFX12-NEXT:    s_mov_b32 s0, s2
1431 ; GFX12-NEXT:    s_mov_b32 s1, s3
1432 ; GFX12-NEXT:    s_mov_b32 s2, s4
1433 ; GFX12-NEXT:    s_mov_b32 s3, s5
1434 ; GFX12-NEXT:    s_mov_b32 s4, s6
1435 ; GFX12-NEXT:    s_mov_b32 s5, s7
1436 ; GFX12-NEXT:    s_mov_b32 s6, s8
1437 ; GFX12-NEXT:    s_mov_b32 s7, s9
1438 ; GFX12-NEXT:    image_atomic_and v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1439 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1440 ; GFX12-NEXT:    ; return to shader part epilog
1441 main_body:
1442   %v = call i64 @llvm.amdgcn.image.atomic.and.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1443   %out = bitcast i64 %v to <2 x float>
1444   ret <2 x float> %out
1447 define amdgpu_ps <2 x float> @atomic_or_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1448 ; GFX9-LABEL: atomic_or_i64_1d:
1449 ; GFX9:       ; %bb.0: ; %main_body
1450 ; GFX9-NEXT:    s_mov_b32 s0, s2
1451 ; GFX9-NEXT:    s_mov_b32 s1, s3
1452 ; GFX9-NEXT:    s_mov_b32 s2, s4
1453 ; GFX9-NEXT:    s_mov_b32 s3, s5
1454 ; GFX9-NEXT:    s_mov_b32 s4, s6
1455 ; GFX9-NEXT:    s_mov_b32 s5, s7
1456 ; GFX9-NEXT:    s_mov_b32 s6, s8
1457 ; GFX9-NEXT:    s_mov_b32 s7, s9
1458 ; GFX9-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1459 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1460 ; GFX9-NEXT:    ; return to shader part epilog
1462 ; GFX10-LABEL: atomic_or_i64_1d:
1463 ; GFX10:       ; %bb.0: ; %main_body
1464 ; GFX10-NEXT:    s_mov_b32 s0, s2
1465 ; GFX10-NEXT:    s_mov_b32 s1, s3
1466 ; GFX10-NEXT:    s_mov_b32 s2, s4
1467 ; GFX10-NEXT:    s_mov_b32 s3, s5
1468 ; GFX10-NEXT:    s_mov_b32 s4, s6
1469 ; GFX10-NEXT:    s_mov_b32 s5, s7
1470 ; GFX10-NEXT:    s_mov_b32 s6, s8
1471 ; GFX10-NEXT:    s_mov_b32 s7, s9
1472 ; GFX10-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1473 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1474 ; GFX10-NEXT:    ; return to shader part epilog
1476 ; GFX12-LABEL: atomic_or_i64_1d:
1477 ; GFX12:       ; %bb.0: ; %main_body
1478 ; GFX12-NEXT:    s_mov_b32 s0, s2
1479 ; GFX12-NEXT:    s_mov_b32 s1, s3
1480 ; GFX12-NEXT:    s_mov_b32 s2, s4
1481 ; GFX12-NEXT:    s_mov_b32 s3, s5
1482 ; GFX12-NEXT:    s_mov_b32 s4, s6
1483 ; GFX12-NEXT:    s_mov_b32 s5, s7
1484 ; GFX12-NEXT:    s_mov_b32 s6, s8
1485 ; GFX12-NEXT:    s_mov_b32 s7, s9
1486 ; GFX12-NEXT:    image_atomic_or v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1487 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1488 ; GFX12-NEXT:    ; return to shader part epilog
1489 main_body:
1490   %v = call i64 @llvm.amdgcn.image.atomic.or.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1491   %out = bitcast i64 %v to <2 x float>
1492   ret <2 x float> %out
1495 define amdgpu_ps <2 x float> @atomic_xor_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1496 ; GFX9-LABEL: atomic_xor_i64_1d:
1497 ; GFX9:       ; %bb.0: ; %main_body
1498 ; GFX9-NEXT:    s_mov_b32 s0, s2
1499 ; GFX9-NEXT:    s_mov_b32 s1, s3
1500 ; GFX9-NEXT:    s_mov_b32 s2, s4
1501 ; GFX9-NEXT:    s_mov_b32 s3, s5
1502 ; GFX9-NEXT:    s_mov_b32 s4, s6
1503 ; GFX9-NEXT:    s_mov_b32 s5, s7
1504 ; GFX9-NEXT:    s_mov_b32 s6, s8
1505 ; GFX9-NEXT:    s_mov_b32 s7, s9
1506 ; GFX9-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1507 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1508 ; GFX9-NEXT:    ; return to shader part epilog
1510 ; GFX10-LABEL: atomic_xor_i64_1d:
1511 ; GFX10:       ; %bb.0: ; %main_body
1512 ; GFX10-NEXT:    s_mov_b32 s0, s2
1513 ; GFX10-NEXT:    s_mov_b32 s1, s3
1514 ; GFX10-NEXT:    s_mov_b32 s2, s4
1515 ; GFX10-NEXT:    s_mov_b32 s3, s5
1516 ; GFX10-NEXT:    s_mov_b32 s4, s6
1517 ; GFX10-NEXT:    s_mov_b32 s5, s7
1518 ; GFX10-NEXT:    s_mov_b32 s6, s8
1519 ; GFX10-NEXT:    s_mov_b32 s7, s9
1520 ; GFX10-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1521 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1522 ; GFX10-NEXT:    ; return to shader part epilog
1524 ; GFX12-LABEL: atomic_xor_i64_1d:
1525 ; GFX12:       ; %bb.0: ; %main_body
1526 ; GFX12-NEXT:    s_mov_b32 s0, s2
1527 ; GFX12-NEXT:    s_mov_b32 s1, s3
1528 ; GFX12-NEXT:    s_mov_b32 s2, s4
1529 ; GFX12-NEXT:    s_mov_b32 s3, s5
1530 ; GFX12-NEXT:    s_mov_b32 s4, s6
1531 ; GFX12-NEXT:    s_mov_b32 s5, s7
1532 ; GFX12-NEXT:    s_mov_b32 s6, s8
1533 ; GFX12-NEXT:    s_mov_b32 s7, s9
1534 ; GFX12-NEXT:    image_atomic_xor v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1535 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1536 ; GFX12-NEXT:    ; return to shader part epilog
1537 main_body:
1538   %v = call i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1539   %out = bitcast i64 %v to <2 x float>
1540   ret <2 x float> %out
1543 define amdgpu_ps <2 x float> @atomic_inc_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1544 ; GFX9-LABEL: atomic_inc_i64_1d:
1545 ; GFX9:       ; %bb.0: ; %main_body
1546 ; GFX9-NEXT:    s_mov_b32 s0, s2
1547 ; GFX9-NEXT:    s_mov_b32 s1, s3
1548 ; GFX9-NEXT:    s_mov_b32 s2, s4
1549 ; GFX9-NEXT:    s_mov_b32 s3, s5
1550 ; GFX9-NEXT:    s_mov_b32 s4, s6
1551 ; GFX9-NEXT:    s_mov_b32 s5, s7
1552 ; GFX9-NEXT:    s_mov_b32 s6, s8
1553 ; GFX9-NEXT:    s_mov_b32 s7, s9
1554 ; GFX9-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1555 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1556 ; GFX9-NEXT:    ; return to shader part epilog
1558 ; GFX10-LABEL: atomic_inc_i64_1d:
1559 ; GFX10:       ; %bb.0: ; %main_body
1560 ; GFX10-NEXT:    s_mov_b32 s0, s2
1561 ; GFX10-NEXT:    s_mov_b32 s1, s3
1562 ; GFX10-NEXT:    s_mov_b32 s2, s4
1563 ; GFX10-NEXT:    s_mov_b32 s3, s5
1564 ; GFX10-NEXT:    s_mov_b32 s4, s6
1565 ; GFX10-NEXT:    s_mov_b32 s5, s7
1566 ; GFX10-NEXT:    s_mov_b32 s6, s8
1567 ; GFX10-NEXT:    s_mov_b32 s7, s9
1568 ; GFX10-NEXT:    image_atomic_inc v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1569 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1570 ; GFX10-NEXT:    ; return to shader part epilog
1572 ; GFX12-LABEL: atomic_inc_i64_1d:
1573 ; GFX12:       ; %bb.0: ; %main_body
1574 ; GFX12-NEXT:    s_mov_b32 s0, s2
1575 ; GFX12-NEXT:    s_mov_b32 s1, s3
1576 ; GFX12-NEXT:    s_mov_b32 s2, s4
1577 ; GFX12-NEXT:    s_mov_b32 s3, s5
1578 ; GFX12-NEXT:    s_mov_b32 s4, s6
1579 ; GFX12-NEXT:    s_mov_b32 s5, s7
1580 ; GFX12-NEXT:    s_mov_b32 s6, s8
1581 ; GFX12-NEXT:    s_mov_b32 s7, s9
1582 ; GFX12-NEXT:    image_atomic_inc_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1583 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1584 ; GFX12-NEXT:    ; return to shader part epilog
1585 main_body:
1586   %v = call i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1587   %out = bitcast i64 %v to <2 x float>
1588   ret <2 x float> %out
1591 define amdgpu_ps <2 x float> @atomic_dec_i64_1d(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
1592 ; GFX9-LABEL: atomic_dec_i64_1d:
1593 ; GFX9:       ; %bb.0: ; %main_body
1594 ; GFX9-NEXT:    s_mov_b32 s0, s2
1595 ; GFX9-NEXT:    s_mov_b32 s1, s3
1596 ; GFX9-NEXT:    s_mov_b32 s2, s4
1597 ; GFX9-NEXT:    s_mov_b32 s3, s5
1598 ; GFX9-NEXT:    s_mov_b32 s4, s6
1599 ; GFX9-NEXT:    s_mov_b32 s5, s7
1600 ; GFX9-NEXT:    s_mov_b32 s6, s8
1601 ; GFX9-NEXT:    s_mov_b32 s7, s9
1602 ; GFX9-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1603 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1604 ; GFX9-NEXT:    ; return to shader part epilog
1606 ; GFX10-LABEL: atomic_dec_i64_1d:
1607 ; GFX10:       ; %bb.0: ; %main_body
1608 ; GFX10-NEXT:    s_mov_b32 s0, s2
1609 ; GFX10-NEXT:    s_mov_b32 s1, s3
1610 ; GFX10-NEXT:    s_mov_b32 s2, s4
1611 ; GFX10-NEXT:    s_mov_b32 s3, s5
1612 ; GFX10-NEXT:    s_mov_b32 s4, s6
1613 ; GFX10-NEXT:    s_mov_b32 s5, s7
1614 ; GFX10-NEXT:    s_mov_b32 s6, s8
1615 ; GFX10-NEXT:    s_mov_b32 s7, s9
1616 ; GFX10-NEXT:    image_atomic_dec v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc a16
1617 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1618 ; GFX10-NEXT:    ; return to shader part epilog
1620 ; GFX12-LABEL: atomic_dec_i64_1d:
1621 ; GFX12:       ; %bb.0: ; %main_body
1622 ; GFX12-NEXT:    s_mov_b32 s0, s2
1623 ; GFX12-NEXT:    s_mov_b32 s1, s3
1624 ; GFX12-NEXT:    s_mov_b32 s2, s4
1625 ; GFX12-NEXT:    s_mov_b32 s3, s5
1626 ; GFX12-NEXT:    s_mov_b32 s4, s6
1627 ; GFX12-NEXT:    s_mov_b32 s5, s7
1628 ; GFX12-NEXT:    s_mov_b32 s6, s8
1629 ; GFX12-NEXT:    s_mov_b32 s7, s9
1630 ; GFX12-NEXT:    image_atomic_dec_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1631 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1632 ; GFX12-NEXT:    ; return to shader part epilog
1633 main_body:
1634   %v = call i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1635   %out = bitcast i64 %v to <2 x float>
1636   ret <2 x float> %out
1639 define amdgpu_ps <2 x float> @atomic_cmpswap_i64_1d(<8 x i32> inreg %rsrc, i64 %cmp, i64 %swap, i16 %s) {
1640 ; GFX9-LABEL: atomic_cmpswap_i64_1d:
1641 ; GFX9:       ; %bb.0: ; %main_body
1642 ; GFX9-NEXT:    s_mov_b32 s0, s2
1643 ; GFX9-NEXT:    s_mov_b32 s1, s3
1644 ; GFX9-NEXT:    s_mov_b32 s2, s4
1645 ; GFX9-NEXT:    s_mov_b32 s3, s5
1646 ; GFX9-NEXT:    s_mov_b32 s4, s6
1647 ; GFX9-NEXT:    s_mov_b32 s5, s7
1648 ; GFX9-NEXT:    s_mov_b32 s6, s8
1649 ; GFX9-NEXT:    s_mov_b32 s7, s9
1650 ; GFX9-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf unorm glc a16
1651 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1652 ; GFX9-NEXT:    ; return to shader part epilog
1654 ; GFX10-LABEL: atomic_cmpswap_i64_1d:
1655 ; GFX10:       ; %bb.0: ; %main_body
1656 ; GFX10-NEXT:    s_mov_b32 s0, s2
1657 ; GFX10-NEXT:    s_mov_b32 s1, s3
1658 ; GFX10-NEXT:    s_mov_b32 s2, s4
1659 ; GFX10-NEXT:    s_mov_b32 s3, s5
1660 ; GFX10-NEXT:    s_mov_b32 s4, s6
1661 ; GFX10-NEXT:    s_mov_b32 s5, s7
1662 ; GFX10-NEXT:    s_mov_b32 s6, s8
1663 ; GFX10-NEXT:    s_mov_b32 s7, s9
1664 ; GFX10-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a16
1665 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1666 ; GFX10-NEXT:    ; return to shader part epilog
1668 ; GFX12-LABEL: atomic_cmpswap_i64_1d:
1669 ; GFX12:       ; %bb.0: ; %main_body
1670 ; GFX12-NEXT:    s_mov_b32 s0, s2
1671 ; GFX12-NEXT:    s_mov_b32 s1, s3
1672 ; GFX12-NEXT:    s_mov_b32 s2, s4
1673 ; GFX12-NEXT:    s_mov_b32 s3, s5
1674 ; GFX12-NEXT:    s_mov_b32 s4, s6
1675 ; GFX12-NEXT:    s_mov_b32 s5, s7
1676 ; GFX12-NEXT:    s_mov_b32 s6, s8
1677 ; GFX12-NEXT:    s_mov_b32 s7, s9
1678 ; GFX12-NEXT:    image_atomic_cmpswap v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_RETURN a16
1679 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1680 ; GFX12-NEXT:    ; return to shader part epilog
1681 main_body:
1682   %v = call i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i16(i64 %cmp, i64 %swap, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
1683   %out = bitcast i64 %v to <2 x float>
1684   ret <2 x float> %out
1687 define amdgpu_ps <2 x float> @atomic_add_i64_2d(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t) {
1688 ; GFX9-LABEL: atomic_add_i64_2d:
1689 ; GFX9:       ; %bb.0: ; %main_body
1690 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1691 ; GFX9-NEXT:    s_mov_b32 s0, s2
1692 ; GFX9-NEXT:    s_mov_b32 s1, s3
1693 ; GFX9-NEXT:    s_mov_b32 s2, s4
1694 ; GFX9-NEXT:    s_mov_b32 s3, s5
1695 ; GFX9-NEXT:    s_mov_b32 s4, s6
1696 ; GFX9-NEXT:    s_mov_b32 s5, s7
1697 ; GFX9-NEXT:    s_mov_b32 s6, s8
1698 ; GFX9-NEXT:    s_mov_b32 s7, s9
1699 ; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1700 ; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16
1701 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1702 ; GFX9-NEXT:    ; return to shader part epilog
1704 ; GFX10-LABEL: atomic_add_i64_2d:
1705 ; GFX10:       ; %bb.0: ; %main_body
1706 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1707 ; GFX10-NEXT:    s_mov_b32 s0, s2
1708 ; GFX10-NEXT:    s_mov_b32 s1, s3
1709 ; GFX10-NEXT:    s_mov_b32 s2, s4
1710 ; GFX10-NEXT:    s_mov_b32 s3, s5
1711 ; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1712 ; GFX10-NEXT:    s_mov_b32 s4, s6
1713 ; GFX10-NEXT:    s_mov_b32 s5, s7
1714 ; GFX10-NEXT:    s_mov_b32 s6, s8
1715 ; GFX10-NEXT:    s_mov_b32 s7, s9
1716 ; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm glc a16
1717 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1718 ; GFX10-NEXT:    ; return to shader part epilog
1720 ; GFX12-LABEL: atomic_add_i64_2d:
1721 ; GFX12:       ; %bb.0: ; %main_body
1722 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1723 ; GFX12-NEXT:    s_mov_b32 s0, s2
1724 ; GFX12-NEXT:    s_mov_b32 s1, s3
1725 ; GFX12-NEXT:    s_mov_b32 s2, s4
1726 ; GFX12-NEXT:    s_mov_b32 s3, s5
1727 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1728 ; GFX12-NEXT:    s_mov_b32 s4, s6
1729 ; GFX12-NEXT:    s_mov_b32 s5, s7
1730 ; GFX12-NEXT:    s_mov_b32 s6, s8
1731 ; GFX12-NEXT:    s_mov_b32 s7, s9
1732 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D th:TH_ATOMIC_RETURN a16
1733 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1734 ; GFX12-NEXT:    ; return to shader part epilog
1735 main_body:
1736   %v = call i64 @llvm.amdgcn.image.atomic.add.2d.i64.i16(i64 %data, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)
1737   %out = bitcast i64 %v to <2 x float>
1738   ret <2 x float> %out
1741 define amdgpu_ps <2 x float> @atomic_add_i64_3d(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %r) {
1742 ; GFX9-LABEL: atomic_add_i64_3d:
1743 ; GFX9:       ; %bb.0: ; %main_body
1744 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1745 ; GFX9-NEXT:    s_mov_b32 s0, s2
1746 ; GFX9-NEXT:    s_mov_b32 s1, s3
1747 ; GFX9-NEXT:    s_mov_b32 s2, s4
1748 ; GFX9-NEXT:    s_mov_b32 s3, s5
1749 ; GFX9-NEXT:    s_mov_b32 s4, s6
1750 ; GFX9-NEXT:    s_mov_b32 s5, s7
1751 ; GFX9-NEXT:    s_mov_b32 s6, s8
1752 ; GFX9-NEXT:    s_mov_b32 s7, s9
1753 ; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1754 ; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16
1755 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1756 ; GFX9-NEXT:    ; return to shader part epilog
1758 ; GFX10-LABEL: atomic_add_i64_3d:
1759 ; GFX10:       ; %bb.0: ; %main_body
1760 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1761 ; GFX10-NEXT:    s_mov_b32 s0, s2
1762 ; GFX10-NEXT:    s_mov_b32 s1, s3
1763 ; GFX10-NEXT:    s_mov_b32 s2, s4
1764 ; GFX10-NEXT:    s_mov_b32 s3, s5
1765 ; GFX10-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1766 ; GFX10-NEXT:    s_mov_b32 s4, s6
1767 ; GFX10-NEXT:    s_mov_b32 s5, s7
1768 ; GFX10-NEXT:    s_mov_b32 s6, s8
1769 ; GFX10-NEXT:    s_mov_b32 s7, s9
1770 ; GFX10-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm glc a16
1771 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1772 ; GFX10-NEXT:    ; return to shader part epilog
1774 ; GFX12-LABEL: atomic_add_i64_3d:
1775 ; GFX12:       ; %bb.0: ; %main_body
1776 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1777 ; GFX12-NEXT:    s_mov_b32 s0, s2
1778 ; GFX12-NEXT:    s_mov_b32 s1, s3
1779 ; GFX12-NEXT:    s_mov_b32 s2, s4
1780 ; GFX12-NEXT:    s_mov_b32 s3, s5
1781 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1782 ; GFX12-NEXT:    s_mov_b32 s4, s6
1783 ; GFX12-NEXT:    s_mov_b32 s5, s7
1784 ; GFX12-NEXT:    s_mov_b32 s6, s8
1785 ; GFX12-NEXT:    s_mov_b32 s7, s9
1786 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D th:TH_ATOMIC_RETURN a16
1787 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1788 ; GFX12-NEXT:    ; return to shader part epilog
1789 main_body:
1790   %v = call i64 @llvm.amdgcn.image.atomic.add.3d.i64.i16(i64 %data, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)
1791   %out = bitcast i64 %v to <2 x float>
1792   ret <2 x float> %out
1795 define amdgpu_ps <2 x float> @atomic_add_i64_cube(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %face) {
1796 ; GFX9-LABEL: atomic_add_i64_cube:
1797 ; GFX9:       ; %bb.0: ; %main_body
1798 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1799 ; GFX9-NEXT:    s_mov_b32 s0, s2
1800 ; GFX9-NEXT:    s_mov_b32 s1, s3
1801 ; GFX9-NEXT:    s_mov_b32 s2, s4
1802 ; GFX9-NEXT:    s_mov_b32 s3, s5
1803 ; GFX9-NEXT:    s_mov_b32 s4, s6
1804 ; GFX9-NEXT:    s_mov_b32 s5, s7
1805 ; GFX9-NEXT:    s_mov_b32 s6, s8
1806 ; GFX9-NEXT:    s_mov_b32 s7, s9
1807 ; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1808 ; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16 da
1809 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1810 ; GFX9-NEXT:    ; return to shader part epilog
1812 ; GFX10-LABEL: atomic_add_i64_cube:
1813 ; GFX10:       ; %bb.0: ; %main_body
1814 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1815 ; GFX10-NEXT:    s_mov_b32 s0, s2
1816 ; GFX10-NEXT:    s_mov_b32 s1, s3
1817 ; GFX10-NEXT:    s_mov_b32 s2, s4
1818 ; GFX10-NEXT:    s_mov_b32 s3, s5
1819 ; GFX10-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1820 ; GFX10-NEXT:    s_mov_b32 s4, s6
1821 ; GFX10-NEXT:    s_mov_b32 s5, s7
1822 ; GFX10-NEXT:    s_mov_b32 s6, s8
1823 ; GFX10-NEXT:    s_mov_b32 s7, s9
1824 ; GFX10-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE unorm glc a16
1825 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1826 ; GFX10-NEXT:    ; return to shader part epilog
1828 ; GFX12-LABEL: atomic_add_i64_cube:
1829 ; GFX12:       ; %bb.0: ; %main_body
1830 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1831 ; GFX12-NEXT:    s_mov_b32 s0, s2
1832 ; GFX12-NEXT:    s_mov_b32 s1, s3
1833 ; GFX12-NEXT:    s_mov_b32 s2, s4
1834 ; GFX12-NEXT:    s_mov_b32 s3, s5
1835 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1836 ; GFX12-NEXT:    s_mov_b32 s4, s6
1837 ; GFX12-NEXT:    s_mov_b32 s5, s7
1838 ; GFX12-NEXT:    s_mov_b32 s6, s8
1839 ; GFX12-NEXT:    s_mov_b32 s7, s9
1840 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_CUBE th:TH_ATOMIC_RETURN a16
1841 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1842 ; GFX12-NEXT:    ; return to shader part epilog
1843 main_body:
1844   %v = call i64 @llvm.amdgcn.image.atomic.add.cube.i64.i16(i64 %data, i16 %s, i16 %t, i16 %face , <8 x i32> %rsrc, i32 0, i32 0)
1845   %out = bitcast i64 %v to <2 x float>
1846   ret <2 x float> %out
1849 define amdgpu_ps <2 x float> @atomic_add_i64_1darray(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %slice) {
1850 ; GFX9-LABEL: atomic_add_i64_1darray:
1851 ; GFX9:       ; %bb.0: ; %main_body
1852 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1853 ; GFX9-NEXT:    s_mov_b32 s0, s2
1854 ; GFX9-NEXT:    s_mov_b32 s1, s3
1855 ; GFX9-NEXT:    s_mov_b32 s2, s4
1856 ; GFX9-NEXT:    s_mov_b32 s3, s5
1857 ; GFX9-NEXT:    s_mov_b32 s4, s6
1858 ; GFX9-NEXT:    s_mov_b32 s5, s7
1859 ; GFX9-NEXT:    s_mov_b32 s6, s8
1860 ; GFX9-NEXT:    s_mov_b32 s7, s9
1861 ; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1862 ; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc a16 da
1863 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1864 ; GFX9-NEXT:    ; return to shader part epilog
1866 ; GFX10-LABEL: atomic_add_i64_1darray:
1867 ; GFX10:       ; %bb.0: ; %main_body
1868 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1869 ; GFX10-NEXT:    s_mov_b32 s0, s2
1870 ; GFX10-NEXT:    s_mov_b32 s1, s3
1871 ; GFX10-NEXT:    s_mov_b32 s2, s4
1872 ; GFX10-NEXT:    s_mov_b32 s3, s5
1873 ; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1874 ; GFX10-NEXT:    s_mov_b32 s4, s6
1875 ; GFX10-NEXT:    s_mov_b32 s5, s7
1876 ; GFX10-NEXT:    s_mov_b32 s6, s8
1877 ; GFX10-NEXT:    s_mov_b32 s7, s9
1878 ; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY unorm glc a16
1879 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1880 ; GFX10-NEXT:    ; return to shader part epilog
1882 ; GFX12-LABEL: atomic_add_i64_1darray:
1883 ; GFX12:       ; %bb.0: ; %main_body
1884 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1885 ; GFX12-NEXT:    s_mov_b32 s0, s2
1886 ; GFX12-NEXT:    s_mov_b32 s1, s3
1887 ; GFX12-NEXT:    s_mov_b32 s2, s4
1888 ; GFX12-NEXT:    s_mov_b32 s3, s5
1889 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1890 ; GFX12-NEXT:    s_mov_b32 s4, s6
1891 ; GFX12-NEXT:    s_mov_b32 s5, s7
1892 ; GFX12-NEXT:    s_mov_b32 s6, s8
1893 ; GFX12-NEXT:    s_mov_b32 s7, s9
1894 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D_ARRAY th:TH_ATOMIC_RETURN a16
1895 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1896 ; GFX12-NEXT:    ; return to shader part epilog
1897 main_body:
1898   %v = call i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i16(i64 %data, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
1899   %out = bitcast i64 %v to <2 x float>
1900   ret <2 x float> %out
1903 define amdgpu_ps <2 x float> @atomic_add_i64_2darray(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %slice) {
1904 ; GFX9-LABEL: atomic_add_i64_2darray:
1905 ; GFX9:       ; %bb.0: ; %main_body
1906 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1907 ; GFX9-NEXT:    s_mov_b32 s0, s2
1908 ; GFX9-NEXT:    s_mov_b32 s1, s3
1909 ; GFX9-NEXT:    s_mov_b32 s2, s4
1910 ; GFX9-NEXT:    s_mov_b32 s3, s5
1911 ; GFX9-NEXT:    s_mov_b32 s4, s6
1912 ; GFX9-NEXT:    s_mov_b32 s5, s7
1913 ; GFX9-NEXT:    s_mov_b32 s6, s8
1914 ; GFX9-NEXT:    s_mov_b32 s7, s9
1915 ; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1916 ; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16 da
1917 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1918 ; GFX9-NEXT:    ; return to shader part epilog
1920 ; GFX10-LABEL: atomic_add_i64_2darray:
1921 ; GFX10:       ; %bb.0: ; %main_body
1922 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1923 ; GFX10-NEXT:    s_mov_b32 s0, s2
1924 ; GFX10-NEXT:    s_mov_b32 s1, s3
1925 ; GFX10-NEXT:    s_mov_b32 s2, s4
1926 ; GFX10-NEXT:    s_mov_b32 s3, s5
1927 ; GFX10-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1928 ; GFX10-NEXT:    s_mov_b32 s4, s6
1929 ; GFX10-NEXT:    s_mov_b32 s5, s7
1930 ; GFX10-NEXT:    s_mov_b32 s6, s8
1931 ; GFX10-NEXT:    s_mov_b32 s7, s9
1932 ; GFX10-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY unorm glc a16
1933 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1934 ; GFX10-NEXT:    ; return to shader part epilog
1936 ; GFX12-LABEL: atomic_add_i64_2darray:
1937 ; GFX12:       ; %bb.0: ; %main_body
1938 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1939 ; GFX12-NEXT:    s_mov_b32 s0, s2
1940 ; GFX12-NEXT:    s_mov_b32 s1, s3
1941 ; GFX12-NEXT:    s_mov_b32 s2, s4
1942 ; GFX12-NEXT:    s_mov_b32 s3, s5
1943 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1944 ; GFX12-NEXT:    s_mov_b32 s4, s6
1945 ; GFX12-NEXT:    s_mov_b32 s5, s7
1946 ; GFX12-NEXT:    s_mov_b32 s6, s8
1947 ; GFX12-NEXT:    s_mov_b32 s7, s9
1948 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_ARRAY th:TH_ATOMIC_RETURN a16
1949 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1950 ; GFX12-NEXT:    ; return to shader part epilog
1951 main_body:
1952   %v = call i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i16(i64 %data, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
1953   %out = bitcast i64 %v to <2 x float>
1954   ret <2 x float> %out
1957 define amdgpu_ps <2 x float> @atomic_add_i64_2dmsaa(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %fragid) {
1958 ; GFX9-LABEL: atomic_add_i64_2dmsaa:
1959 ; GFX9:       ; %bb.0: ; %main_body
1960 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1961 ; GFX9-NEXT:    s_mov_b32 s0, s2
1962 ; GFX9-NEXT:    s_mov_b32 s1, s3
1963 ; GFX9-NEXT:    s_mov_b32 s2, s4
1964 ; GFX9-NEXT:    s_mov_b32 s3, s5
1965 ; GFX9-NEXT:    s_mov_b32 s4, s6
1966 ; GFX9-NEXT:    s_mov_b32 s5, s7
1967 ; GFX9-NEXT:    s_mov_b32 s6, s8
1968 ; GFX9-NEXT:    s_mov_b32 s7, s9
1969 ; GFX9-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1970 ; GFX9-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 unorm glc a16
1971 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1972 ; GFX9-NEXT:    ; return to shader part epilog
1974 ; GFX10-LABEL: atomic_add_i64_2dmsaa:
1975 ; GFX10:       ; %bb.0: ; %main_body
1976 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1977 ; GFX10-NEXT:    s_mov_b32 s0, s2
1978 ; GFX10-NEXT:    s_mov_b32 s1, s3
1979 ; GFX10-NEXT:    s_mov_b32 s2, s4
1980 ; GFX10-NEXT:    s_mov_b32 s3, s5
1981 ; GFX10-NEXT:    v_lshl_or_b32 v3, v3, 16, v2
1982 ; GFX10-NEXT:    s_mov_b32 s4, s6
1983 ; GFX10-NEXT:    s_mov_b32 s5, s7
1984 ; GFX10-NEXT:    s_mov_b32 s6, s8
1985 ; GFX10-NEXT:    s_mov_b32 s7, s9
1986 ; GFX10-NEXT:    image_atomic_add v[0:1], v[3:4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA unorm glc a16
1987 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1988 ; GFX10-NEXT:    ; return to shader part epilog
1990 ; GFX12-LABEL: atomic_add_i64_2dmsaa:
1991 ; GFX12:       ; %bb.0: ; %main_body
1992 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1993 ; GFX12-NEXT:    s_mov_b32 s0, s2
1994 ; GFX12-NEXT:    s_mov_b32 s1, s3
1995 ; GFX12-NEXT:    s_mov_b32 s2, s4
1996 ; GFX12-NEXT:    s_mov_b32 s3, s5
1997 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
1998 ; GFX12-NEXT:    s_mov_b32 s4, s6
1999 ; GFX12-NEXT:    s_mov_b32 s5, s7
2000 ; GFX12-NEXT:    s_mov_b32 s6, s8
2001 ; GFX12-NEXT:    s_mov_b32 s7, s9
2002 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v4], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA th:TH_ATOMIC_RETURN a16
2003 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2004 ; GFX12-NEXT:    ; return to shader part epilog
2005 main_body:
2006   %v = call i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i16(i64 %data, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2007   %out = bitcast i64 %v to <2 x float>
2008   ret <2 x float> %out
2011 define amdgpu_ps <2 x float> @atomic_add_i64_2darraymsaa(<8 x i32> inreg %rsrc, i64 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid) {
2012 ; GFX9-LABEL: atomic_add_i64_2darraymsaa:
2013 ; GFX9:       ; %bb.0: ; %main_body
2014 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v2
2015 ; GFX9-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
2016 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff, v4
2017 ; GFX9-NEXT:    s_mov_b32 s0, s2
2018 ; GFX9-NEXT:    s_mov_b32 s1, s3
2019 ; GFX9-NEXT:    s_mov_b32 s2, s4
2020 ; GFX9-NEXT:    s_mov_b32 s3, s5
2021 ; GFX9-NEXT:    s_mov_b32 s4, s6
2022 ; GFX9-NEXT:    s_mov_b32 s5, s7
2023 ; GFX9-NEXT:    s_mov_b32 s6, s8
2024 ; GFX9-NEXT:    s_mov_b32 s7, s9
2025 ; GFX9-NEXT:    v_lshl_or_b32 v3, v5, 16, v3
2026 ; GFX9-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 unorm glc a16 da
2027 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2028 ; GFX9-NEXT:    ; return to shader part epilog
2030 ; GFX10-LABEL: atomic_add_i64_2darraymsaa:
2031 ; GFX10:       ; %bb.0: ; %main_body
2032 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v2
2033 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff, v4
2034 ; GFX10-NEXT:    s_mov_b32 s0, s2
2035 ; GFX10-NEXT:    s_mov_b32 s1, s3
2036 ; GFX10-NEXT:    s_mov_b32 s2, s4
2037 ; GFX10-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
2038 ; GFX10-NEXT:    v_lshl_or_b32 v3, v5, 16, v4
2039 ; GFX10-NEXT:    s_mov_b32 s3, s5
2040 ; GFX10-NEXT:    s_mov_b32 s4, s6
2041 ; GFX10-NEXT:    s_mov_b32 s5, s7
2042 ; GFX10-NEXT:    s_mov_b32 s6, s8
2043 ; GFX10-NEXT:    s_mov_b32 s7, s9
2044 ; GFX10-NEXT:    image_atomic_add v[0:1], v[2:3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm glc a16
2045 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2046 ; GFX10-NEXT:    ; return to shader part epilog
2048 ; GFX12-LABEL: atomic_add_i64_2darraymsaa:
2049 ; GFX12:       ; %bb.0: ; %main_body
2050 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff, v2
2051 ; GFX12-NEXT:    v_and_b32_e32 v4, 0xffff, v4
2052 ; GFX12-NEXT:    s_mov_b32 s0, s2
2053 ; GFX12-NEXT:    s_mov_b32 s1, s3
2054 ; GFX12-NEXT:    s_mov_b32 s2, s4
2055 ; GFX12-NEXT:    v_lshl_or_b32 v2, v3, 16, v2
2056 ; GFX12-NEXT:    v_lshl_or_b32 v3, v5, 16, v4
2057 ; GFX12-NEXT:    s_mov_b32 s3, s5
2058 ; GFX12-NEXT:    s_mov_b32 s4, s6
2059 ; GFX12-NEXT:    s_mov_b32 s5, s7
2060 ; GFX12-NEXT:    s_mov_b32 s6, s8
2061 ; GFX12-NEXT:    s_mov_b32 s7, s9
2062 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], [v2, v3], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D_MSAA_ARRAY th:TH_ATOMIC_RETURN a16
2063 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2064 ; GFX12-NEXT:    ; return to shader part epilog
2065 main_body:
2066   %v = call i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i16(i64 %data, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2067   %out = bitcast i64 %v to <2 x float>
2068   ret <2 x float> %out
2071 define amdgpu_ps <2 x float> @atomic_add_i64_1d_slc(<8 x i32> inreg %rsrc, i64 %data, i16 %s) {
2072 ; GFX9-LABEL: atomic_add_i64_1d_slc:
2073 ; GFX9:       ; %bb.0: ; %main_body
2074 ; GFX9-NEXT:    s_mov_b32 s0, s2
2075 ; GFX9-NEXT:    s_mov_b32 s1, s3
2076 ; GFX9-NEXT:    s_mov_b32 s2, s4
2077 ; GFX9-NEXT:    s_mov_b32 s3, s5
2078 ; GFX9-NEXT:    s_mov_b32 s4, s6
2079 ; GFX9-NEXT:    s_mov_b32 s5, s7
2080 ; GFX9-NEXT:    s_mov_b32 s6, s8
2081 ; GFX9-NEXT:    s_mov_b32 s7, s9
2082 ; GFX9-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 unorm glc slc a16
2083 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2084 ; GFX9-NEXT:    ; return to shader part epilog
2086 ; GFX10-LABEL: atomic_add_i64_1d_slc:
2087 ; GFX10:       ; %bb.0: ; %main_body
2088 ; GFX10-NEXT:    s_mov_b32 s0, s2
2089 ; GFX10-NEXT:    s_mov_b32 s1, s3
2090 ; GFX10-NEXT:    s_mov_b32 s2, s4
2091 ; GFX10-NEXT:    s_mov_b32 s3, s5
2092 ; GFX10-NEXT:    s_mov_b32 s4, s6
2093 ; GFX10-NEXT:    s_mov_b32 s5, s7
2094 ; GFX10-NEXT:    s_mov_b32 s6, s8
2095 ; GFX10-NEXT:    s_mov_b32 s7, s9
2096 ; GFX10-NEXT:    image_atomic_add v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm glc slc a16
2097 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2098 ; GFX10-NEXT:    ; return to shader part epilog
2100 ; GFX12-LABEL: atomic_add_i64_1d_slc:
2101 ; GFX12:       ; %bb.0: ; %main_body
2102 ; GFX12-NEXT:    s_mov_b32 s0, s2
2103 ; GFX12-NEXT:    s_mov_b32 s1, s3
2104 ; GFX12-NEXT:    s_mov_b32 s2, s4
2105 ; GFX12-NEXT:    s_mov_b32 s3, s5
2106 ; GFX12-NEXT:    s_mov_b32 s4, s6
2107 ; GFX12-NEXT:    s_mov_b32 s5, s7
2108 ; GFX12-NEXT:    s_mov_b32 s6, s8
2109 ; GFX12-NEXT:    s_mov_b32 s7, s9
2110 ; GFX12-NEXT:    image_atomic_add_uint v[0:1], v2, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D th:TH_ATOMIC_NT_RETURN a16
2111 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2112 ; GFX12-NEXT:    ; return to shader part epilog
2113 main_body:
2114   %v = call i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64 %data, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)
2115   %out = bitcast i64 %v to <2 x float>
2116   ret <2 x float> %out
2119 declare i32 @llvm.amdgcn.image.atomic.swap.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2120 declare i32 @llvm.amdgcn.image.atomic.add.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2121 declare i32 @llvm.amdgcn.image.atomic.sub.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2122 declare i32 @llvm.amdgcn.image.atomic.smin.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2123 declare i32 @llvm.amdgcn.image.atomic.umin.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2124 declare i32 @llvm.amdgcn.image.atomic.smax.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2125 declare i32 @llvm.amdgcn.image.atomic.umax.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2126 declare i32 @llvm.amdgcn.image.atomic.and.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2127 declare i32 @llvm.amdgcn.image.atomic.or.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2128 declare i32 @llvm.amdgcn.image.atomic.xor.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2129 declare i32 @llvm.amdgcn.image.atomic.inc.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2130 declare i32 @llvm.amdgcn.image.atomic.dec.1d.i32.i16(i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2131 declare i32 @llvm.amdgcn.image.atomic.cmpswap.1d.i32.i16(i32, i32, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2132 declare i32 @llvm.amdgcn.image.atomic.add.2d.i32.i16(i32, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2133 declare i32 @llvm.amdgcn.image.atomic.add.3d.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2134 declare i32 @llvm.amdgcn.image.atomic.add.cube.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2135 declare i32 @llvm.amdgcn.image.atomic.add.1darray.i32.i16(i32, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2136 declare i32 @llvm.amdgcn.image.atomic.add.2darray.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2137 declare i32 @llvm.amdgcn.image.atomic.add.2dmsaa.i32.i16(i32, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2138 declare i32 @llvm.amdgcn.image.atomic.add.2darraymsaa.i32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2140 declare i64 @llvm.amdgcn.image.atomic.swap.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2141 declare i64 @llvm.amdgcn.image.atomic.add.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2142 declare i64 @llvm.amdgcn.image.atomic.sub.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2143 declare i64 @llvm.amdgcn.image.atomic.smin.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2144 declare i64 @llvm.amdgcn.image.atomic.umin.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2145 declare i64 @llvm.amdgcn.image.atomic.smax.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2146 declare i64 @llvm.amdgcn.image.atomic.umax.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2147 declare i64 @llvm.amdgcn.image.atomic.and.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2148 declare i64 @llvm.amdgcn.image.atomic.or.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2149 declare i64 @llvm.amdgcn.image.atomic.xor.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2150 declare i64 @llvm.amdgcn.image.atomic.inc.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2151 declare i64 @llvm.amdgcn.image.atomic.dec.1d.i64.i16(i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2152 declare i64 @llvm.amdgcn.image.atomic.cmpswap.1d.i64.i16(i64, i64, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2153 declare i64 @llvm.amdgcn.image.atomic.add.2d.i64.i16(i64, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2154 declare i64 @llvm.amdgcn.image.atomic.add.3d.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2155 declare i64 @llvm.amdgcn.image.atomic.add.cube.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2156 declare i64 @llvm.amdgcn.image.atomic.add.1darray.i64.i16(i64, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2157 declare i64 @llvm.amdgcn.image.atomic.add.2darray.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2158 declare i64 @llvm.amdgcn.image.atomic.add.2dmsaa.i64.i16(i64, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2159 declare i64 @llvm.amdgcn.image.atomic.add.2darraymsaa.i64.i16(i64, i16, i16, i16, i16, <8 x i32>, i32 immarg, i32 immarg) #0
2161 attributes #0 = { nounwind }