xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/local-atomics64.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=SI -check-prefix=GCN %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=VI -check-prefix=GCN %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xchg_ret_i64:
5*9880d681SAndroid Build Coastguard Worker; GCN: ds_wrxchg_rtn_b64
6*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
7*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xchg_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
8*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
9*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
10*9880d681SAndroid Build Coastguard Worker  ret void
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xchg_ret_i64_offset:
14*9880d681SAndroid Build Coastguard Worker; GCN: ds_wrxchg_rtn_b64 {{.*}} offset:32
15*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
16*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xchg_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
17*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
18*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
19*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
20*9880d681SAndroid Build Coastguard Worker  ret void
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add_ret_i64:
24*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_rtn_u64
25*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
26*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
27*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
28*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
29*9880d681SAndroid Build Coastguard Worker  ret void
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add_ret_i64_offset:
33*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0xb
34*9880d681SAndroid Build Coastguard Worker; VI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x2c
35*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9
36*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0
37*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]]
38*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32
39*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 [[RESULT]],
40*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
41*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
42*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i64 4
43*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
44*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add1_ret_i64:
49*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 1{{$}}
50*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0{{$}}
51*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
52*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 [[RESULT]],
53*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
54*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add1_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
55*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst
56*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
57*9880d681SAndroid Build Coastguard Worker  ret void
58*9880d681SAndroid Build Coastguard Worker}
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add1_ret_i64_offset:
61*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_rtn_u64 {{.*}} offset:32
62*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
63*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add1_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
64*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
65*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst
66*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub_ret_i64:
71*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_rtn_u64
72*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
73*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
74*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst
75*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub_ret_i64_offset:
80*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_rtn_u64 {{.*}} offset:32
81*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
82*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
83*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
84*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst
85*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
86*9880d681SAndroid Build Coastguard Worker  ret void
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub1_ret_i64:
90*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 1{{$}}
91*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0{{$}}
92*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_rtn_u64 [[RESULT:v\[[0-9]+:[0-9]+\]]], [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
93*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dwordx2 [[RESULT]],
94*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
95*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub1_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
96*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
97*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
98*9880d681SAndroid Build Coastguard Worker  ret void
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub1_ret_i64_offset:
102*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_rtn_u64 {{.*}} offset:32
103*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
104*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub1_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
105*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
106*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
107*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_and_ret_i64:
112*9880d681SAndroid Build Coastguard Worker; GCN: ds_and_rtn_b64
113*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
114*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_and_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
115*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
116*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_and_ret_i64_offset:
121*9880d681SAndroid Build Coastguard Worker; GCN: ds_and_rtn_b64 {{.*}} offset:32
122*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
123*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_and_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
124*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
125*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
126*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
127*9880d681SAndroid Build Coastguard Worker  ret void
128*9880d681SAndroid Build Coastguard Worker}
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_or_ret_i64:
131*9880d681SAndroid Build Coastguard Worker; GCN: ds_or_rtn_b64
132*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
133*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_or_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
134*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
135*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
136*9880d681SAndroid Build Coastguard Worker  ret void
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_or_ret_i64_offset:
140*9880d681SAndroid Build Coastguard Worker; GCN: ds_or_rtn_b64 {{.*}} offset:32
141*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
142*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_or_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
143*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
144*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
145*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
146*9880d681SAndroid Build Coastguard Worker  ret void
147*9880d681SAndroid Build Coastguard Worker}
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xor_ret_i64:
150*9880d681SAndroid Build Coastguard Worker; GCN: ds_xor_rtn_b64
151*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
152*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xor_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
153*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
154*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
155*9880d681SAndroid Build Coastguard Worker  ret void
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xor_ret_i64_offset:
159*9880d681SAndroid Build Coastguard Worker; GCN: ds_xor_rtn_b64 {{.*}} offset:32
160*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
161*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xor_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
162*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
163*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
164*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
165*9880d681SAndroid Build Coastguard Worker  ret void
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; FIXME: There is no atomic nand instr
169*9880d681SAndroid Build Coastguard Worker; XGCN-LABEL: {{^}}lds_atomic_nand_ret_i64:uction, so we somehow need to expand this.
170*9880d681SAndroid Build Coastguard Worker; define void @lds_atomic_nand_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
171*9880d681SAndroid Build Coastguard Worker;   %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
172*9880d681SAndroid Build Coastguard Worker;   store i64 %result, i64 addrspace(1)* %out, align 8
173*9880d681SAndroid Build Coastguard Worker;   ret void
174*9880d681SAndroid Build Coastguard Worker; }
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_min_ret_i64:
177*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_rtn_i64
178*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
179*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_min_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
180*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
181*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
182*9880d681SAndroid Build Coastguard Worker  ret void
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_min_ret_i64_offset:
186*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_rtn_i64 {{.*}} offset:32
187*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
188*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_min_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
189*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
190*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
191*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
192*9880d681SAndroid Build Coastguard Worker  ret void
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_max_ret_i64:
196*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_rtn_i64
197*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
198*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_max_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
199*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
200*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
201*9880d681SAndroid Build Coastguard Worker  ret void
202*9880d681SAndroid Build Coastguard Worker}
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_max_ret_i64_offset:
205*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_rtn_i64 {{.*}} offset:32
206*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
207*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_max_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
208*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
209*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
210*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
211*9880d681SAndroid Build Coastguard Worker  ret void
212*9880d681SAndroid Build Coastguard Worker}
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umin_ret_i64:
215*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_rtn_u64
216*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
217*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umin_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
218*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
219*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
220*9880d681SAndroid Build Coastguard Worker  ret void
221*9880d681SAndroid Build Coastguard Worker}
222*9880d681SAndroid Build Coastguard Worker
223*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umin_ret_i64_offset:
224*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_rtn_u64 {{.*}} offset:32
225*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
226*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umin_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
227*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
228*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
229*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
230*9880d681SAndroid Build Coastguard Worker  ret void
231*9880d681SAndroid Build Coastguard Worker}
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umax_ret_i64:
234*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_rtn_u64
235*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
236*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umax_ret_i64(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
237*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
238*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
239*9880d681SAndroid Build Coastguard Worker  ret void
240*9880d681SAndroid Build Coastguard Worker}
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umax_ret_i64_offset:
243*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_rtn_u64 {{.*}} offset:32
244*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
245*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umax_ret_i64_offset(i64 addrspace(1)* %out, i64 addrspace(3)* %ptr) nounwind {
246*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
247*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst
248*9880d681SAndroid Build Coastguard Worker  store i64 %result, i64 addrspace(1)* %out, align 8
249*9880d681SAndroid Build Coastguard Worker  ret void
250*9880d681SAndroid Build Coastguard Worker}
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xchg_noret_i64:
253*9880d681SAndroid Build Coastguard Worker; GCN: ds_wrxchg_rtn_b64
254*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
255*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xchg_noret_i64(i64 addrspace(3)* %ptr) nounwind {
256*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xchg i64 addrspace(3)* %ptr, i64 4 seq_cst
257*9880d681SAndroid Build Coastguard Worker  ret void
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xchg_noret_i64_offset:
261*9880d681SAndroid Build Coastguard Worker; GCN: ds_wrxchg_rtn_b64 {{.*}} offset:32
262*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
263*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xchg_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
264*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
265*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xchg i64 addrspace(3)* %gep, i64 4 seq_cst
266*9880d681SAndroid Build Coastguard Worker  ret void
267*9880d681SAndroid Build Coastguard Worker}
268*9880d681SAndroid Build Coastguard Worker
269*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add_noret_i64:
270*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_u64
271*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
272*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add_noret_i64(i64 addrspace(3)* %ptr) nounwind {
273*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %ptr, i64 4 seq_cst
274*9880d681SAndroid Build Coastguard Worker  ret void
275*9880d681SAndroid Build Coastguard Worker}
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add_noret_i64_offset:
278*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x9
279*9880d681SAndroid Build Coastguard Worker; VI: s_load_dword [[PTR:s[0-9]+]], s{{\[[0-9]+:[0-9]+\]}}, 0x24
280*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 9
281*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0
282*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[VPTR:v[0-9]+]], [[PTR]]
283*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}} offset:32
284*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
285*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
286*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i64 4
287*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %gep, i64 9 seq_cst
288*9880d681SAndroid Build Coastguard Worker  ret void
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add1_noret_i64:
292*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 1{{$}}
293*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0{{$}}
294*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
295*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
296*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add1_noret_i64(i64 addrspace(3)* %ptr) nounwind {
297*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %ptr, i64 1 seq_cst
298*9880d681SAndroid Build Coastguard Worker  ret void
299*9880d681SAndroid Build Coastguard Worker}
300*9880d681SAndroid Build Coastguard Worker
301*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_add1_noret_i64_offset:
302*9880d681SAndroid Build Coastguard Worker; GCN: ds_add_u64 {{.*}} offset:32
303*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
304*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_add1_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
305*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
306*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw add i64 addrspace(3)* %gep, i64 1 seq_cst
307*9880d681SAndroid Build Coastguard Worker  ret void
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub_noret_i64:
311*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_u64
312*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
313*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub_noret_i64(i64 addrspace(3)* %ptr) nounwind {
314*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 4 seq_cst
315*9880d681SAndroid Build Coastguard Worker  ret void
316*9880d681SAndroid Build Coastguard Worker}
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub_noret_i64_offset:
319*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_u64 {{.*}} offset:32
320*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
321*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
322*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
323*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %gep, i64 4 seq_cst
324*9880d681SAndroid Build Coastguard Worker  ret void
325*9880d681SAndroid Build Coastguard Worker}
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub1_noret_i64:
328*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[LOVDATA:[0-9]+]], 1{{$}}
329*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 v[[HIVDATA:[0-9]+]], 0{{$}}
330*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_u64 [[VPTR]], v{{\[}}[[LOVDATA]]:[[HIVDATA]]{{\]}}
331*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
332*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub1_noret_i64(i64 addrspace(3)* %ptr) nounwind {
333*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %ptr, i64 1 seq_cst
334*9880d681SAndroid Build Coastguard Worker  ret void
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_sub1_noret_i64_offset:
338*9880d681SAndroid Build Coastguard Worker; GCN: ds_sub_u64 {{.*}} offset:32
339*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
340*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_sub1_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
341*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
342*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw sub i64 addrspace(3)* %gep, i64 1 seq_cst
343*9880d681SAndroid Build Coastguard Worker  ret void
344*9880d681SAndroid Build Coastguard Worker}
345*9880d681SAndroid Build Coastguard Worker
346*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_and_noret_i64:
347*9880d681SAndroid Build Coastguard Worker; GCN: ds_and_b64
348*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
349*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_and_noret_i64(i64 addrspace(3)* %ptr) nounwind {
350*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw and i64 addrspace(3)* %ptr, i64 4 seq_cst
351*9880d681SAndroid Build Coastguard Worker  ret void
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_and_noret_i64_offset:
355*9880d681SAndroid Build Coastguard Worker; GCN: ds_and_b64 {{.*}} offset:32
356*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
357*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_and_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
358*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
359*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw and i64 addrspace(3)* %gep, i64 4 seq_cst
360*9880d681SAndroid Build Coastguard Worker  ret void
361*9880d681SAndroid Build Coastguard Worker}
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_or_noret_i64:
364*9880d681SAndroid Build Coastguard Worker; GCN: ds_or_b64
365*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
366*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_or_noret_i64(i64 addrspace(3)* %ptr) nounwind {
367*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw or i64 addrspace(3)* %ptr, i64 4 seq_cst
368*9880d681SAndroid Build Coastguard Worker  ret void
369*9880d681SAndroid Build Coastguard Worker}
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_or_noret_i64_offset:
372*9880d681SAndroid Build Coastguard Worker; GCN: ds_or_b64 {{.*}} offset:32
373*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
374*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_or_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
375*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
376*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw or i64 addrspace(3)* %gep, i64 4 seq_cst
377*9880d681SAndroid Build Coastguard Worker  ret void
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xor_noret_i64:
381*9880d681SAndroid Build Coastguard Worker; GCN: ds_xor_b64
382*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
383*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xor_noret_i64(i64 addrspace(3)* %ptr) nounwind {
384*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xor i64 addrspace(3)* %ptr, i64 4 seq_cst
385*9880d681SAndroid Build Coastguard Worker  ret void
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_xor_noret_i64_offset:
389*9880d681SAndroid Build Coastguard Worker; GCN: ds_xor_b64 {{.*}} offset:32
390*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
391*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_xor_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
392*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
393*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw xor i64 addrspace(3)* %gep, i64 4 seq_cst
394*9880d681SAndroid Build Coastguard Worker  ret void
395*9880d681SAndroid Build Coastguard Worker}
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Worker; FIXME: There is no atomic nand instr
398*9880d681SAndroid Build Coastguard Worker; XGCN-LABEL: {{^}}lds_atomic_nand_noret_i64:uction, so we somehow need to expand this.
399*9880d681SAndroid Build Coastguard Worker; define void @lds_atomic_nand_noret_i64(i64 addrspace(3)* %ptr) nounwind {
400*9880d681SAndroid Build Coastguard Worker;   %result = atomicrmw nand i64 addrspace(3)* %ptr, i32 4 seq_cst
401*9880d681SAndroid Build Coastguard Worker;   ret void
402*9880d681SAndroid Build Coastguard Worker; }
403*9880d681SAndroid Build Coastguard Worker
404*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_min_noret_i64:
405*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_i64
406*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
407*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_min_noret_i64(i64 addrspace(3)* %ptr) nounwind {
408*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw min i64 addrspace(3)* %ptr, i64 4 seq_cst
409*9880d681SAndroid Build Coastguard Worker  ret void
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_min_noret_i64_offset:
413*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_i64 {{.*}} offset:32
414*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
415*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_min_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
416*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
417*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw min i64 addrspace(3)* %gep, i64 4 seq_cst
418*9880d681SAndroid Build Coastguard Worker  ret void
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_max_noret_i64:
422*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_i64
423*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
424*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_max_noret_i64(i64 addrspace(3)* %ptr) nounwind {
425*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw max i64 addrspace(3)* %ptr, i64 4 seq_cst
426*9880d681SAndroid Build Coastguard Worker  ret void
427*9880d681SAndroid Build Coastguard Worker}
428*9880d681SAndroid Build Coastguard Worker
429*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_max_noret_i64_offset:
430*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_i64 {{.*}} offset:32
431*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
432*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_max_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
433*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
434*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw max i64 addrspace(3)* %gep, i64 4 seq_cst
435*9880d681SAndroid Build Coastguard Worker  ret void
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umin_noret_i64:
439*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_u64
440*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
441*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umin_noret_i64(i64 addrspace(3)* %ptr) nounwind {
442*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umin i64 addrspace(3)* %ptr, i64 4 seq_cst
443*9880d681SAndroid Build Coastguard Worker  ret void
444*9880d681SAndroid Build Coastguard Worker}
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umin_noret_i64_offset:
447*9880d681SAndroid Build Coastguard Worker; GCN: ds_min_u64 {{.*}} offset:32
448*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
449*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umin_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
450*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
451*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umin i64 addrspace(3)* %gep, i64 4 seq_cst
452*9880d681SAndroid Build Coastguard Worker  ret void
453*9880d681SAndroid Build Coastguard Worker}
454*9880d681SAndroid Build Coastguard Worker
455*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umax_noret_i64:
456*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_u64
457*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
458*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umax_noret_i64(i64 addrspace(3)* %ptr) nounwind {
459*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umax i64 addrspace(3)* %ptr, i64 4 seq_cst
460*9880d681SAndroid Build Coastguard Worker  ret void
461*9880d681SAndroid Build Coastguard Worker}
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}lds_atomic_umax_noret_i64_offset:
464*9880d681SAndroid Build Coastguard Worker; GCN: ds_max_u64 {{.*}} offset:32
465*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm
466*9880d681SAndroid Build Coastguard Workerdefine void @lds_atomic_umax_noret_i64_offset(i64 addrspace(3)* %ptr) nounwind {
467*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i64, i64 addrspace(3)* %ptr, i32 4
468*9880d681SAndroid Build Coastguard Worker  %result = atomicrmw umax i64 addrspace(3)* %gep, i64 4 seq_cst
469*9880d681SAndroid Build Coastguard Worker  ret void
470*9880d681SAndroid Build Coastguard Worker}
471