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