1 ; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=SI -check-prefix=GCN %s
2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=VI -check-prefix=GCN %s
4 ; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64:
5 ; GCN: ds_wrxchg_rtn_b64
7 define void @lds_atomic_xchg_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
8 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
9 store i64 %result, i64 addrspace(1)* %out, align 8
13 ; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64_offset:
14 ; GCN: ds_wrxchg_rtn_b64 {{.*}} offset:32
16 define void @lds_atomic_xchg_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
17 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
18 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
19 store i64 %result, i64 addrspace(1)* %out, align 8
23 ; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64:
26 define void @lds_atomic_add_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
27 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
28 store i64 %result, i64 addrspace(1)* %out, align 8
32 ; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64_offset:
33 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9
34 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0
35 ; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0xb
36 ; VI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x2c
37 ; GCN-DAG: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]]
38 ; GCN: ds_add_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32
39 ; GCN: buffer_store_dwordx2 [[RESULT]],
41 define void @lds_atomic_add_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
42 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i64 4
43 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
44 store i64 %result, i64 addrspace(1)* %out, align 8
48 ; FUNC-LABEL: {{^}}lds_atomic_inc_ret_i64:
49 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1
50 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1
51 ; GCN: ds_inc_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
52 ; GCN: buffer_store_dwordx2 [[RESULT]],
54 define void @lds_atomic_inc_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
55 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst
56 store i64 %result, i64 addrspace(1)* %out, align 8
60 ; FUNC-LABEL: {{^}}lds_atomic_inc_ret_i64_offset:
61 ; GCN: ds_inc_rtn_u64 {{.*}} offset:32
63 define void @lds_atomic_inc_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
64 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
65 %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst
66 store i64 %result, i64 addrspace(1)* %out, align 8
70 ; FUNC-LABEL: {{^}}lds_atomic_sub_ret_i64:
73 define void @lds_atomic_sub_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
74 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst
75 store i64 %result, i64 addrspace(1)* %out, align 8
79 ; FUNC-LABEL: {{^}}lds_atomic_sub_ret_i64_offset:
80 ; GCN: ds_sub_rtn_u64 {{.*}} offset:32
82 define void @lds_atomic_sub_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
83 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
84 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst
85 store i64 %result, i64 addrspace(1)* %out, align 8
89 ; FUNC-LABEL: {{^}}lds_atomic_dec_ret_i64:
90 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1
91 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1
92 ; GCN: ds_dec_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
93 ; GCN: buffer_store_dwordx2 [[RESULT]],
95 define void @lds_atomic_dec_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
96 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
97 store i64 %result, i64 addrspace(1)* %out, align 8
101 ; FUNC-LABEL: {{^}}lds_atomic_dec_ret_i64_offset:
102 ; GCN: ds_dec_rtn_u64 {{.*}} offset:32
104 define void @lds_atomic_dec_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
105 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
106 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
107 store i64 %result, i64 addrspace(1)* %out, align 8
111 ; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64:
112 ; GCN: ds_and_rtn_b64
114 define void @lds_atomic_and_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
115 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
116 store i64 %result, i64 addrspace(1)* %out, align 8
120 ; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64_offset:
121 ; GCN: ds_and_rtn_b64 {{.*}} offset:32
123 define void @lds_atomic_and_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
124 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
125 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
126 store i64 %result, i64 addrspace(1)* %out, align 8
130 ; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64:
133 define void @lds_atomic_or_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
134 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
135 store i64 %result, i64 addrspace(1)* %out, align 8
139 ; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64_offset:
140 ; GCN: ds_or_rtn_b64 {{.*}} offset:32
142 define void @lds_atomic_or_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
143 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
144 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
145 store i64 %result, i64 addrspace(1)* %out, align 8
149 ; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64:
150 ; GCN: ds_xor_rtn_b64
152 define void @lds_atomic_xor_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
153 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
154 store i64 %result, i64 addrspace(1)* %out, align 8
158 ; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64_offset:
159 ; GCN: ds_xor_rtn_b64 {{.*}} offset:32
161 define void @lds_atomic_xor_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
162 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
163 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
164 store i64 %result, i64 addrspace(1)* %out, align 8
168 ; FIXME: There is no atomic nand instr
169 ; XFUNC-LABEL: {{^}}lds_atomic_nand_ret_i64:uction, so we somehow need to expand this.
170 ; define void @lds_atomic_nand_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
171 ; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
172 ; store i64 %result, i64 addrspace(1)* %out, align 8
176 ; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64:
177 ; GCN: ds_min_rtn_i64
179 define void @lds_atomic_min_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
180 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
181 store i64 %result, i64 addrspace(1)* %out, align 8
185 ; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64_offset:
186 ; GCN: ds_min_rtn_i64 {{.*}} offset:32
188 define void @lds_atomic_min_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
189 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
190 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
191 store i64 %result, i64 addrspace(1)* %out, align 8
195 ; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64:
196 ; GCN: ds_max_rtn_i64
198 define void @lds_atomic_max_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
199 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
200 store i64 %result, i64 addrspace(1)* %out, align 8
204 ; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64_offset:
205 ; GCN: ds_max_rtn_i64 {{.*}} offset:32
207 define void @lds_atomic_max_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
208 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
209 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
210 store i64 %result, i64 addrspace(1)* %out, align 8
214 ; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64:
215 ; GCN: ds_min_rtn_u64
217 define void @lds_atomic_umin_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
218 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
219 store i64 %result, i64 addrspace(1)* %out, align 8
223 ; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64_offset:
224 ; GCN: ds_min_rtn_u64 {{.*}} offset:32
226 define void @lds_atomic_umin_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
227 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
228 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
229 store i64 %result, i64 addrspace(1)* %out, align 8
233 ; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64:
234 ; GCN: ds_max_rtn_u64
236 define void @lds_atomic_umax_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
237 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
238 store i64 %result, i64 addrspace(1)* %out, align 8
242 ; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64_offset:
243 ; GCN: ds_max_rtn_u64 {{.*}} offset:32
245 define void @lds_atomic_umax_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
246 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
247 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst
248 store i64 %result, i64 addrspace(1)* %out, align 8
252 ; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64:
253 ; GCN: ds_wrxchg_rtn_b64
255 define void @lds_atomic_xchg_noret_i64(i64 addrspace(3)* %ptr) nounwind {
256 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
260 ; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64_offset:
261 ; GCN: ds_wrxchg_rtn_b64 {{.*}} offset:32
263 define void @lds_atomic_xchg_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
264 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
265 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
269 ; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64:
272 define void @lds_atomic_add_noret_i64(i64 addrspace(3)* %ptr) nounwind {
273 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
277 ; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64_offset:
278 ; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x9
279 ; VI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x24
280 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9
281 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0
282 ; GCN: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]]
283 ; GCN: ds_add_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32
285 define void @lds_atomic_add_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
286 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i64 4
287 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
291 ; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64:
292 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1
293 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1
294 ; GCN: ds_inc_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
296 define void @lds_atomic_inc_noret_i64(i64 addrspace(3)* %ptr) nounwind {
297 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst
301 ; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64_offset:
302 ; GCN: ds_inc_u64 {{.*}} offset:32
304 define void @lds_atomic_inc_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
305 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
306 %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst
310 ; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64:
313 define void @lds_atomic_sub_noret_i64(i64 addrspace(3)* %ptr) nounwind {
314 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst
318 ; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64_offset:
319 ; GCN: ds_sub_u64 {{.*}} offset:32
321 define void @lds_atomic_sub_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
322 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
323 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst
327 ; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64:
328 ; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], -1
329 ; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], -1
330 ; GCN: ds_dec_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
332 define void @lds_atomic_dec_noret_i64(i64 addrspace(3)* %ptr) nounwind {
333 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
337 ; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64_offset:
338 ; GCN: ds_dec_u64 {{.*}} offset:32
340 define void @lds_atomic_dec_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
341 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
342 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
346 ; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64:
349 define void @lds_atomic_and_noret_i64(i64 addrspace(3)* %ptr) nounwind {
350 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
354 ; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64_offset:
355 ; GCN: ds_and_b64 {{.*}} offset:32
357 define void @lds_atomic_and_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
358 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
359 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
363 ; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64:
366 define void @lds_atomic_or_noret_i64(i64 addrspace(3)* %ptr) nounwind {
367 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
371 ; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64_offset:
372 ; GCN: ds_or_b64 {{.*}} offset:32
374 define void @lds_atomic_or_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
375 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
376 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
380 ; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64:
383 define void @lds_atomic_xor_noret_i64(i64 addrspace(3)* %ptr) nounwind {
384 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
388 ; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64_offset:
389 ; GCN: ds_xor_b64 {{.*}} offset:32
391 define void @lds_atomic_xor_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
392 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
393 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
397 ; FIXME: There is no atomic nand instr
398 ; XFUNC-LABEL: {{^}}lds_atomic_nand_noret_i64:uction, so we somehow need to expand this.
399 ; define void @lds_atomic_nand_noret_i64(i64 addrspace(3)* %ptr) nounwind {
400 ; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
404 ; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64:
407 define void @lds_atomic_min_noret_i64(i64 addrspace(3)* %ptr) nounwind {
408 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
412 ; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64_offset:
413 ; GCN: ds_min_i64 {{.*}} offset:32
415 define void @lds_atomic_min_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
416 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
417 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
421 ; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64:
424 define void @lds_atomic_max_noret_i64(i64 addrspace(3)* %ptr) nounwind {
425 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
429 ; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64_offset:
430 ; GCN: ds_max_i64 {{.*}} offset:32
432 define void @lds_atomic_max_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
433 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
434 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
438 ; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64:
441 define void @lds_atomic_umin_noret_i64(i64 addrspace(3)* %ptr) nounwind {
442 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
446 ; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64_offset:
447 ; GCN: ds_min_u64 {{.*}} offset:32
449 define void @lds_atomic_umin_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
450 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
451 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
455 ; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64:
458 define void @lds_atomic_umax_noret_i64(i64 addrspace(3)* %ptr) nounwind {
459 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
463 ; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64_offset:
464 ; GCN: ds_max_u64 {{.*}} offset:32
466 define void @lds_atomic_umax_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
467 %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
468 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst