blob: ca1364e6753a723c34569756c1fb28024788713d [file] [log] [blame]
Matt Arsenault7757c592016-06-09 23:42:54 +00001; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
3
4; GCN-LABEL: {{^}}atomic_add_i64_offset:
5; GCN: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00006define amdgpu_kernel void @atomic_add_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +00007entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00008 %gep = getelementptr i64, i64* %out, i64 4
9 %tmp0 = atomicrmw volatile add i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000010 ret void
11}
12
13; GCN-LABEL: {{^}}atomic_add_i64_ret_offset:
14; GCN: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
15; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000016define amdgpu_kernel void @atomic_add_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000017entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000018 %gep = getelementptr i64, i64* %out, i64 4
19 %tmp0 = atomicrmw volatile add i64* %gep, i64 %in seq_cst
20 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000021 ret void
22}
23
24; GCN-LABEL: {{^}}atomic_add_i64_addr64_offset:
25; GCN: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000026define amdgpu_kernel void @atomic_add_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000027entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000028 %ptr = getelementptr i64, i64* %out, i64 %index
29 %gep = getelementptr i64, i64* %ptr, i64 4
30 %tmp0 = atomicrmw volatile add i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000031 ret void
32}
33
34; GCN-LABEL: {{^}}atomic_add_i64_ret_addr64_offset:
35; GCN: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
36; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000037define amdgpu_kernel void @atomic_add_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000038entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000039 %ptr = getelementptr i64, i64* %out, i64 %index
40 %gep = getelementptr i64, i64* %ptr, i64 4
41 %tmp0 = atomicrmw volatile add i64* %gep, i64 %in seq_cst
42 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000043 ret void
44}
45
46; GCN-LABEL: {{^}}atomic_add_i64:
47; GCN: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000048define amdgpu_kernel void @atomic_add_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000049entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000050 %tmp0 = atomicrmw volatile add i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000051 ret void
52}
53
54; GCN-LABEL: {{^}}atomic_add_i64_ret:
55; GCN: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
56; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000057define amdgpu_kernel void @atomic_add_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000058entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000059 %tmp0 = atomicrmw volatile add i64* %out, i64 %in seq_cst
60 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000061 ret void
62}
63
64; GCN-LABEL: {{^}}atomic_add_i64_addr64:
65; GCN: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000066define amdgpu_kernel void @atomic_add_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000067entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000068 %ptr = getelementptr i64, i64* %out, i64 %index
69 %tmp0 = atomicrmw volatile add i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000070 ret void
71}
72
73; GCN-LABEL: {{^}}atomic_add_i64_ret_addr64:
74; GCN: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
75; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000076define amdgpu_kernel void @atomic_add_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000077entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000078 %ptr = getelementptr i64, i64* %out, i64 %index
79 %tmp0 = atomicrmw volatile add i64* %ptr, i64 %in seq_cst
80 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000081 ret void
82}
83
84; GCN-LABEL: {{^}}atomic_and_i64_offset:
85; GCN: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000086define amdgpu_kernel void @atomic_and_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000087entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000088 %gep = getelementptr i64, i64* %out, i64 4
89 %tmp0 = atomicrmw volatile and i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000090 ret void
91}
92
93; GCN-LABEL: {{^}}atomic_and_i64_ret_offset:
94; GCN: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
95; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000096define amdgpu_kernel void @atomic_and_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000097entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000098 %gep = getelementptr i64, i64* %out, i64 4
99 %tmp0 = atomicrmw volatile and i64* %gep, i64 %in seq_cst
100 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000101 ret void
102}
103
104; GCN-LABEL: {{^}}atomic_and_i64_addr64_offset:
105; GCN: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000106define amdgpu_kernel void @atomic_and_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000107entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000108 %ptr = getelementptr i64, i64* %out, i64 %index
109 %gep = getelementptr i64, i64* %ptr, i64 4
110 %tmp0 = atomicrmw volatile and i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000111 ret void
112}
113
114; GCN-LABEL: {{^}}atomic_and_i64_ret_addr64_offset:
115; GCN: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
116; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000117define amdgpu_kernel void @atomic_and_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000118entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000119 %ptr = getelementptr i64, i64* %out, i64 %index
120 %gep = getelementptr i64, i64* %ptr, i64 4
121 %tmp0 = atomicrmw volatile and i64* %gep, i64 %in seq_cst
122 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000123 ret void
124}
125
126; GCN-LABEL: {{^}}atomic_and_i64:
127; GCN: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000128define amdgpu_kernel void @atomic_and_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000129entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000130 %tmp0 = atomicrmw volatile and i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000131 ret void
132}
133
134; GCN-LABEL: {{^}}atomic_and_i64_ret:
135; GCN: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
136; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000137define amdgpu_kernel void @atomic_and_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000138entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000139 %tmp0 = atomicrmw volatile and i64* %out, i64 %in seq_cst
140 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000141 ret void
142}
143
144; GCN-LABEL: {{^}}atomic_and_i64_addr64:
145; GCN: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000146define amdgpu_kernel void @atomic_and_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000147entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000148 %ptr = getelementptr i64, i64* %out, i64 %index
149 %tmp0 = atomicrmw volatile and i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000150 ret void
151}
152
153; GCN-LABEL: {{^}}atomic_and_i64_ret_addr64:
154; GCN: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
155; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000156define amdgpu_kernel void @atomic_and_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000157entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000158 %ptr = getelementptr i64, i64* %out, i64 %index
159 %tmp0 = atomicrmw volatile and i64* %ptr, i64 %in seq_cst
160 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000161 ret void
162}
163
164; GCN-LABEL: {{^}}atomic_sub_i64_offset:
165; GCN: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000166define amdgpu_kernel void @atomic_sub_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000167entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000168 %gep = getelementptr i64, i64* %out, i64 4
169 %tmp0 = atomicrmw volatile sub i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000170 ret void
171}
172
173; GCN-LABEL: {{^}}atomic_sub_i64_ret_offset:
174; GCN: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
175; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000176define amdgpu_kernel void @atomic_sub_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000177entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000178 %gep = getelementptr i64, i64* %out, i64 4
179 %tmp0 = atomicrmw volatile sub i64* %gep, i64 %in seq_cst
180 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000181 ret void
182}
183
184; GCN-LABEL: {{^}}atomic_sub_i64_addr64_offset:
185; GCN: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000186define amdgpu_kernel void @atomic_sub_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000187entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000188 %ptr = getelementptr i64, i64* %out, i64 %index
189 %gep = getelementptr i64, i64* %ptr, i64 4
190 %tmp0 = atomicrmw volatile sub i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000191 ret void
192}
193
194; GCN-LABEL: {{^}}atomic_sub_i64_ret_addr64_offset:
195; GCN: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
196; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000197define amdgpu_kernel void @atomic_sub_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000198entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000199 %ptr = getelementptr i64, i64* %out, i64 %index
200 %gep = getelementptr i64, i64* %ptr, i64 4
201 %tmp0 = atomicrmw volatile sub i64* %gep, i64 %in seq_cst
202 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000203 ret void
204}
205
206; GCN-LABEL: {{^}}atomic_sub_i64:
207; GCN: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000208define amdgpu_kernel void @atomic_sub_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000209entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000210 %tmp0 = atomicrmw volatile sub i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000211 ret void
212}
213
214; GCN-LABEL: {{^}}atomic_sub_i64_ret:
215; GCN: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
216; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000217define amdgpu_kernel void @atomic_sub_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000218entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000219 %tmp0 = atomicrmw volatile sub i64* %out, i64 %in seq_cst
220 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000221 ret void
222}
223
224; GCN-LABEL: {{^}}atomic_sub_i64_addr64:
225; GCN: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000226define amdgpu_kernel void @atomic_sub_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000227entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000228 %ptr = getelementptr i64, i64* %out, i64 %index
229 %tmp0 = atomicrmw volatile sub i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000230 ret void
231}
232
233; GCN-LABEL: {{^}}atomic_sub_i64_ret_addr64:
234; GCN: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
235; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000236define amdgpu_kernel void @atomic_sub_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000237entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000238 %ptr = getelementptr i64, i64* %out, i64 %index
239 %tmp0 = atomicrmw volatile sub i64* %ptr, i64 %in seq_cst
240 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000241 ret void
242}
243
244; GCN-LABEL: {{^}}atomic_max_i64_offset:
245; GCN: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000246define amdgpu_kernel void @atomic_max_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000247entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000248 %gep = getelementptr i64, i64* %out, i64 4
249 %tmp0 = atomicrmw volatile max i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000250 ret void
251}
252
253; GCN-LABEL: {{^}}atomic_max_i64_ret_offset:
254; GCN: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
255; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000256define amdgpu_kernel void @atomic_max_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000257entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000258 %gep = getelementptr i64, i64* %out, i64 4
259 %tmp0 = atomicrmw volatile max i64* %gep, i64 %in seq_cst
260 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000261 ret void
262}
263
264; GCN-LABEL: {{^}}atomic_max_i64_addr64_offset:
265; GCN: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000266define amdgpu_kernel void @atomic_max_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000267entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000268 %ptr = getelementptr i64, i64* %out, i64 %index
269 %gep = getelementptr i64, i64* %ptr, i64 4
270 %tmp0 = atomicrmw volatile max i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000271 ret void
272}
273
274; GCN-LABEL: {{^}}atomic_max_i64_ret_addr64_offset:
275; GCN: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
276; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000277define amdgpu_kernel void @atomic_max_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000278entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000279 %ptr = getelementptr i64, i64* %out, i64 %index
280 %gep = getelementptr i64, i64* %ptr, i64 4
281 %tmp0 = atomicrmw volatile max i64* %gep, i64 %in seq_cst
282 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000283 ret void
284}
285
286; GCN-LABEL: {{^}}atomic_max_i64:
287; GCN: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000288define amdgpu_kernel void @atomic_max_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000289entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000290 %tmp0 = atomicrmw volatile max i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000291 ret void
292}
293
294; GCN-LABEL: {{^}}atomic_max_i64_ret:
295; GCN: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
296; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000297define amdgpu_kernel void @atomic_max_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000298entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000299 %tmp0 = atomicrmw volatile max i64* %out, i64 %in seq_cst
300 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000301 ret void
302}
303
304; GCN-LABEL: {{^}}atomic_max_i64_addr64:
305; GCN: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000306define amdgpu_kernel void @atomic_max_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000307entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000308 %ptr = getelementptr i64, i64* %out, i64 %index
309 %tmp0 = atomicrmw volatile max i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000310 ret void
311}
312
313; GCN-LABEL: {{^}}atomic_max_i64_ret_addr64:
314; GCN: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
315; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000316define amdgpu_kernel void @atomic_max_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000317entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000318 %ptr = getelementptr i64, i64* %out, i64 %index
319 %tmp0 = atomicrmw volatile max i64* %ptr, i64 %in seq_cst
320 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000321 ret void
322}
323
324; GCN-LABEL: {{^}}atomic_umax_i64_offset:
325; GCN: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000326define amdgpu_kernel void @atomic_umax_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000327entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000328 %gep = getelementptr i64, i64* %out, i64 4
329 %tmp0 = atomicrmw volatile umax i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000330 ret void
331}
332
333; GCN-LABEL: {{^}}atomic_umax_i64_ret_offset:
334; GCN: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
335; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000336define amdgpu_kernel void @atomic_umax_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000337entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000338 %gep = getelementptr i64, i64* %out, i64 4
339 %tmp0 = atomicrmw volatile umax i64* %gep, i64 %in seq_cst
340 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000341 ret void
342}
343
344; GCN-LABEL: {{^}}atomic_umax_i64_addr64_offset:
345; GCN: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000346define amdgpu_kernel void @atomic_umax_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000347entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000348 %ptr = getelementptr i64, i64* %out, i64 %index
349 %gep = getelementptr i64, i64* %ptr, i64 4
350 %tmp0 = atomicrmw volatile umax i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000351 ret void
352}
353
354; GCN-LABEL: {{^}}atomic_umax_i64_ret_addr64_offset:
355; GCN: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
356; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000357define amdgpu_kernel void @atomic_umax_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000358entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000359 %ptr = getelementptr i64, i64* %out, i64 %index
360 %gep = getelementptr i64, i64* %ptr, i64 4
361 %tmp0 = atomicrmw volatile umax i64* %gep, i64 %in seq_cst
362 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000363 ret void
364}
365
366; GCN-LABEL: {{^}}atomic_umax_i64:
367; GCN: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000368define amdgpu_kernel void @atomic_umax_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000369entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000370 %tmp0 = atomicrmw volatile umax i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000371 ret void
372}
373
374; GCN-LABEL: {{^}}atomic_umax_i64_ret:
375; GCN: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
376; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000377define amdgpu_kernel void @atomic_umax_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000378entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000379 %tmp0 = atomicrmw volatile umax i64* %out, i64 %in seq_cst
380 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000381 ret void
382}
383
384; GCN-LABEL: {{^}}atomic_umax_i64_addr64:
385; GCN: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000386define amdgpu_kernel void @atomic_umax_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000387entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000388 %ptr = getelementptr i64, i64* %out, i64 %index
389 %tmp0 = atomicrmw volatile umax i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000390 ret void
391}
392
393; GCN-LABEL: {{^}}atomic_umax_i64_ret_addr64:
394; GCN: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
395; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000396define amdgpu_kernel void @atomic_umax_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000397entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000398 %ptr = getelementptr i64, i64* %out, i64 %index
399 %tmp0 = atomicrmw volatile umax i64* %ptr, i64 %in seq_cst
400 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000401 ret void
402}
403
404; GCN-LABEL: {{^}}atomic_min_i64_offset:
405; GCN: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000406define amdgpu_kernel void @atomic_min_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000407entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000408 %gep = getelementptr i64, i64* %out, i64 4
409 %tmp0 = atomicrmw volatile min i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000410 ret void
411}
412
413; GCN-LABEL: {{^}}atomic_min_i64_ret_offset:
414; GCN: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
415; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000416define amdgpu_kernel void @atomic_min_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000417entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000418 %gep = getelementptr i64, i64* %out, i64 4
419 %tmp0 = atomicrmw volatile min i64* %gep, i64 %in seq_cst
420 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000421 ret void
422}
423
424; GCN-LABEL: {{^}}atomic_min_i64_addr64_offset:
425; GCN: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000426define amdgpu_kernel void @atomic_min_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000427entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000428 %ptr = getelementptr i64, i64* %out, i64 %index
429 %gep = getelementptr i64, i64* %ptr, i64 4
430 %tmp0 = atomicrmw volatile min i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000431 ret void
432}
433
434; GCN-LABEL: {{^}}atomic_min_i64_ret_addr64_offset:
435; GCN: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
436; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000437define amdgpu_kernel void @atomic_min_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000438entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000439 %ptr = getelementptr i64, i64* %out, i64 %index
440 %gep = getelementptr i64, i64* %ptr, i64 4
441 %tmp0 = atomicrmw volatile min i64* %gep, i64 %in seq_cst
442 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000443 ret void
444}
445
446; GCN-LABEL: {{^}}atomic_min_i64:
447; GCN: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000448define amdgpu_kernel void @atomic_min_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000449entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000450 %tmp0 = atomicrmw volatile min i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000451 ret void
452}
453
454; GCN-LABEL: {{^}}atomic_min_i64_ret:
455; GCN: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
456; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000457define amdgpu_kernel void @atomic_min_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000458entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000459 %tmp0 = atomicrmw volatile min i64* %out, i64 %in seq_cst
460 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000461 ret void
462}
463
464; GCN-LABEL: {{^}}atomic_min_i64_addr64:
465; GCN: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000466define amdgpu_kernel void @atomic_min_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000467entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000468 %ptr = getelementptr i64, i64* %out, i64 %index
469 %tmp0 = atomicrmw volatile min i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000470 ret void
471}
472
473; GCN-LABEL: {{^}}atomic_min_i64_ret_addr64:
474; GCN: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
475; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000476define amdgpu_kernel void @atomic_min_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000477entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000478 %ptr = getelementptr i64, i64* %out, i64 %index
479 %tmp0 = atomicrmw volatile min i64* %ptr, i64 %in seq_cst
480 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000481 ret void
482}
483
484; GCN-LABEL: {{^}}atomic_umin_i64_offset:
485; GCN: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000486define amdgpu_kernel void @atomic_umin_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000487entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000488 %gep = getelementptr i64, i64* %out, i64 4
489 %tmp0 = atomicrmw volatile umin i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000490 ret void
491}
492
493; GCN-LABEL: {{^}}atomic_umin_i64_ret_offset:
494; GCN: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
495; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000496define amdgpu_kernel void @atomic_umin_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000497entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000498 %gep = getelementptr i64, i64* %out, i64 4
499 %tmp0 = atomicrmw volatile umin i64* %gep, i64 %in seq_cst
500 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000501 ret void
502}
503
504; GCN-LABEL: {{^}}atomic_umin_i64_addr64_offset:
505; GCN: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000506define amdgpu_kernel void @atomic_umin_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000507entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000508 %ptr = getelementptr i64, i64* %out, i64 %index
509 %gep = getelementptr i64, i64* %ptr, i64 4
510 %tmp0 = atomicrmw volatile umin i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000511 ret void
512}
513
514; GCN-LABEL: {{^}}atomic_umin_i64_ret_addr64_offset:
515; GCN: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
516; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000517define amdgpu_kernel void @atomic_umin_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000518entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000519 %ptr = getelementptr i64, i64* %out, i64 %index
520 %gep = getelementptr i64, i64* %ptr, i64 4
521 %tmp0 = atomicrmw volatile umin i64* %gep, i64 %in seq_cst
522 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000523 ret void
524}
525
526; GCN-LABEL: {{^}}atomic_umin_i64:
527; GCN: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000528define amdgpu_kernel void @atomic_umin_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000529entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000530 %tmp0 = atomicrmw volatile umin i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000531 ret void
532}
533
534; GCN-LABEL: {{^}}atomic_umin_i64_ret:
535; GCN: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
536; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000537define amdgpu_kernel void @atomic_umin_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000538entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000539 %tmp0 = atomicrmw volatile umin i64* %out, i64 %in seq_cst
540 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000541 ret void
542}
543
544; GCN-LABEL: {{^}}atomic_umin_i64_addr64:
545; GCN: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000546define amdgpu_kernel void @atomic_umin_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000547entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000548 %ptr = getelementptr i64, i64* %out, i64 %index
549 %tmp0 = atomicrmw volatile umin i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000550 ret void
551}
552
553; GCN-LABEL: {{^}}atomic_umin_i64_ret_addr64:
554; GCN: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
555; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000556define amdgpu_kernel void @atomic_umin_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000557entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000558 %ptr = getelementptr i64, i64* %out, i64 %index
559 %tmp0 = atomicrmw volatile umin i64* %ptr, i64 %in seq_cst
560 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000561 ret void
562}
563
564; GCN-LABEL: {{^}}atomic_or_i64_offset:
565; GCN: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000566define amdgpu_kernel void @atomic_or_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000567entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000568 %gep = getelementptr i64, i64* %out, i64 4
569 %tmp0 = atomicrmw volatile or i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000570 ret void
571}
572
573; GCN-LABEL: {{^}}atomic_or_i64_ret_offset:
574; GCN: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
575; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000576define amdgpu_kernel void @atomic_or_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000577entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000578 %gep = getelementptr i64, i64* %out, i64 4
579 %tmp0 = atomicrmw volatile or i64* %gep, i64 %in seq_cst
580 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000581 ret void
582}
583
584; GCN-LABEL: {{^}}atomic_or_i64_addr64_offset:
585; GCN: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000586define amdgpu_kernel void @atomic_or_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000587entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000588 %ptr = getelementptr i64, i64* %out, i64 %index
589 %gep = getelementptr i64, i64* %ptr, i64 4
590 %tmp0 = atomicrmw volatile or i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000591 ret void
592}
593
594; GCN-LABEL: {{^}}atomic_or_i64_ret_addr64_offset:
595; GCN: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
596; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000597define amdgpu_kernel void @atomic_or_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000598entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000599 %ptr = getelementptr i64, i64* %out, i64 %index
600 %gep = getelementptr i64, i64* %ptr, i64 4
601 %tmp0 = atomicrmw volatile or i64* %gep, i64 %in seq_cst
602 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000603 ret void
604}
605
606; GCN-LABEL: {{^}}atomic_or_i64:
607; GCN: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000608define amdgpu_kernel void @atomic_or_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000609entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000610 %tmp0 = atomicrmw volatile or i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000611 ret void
612}
613
614; GCN-LABEL: {{^}}atomic_or_i64_ret:
615; GCN: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
616; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000617define amdgpu_kernel void @atomic_or_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000618entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000619 %tmp0 = atomicrmw volatile or i64* %out, i64 %in seq_cst
620 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000621 ret void
622}
623
624; GCN-LABEL: {{^}}atomic_or_i64_addr64:
625; GCN: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000626define amdgpu_kernel void @atomic_or_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000627entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000628 %ptr = getelementptr i64, i64* %out, i64 %index
629 %tmp0 = atomicrmw volatile or i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000630 ret void
631}
632
633; GCN-LABEL: {{^}}atomic_or_i64_ret_addr64:
634; GCN: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
635; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000636define amdgpu_kernel void @atomic_or_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000637entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000638 %ptr = getelementptr i64, i64* %out, i64 %index
639 %tmp0 = atomicrmw volatile or i64* %ptr, i64 %in seq_cst
640 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000641 ret void
642}
643
644; GCN-LABEL: {{^}}atomic_xchg_i64_offset:
645; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000646define amdgpu_kernel void @atomic_xchg_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000647entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000648 %gep = getelementptr i64, i64* %out, i64 4
649 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000650 ret void
651}
652
653; GCN-LABEL: {{^}}atomic_xchg_i64_ret_offset:
654; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
655; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000656define amdgpu_kernel void @atomic_xchg_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000657entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000658 %gep = getelementptr i64, i64* %out, i64 4
659 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
660 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000661 ret void
662}
663
664; GCN-LABEL: {{^}}atomic_xchg_i64_addr64_offset:
665; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000666define amdgpu_kernel void @atomic_xchg_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000667entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000668 %ptr = getelementptr i64, i64* %out, i64 %index
669 %gep = getelementptr i64, i64* %ptr, i64 4
670 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000671 ret void
672}
673
674; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64_offset:
675; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
676; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000677define amdgpu_kernel void @atomic_xchg_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000678entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000679 %ptr = getelementptr i64, i64* %out, i64 %index
680 %gep = getelementptr i64, i64* %ptr, i64 4
681 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
682 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000683 ret void
684}
685
686; GCN-LABEL: {{^}}atomic_xchg_i64:
687; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000688define amdgpu_kernel void @atomic_xchg_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000689entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000690 %tmp0 = atomicrmw volatile xchg i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000691 ret void
692}
693
694; GCN-LABEL: {{^}}atomic_xchg_i64_ret:
695; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
696; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000697define amdgpu_kernel void @atomic_xchg_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000698entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000699 %tmp0 = atomicrmw volatile xchg i64* %out, i64 %in seq_cst
700 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000701 ret void
702}
703
704; GCN-LABEL: {{^}}atomic_xchg_i64_addr64:
705; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000706define amdgpu_kernel void @atomic_xchg_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000707entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000708 %ptr = getelementptr i64, i64* %out, i64 %index
709 %tmp0 = atomicrmw volatile xchg i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000710 ret void
711}
712
713; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64:
714; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
715; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000716define amdgpu_kernel void @atomic_xchg_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000717entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000718 %ptr = getelementptr i64, i64* %out, i64 %index
719 %tmp0 = atomicrmw volatile xchg i64* %ptr, i64 %in seq_cst
720 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000721 ret void
722}
723
724; GCN-LABEL: {{^}}atomic_xor_i64_offset:
725; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000726define amdgpu_kernel void @atomic_xor_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000727entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000728 %gep = getelementptr i64, i64* %out, i64 4
729 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000730 ret void
731}
732
733; GCN-LABEL: {{^}}atomic_xor_i64_ret_offset:
734; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
735; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000736define amdgpu_kernel void @atomic_xor_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000737entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000738 %gep = getelementptr i64, i64* %out, i64 4
739 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
740 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000741 ret void
742}
743
744; GCN-LABEL: {{^}}atomic_xor_i64_addr64_offset:
745; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000746define amdgpu_kernel void @atomic_xor_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000747entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000748 %ptr = getelementptr i64, i64* %out, i64 %index
749 %gep = getelementptr i64, i64* %ptr, i64 4
750 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000751 ret void
752}
753
754; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64_offset:
755; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
756; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000757define amdgpu_kernel void @atomic_xor_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000758entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000759 %ptr = getelementptr i64, i64* %out, i64 %index
760 %gep = getelementptr i64, i64* %ptr, i64 4
761 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
762 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000763 ret void
764}
765
766; GCN-LABEL: {{^}}atomic_xor_i64:
767; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000768define amdgpu_kernel void @atomic_xor_i64(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000769entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000770 %tmp0 = atomicrmw volatile xor i64* %out, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000771 ret void
772}
773
774; GCN-LABEL: {{^}}atomic_xor_i64_ret:
775; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
776; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000777define amdgpu_kernel void @atomic_xor_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000778entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000779 %tmp0 = atomicrmw volatile xor i64* %out, i64 %in seq_cst
780 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000781 ret void
782}
783
784; GCN-LABEL: {{^}}atomic_xor_i64_addr64:
785; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000786define amdgpu_kernel void @atomic_xor_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000787entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000788 %ptr = getelementptr i64, i64* %out, i64 %index
789 %tmp0 = atomicrmw volatile xor i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000790 ret void
791}
792
793; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64:
794; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
795; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000796define amdgpu_kernel void @atomic_xor_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000797entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000798 %ptr = getelementptr i64, i64* %out, i64 %index
799 %tmp0 = atomicrmw volatile xor i64* %ptr, i64 %in seq_cst
800 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000801 ret void
802}
803
804; GCN-LABEL: {{^}}atomic_load_i64_offset:
805; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
806; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000807define amdgpu_kernel void @atomic_load_i64_offset(i64* %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000808entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000809 %gep = getelementptr i64, i64* %in, i64 4
810 %val = load atomic i64, i64* %gep seq_cst, align 8
811 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000812 ret void
813}
814
815; GCN-LABEL: {{^}}atomic_load_i64:
816; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc
817; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000818define amdgpu_kernel void @atomic_load_i64(i64* %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000819entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000820 %val = load atomic i64, i64* %in seq_cst, align 8
821 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000822 ret void
823}
824
825; GCN-LABEL: {{^}}atomic_load_i64_addr64_offset:
826; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
827; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000828define amdgpu_kernel void @atomic_load_i64_addr64_offset(i64* %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000829entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000830 %ptr = getelementptr i64, i64* %in, i64 %index
831 %gep = getelementptr i64, i64* %ptr, i64 4
832 %val = load atomic i64, i64* %gep seq_cst, align 8
833 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000834 ret void
835}
836
837; GCN-LABEL: {{^}}atomic_load_i64_addr64:
838; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
839; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000840define amdgpu_kernel void @atomic_load_i64_addr64(i64* %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000841entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000842 %ptr = getelementptr i64, i64* %in, i64 %index
843 %val = load atomic i64, i64* %ptr seq_cst, align 8
844 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000845 ret void
846}
847
848; GCN-LABEL: {{^}}atomic_store_i64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000849; GCN: flat_store_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000850define amdgpu_kernel void @atomic_store_i64_offset(i64 %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000851entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000852 %gep = getelementptr i64, i64* %out, i64 4
853 store atomic i64 %in, i64* %gep seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000854 ret void
855}
856
857; GCN-LABEL: {{^}}atomic_store_i64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000858; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000859define amdgpu_kernel void @atomic_store_i64(i64 %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000860entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000861 store atomic i64 %in, i64* %out seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000862 ret void
863}
864
865; GCN-LABEL: {{^}}atomic_store_i64_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000866; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000867define amdgpu_kernel void @atomic_store_i64_addr64_offset(i64 %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000868entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000869 %ptr = getelementptr i64, i64* %out, i64 %index
870 %gep = getelementptr i64, i64* %ptr, i64 4
871 store atomic i64 %in, i64* %gep seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000872 ret void
873}
874
875; GCN-LABEL: {{^}}atomic_store_i64_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000876; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000877define amdgpu_kernel void @atomic_store_i64_addr64(i64 %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000878entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000879 %ptr = getelementptr i64, i64* %out, i64 %index
880 store atomic i64 %in, i64* %ptr seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000881 ret void
882}
883
884; GCN-LABEL: {{^}}atomic_cmpxchg_i64_offset:
885; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000886define amdgpu_kernel void @atomic_cmpxchg_i64_offset(i64* %out, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000887entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000888 %gep = getelementptr i64, i64* %out, i64 4
889 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000890 ret void
891}
892
893; GCN-LABEL: {{^}}atomic_cmpxchg_i64_soffset:
894; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000895define amdgpu_kernel void @atomic_cmpxchg_i64_soffset(i64* %out, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000896entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000897 %gep = getelementptr i64, i64* %out, i64 9000
898 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000899 ret void
900}
901
902; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_offset:
903; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
904; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000905define amdgpu_kernel void @atomic_cmpxchg_i64_ret_offset(i64* %out, i64* %out2, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000906entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000907 %gep = getelementptr i64, i64* %out, i64 4
908 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000909 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000910 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000911 ret void
912}
913
914; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64_offset:
915; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000916define amdgpu_kernel void @atomic_cmpxchg_i64_addr64_offset(i64* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000917entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000918 %ptr = getelementptr i64, i64* %out, i64 %index
919 %gep = getelementptr i64, i64* %ptr, i64 4
920 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000921 ret void
922}
923
924; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64_offset:
925; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
926; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000927define amdgpu_kernel void @atomic_cmpxchg_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000928entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000929 %ptr = getelementptr i64, i64* %out, i64 %index
930 %gep = getelementptr i64, i64* %ptr, i64 4
931 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000932 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000933 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000934 ret void
935}
936
937; GCN-LABEL: {{^}}atomic_cmpxchg_i64:
938; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000939define amdgpu_kernel void @atomic_cmpxchg_i64(i64* %out, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000940entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000941 %val = cmpxchg volatile i64* %out, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000942 ret void
943}
944
945; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret:
946; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
947; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000948define amdgpu_kernel void @atomic_cmpxchg_i64_ret(i64* %out, i64* %out2, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000949entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000950 %val = cmpxchg volatile i64* %out, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000951 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000952 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000953 ret void
954}
955
956; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64:
957; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000958define amdgpu_kernel void @atomic_cmpxchg_i64_addr64(i64* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000959entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000960 %ptr = getelementptr i64, i64* %out, i64 %index
961 %val = cmpxchg volatile i64* %ptr, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000962 ret void
963}
964
965; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64:
966; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
967; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000968define amdgpu_kernel void @atomic_cmpxchg_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000969entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000970 %ptr = getelementptr i64, i64* %out, i64 %index
971 %val = cmpxchg volatile i64* %ptr, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000972 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000973 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000974 ret void
975}