blob: 0cf28275b87b717d2797ece63f1c037af631b2d5 [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
Matt Arsenault0cb08e42019-01-17 10:49:01 +0000653; GCN-LABEL: {{^}}atomic_xchg_f64_offset:
654; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
655define amdgpu_kernel void @atomic_xchg_f64_offset(double* %out, double %in) {
656entry:
657 %gep = getelementptr double, double* %out, i64 4
658 %tmp0 = atomicrmw volatile xchg double* %gep, double %in seq_cst
659 ret void
660}
661
Matt Arsenault7757c592016-06-09 23:42:54 +0000662; GCN-LABEL: {{^}}atomic_xchg_i64_ret_offset:
663; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
664; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000665define amdgpu_kernel void @atomic_xchg_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000666entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000667 %gep = getelementptr i64, i64* %out, i64 4
668 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
669 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000670 ret void
671}
672
673; GCN-LABEL: {{^}}atomic_xchg_i64_addr64_offset:
674; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000675define amdgpu_kernel void @atomic_xchg_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000676entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000677 %ptr = getelementptr i64, i64* %out, i64 %index
678 %gep = getelementptr i64, i64* %ptr, i64 4
679 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000680 ret void
681}
682
683; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64_offset:
684; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
685; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000686define amdgpu_kernel void @atomic_xchg_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000687entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000688 %ptr = getelementptr i64, i64* %out, i64 %index
689 %gep = getelementptr i64, i64* %ptr, i64 4
690 %tmp0 = atomicrmw volatile xchg i64* %gep, i64 %in seq_cst
691 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000692 ret void
693}
694
695; GCN-LABEL: {{^}}atomic_xchg_i64:
696; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000697define amdgpu_kernel void @atomic_xchg_i64(i64* %out, 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
Matt Arsenault7757c592016-06-09 23:42:54 +0000700 ret void
701}
702
703; GCN-LABEL: {{^}}atomic_xchg_i64_ret:
704; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
705; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000706define amdgpu_kernel void @atomic_xchg_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000707entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000708 %tmp0 = atomicrmw volatile xchg i64* %out, i64 %in seq_cst
709 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000710 ret void
711}
712
713; GCN-LABEL: {{^}}atomic_xchg_i64_addr64:
714; GCN: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000715define amdgpu_kernel void @atomic_xchg_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000716entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000717 %ptr = getelementptr i64, i64* %out, i64 %index
718 %tmp0 = atomicrmw volatile xchg i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000719 ret void
720}
721
722; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64:
723; GCN: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
724; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000725define amdgpu_kernel void @atomic_xchg_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000726entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000727 %ptr = getelementptr i64, i64* %out, i64 %index
728 %tmp0 = atomicrmw volatile xchg i64* %ptr, i64 %in seq_cst
729 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000730 ret void
731}
732
733; GCN-LABEL: {{^}}atomic_xor_i64_offset:
734; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000735define amdgpu_kernel void @atomic_xor_i64_offset(i64* %out, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000736entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000737 %gep = getelementptr i64, i64* %out, i64 4
738 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000739 ret void
740}
741
742; GCN-LABEL: {{^}}atomic_xor_i64_ret_offset:
743; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
744; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000745define amdgpu_kernel void @atomic_xor_i64_ret_offset(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000746entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000747 %gep = getelementptr i64, i64* %out, i64 4
748 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
749 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000750 ret void
751}
752
753; GCN-LABEL: {{^}}atomic_xor_i64_addr64_offset:
754; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000755define amdgpu_kernel void @atomic_xor_i64_addr64_offset(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000756entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000757 %ptr = getelementptr i64, i64* %out, i64 %index
758 %gep = getelementptr i64, i64* %ptr, i64 4
759 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000760 ret void
761}
762
763; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64_offset:
764; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
765; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000766define amdgpu_kernel void @atomic_xor_i64_ret_addr64_offset(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000767entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000768 %ptr = getelementptr i64, i64* %out, i64 %index
769 %gep = getelementptr i64, i64* %ptr, i64 4
770 %tmp0 = atomicrmw volatile xor i64* %gep, i64 %in seq_cst
771 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000772 ret void
773}
774
775; GCN-LABEL: {{^}}atomic_xor_i64:
776; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000777define amdgpu_kernel void @atomic_xor_i64(i64* %out, 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
Matt Arsenault7757c592016-06-09 23:42:54 +0000780 ret void
781}
782
783; GCN-LABEL: {{^}}atomic_xor_i64_ret:
784; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
785; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000786define amdgpu_kernel void @atomic_xor_i64_ret(i64* %out, i64* %out2, i64 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000787entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000788 %tmp0 = atomicrmw volatile xor i64* %out, i64 %in seq_cst
789 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000790 ret void
791}
792
793; GCN-LABEL: {{^}}atomic_xor_i64_addr64:
794; GCN: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000795define amdgpu_kernel void @atomic_xor_i64_addr64(i64* %out, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000796entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000797 %ptr = getelementptr i64, i64* %out, i64 %index
798 %tmp0 = atomicrmw volatile xor i64* %ptr, i64 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000799 ret void
800}
801
802; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64:
803; GCN: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
804; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000805define amdgpu_kernel void @atomic_xor_i64_ret_addr64(i64* %out, i64* %out2, i64 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000806entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000807 %ptr = getelementptr i64, i64* %out, i64 %index
808 %tmp0 = atomicrmw volatile xor i64* %ptr, i64 %in seq_cst
809 store i64 %tmp0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000810 ret void
811}
812
813; GCN-LABEL: {{^}}atomic_load_i64_offset:
814; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
815; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000816define amdgpu_kernel void @atomic_load_i64_offset(i64* %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000817entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000818 %gep = getelementptr i64, i64* %in, i64 4
819 %val = load atomic i64, i64* %gep seq_cst, align 8
820 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000821 ret void
822}
823
824; GCN-LABEL: {{^}}atomic_load_i64:
825; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc
826; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000827define amdgpu_kernel void @atomic_load_i64(i64* %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000828entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000829 %val = load atomic i64, i64* %in seq_cst, align 8
830 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000831 ret void
832}
833
834; GCN-LABEL: {{^}}atomic_load_i64_addr64_offset:
835; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
836; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000837define amdgpu_kernel void @atomic_load_i64_addr64_offset(i64* %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000838entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000839 %ptr = getelementptr i64, i64* %in, i64 %index
840 %gep = getelementptr i64, i64* %ptr, i64 4
841 %val = load atomic i64, i64* %gep seq_cst, align 8
842 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000843 ret void
844}
845
846; GCN-LABEL: {{^}}atomic_load_i64_addr64:
847; GCN: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
848; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000849define amdgpu_kernel void @atomic_load_i64_addr64(i64* %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000850entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000851 %ptr = getelementptr i64, i64* %in, i64 %index
852 %val = load atomic i64, i64* %ptr seq_cst, align 8
853 store i64 %val, i64* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000854 ret void
855}
856
857; GCN-LABEL: {{^}}atomic_store_i64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000858; GCN: flat_store_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000859define amdgpu_kernel void @atomic_store_i64_offset(i64 %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000860entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000861 %gep = getelementptr i64, i64* %out, i64 4
862 store atomic i64 %in, i64* %gep seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000863 ret void
864}
865
866; GCN-LABEL: {{^}}atomic_store_i64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000867; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000868define amdgpu_kernel void @atomic_store_i64(i64 %in, i64* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000869entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000870 store atomic i64 %in, i64* %out seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000871 ret void
872}
873
874; GCN-LABEL: {{^}}atomic_store_i64_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000875; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000876define amdgpu_kernel void @atomic_store_i64_addr64_offset(i64 %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000877entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000878 %ptr = getelementptr i64, i64* %out, i64 %index
879 %gep = getelementptr i64, i64* %ptr, i64 4
880 store atomic i64 %in, i64* %gep seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000881 ret void
882}
883
884; GCN-LABEL: {{^}}atomic_store_i64_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +0000885; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000886define amdgpu_kernel void @atomic_store_i64_addr64(i64 %in, i64* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000887entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000888 %ptr = getelementptr i64, i64* %out, i64 %index
889 store atomic i64 %in, i64* %ptr seq_cst, align 8
Matt Arsenault7757c592016-06-09 23:42:54 +0000890 ret void
891}
892
893; GCN-LABEL: {{^}}atomic_cmpxchg_i64_offset:
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_offset(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 4
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_soffset:
903; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000904define amdgpu_kernel void @atomic_cmpxchg_i64_soffset(i64* %out, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000905entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000906 %gep = getelementptr i64, i64* %out, i64 9000
907 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000908 ret void
909}
910
911; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_offset:
912; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
913; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000914define amdgpu_kernel void @atomic_cmpxchg_i64_ret_offset(i64* %out, i64* %out2, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000915entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000916 %gep = getelementptr i64, i64* %out, i64 4
917 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000918 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000919 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000920 ret void
921}
922
923; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64_offset:
924; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000925define amdgpu_kernel void @atomic_cmpxchg_i64_addr64_offset(i64* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000926entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000927 %ptr = getelementptr i64, i64* %out, i64 %index
928 %gep = getelementptr i64, i64* %ptr, i64 4
929 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000930 ret void
931}
932
933; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64_offset:
934; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
935; GCN: flat_store_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000936define 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 +0000937entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000938 %ptr = getelementptr i64, i64* %out, i64 %index
939 %gep = getelementptr i64, i64* %ptr, i64 4
940 %val = cmpxchg volatile i64* %gep, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000941 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000942 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000943 ret void
944}
945
946; GCN-LABEL: {{^}}atomic_cmpxchg_i64:
947; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000948define amdgpu_kernel void @atomic_cmpxchg_i64(i64* %out, 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 ret void
952}
953
954; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret:
955; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
956; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000957define amdgpu_kernel void @atomic_cmpxchg_i64_ret(i64* %out, i64* %out2, i64 %in, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000958entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000959 %val = cmpxchg volatile i64* %out, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000960 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000961 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000962 ret void
963}
964
965; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64:
966; GCN: flat_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000967define amdgpu_kernel void @atomic_cmpxchg_i64_addr64(i64* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000968entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000969 %ptr = getelementptr i64, i64* %out, i64 %index
970 %val = cmpxchg volatile i64* %ptr, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000971 ret void
972}
973
974; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64:
975; GCN: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
976; GCN: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v{{\[}}[[RET]]:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000977define 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 +0000978entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000979 %ptr = getelementptr i64, i64* %out, i64 %index
980 %val = cmpxchg volatile i64* %ptr, i64 %old, i64 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000981 %extract0 = extractvalue { i64, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000982 store i64 %extract0, i64* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000983 ret void
984}