1 ; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=SI %s
3 ; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64:
4 ; SI: DS_WRXCHG_RTN_B64
6 define void @lds_atomic_xchg_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
7 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
8 store i64 %result, i64 addrspace(1)* %out, align 8
12 ; FUNC-LABEL: {{^}}lds_atomic_xchg_ret_i64_offset:
13 ; SI: DS_WRXCHG_RTN_B64 {{.*}} offset:32
15 define void @lds_atomic_xchg_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
16 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
17 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
18 store i64 %result, i64 addrspace(1)* %out, align 8
22 ; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64:
25 define void @lds_atomic_add_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
26 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
27 store i64 %result, i64 addrspace(1)* %out, align 8
31 ; FUNC-LABEL: {{^}}lds_atomic_add_ret_i64_offset:
32 ; SI: S_LOAD_DWORD [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0xb
33 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, 9
34 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
35 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
36 ; SI-DAG: V_MOV_B32_e32 [[VPTR:v[0-9]+]], [[PTR]]
37 ; SI: DS_ADD_RTN_U64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32 [M0]
38 ; SI: BUFFER_STORE_DWORDX2 [[RESULT]],
40 define void @lds_atomic_add_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
41 %gep = getelementptr i64 addrspace(3)* %ptr, i64 4
42 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
43 store i64 %result, i64 addrspace(1)* %out, align 8
47 ; FUNC-LABEL: {{^}}lds_atomic_inc_ret_i64:
48 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, -1
49 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
50 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
51 ; SI: DS_INC_RTN_U64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
52 ; SI: 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 ; SI: 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 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 ; SI: 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 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 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, -1
91 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
92 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
93 ; SI: DS_DEC_RTN_U64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
94 ; SI: BUFFER_STORE_DWORDX2 [[RESULT]],
96 define void @lds_atomic_dec_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
97 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
98 store i64 %result, i64 addrspace(1)* %out, align 8
102 ; FUNC-LABEL: {{^}}lds_atomic_dec_ret_i64_offset:
103 ; SI: DS_DEC_RTN_U64 {{.*}} offset:32
105 define void @lds_atomic_dec_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
106 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
107 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
108 store i64 %result, i64 addrspace(1)* %out, align 8
112 ; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64:
115 define void @lds_atomic_and_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
116 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
117 store i64 %result, i64 addrspace(1)* %out, align 8
121 ; FUNC-LABEL: {{^}}lds_atomic_and_ret_i64_offset:
122 ; SI: DS_AND_RTN_B64 {{.*}} offset:32
124 define void @lds_atomic_and_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
125 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
126 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
127 store i64 %result, i64 addrspace(1)* %out, align 8
131 ; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64:
134 define void @lds_atomic_or_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
135 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
136 store i64 %result, i64 addrspace(1)* %out, align 8
140 ; FUNC-LABEL: {{^}}lds_atomic_or_ret_i64_offset:
141 ; SI: DS_OR_RTN_B64 {{.*}} offset:32
143 define void @lds_atomic_or_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
144 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
145 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
146 store i64 %result, i64 addrspace(1)* %out, align 8
150 ; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64:
153 define void @lds_atomic_xor_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
154 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
155 store i64 %result, i64 addrspace(1)* %out, align 8
159 ; FUNC-LABEL: {{^}}lds_atomic_xor_ret_i64_offset:
160 ; SI: DS_XOR_RTN_B64 {{.*}} offset:32
162 define void @lds_atomic_xor_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
163 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
164 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
165 store i64 %result, i64 addrspace(1)* %out, align 8
169 ; FIXME: There is no atomic nand instr
170 ; XFUNC-LABEL: {{^}}lds_atomic_nand_ret_i64:uction, so we somehow need to expand this.
171 ; define void @lds_atomic_nand_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
172 ; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
173 ; store i64 %result, i64 addrspace(1)* %out, align 8
177 ; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64:
180 define void @lds_atomic_min_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
181 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
182 store i64 %result, i64 addrspace(1)* %out, align 8
186 ; FUNC-LABEL: {{^}}lds_atomic_min_ret_i64_offset:
187 ; SI: DS_MIN_RTN_I64 {{.*}} offset:32
189 define void @lds_atomic_min_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
190 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
191 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
192 store i64 %result, i64 addrspace(1)* %out, align 8
196 ; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64:
199 define void @lds_atomic_max_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
200 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
201 store i64 %result, i64 addrspace(1)* %out, align 8
205 ; FUNC-LABEL: {{^}}lds_atomic_max_ret_i64_offset:
206 ; SI: DS_MAX_RTN_I64 {{.*}} offset:32
208 define void @lds_atomic_max_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
209 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
210 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
211 store i64 %result, i64 addrspace(1)* %out, align 8
215 ; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64:
218 define void @lds_atomic_umin_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
219 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
220 store i64 %result, i64 addrspace(1)* %out, align 8
224 ; FUNC-LABEL: {{^}}lds_atomic_umin_ret_i64_offset:
225 ; SI: DS_MIN_RTN_U64 {{.*}} offset:32
227 define void @lds_atomic_umin_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
228 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
229 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
230 store i64 %result, i64 addrspace(1)* %out, align 8
234 ; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64:
237 define void @lds_atomic_umax_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
238 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
239 store i64 %result, i64 addrspace(1)* %out, align 8
243 ; FUNC-LABEL: {{^}}lds_atomic_umax_ret_i64_offset:
244 ; SI: DS_MAX_RTN_U64 {{.*}} offset:32
246 define void @lds_atomic_umax_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
247 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
248 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst
249 store i64 %result, i64 addrspace(1)* %out, align 8
253 ; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64:
254 ; SI: DS_WRXCHG_RTN_B64
256 define void @lds_atomic_xchg_noret_i64(i64 addrspace(3)* %ptr) nounwind {
257 %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
261 ; FUNC-LABEL: {{^}}lds_atomic_xchg_noret_i64_offset:
262 ; SI: DS_WRXCHG_RTN_B64 {{.*}} offset:32
264 define void @lds_atomic_xchg_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
265 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
266 %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
270 ; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64:
273 define void @lds_atomic_add_noret_i64(i64 addrspace(3)* %ptr) nounwind {
274 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
278 ; FUNC-LABEL: {{^}}lds_atomic_add_noret_i64_offset:
279 ; SI: S_LOAD_DWORD [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x9
280 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, 9
281 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
282 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
283 ; SI-DAG: V_MOV_B32_e32 [[VPTR:v[0-9]+]], [[PTR]]
284 ; SI: DS_ADD_U64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32 [M0]
286 define void @lds_atomic_add_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
287 %gep = getelementptr i64 addrspace(3)* %ptr, i64 4
288 %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
292 ; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64:
293 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, -1
294 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
295 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
296 ; SI: DS_INC_U64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
298 define void @lds_atomic_inc_noret_i64(i64 addrspace(3)* %ptr) nounwind {
299 %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst
303 ; FUNC-LABEL: {{^}}lds_atomic_inc_noret_i64_offset:
304 ; SI: DS_INC_U64 {{.*}} offset:32
306 define void @lds_atomic_inc_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
307 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
308 %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst
312 ; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64:
315 define void @lds_atomic_sub_noret_i64(i64 addrspace(3)* %ptr) nounwind {
316 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst
320 ; FUNC-LABEL: {{^}}lds_atomic_sub_noret_i64_offset:
321 ; SI: DS_SUB_U64 {{.*}} offset:32
323 define void @lds_atomic_sub_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
324 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
325 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst
329 ; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64:
330 ; SI: S_MOV_B64 s{{\[}}[[LOSDATA:[0-9]+]]:[[HISDATA:[0-9]+]]{{\]}}, -1
331 ; SI-DAG: V_MOV_B32_e32 v[[LOVDATA:[0-9]+]], s[[LOSDATA]]
332 ; SI-DAG: V_MOV_B32_e32 v[[HIVDATA:[0-9]+]], s[[HISDATA]]
333 ; SI: DS_DEC_U64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
335 define void @lds_atomic_dec_noret_i64(i64 addrspace(3)* %ptr) nounwind {
336 %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
340 ; FUNC-LABEL: {{^}}lds_atomic_dec_noret_i64_offset:
341 ; SI: DS_DEC_U64 {{.*}} offset:32
343 define void @lds_atomic_dec_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
344 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
345 %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
349 ; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64:
352 define void @lds_atomic_and_noret_i64(i64 addrspace(3)* %ptr) nounwind {
353 %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
357 ; FUNC-LABEL: {{^}}lds_atomic_and_noret_i64_offset:
358 ; SI: DS_AND_B64 {{.*}} offset:32
360 define void @lds_atomic_and_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
361 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
362 %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
366 ; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64:
369 define void @lds_atomic_or_noret_i64(i64 addrspace(3)* %ptr) nounwind {
370 %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
374 ; FUNC-LABEL: {{^}}lds_atomic_or_noret_i64_offset:
375 ; SI: DS_OR_B64 {{.*}} offset:32
377 define void @lds_atomic_or_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
378 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
379 %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
383 ; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64:
386 define void @lds_atomic_xor_noret_i64(i64 addrspace(3)* %ptr) nounwind {
387 %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
391 ; FUNC-LABEL: {{^}}lds_atomic_xor_noret_i64_offset:
392 ; SI: DS_XOR_B64 {{.*}} offset:32
394 define void @lds_atomic_xor_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
395 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
396 %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
400 ; FIXME: There is no atomic nand instr
401 ; XFUNC-LABEL: {{^}}lds_atomic_nand_noret_i64:uction, so we somehow need to expand this.
402 ; define void @lds_atomic_nand_noret_i64(i64 addrspace(3)* %ptr) nounwind {
403 ; %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
407 ; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64:
410 define void @lds_atomic_min_noret_i64(i64 addrspace(3)* %ptr) nounwind {
411 %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
415 ; FUNC-LABEL: {{^}}lds_atomic_min_noret_i64_offset:
416 ; SI: DS_MIN_I64 {{.*}} offset:32
418 define void @lds_atomic_min_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
419 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
420 %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
424 ; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64:
427 define void @lds_atomic_max_noret_i64(i64 addrspace(3)* %ptr) nounwind {
428 %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
432 ; FUNC-LABEL: {{^}}lds_atomic_max_noret_i64_offset:
433 ; SI: DS_MAX_I64 {{.*}} offset:32
435 define void @lds_atomic_max_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
436 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
437 %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
441 ; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64:
444 define void @lds_atomic_umin_noret_i64(i64 addrspace(3)* %ptr) nounwind {
445 %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
449 ; FUNC-LABEL: {{^}}lds_atomic_umin_noret_i64_offset:
450 ; SI: DS_MIN_U64 {{.*}} offset:32
452 define void @lds_atomic_umin_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
453 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
454 %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
458 ; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64:
461 define void @lds_atomic_umax_noret_i64(i64 addrspace(3)* %ptr) nounwind {
462 %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
466 ; FUNC-LABEL: {{^}}lds_atomic_umax_noret_i64_offset:
467 ; SI: DS_MAX_U64 {{.*}} offset:32
469 define void @lds_atomic_umax_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
470 %gep = getelementptr i64 addrspace(3)* %ptr, i32 4
471 %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst