xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/global_atomics.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI -check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI -check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_offset:
5*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
6*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_offset(i32 addrspace(1)* %out, i32 %in) {
7*9880d681SAndroid Build Coastguard Workerentry:
8*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
9*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
10*9880d681SAndroid Build Coastguard Worker  ret void
11*9880d681SAndroid Build Coastguard Worker}
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_soffset:
14*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 [[SREG:s[0-9]+]], 0x8ca0
15*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], [[SREG]]{{$}}
16*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_soffset(i32 addrspace(1)* %out, i32 %in) {
17*9880d681SAndroid Build Coastguard Workerentry:
18*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 9000
19*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
20*9880d681SAndroid Build Coastguard Worker  ret void
21*9880d681SAndroid Build Coastguard Worker}
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_huge_offset:
24*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mov_b32_e32 v[[PTRLO:[0-9]+]], 0xdeac
25*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_mov_b32_e32 v[[PTRHI:[0-9]+]], 0xabcd
26*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v{{\[}}[[PTRLO]]:[[PTRHI]]{{\]}}, s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
27*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add
28*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_huge_offset(i32 addrspace(1)* %out, i32 %in) {
29*9880d681SAndroid Build Coastguard Workerentry:
30*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 47224239175595
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
33*9880d681SAndroid Build Coastguard Worker  ret void
34*9880d681SAndroid Build Coastguard Worker}
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_offset:
37*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
38*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
39*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
40*9880d681SAndroid Build Coastguard Workerentry:
41*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
42*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
43*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_addr64_offset:
48*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
49*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
50*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
51*9880d681SAndroid Build Coastguard Workerentry:
52*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
53*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
54*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
55*9880d681SAndroid Build Coastguard Worker  ret void
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64_offset:
59*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
60*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
61*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
62*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
63*9880d681SAndroid Build Coastguard Workerentry:
64*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
65*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
66*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
67*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
68*9880d681SAndroid Build Coastguard Worker  ret void
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32:
72*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
73*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32(i32 addrspace(1)* %out, i32 %in) {
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret:
80*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
81*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
82*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
83*9880d681SAndroid Build Coastguard Workerentry:
84*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
85*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
86*9880d681SAndroid Build Coastguard Worker  ret void
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_addr64:
90*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
91*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
92*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
93*9880d681SAndroid Build Coastguard Workerentry:
94*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
95*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
96*9880d681SAndroid Build Coastguard Worker  ret void
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64:
100*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
101*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
102*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
103*9880d681SAndroid Build Coastguard Workerdefine void @atomic_add_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
106*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
107*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_offset:
112*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
113*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_offset(i32 addrspace(1)* %out, i32 %in) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
116*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_offset:
121*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
122*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
123*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
124*9880d681SAndroid Build Coastguard Workerentry:
125*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
126*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
127*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
128*9880d681SAndroid Build Coastguard Worker  ret void
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_addr64_offset:
132*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
133*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
134*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
137*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
138*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64_offset:
143*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
144*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
145*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
146*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
149*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
150*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
151*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
152*9880d681SAndroid Build Coastguard Worker  ret void
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32:
156*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
157*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32(i32 addrspace(1)* %out, i32 %in) {
158*9880d681SAndroid Build Coastguard Workerentry:
159*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
160*9880d681SAndroid Build Coastguard Worker  ret void
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret:
164*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
165*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
166*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
167*9880d681SAndroid Build Coastguard Workerentry:
168*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
169*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
170*9880d681SAndroid Build Coastguard Worker  ret void
171*9880d681SAndroid Build Coastguard Worker}
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_addr64:
174*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
175*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
176*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
177*9880d681SAndroid Build Coastguard Workerentry:
178*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
179*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
180*9880d681SAndroid Build Coastguard Worker  ret void
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64:
184*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
185*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
186*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
187*9880d681SAndroid Build Coastguard Workerdefine void @atomic_and_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
188*9880d681SAndroid Build Coastguard Workerentry:
189*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
190*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
191*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
192*9880d681SAndroid Build Coastguard Worker  ret void
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_offset:
196*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
197*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_offset(i32 addrspace(1)* %out, i32 %in) {
198*9880d681SAndroid Build Coastguard Workerentry:
199*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
200*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
201*9880d681SAndroid Build Coastguard Worker  ret void
202*9880d681SAndroid Build Coastguard Worker}
203*9880d681SAndroid Build Coastguard Worker
204*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_offset:
205*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
206*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
207*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
208*9880d681SAndroid Build Coastguard Workerentry:
209*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
210*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
211*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
212*9880d681SAndroid Build Coastguard Worker  ret void
213*9880d681SAndroid Build Coastguard Worker}
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_addr64_offset:
216*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
217*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
218*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
219*9880d681SAndroid Build Coastguard Workerentry:
220*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
221*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
222*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64_offset:
227*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
228*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
229*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
230*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
231*9880d681SAndroid Build Coastguard Workerentry:
232*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
233*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
234*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
235*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
236*9880d681SAndroid Build Coastguard Worker  ret void
237*9880d681SAndroid Build Coastguard Worker}
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32:
240*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
241*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32(i32 addrspace(1)* %out, i32 %in) {
242*9880d681SAndroid Build Coastguard Workerentry:
243*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
244*9880d681SAndroid Build Coastguard Worker  ret void
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret:
248*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
249*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
250*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
251*9880d681SAndroid Build Coastguard Workerentry:
252*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
253*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
254*9880d681SAndroid Build Coastguard Worker  ret void
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_addr64:
258*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
259*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
260*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
261*9880d681SAndroid Build Coastguard Workerentry:
262*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
263*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
264*9880d681SAndroid Build Coastguard Worker  ret void
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64:
268*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
269*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
270*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
271*9880d681SAndroid Build Coastguard Workerdefine void @atomic_sub_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
272*9880d681SAndroid Build Coastguard Workerentry:
273*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
274*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
275*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
276*9880d681SAndroid Build Coastguard Worker  ret void
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_offset:
280*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
281*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_offset(i32 addrspace(1)* %out, i32 %in) {
282*9880d681SAndroid Build Coastguard Workerentry:
283*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
284*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
285*9880d681SAndroid Build Coastguard Worker  ret void
286*9880d681SAndroid Build Coastguard Worker}
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_offset:
289*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
290*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
291*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
292*9880d681SAndroid Build Coastguard Workerentry:
293*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
294*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
295*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
296*9880d681SAndroid Build Coastguard Worker  ret void
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_addr64_offset:
300*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
301*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
302*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
303*9880d681SAndroid Build Coastguard Workerentry:
304*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
305*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
306*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
307*9880d681SAndroid Build Coastguard Worker  ret void
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64_offset:
311*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
312*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
313*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
314*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
315*9880d681SAndroid Build Coastguard Workerentry:
316*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
317*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
318*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
319*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
320*9880d681SAndroid Build Coastguard Worker  ret void
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32:
324*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
325*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32(i32 addrspace(1)* %out, i32 %in) {
326*9880d681SAndroid Build Coastguard Workerentry:
327*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
328*9880d681SAndroid Build Coastguard Worker  ret void
329*9880d681SAndroid Build Coastguard Worker}
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret:
332*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
333*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
334*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
335*9880d681SAndroid Build Coastguard Workerentry:
336*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
337*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
338*9880d681SAndroid Build Coastguard Worker  ret void
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_addr64:
342*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
343*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
344*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
345*9880d681SAndroid Build Coastguard Workerentry:
346*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
347*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
348*9880d681SAndroid Build Coastguard Worker  ret void
349*9880d681SAndroid Build Coastguard Worker}
350*9880d681SAndroid Build Coastguard Worker
351*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64:
352*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
353*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
354*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
355*9880d681SAndroid Build Coastguard Workerdefine void @atomic_max_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
356*9880d681SAndroid Build Coastguard Workerentry:
357*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
358*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
359*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
360*9880d681SAndroid Build Coastguard Worker  ret void
361*9880d681SAndroid Build Coastguard Worker}
362*9880d681SAndroid Build Coastguard Worker
363*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_offset:
364*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
365*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_offset(i32 addrspace(1)* %out, i32 %in) {
366*9880d681SAndroid Build Coastguard Workerentry:
367*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
368*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
369*9880d681SAndroid Build Coastguard Worker  ret void
370*9880d681SAndroid Build Coastguard Worker}
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_offset:
373*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
374*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
375*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
376*9880d681SAndroid Build Coastguard Workerentry:
377*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
378*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
379*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
380*9880d681SAndroid Build Coastguard Worker  ret void
381*9880d681SAndroid Build Coastguard Worker}
382*9880d681SAndroid Build Coastguard Worker
383*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_addr64_offset:
384*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
385*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
386*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
387*9880d681SAndroid Build Coastguard Workerentry:
388*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
389*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
390*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
391*9880d681SAndroid Build Coastguard Worker  ret void
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64_offset:
395*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
396*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
397*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
398*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
399*9880d681SAndroid Build Coastguard Workerentry:
400*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
401*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
402*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
403*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
404*9880d681SAndroid Build Coastguard Worker  ret void
405*9880d681SAndroid Build Coastguard Worker}
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32:
408*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
409*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32(i32 addrspace(1)* %out, i32 %in) {
410*9880d681SAndroid Build Coastguard Workerentry:
411*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
412*9880d681SAndroid Build Coastguard Worker  ret void
413*9880d681SAndroid Build Coastguard Worker}
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret:
416*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
417*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
418*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
419*9880d681SAndroid Build Coastguard Workerentry:
420*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
421*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
422*9880d681SAndroid Build Coastguard Worker  ret void
423*9880d681SAndroid Build Coastguard Worker}
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_addr64:
426*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
427*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
428*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
429*9880d681SAndroid Build Coastguard Workerentry:
430*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
431*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
432*9880d681SAndroid Build Coastguard Worker  ret void
433*9880d681SAndroid Build Coastguard Worker}
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64:
436*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
437*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
438*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
439*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umax_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
440*9880d681SAndroid Build Coastguard Workerentry:
441*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
442*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
443*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
444*9880d681SAndroid Build Coastguard Worker  ret void
445*9880d681SAndroid Build Coastguard Worker}
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_offset:
448*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
449*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_offset(i32 addrspace(1)* %out, i32 %in) {
450*9880d681SAndroid Build Coastguard Workerentry:
451*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
452*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
453*9880d681SAndroid Build Coastguard Worker  ret void
454*9880d681SAndroid Build Coastguard Worker}
455*9880d681SAndroid Build Coastguard Worker
456*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_offset:
457*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
458*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
459*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
460*9880d681SAndroid Build Coastguard Workerentry:
461*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
462*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
463*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
464*9880d681SAndroid Build Coastguard Worker  ret void
465*9880d681SAndroid Build Coastguard Worker}
466*9880d681SAndroid Build Coastguard Worker
467*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_addr64_offset:
468*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
469*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
470*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
471*9880d681SAndroid Build Coastguard Workerentry:
472*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
473*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
474*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
475*9880d681SAndroid Build Coastguard Worker  ret void
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64_offset:
479*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
480*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
481*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
482*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
483*9880d681SAndroid Build Coastguard Workerentry:
484*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
485*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
486*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
487*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
488*9880d681SAndroid Build Coastguard Worker  ret void
489*9880d681SAndroid Build Coastguard Worker}
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32:
492*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
493*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32(i32 addrspace(1)* %out, i32 %in) {
494*9880d681SAndroid Build Coastguard Workerentry:
495*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
496*9880d681SAndroid Build Coastguard Worker  ret void
497*9880d681SAndroid Build Coastguard Worker}
498*9880d681SAndroid Build Coastguard Worker
499*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret:
500*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
501*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
502*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
503*9880d681SAndroid Build Coastguard Workerentry:
504*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
505*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
506*9880d681SAndroid Build Coastguard Worker  ret void
507*9880d681SAndroid Build Coastguard Worker}
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_addr64:
510*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
511*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
512*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
513*9880d681SAndroid Build Coastguard Workerentry:
514*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
515*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
516*9880d681SAndroid Build Coastguard Worker  ret void
517*9880d681SAndroid Build Coastguard Worker}
518*9880d681SAndroid Build Coastguard Worker
519*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64:
520*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
521*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
522*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
523*9880d681SAndroid Build Coastguard Workerdefine void @atomic_min_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
524*9880d681SAndroid Build Coastguard Workerentry:
525*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
526*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
527*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
528*9880d681SAndroid Build Coastguard Worker  ret void
529*9880d681SAndroid Build Coastguard Worker}
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_offset:
532*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
533*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_offset(i32 addrspace(1)* %out, i32 %in) {
534*9880d681SAndroid Build Coastguard Workerentry:
535*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
536*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
537*9880d681SAndroid Build Coastguard Worker  ret void
538*9880d681SAndroid Build Coastguard Worker}
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_offset:
541*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
542*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
543*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
544*9880d681SAndroid Build Coastguard Workerentry:
545*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
546*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
547*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
548*9880d681SAndroid Build Coastguard Worker  ret void
549*9880d681SAndroid Build Coastguard Worker}
550*9880d681SAndroid Build Coastguard Worker
551*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_addr64_offset:
552*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
553*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
554*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
555*9880d681SAndroid Build Coastguard Workerentry:
556*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
557*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
558*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
559*9880d681SAndroid Build Coastguard Worker  ret void
560*9880d681SAndroid Build Coastguard Worker}
561*9880d681SAndroid Build Coastguard Worker
562*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64_offset:
563*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
564*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
565*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
566*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
567*9880d681SAndroid Build Coastguard Workerentry:
568*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
569*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
570*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
571*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
572*9880d681SAndroid Build Coastguard Worker  ret void
573*9880d681SAndroid Build Coastguard Worker}
574*9880d681SAndroid Build Coastguard Worker
575*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32:
576*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
577*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32(i32 addrspace(1)* %out, i32 %in) {
578*9880d681SAndroid Build Coastguard Workerentry:
579*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
580*9880d681SAndroid Build Coastguard Worker  ret void
581*9880d681SAndroid Build Coastguard Worker}
582*9880d681SAndroid Build Coastguard Worker
583*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret:
584*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
585*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
586*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
587*9880d681SAndroid Build Coastguard Workerentry:
588*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
589*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
590*9880d681SAndroid Build Coastguard Worker  ret void
591*9880d681SAndroid Build Coastguard Worker}
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_addr64:
594*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
595*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
596*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
597*9880d681SAndroid Build Coastguard Workerentry:
598*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
599*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
600*9880d681SAndroid Build Coastguard Worker  ret void
601*9880d681SAndroid Build Coastguard Worker}
602*9880d681SAndroid Build Coastguard Worker
603*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64:
604*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
605*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
606*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
607*9880d681SAndroid Build Coastguard Workerdefine void @atomic_umin_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
608*9880d681SAndroid Build Coastguard Workerentry:
609*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
610*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
611*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
612*9880d681SAndroid Build Coastguard Worker  ret void
613*9880d681SAndroid Build Coastguard Worker}
614*9880d681SAndroid Build Coastguard Worker
615*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_offset:
616*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
617*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_offset(i32 addrspace(1)* %out, i32 %in) {
618*9880d681SAndroid Build Coastguard Workerentry:
619*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
620*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
621*9880d681SAndroid Build Coastguard Worker  ret void
622*9880d681SAndroid Build Coastguard Worker}
623*9880d681SAndroid Build Coastguard Worker
624*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_offset:
625*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
626*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
627*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
628*9880d681SAndroid Build Coastguard Workerentry:
629*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
630*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
631*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
632*9880d681SAndroid Build Coastguard Worker  ret void
633*9880d681SAndroid Build Coastguard Worker}
634*9880d681SAndroid Build Coastguard Worker
635*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_addr64_offset:
636*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
637*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
638*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
639*9880d681SAndroid Build Coastguard Workerentry:
640*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
641*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
642*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
643*9880d681SAndroid Build Coastguard Worker  ret void
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64_offset:
647*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
648*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
649*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
650*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
651*9880d681SAndroid Build Coastguard Workerentry:
652*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
653*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
654*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
655*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
656*9880d681SAndroid Build Coastguard Worker  ret void
657*9880d681SAndroid Build Coastguard Worker}
658*9880d681SAndroid Build Coastguard Worker
659*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32:
660*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
661*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32(i32 addrspace(1)* %out, i32 %in) {
662*9880d681SAndroid Build Coastguard Workerentry:
663*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
664*9880d681SAndroid Build Coastguard Worker  ret void
665*9880d681SAndroid Build Coastguard Worker}
666*9880d681SAndroid Build Coastguard Worker
667*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret:
668*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
669*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
670*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
671*9880d681SAndroid Build Coastguard Workerentry:
672*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
673*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
674*9880d681SAndroid Build Coastguard Worker  ret void
675*9880d681SAndroid Build Coastguard Worker}
676*9880d681SAndroid Build Coastguard Worker
677*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_addr64:
678*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
679*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
680*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
681*9880d681SAndroid Build Coastguard Workerentry:
682*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
683*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
684*9880d681SAndroid Build Coastguard Worker  ret void
685*9880d681SAndroid Build Coastguard Worker}
686*9880d681SAndroid Build Coastguard Worker
687*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64:
688*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
689*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
690*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
691*9880d681SAndroid Build Coastguard Workerdefine void @atomic_or_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
692*9880d681SAndroid Build Coastguard Workerentry:
693*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
694*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
695*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
696*9880d681SAndroid Build Coastguard Worker  ret void
697*9880d681SAndroid Build Coastguard Worker}
698*9880d681SAndroid Build Coastguard Worker
699*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_offset:
700*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
701*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_offset(i32 addrspace(1)* %out, i32 %in) {
702*9880d681SAndroid Build Coastguard Workerentry:
703*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
704*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
705*9880d681SAndroid Build Coastguard Worker  ret void
706*9880d681SAndroid Build Coastguard Worker}
707*9880d681SAndroid Build Coastguard Worker
708*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_offset:
709*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
710*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
711*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
712*9880d681SAndroid Build Coastguard Workerentry:
713*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
714*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
715*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
716*9880d681SAndroid Build Coastguard Worker  ret void
717*9880d681SAndroid Build Coastguard Worker}
718*9880d681SAndroid Build Coastguard Worker
719*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
720*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
721*9880d681SAndroid Build Coastguard Worker
722*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}{{$}}
723*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
724*9880d681SAndroid Build Coastguard Workerentry:
725*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
726*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
727*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
728*9880d681SAndroid Build Coastguard Worker  ret void
729*9880d681SAndroid Build Coastguard Worker}
730*9880d681SAndroid Build Coastguard Worker
731*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
732*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
733*9880d681SAndroid Build Coastguard Worker
734*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
735*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
736*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
737*9880d681SAndroid Build Coastguard Workerentry:
738*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
739*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
740*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
741*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
742*9880d681SAndroid Build Coastguard Worker  ret void
743*9880d681SAndroid Build Coastguard Worker}
744*9880d681SAndroid Build Coastguard Worker
745*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32:
746*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
747*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32(i32 addrspace(1)* %out, i32 %in) {
748*9880d681SAndroid Build Coastguard Workerentry:
749*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
750*9880d681SAndroid Build Coastguard Worker  ret void
751*9880d681SAndroid Build Coastguard Worker}
752*9880d681SAndroid Build Coastguard Worker
753*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret:
754*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
755*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
756*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
757*9880d681SAndroid Build Coastguard Workerentry:
758*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
759*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
760*9880d681SAndroid Build Coastguard Worker  ret void
761*9880d681SAndroid Build Coastguard Worker}
762*9880d681SAndroid Build Coastguard Worker
763*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64:
764*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
765*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
766*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
767*9880d681SAndroid Build Coastguard Workerentry:
768*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
769*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
770*9880d681SAndroid Build Coastguard Worker  ret void
771*9880d681SAndroid Build Coastguard Worker}
772*9880d681SAndroid Build Coastguard Worker
773*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
774*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
775*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_swap [[RET:v[0-9]+]],  v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
776*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
777*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
778*9880d681SAndroid Build Coastguard Workerentry:
779*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
780*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
781*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
782*9880d681SAndroid Build Coastguard Worker  ret void
783*9880d681SAndroid Build Coastguard Worker}
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_offset:
786*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
787*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_offset(i32 addrspace(1)* %out, i32 %in, i32 %old) {
788*9880d681SAndroid Build Coastguard Workerentry:
789*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
790*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
791*9880d681SAndroid Build Coastguard Worker  ret void
792*9880d681SAndroid Build Coastguard Worker}
793*9880d681SAndroid Build Coastguard Worker
794*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
795*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
796*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]]
797*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
798*9880d681SAndroid Build Coastguard Workerentry:
799*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
800*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
801*9880d681SAndroid Build Coastguard Worker  %extract0 = extractvalue { i32, i1 } %val, 0
802*9880d681SAndroid Build Coastguard Worker  store i32 %extract0, i32 addrspace(1)* %out2
803*9880d681SAndroid Build Coastguard Worker  ret void
804*9880d681SAndroid Build Coastguard Worker}
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
807*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
808*9880d681SAndroid Build Coastguard Worker
809*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
810*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
811*9880d681SAndroid Build Coastguard Workerentry:
812*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
813*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
814*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
815*9880d681SAndroid Build Coastguard Worker  ret void
816*9880d681SAndroid Build Coastguard Worker}
817*9880d681SAndroid Build Coastguard Worker
818*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
819*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
820*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
821*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]]
822*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
823*9880d681SAndroid Build Coastguard Workerentry:
824*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
825*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
826*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
827*9880d681SAndroid Build Coastguard Worker  %extract0 = extractvalue { i32, i1 } %val, 0
828*9880d681SAndroid Build Coastguard Worker  store i32 %extract0, i32 addrspace(1)* %out2
829*9880d681SAndroid Build Coastguard Worker  ret void
830*9880d681SAndroid Build Coastguard Worker}
831*9880d681SAndroid Build Coastguard Worker
832*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32:
833*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
834*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32(i32 addrspace(1)* %out, i32 %in, i32 %old) {
835*9880d681SAndroid Build Coastguard Workerentry:
836*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
837*9880d681SAndroid Build Coastguard Worker  ret void
838*9880d681SAndroid Build Coastguard Worker}
839*9880d681SAndroid Build Coastguard Worker
840*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret:
841*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
842*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]]
843*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
844*9880d681SAndroid Build Coastguard Workerentry:
845*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
846*9880d681SAndroid Build Coastguard Worker  %extract0 = extractvalue { i32, i1 } %val, 0
847*9880d681SAndroid Build Coastguard Worker  store i32 %extract0, i32 addrspace(1)* %out2
848*9880d681SAndroid Build Coastguard Worker  ret void
849*9880d681SAndroid Build Coastguard Worker}
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
852*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
853*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
854*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
855*9880d681SAndroid Build Coastguard Workerentry:
856*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
857*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
858*9880d681SAndroid Build Coastguard Worker  ret void
859*9880d681SAndroid Build Coastguard Worker}
860*9880d681SAndroid Build Coastguard Worker
861*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
862*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
863*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
864*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword v[[RET]]
865*9880d681SAndroid Build Coastguard Workerdefine void @atomic_cmpxchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
866*9880d681SAndroid Build Coastguard Workerentry:
867*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
868*9880d681SAndroid Build Coastguard Worker  %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
869*9880d681SAndroid Build Coastguard Worker  %extract0 = extractvalue { i32, i1 } %val, 0
870*9880d681SAndroid Build Coastguard Worker  store i32 %extract0, i32 addrspace(1)* %out2
871*9880d681SAndroid Build Coastguard Worker  ret void
872*9880d681SAndroid Build Coastguard Worker}
873*9880d681SAndroid Build Coastguard Worker
874*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_offset:
875*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
876*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_offset(i32 addrspace(1)* %out, i32 %in) {
877*9880d681SAndroid Build Coastguard Workerentry:
878*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
879*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
880*9880d681SAndroid Build Coastguard Worker  ret void
881*9880d681SAndroid Build Coastguard Worker}
882*9880d681SAndroid Build Coastguard Worker
883*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_offset:
884*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
885*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
886*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
887*9880d681SAndroid Build Coastguard Workerentry:
888*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
889*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
890*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
891*9880d681SAndroid Build Coastguard Worker  ret void
892*9880d681SAndroid Build Coastguard Worker}
893*9880d681SAndroid Build Coastguard Worker
894*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_addr64_offset:
895*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
896*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
897*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
898*9880d681SAndroid Build Coastguard Workerentry:
899*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
900*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
901*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
902*9880d681SAndroid Build Coastguard Worker  ret void
903*9880d681SAndroid Build Coastguard Worker}
904*9880d681SAndroid Build Coastguard Worker
905*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
906*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
907*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
908*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
909*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
910*9880d681SAndroid Build Coastguard Workerentry:
911*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
912*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
913*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
914*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
915*9880d681SAndroid Build Coastguard Worker  ret void
916*9880d681SAndroid Build Coastguard Worker}
917*9880d681SAndroid Build Coastguard Worker
918*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32:
919*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
920*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32(i32 addrspace(1)* %out, i32 %in) {
921*9880d681SAndroid Build Coastguard Workerentry:
922*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
923*9880d681SAndroid Build Coastguard Worker  ret void
924*9880d681SAndroid Build Coastguard Worker}
925*9880d681SAndroid Build Coastguard Worker
926*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret:
927*9880d681SAndroid Build Coastguard Worker; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
928*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
929*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
930*9880d681SAndroid Build Coastguard Workerentry:
931*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
932*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
933*9880d681SAndroid Build Coastguard Worker  ret void
934*9880d681SAndroid Build Coastguard Worker}
935*9880d681SAndroid Build Coastguard Worker
936*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_addr64:
937*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
938*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
939*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
940*9880d681SAndroid Build Coastguard Workerentry:
941*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
942*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
943*9880d681SAndroid Build Coastguard Worker  ret void
944*9880d681SAndroid Build Coastguard Worker}
945*9880d681SAndroid Build Coastguard Worker
946*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64:
947*9880d681SAndroid Build Coastguard Worker; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
948*9880d681SAndroid Build Coastguard Worker; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
949*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
950*9880d681SAndroid Build Coastguard Workerdefine void @atomic_xor_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
951*9880d681SAndroid Build Coastguard Workerentry:
952*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
953*9880d681SAndroid Build Coastguard Worker  %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
954*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out2
955*9880d681SAndroid Build Coastguard Worker  ret void
956*9880d681SAndroid Build Coastguard Worker}
957*9880d681SAndroid Build Coastguard Worker
958*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_offset:
959*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
960*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
961*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
962*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
963*9880d681SAndroid Build Coastguard Workerentry:
964*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %in, i64 4
965*9880d681SAndroid Build Coastguard Worker  %val = load atomic i32, i32 addrspace(1)* %gep  seq_cst, align 4
966*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
967*9880d681SAndroid Build Coastguard Worker  ret void
968*9880d681SAndroid Build Coastguard Worker}
969*9880d681SAndroid Build Coastguard Worker
970*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32:
971*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
972*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
973*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
974*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
975*9880d681SAndroid Build Coastguard Workerentry:
976*9880d681SAndroid Build Coastguard Worker  %val = load atomic i32, i32 addrspace(1)* %in seq_cst, align 4
977*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
978*9880d681SAndroid Build Coastguard Worker  ret void
979*9880d681SAndroid Build Coastguard Worker}
980*9880d681SAndroid Build Coastguard Worker
981*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_addr64_offset:
982*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
983*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
984*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
985*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_addr64_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
986*9880d681SAndroid Build Coastguard Workerentry:
987*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
988*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
989*9880d681SAndroid Build Coastguard Worker  %val = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4
990*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
991*9880d681SAndroid Build Coastguard Worker  ret void
992*9880d681SAndroid Build Coastguard Worker}
993*9880d681SAndroid Build Coastguard Worker
994*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_load_i32_addr64:
995*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
996*9880d681SAndroid Build Coastguard Worker; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
997*9880d681SAndroid Build Coastguard Worker; GCN: buffer_store_dword [[RET]]
998*9880d681SAndroid Build Coastguard Workerdefine void @atomic_load_i32_addr64(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
999*9880d681SAndroid Build Coastguard Workerentry:
1000*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
1001*9880d681SAndroid Build Coastguard Worker  %val = load atomic i32, i32 addrspace(1)* %ptr seq_cst, align 4
1002*9880d681SAndroid Build Coastguard Worker  store i32 %val, i32 addrspace(1)* %out
1003*9880d681SAndroid Build Coastguard Worker  ret void
1004*9880d681SAndroid Build Coastguard Worker}
1005*9880d681SAndroid Build Coastguard Worker
1006*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_offset:
1007*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
1008*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1009*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_offset(i32 %in, i32 addrspace(1)* %out) {
1010*9880d681SAndroid Build Coastguard Workerentry:
1011*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
1012*9880d681SAndroid Build Coastguard Worker  store atomic i32 %in, i32 addrspace(1)* %gep  seq_cst, align 4
1013*9880d681SAndroid Build Coastguard Worker  ret void
1014*9880d681SAndroid Build Coastguard Worker}
1015*9880d681SAndroid Build Coastguard Worker
1016*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32:
1017*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc{{$}}
1018*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1019*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32(i32 %in, i32 addrspace(1)* %out) {
1020*9880d681SAndroid Build Coastguard Workerentry:
1021*9880d681SAndroid Build Coastguard Worker  store atomic i32 %in, i32 addrspace(1)* %out seq_cst, align 4
1022*9880d681SAndroid Build Coastguard Worker  ret void
1023*9880d681SAndroid Build Coastguard Worker}
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_addr64_offset:
1026*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
1027*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1028*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_addr64_offset(i32 %in, i32 addrspace(1)* %out, i64 %index) {
1029*9880d681SAndroid Build Coastguard Workerentry:
1030*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
1031*9880d681SAndroid Build Coastguard Worker  %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
1032*9880d681SAndroid Build Coastguard Worker  store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4
1033*9880d681SAndroid Build Coastguard Worker  ret void
1034*9880d681SAndroid Build Coastguard Worker}
1035*9880d681SAndroid Build Coastguard Worker
1036*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}atomic_store_i32_addr64:
1037*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1038*9880d681SAndroid Build Coastguard Worker; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1039*9880d681SAndroid Build Coastguard Workerdefine void @atomic_store_i32_addr64(i32 %in, i32 addrspace(1)* %out, i64 %index) {
1040*9880d681SAndroid Build Coastguard Workerentry:
1041*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
1042*9880d681SAndroid Build Coastguard Worker  store atomic i32 %in, i32 addrspace(1)* %ptr seq_cst, align 4
1043*9880d681SAndroid Build Coastguard Worker  ret void
1044*9880d681SAndroid Build Coastguard Worker}
1045