blob: e63b5a9de2210a60de0ec3ef8c648c37ec2eea9b [file] [log] [blame]
Matt Arsenault4e309b02017-07-29 01:03:53 +00001; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,CI,CIVI %s
2; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI,CIVI %s
3; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX9 %s
Matt Arsenault64fa2f42016-04-12 14:05:11 +00004
Matt Arsenault64fa2f42016-04-12 14:05:11 +00005; GCN-LABEL: {{^}}atomic_add_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +00006; CIVI: buffer_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
7
8; GFX9: global_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00009define amdgpu_kernel void @atomic_add_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000010entry:
11 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +000012 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000013 ret void
14}
15
16; GCN-LABEL: {{^}}atomic_add_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +000017; CIVI: buffer_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
18; CIVI: buffer_store_dwordx2 [[RET]]
19
20; GFX9: global_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000021define amdgpu_kernel void @atomic_add_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000022entry:
23 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +000024 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000025 store i64 %tmp0, i64 addrspace(1)* %out2
26 ret void
27}
28
29; GCN-LABEL: {{^}}atomic_add_i64_addr64_offset:
30; CI: buffer_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
31; VI: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000032; GFX9: global_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000033define amdgpu_kernel void @atomic_add_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000034entry:
35 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
36 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +000037 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000038 ret void
39}
40
41; GCN-LABEL: {{^}}atomic_add_i64_ret_addr64_offset:
42; CI: buffer_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
43; VI: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000044; CIVI: buffer_store_dwordx2 [[RET]]
45
46; GFX9: global_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000047define amdgpu_kernel void @atomic_add_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000048entry:
49 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
50 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +000051 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000052 store i64 %tmp0, i64 addrspace(1)* %out2
53 ret void
54}
55
56; GCN-LABEL: {{^}}atomic_add_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +000057; SIVI: buffer_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
58; GFX9: global_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000059define amdgpu_kernel void @atomic_add_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000060entry:
Matt Arsenault25363d32016-06-09 23:42:44 +000061 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000062 ret void
63}
64
65; GCN-LABEL: {{^}}atomic_add_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +000066; CIVI: buffer_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
67; CIVI: buffer_store_dwordx2 [[RET]]
68
69; GFX9: global_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000070define amdgpu_kernel void @atomic_add_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000071entry:
Matt Arsenault25363d32016-06-09 23:42:44 +000072 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000073 store i64 %tmp0, i64 addrspace(1)* %out2
74 ret void
75}
76
77; GCN-LABEL: {{^}}atomic_add_i64_addr64:
78; CI: buffer_atomic_add_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
79; VI: flat_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000080; GFX9: global_atomic_add_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000081define amdgpu_kernel void @atomic_add_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000082entry:
83 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +000084 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000085 ret void
86}
87
88; GCN-LABEL: {{^}}atomic_add_i64_ret_addr64:
89; CI: buffer_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
90; VI: flat_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000091; CIVI: buffer_store_dwordx2 [[RET]]
92
93; GFX9: global_atomic_add_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000094define amdgpu_kernel void @atomic_add_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +000095entry:
96 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +000097 %tmp0 = atomicrmw volatile add i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +000098 store i64 %tmp0, i64 addrspace(1)* %out2
99 ret void
100}
101
102; GCN-LABEL: {{^}}atomic_and_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000103; CIVI: buffer_atomic_and_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
104; GFX9: global_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000105define amdgpu_kernel void @atomic_and_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000106entry:
107 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000108 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000109 ret void
110}
111
112; GCN-LABEL: {{^}}atomic_and_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000113; CIVI: buffer_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
114; CIVI: buffer_store_dwordx2 [[RET]]
115
116; GFX9: global_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000117define amdgpu_kernel void @atomic_and_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000118entry:
119 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000120 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000121 store i64 %tmp0, i64 addrspace(1)* %out2
122 ret void
123}
124
125; GCN-LABEL: {{^}}atomic_and_i64_addr64_offset:
126; CI: buffer_atomic_and_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
127; VI: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000128; GFX9: global_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000129define amdgpu_kernel void @atomic_and_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000130entry:
131 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
132 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000133 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000134 ret void
135}
136
137; GCN-LABEL: {{^}}atomic_and_i64_ret_addr64_offset:
138; CI: buffer_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
139; VI: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000140; CIVI: buffer_store_dwordx2 [[RET]]
141
142; GFX9: global_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000143define amdgpu_kernel void @atomic_and_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000144entry:
145 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
146 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000147 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000148 store i64 %tmp0, i64 addrspace(1)* %out2
149 ret void
150}
151
152; GCN-LABEL: {{^}}atomic_and_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000153; CIVI: buffer_atomic_and_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
154; GFX9: global_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000155define amdgpu_kernel void @atomic_and_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000156entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000157 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000158 ret void
159}
160
161; GCN-LABEL: {{^}}atomic_and_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000162; CIVI: buffer_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
163; CIVI: buffer_store_dwordx2 [[RET]]
164
165; GFX9: global_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000166define amdgpu_kernel void @atomic_and_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000167entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000168 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000169 store i64 %tmp0, i64 addrspace(1)* %out2
170 ret void
171}
172
173; GCN-LABEL: {{^}}atomic_and_i64_addr64:
174; CI: buffer_atomic_and_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
175; VI: flat_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000176; GFX9: global_atomic_and_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000177define amdgpu_kernel void @atomic_and_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000178entry:
179 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000180 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000181 ret void
182}
183
184; GCN-LABEL: {{^}}atomic_and_i64_ret_addr64:
185; CI: buffer_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
186; VI: flat_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000187; CIVI: buffer_store_dwordx2 [[RET]]
188
189; GFX9: global_atomic_and_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000190define amdgpu_kernel void @atomic_and_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000191entry:
192 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000193 %tmp0 = atomicrmw volatile and i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000194 store i64 %tmp0, i64 addrspace(1)* %out2
195 ret void
196}
197
198; GCN-LABEL: {{^}}atomic_sub_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000199; CIVI: buffer_atomic_sub_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
200; GFX9: global_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000201define amdgpu_kernel void @atomic_sub_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000202entry:
203 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000204 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000205 ret void
206}
207
208; GCN-LABEL: {{^}}atomic_sub_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000209; CIVI: buffer_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
210; CIVI: buffer_store_dwordx2 [[RET]]
211
212; GFX9: global_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000213define amdgpu_kernel void @atomic_sub_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000214entry:
215 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000216 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000217 store i64 %tmp0, i64 addrspace(1)* %out2
218 ret void
219}
220
221; GCN-LABEL: {{^}}atomic_sub_i64_addr64_offset:
222; CI: buffer_atomic_sub_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
223; VI: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000224; GFX9: global_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000225define amdgpu_kernel void @atomic_sub_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000226entry:
227 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
228 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000229 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000230 ret void
231}
232
233; GCN-LABEL: {{^}}atomic_sub_i64_ret_addr64_offset:
234; CI: buffer_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
235; VI: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000236; CIVI: buffer_store_dwordx2 [[RET]]
237
238; GFX9: global_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000239define amdgpu_kernel void @atomic_sub_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000240entry:
241 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
242 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000243 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000244 store i64 %tmp0, i64 addrspace(1)* %out2
245 ret void
246}
247
248; GCN-LABEL: {{^}}atomic_sub_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000249; CIVI: buffer_atomic_sub_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
250; GFX9: global_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000251define amdgpu_kernel void @atomic_sub_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000252entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000253 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000254 ret void
255}
256
257; GCN-LABEL: {{^}}atomic_sub_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000258; CIVI: buffer_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
259; CIVI: buffer_store_dwordx2 [[RET]]
260
261; GFX9: global_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000262define amdgpu_kernel void @atomic_sub_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000263entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000264 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000265 store i64 %tmp0, i64 addrspace(1)* %out2
266 ret void
267}
268
269; GCN-LABEL: {{^}}atomic_sub_i64_addr64:
270; CI: buffer_atomic_sub_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
271; VI: flat_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000272; GFX9: global_atomic_sub_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000273define amdgpu_kernel void @atomic_sub_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000274entry:
275 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000276 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000277 ret void
278}
279
280; GCN-LABEL: {{^}}atomic_sub_i64_ret_addr64:
281; CI: buffer_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
282; VI: flat_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000283; CIVI: buffer_store_dwordx2 [[RET]]
284
285; GFX9: global_atomic_sub_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000286define amdgpu_kernel void @atomic_sub_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000287entry:
288 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000289 %tmp0 = atomicrmw volatile sub i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000290 store i64 %tmp0, i64 addrspace(1)* %out2
291 ret void
292}
293
294; GCN-LABEL: {{^}}atomic_max_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000295; CIVI: buffer_atomic_smax_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
296; GFX9: global_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000297define amdgpu_kernel void @atomic_max_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000298entry:
299 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000300 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000301 ret void
302}
303
304; GCN-LABEL: {{^}}atomic_max_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000305; CIVI: buffer_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
306; CIVI: buffer_store_dwordx2 [[RET]]
307
308; GFX9: global_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000309define amdgpu_kernel void @atomic_max_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000310entry:
311 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000312 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000313 store i64 %tmp0, i64 addrspace(1)* %out2
314 ret void
315}
316
317; GCN-LABEL: {{^}}atomic_max_i64_addr64_offset:
318; CI: buffer_atomic_smax_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
319; VI: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000320; GFX9: global_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000321define amdgpu_kernel void @atomic_max_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000322entry:
323 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
324 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000325 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000326 ret void
327}
328
329; GCN-LABEL: {{^}}atomic_max_i64_ret_addr64_offset:
330; CI: buffer_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
331; VI: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000332; CIVI: buffer_store_dwordx2 [[RET]]
333
334; GFX9: global_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000335define amdgpu_kernel void @atomic_max_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000336entry:
337 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
338 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000339 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000340 store i64 %tmp0, i64 addrspace(1)* %out2
341 ret void
342}
343
344; GCN-LABEL: {{^}}atomic_max_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000345; CIVI: buffer_atomic_smax_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
346; GFX9: global_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000347define amdgpu_kernel void @atomic_max_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000348entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000349 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000350 ret void
351}
352
353; GCN-LABEL: {{^}}atomic_max_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000354; CIVI: buffer_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
355; CIVI: buffer_store_dwordx2 [[RET]]
356
357; GFX9: global_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000358define amdgpu_kernel void @atomic_max_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000359entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000360 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000361 store i64 %tmp0, i64 addrspace(1)* %out2
362 ret void
363}
364
365; GCN-LABEL: {{^}}atomic_max_i64_addr64:
366; CI: buffer_atomic_smax_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
367; VI: flat_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000368; GFX9: global_atomic_smax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000369define amdgpu_kernel void @atomic_max_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000370entry:
371 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000372 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000373 ret void
374}
375
376; GCN-LABEL: {{^}}atomic_max_i64_ret_addr64:
377; CI: buffer_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
378; VI: flat_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000379; CIVI: buffer_store_dwordx2 [[RET]]
380
381; GFX9: global_atomic_smax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000382define amdgpu_kernel void @atomic_max_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000383entry:
384 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000385 %tmp0 = atomicrmw volatile max i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000386 store i64 %tmp0, i64 addrspace(1)* %out2
387 ret void
388}
389
390; GCN-LABEL: {{^}}atomic_umax_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000391; CIVI: buffer_atomic_umax_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
392; GFX9: global_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000393define amdgpu_kernel void @atomic_umax_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000394entry:
395 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000396 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000397 ret void
398}
399
400; GCN-LABEL: {{^}}atomic_umax_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000401; CIVI: buffer_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
402; CIVI: buffer_store_dwordx2 [[RET]]
403
404; GFX9: global_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000405define amdgpu_kernel void @atomic_umax_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000406entry:
407 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000408 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000409 store i64 %tmp0, i64 addrspace(1)* %out2
410 ret void
411}
412
413; GCN-LABEL: {{^}}atomic_umax_i64_addr64_offset:
414; CI: buffer_atomic_umax_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
415; VI: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000416; FX9: global_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000417define amdgpu_kernel void @atomic_umax_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000418entry:
419 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
420 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000421 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000422 ret void
423}
424
425; GCN-LABEL: {{^}}atomic_umax_i64_ret_addr64_offset:
426; CI: buffer_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
427; VI: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000428; CIVI: buffer_store_dwordx2 [[RET]]
429
430; GFX9: global_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000431define amdgpu_kernel void @atomic_umax_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000432entry:
433 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
434 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000435 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000436 store i64 %tmp0, i64 addrspace(1)* %out2
437 ret void
438}
439
440; GCN-LABEL: {{^}}atomic_umax_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000441; CIVI: buffer_atomic_umax_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
442; GFX9: global_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000443define amdgpu_kernel void @atomic_umax_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000444entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000445 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000446 ret void
447}
448
449; GCN-LABEL: {{^}}atomic_umax_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000450; CIVI: buffer_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
451; CIVI: buffer_store_dwordx2 [[RET]]
452
453; GFX9: global_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000454define amdgpu_kernel void @atomic_umax_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000455entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000456 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000457 store i64 %tmp0, i64 addrspace(1)* %out2
458 ret void
459}
460
461; GCN-LABEL: {{^}}atomic_umax_i64_addr64:
462; CI: buffer_atomic_umax_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
463; VI: flat_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000464; GFX9: global_atomic_umax_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000465define amdgpu_kernel void @atomic_umax_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000466entry:
467 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000468 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000469 ret void
470}
471
472; GCN-LABEL: {{^}}atomic_umax_i64_ret_addr64:
473; CI: buffer_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
474; VI: flat_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000475; CIVI: buffer_store_dwordx2 [[RET]]
476
477; GFX9: global_atomic_umax_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000478define amdgpu_kernel void @atomic_umax_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000479entry:
480 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000481 %tmp0 = atomicrmw volatile umax i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000482 store i64 %tmp0, i64 addrspace(1)* %out2
483 ret void
484}
485
486; GCN-LABEL: {{^}}atomic_min_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000487; CIVI: buffer_atomic_smin_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
488; GFX9: global_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000489define amdgpu_kernel void @atomic_min_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000490entry:
491 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000492 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000493 ret void
494}
495
496; GCN-LABEL: {{^}}atomic_min_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000497; CIVI: buffer_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
498; CIVI: buffer_store_dwordx2 [[RET]]
499
500; GFX9: global_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000501define amdgpu_kernel void @atomic_min_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000502entry:
503 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000504 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000505 store i64 %tmp0, i64 addrspace(1)* %out2
506 ret void
507}
508
509; GCN-LABEL: {{^}}atomic_min_i64_addr64_offset:
510; CI: buffer_atomic_smin_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
511; VI: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000512; GFX9: global_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000513define amdgpu_kernel void @atomic_min_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000514entry:
515 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
516 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000517 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000518 ret void
519}
520
521; GCN-LABEL: {{^}}atomic_min_i64_ret_addr64_offset:
522; CI: buffer_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
523; VI: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000524; CIVI: buffer_store_dwordx2 [[RET]]
525
526; GFX9: global_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000527define amdgpu_kernel void @atomic_min_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000528entry:
529 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
530 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000531 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000532 store i64 %tmp0, i64 addrspace(1)* %out2
533 ret void
534}
535
536; GCN-LABEL: {{^}}atomic_min_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000537; CIVI: buffer_atomic_smin_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
538; GFX9: global_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000539define amdgpu_kernel void @atomic_min_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000540entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000541 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000542 ret void
543}
544
545; GCN-LABEL: {{^}}atomic_min_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000546; CIVI: buffer_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
547; CIVI: buffer_store_dwordx2 [[RET]]
548
549; GFX9: global_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000550define amdgpu_kernel void @atomic_min_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000551entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000552 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000553 store i64 %tmp0, i64 addrspace(1)* %out2
554 ret void
555}
556
557; GCN-LABEL: {{^}}atomic_min_i64_addr64:
558; CI: buffer_atomic_smin_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
559; VI: flat_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000560; GFX9: global_atomic_smin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000561define amdgpu_kernel void @atomic_min_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000562entry:
563 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000564 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000565 ret void
566}
567
568; GCN-LABEL: {{^}}atomic_min_i64_ret_addr64:
569; CI: buffer_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
570; VI: flat_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000571; CIVI: buffer_store_dwordx2 [[RET]]
572
573; GFX9: global_atomic_smin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000574define amdgpu_kernel void @atomic_min_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000575entry:
576 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000577 %tmp0 = atomicrmw volatile min i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000578 store i64 %tmp0, i64 addrspace(1)* %out2
579 ret void
580}
581
582; GCN-LABEL: {{^}}atomic_umin_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000583; CIVI: buffer_atomic_umin_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
584
585; GFX9: global_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000586define amdgpu_kernel void @atomic_umin_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000587entry:
588 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000589 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000590 ret void
591}
592
593; GCN-LABEL: {{^}}atomic_umin_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000594; CIVI: buffer_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
595; CIVI: buffer_store_dwordx2 [[RET]]
596
597; GFX9: global_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000598define amdgpu_kernel void @atomic_umin_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000599entry:
600 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000601 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000602 store i64 %tmp0, i64 addrspace(1)* %out2
603 ret void
604}
605
606; GCN-LABEL: {{^}}atomic_umin_i64_addr64_offset:
607; CI: buffer_atomic_umin_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
608; VI: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000609; GFX9: global_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000610define amdgpu_kernel void @atomic_umin_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000611entry:
612 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
613 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000614 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000615 ret void
616}
617
618; GCN-LABEL: {{^}}atomic_umin_i64_ret_addr64_offset:
619; CI: buffer_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
620; VI: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000621; CIVI: buffer_store_dwordx2 [[RET]]
622
623; GFX9: global_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000624define amdgpu_kernel void @atomic_umin_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000625entry:
626 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
627 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000628 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000629 store i64 %tmp0, i64 addrspace(1)* %out2
630 ret void
631}
632
633; GCN-LABEL: {{^}}atomic_umin_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000634; CIVI: buffer_atomic_umin_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
635; GFX9: global_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000636define amdgpu_kernel void @atomic_umin_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000637entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000638 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000639 ret void
640}
641
642; GCN-LABEL: {{^}}atomic_umin_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000643; CIVI: buffer_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
644; CIVI: buffer_store_dwordx2 [[RET]]
645
646; GFX9: global_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000647define amdgpu_kernel void @atomic_umin_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000648entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000649 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000650 store i64 %tmp0, i64 addrspace(1)* %out2
651 ret void
652}
653
654; GCN-LABEL: {{^}}atomic_umin_i64_addr64:
655; CI: buffer_atomic_umin_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
656; VI: flat_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000657; GFX9: global_atomic_umin_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000658define amdgpu_kernel void @atomic_umin_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000659entry:
660 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000661 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000662 ret void
663}
664
665; GCN-LABEL: {{^}}atomic_umin_i64_ret_addr64:
666; CI: buffer_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
667; VI: flat_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000668; CIVI: buffer_store_dwordx2 [[RET]]
669
670; GFX9: global_atomic_umin_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000671define amdgpu_kernel void @atomic_umin_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000672entry:
673 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000674 %tmp0 = atomicrmw volatile umin i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000675 store i64 %tmp0, i64 addrspace(1)* %out2
676 ret void
677}
678
679; GCN-LABEL: {{^}}atomic_or_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000680; CIVI: buffer_atomic_or_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
681; GFX9: global_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000682define amdgpu_kernel void @atomic_or_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000683entry:
684 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000685 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000686 ret void
687}
688
689; GCN-LABEL: {{^}}atomic_or_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000690; CIVI: buffer_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
691; CIVI: buffer_store_dwordx2 [[RET]]
692
693; GFX9: global_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000694define amdgpu_kernel void @atomic_or_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000695entry:
696 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000697 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000698 store i64 %tmp0, i64 addrspace(1)* %out2
699 ret void
700}
701
702; GCN-LABEL: {{^}}atomic_or_i64_addr64_offset:
703; CI: buffer_atomic_or_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
704; VI: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000705; GFX9: global_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000706define amdgpu_kernel void @atomic_or_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000707entry:
708 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
709 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000710 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000711 ret void
712}
713
714; GCN-LABEL: {{^}}atomic_or_i64_ret_addr64_offset:
715; CI: buffer_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
716; VI: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000717; CIVI: buffer_store_dwordx2 [[RET]]
718
719; GFX9: global_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000720define amdgpu_kernel void @atomic_or_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000721entry:
722 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
723 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000724 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000725 store i64 %tmp0, i64 addrspace(1)* %out2
726 ret void
727}
728
729; GCN-LABEL: {{^}}atomic_or_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000730; CIVI: buffer_atomic_or_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
731; GFX9: global_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000732define amdgpu_kernel void @atomic_or_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000733entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000734 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000735 ret void
736}
737
738; GCN-LABEL: {{^}}atomic_or_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000739; CIVI: buffer_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
740; CIVI: buffer_store_dwordx2 [[RET]]
741
742; GFX9: global_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000743define amdgpu_kernel void @atomic_or_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000744entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000745 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000746 store i64 %tmp0, i64 addrspace(1)* %out2
747 ret void
748}
749
750; GCN-LABEL: {{^}}atomic_or_i64_addr64:
751; CI: buffer_atomic_or_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
752; VI: flat_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000753; GFX9: global_atomic_or_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000754define amdgpu_kernel void @atomic_or_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000755entry:
756 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000757 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000758 ret void
759}
760
761; GCN-LABEL: {{^}}atomic_or_i64_ret_addr64:
762; CI: buffer_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
763; VI: flat_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000764; CIVI: buffer_store_dwordx2 [[RET]]
765
766; GFX9: global_atomic_or_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000767define amdgpu_kernel void @atomic_or_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000768entry:
769 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000770 %tmp0 = atomicrmw volatile or i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000771 store i64 %tmp0, i64 addrspace(1)* %out2
772 ret void
773}
774
775; GCN-LABEL: {{^}}atomic_xchg_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000776; CIVI: buffer_atomic_swap_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
777
778; GFX9: global_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000779define amdgpu_kernel void @atomic_xchg_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000780entry:
781 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000782 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000783 ret void
784}
785
786; GCN-LABEL: {{^}}atomic_xchg_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000787; CIVI: buffer_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
788; CIVI: buffer_store_dwordx2 [[RET]]
789
790; GFX9: global_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000791define amdgpu_kernel void @atomic_xchg_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000792entry:
793 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000794 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000795 store i64 %tmp0, i64 addrspace(1)* %out2
796 ret void
797}
798
799; GCN-LABEL: {{^}}atomic_xchg_i64_addr64_offset:
800; CI: buffer_atomic_swap_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
Matt Arsenault25363d32016-06-09 23:42:44 +0000801; VI: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000802; GFX9: global_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000803define amdgpu_kernel void @atomic_xchg_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000804entry:
805 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
806 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000807 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000808 ret void
809}
810
811; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64_offset:
812; CI: buffer_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
813; VI: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000814; CIVI: buffer_store_dwordx2 [[RET]]
815
816; GFX9: global_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000817define amdgpu_kernel void @atomic_xchg_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000818entry:
819 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
820 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000821 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000822 store i64 %tmp0, i64 addrspace(1)* %out2
823 ret void
824}
825
826; GCN-LABEL: {{^}}atomic_xchg_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000827; CIVI: buffer_atomic_swap_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
828; GFX9: global_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000829define amdgpu_kernel void @atomic_xchg_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000830entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000831 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000832 ret void
833}
834
835; GCN-LABEL: {{^}}atomic_xchg_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000836; CIVI: buffer_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
837; CIVI: buffer_store_dwordx2 [[RET]]
838
839; GFX9: global_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000840define amdgpu_kernel void @atomic_xchg_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000841entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000842 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000843 store i64 %tmp0, i64 addrspace(1)* %out2
844 ret void
845}
846
847; GCN-LABEL: {{^}}atomic_xchg_i64_addr64:
848; CI: buffer_atomic_swap_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
849; VI: flat_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000850; GFX9: global_atomic_swap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000851define amdgpu_kernel void @atomic_xchg_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000852entry:
853 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000854 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000855 ret void
856}
857
858; GCN-LABEL: {{^}}atomic_xchg_i64_ret_addr64:
859; CI: buffer_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
860; VI: flat_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000861; CIVI: buffer_store_dwordx2 [[RET]]
862
863; GFX9: global_atomic_swap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000864define amdgpu_kernel void @atomic_xchg_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000865entry:
866 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000867 %tmp0 = atomicrmw volatile xchg i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000868 store i64 %tmp0, i64 addrspace(1)* %out2
869 ret void
870}
871
872; GCN-LABEL: {{^}}atomic_xor_i64_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000873; CIVI: buffer_atomic_xor_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
874; GFX9: global_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000875define amdgpu_kernel void @atomic_xor_i64_offset(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000876entry:
877 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000878 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000879 ret void
880}
881
882; GCN-LABEL: {{^}}atomic_xor_i64_ret_offset:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000883; CIVI: buffer_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
884; CIVI: buffer_store_dwordx2 [[RET]]
885
886; GFX9: global_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000887define amdgpu_kernel void @atomic_xor_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000888entry:
889 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000890 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000891 store i64 %tmp0, i64 addrspace(1)* %out2
892 ret void
893}
894
895; GCN-LABEL: {{^}}atomic_xor_i64_addr64_offset:
896; CI: buffer_atomic_xor_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
897; VI: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000898; GFX9: global_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000899define amdgpu_kernel void @atomic_xor_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000900entry:
901 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
902 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000903 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000904 ret void
905}
906
907; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64_offset:
908; CI: buffer_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
909; VI: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000910; CIVI: buffer_store_dwordx2 [[RET]]
911
912; GFX9: global_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000913define amdgpu_kernel void @atomic_xor_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000914entry:
915 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
916 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
Matt Arsenault25363d32016-06-09 23:42:44 +0000917 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %gep, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000918 store i64 %tmp0, i64 addrspace(1)* %out2
919 ret void
920}
921
922; GCN-LABEL: {{^}}atomic_xor_i64:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000923; CIVI: buffer_atomic_xor_x2 v{{\[[0-9]+:[0-9]+\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
924; GFX9: global_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000925define amdgpu_kernel void @atomic_xor_i64(i64 addrspace(1)* %out, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000926entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000927 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000928 ret void
929}
930
931; GCN-LABEL: {{^}}atomic_xor_i64_ret:
Matt Arsenault4e309b02017-07-29 01:03:53 +0000932; CIVI: buffer_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
933; CIVI: buffer_store_dwordx2 [[RET]]
934
935; GFX9: global_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000936define amdgpu_kernel void @atomic_xor_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000937entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000938 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %out, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000939 store i64 %tmp0, i64 addrspace(1)* %out2
940 ret void
941}
942
943; GCN-LABEL: {{^}}atomic_xor_i64_addr64:
944; CI: buffer_atomic_xor_x2 v{{\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
945; VI: flat_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000946; GFX9: global_atomic_xor_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000947define amdgpu_kernel void @atomic_xor_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000948entry:
949 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000950 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000951 ret void
952}
953
954; GCN-LABEL: {{^}}atomic_xor_i64_ret_addr64:
955; CI: buffer_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
956; VI: flat_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000957; CIVI: buffer_store_dwordx2 [[RET]]
958
959; GFX9: global_atomic_xor_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000960define amdgpu_kernel void @atomic_xor_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index) {
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000961entry:
962 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000963 %tmp0 = atomicrmw volatile xor i64 addrspace(1)* %ptr, i64 %in seq_cst
Matt Arsenault64fa2f42016-04-12 14:05:11 +0000964 store i64 %tmp0, i64 addrspace(1)* %out2
965 ret void
966}
Matt Arsenault25363d32016-06-09 23:42:44 +0000967
Matt Arsenault88701812016-06-09 23:42:48 +0000968
Matt Arsenault4e309b02017-07-29 01:03:53 +0000969; GCN-LABEL: {{^}}atomic_cmpxchg_i64_offset:
970; CIVI: buffer_atomic_cmpswap_x2 v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
971; GFX9: global_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000972define amdgpu_kernel void @atomic_cmpxchg_i64_offset(i64 addrspace(1)* %out, i64 %in, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +0000973entry:
974 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
975 %val = cmpxchg volatile i64 addrspace(1)* %gep, i64 %old, i64 %in seq_cst seq_cst
976 ret void
977}
978
Matt Arsenault4e309b02017-07-29 01:03:53 +0000979; GCN-LABEL: {{^}}atomic_cmpxchg_i64_soffset:
980; CIVI: s_mov_b32 [[SREG:s[0-9]+]], 0x11940
981; CIVI: buffer_atomic_cmpswap_x2 v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], [[SREG]]{{$}}
982
983; GFX9: global_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000984define amdgpu_kernel void @atomic_cmpxchg_i64_soffset(i64 addrspace(1)* %out, i64 %in, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +0000985entry:
986 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 9000
987 %val = cmpxchg volatile i64 addrspace(1)* %gep, i64 %old, i64 %in seq_cst seq_cst
988 ret void
989}
990
Matt Arsenault4e309b02017-07-29 01:03:53 +0000991; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_offset:
992; CIVI: buffer_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
993; CIVI: buffer_store_dwordx2 v{{\[}}[[RET]]:
994
995; GFX9: global_atomic_cmpswap_x2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000996define amdgpu_kernel void @atomic_cmpxchg_i64_ret_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +0000997entry:
998 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
999 %val = cmpxchg volatile i64 addrspace(1)* %gep, i64 %old, i64 %in seq_cst seq_cst
1000 %extract0 = extractvalue { i64, i1 } %val, 0
1001 store i64 %extract0, i64 addrspace(1)* %out2
1002 ret void
1003}
1004
Matt Arsenault4e309b02017-07-29 01:03:53 +00001005; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64_offset:
Matt Arsenault88701812016-06-09 23:42:48 +00001006; CI: buffer_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
Matt Arsenault88701812016-06-09 23:42:48 +00001007; VI: flat_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001008; GFX9: global_atomic_cmpswap_x2 v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001009define amdgpu_kernel void @atomic_cmpxchg_i64_addr64_offset(i64 addrspace(1)* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001010entry:
1011 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1012 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1013 %val = cmpxchg volatile i64 addrspace(1)* %gep, i64 %old, i64 %in seq_cst seq_cst
1014 ret void
1015}
1016
Matt Arsenault4e309b02017-07-29 01:03:53 +00001017; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64_offset:
Matt Arsenault88701812016-06-09 23:42:48 +00001018; CI: buffer_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
1019; VI: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001020; CIVI: buffer_store_dwordx2 v{{\[}}[[RET]]:
1021
1022; GFX9: global_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001023define amdgpu_kernel void @atomic_cmpxchg_i64_ret_addr64_offset(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001024entry:
1025 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1026 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1027 %val = cmpxchg volatile i64 addrspace(1)* %gep, i64 %old, i64 %in seq_cst seq_cst
1028 %extract0 = extractvalue { i64, i1 } %val, 0
1029 store i64 %extract0, i64 addrspace(1)* %out2
1030 ret void
1031}
1032
Matt Arsenault4e309b02017-07-29 01:03:53 +00001033; GCN-LABEL: {{^}}atomic_cmpxchg_i64:
1034; CIVI: buffer_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
1035; GFX9: global_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001036define amdgpu_kernel void @atomic_cmpxchg_i64(i64 addrspace(1)* %out, i64 %in, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001037entry:
1038 %val = cmpxchg volatile i64 addrspace(1)* %out, i64 %old, i64 %in seq_cst seq_cst
1039 ret void
1040}
1041
Matt Arsenault4e309b02017-07-29 01:03:53 +00001042; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret:
1043; CIVI: buffer_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
1044; CIVI: buffer_store_dwordx2 v{{\[}}[[RET]]:
1045
1046; GFX9: global_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001047define amdgpu_kernel void @atomic_cmpxchg_i64_ret(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001048entry:
1049 %val = cmpxchg volatile i64 addrspace(1)* %out, i64 %old, i64 %in seq_cst seq_cst
1050 %extract0 = extractvalue { i64, i1 } %val, 0
1051 store i64 %extract0, i64 addrspace(1)* %out2
1052 ret void
1053}
1054
Matt Arsenault4e309b02017-07-29 01:03:53 +00001055; GCN-LABEL: {{^}}atomic_cmpxchg_i64_addr64:
Matt Arsenault88701812016-06-09 23:42:48 +00001056; CI: buffer_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
1057; VI: flat_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001058; GFX9: global_atomic_cmpswap_x2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001059define amdgpu_kernel void @atomic_cmpxchg_i64_addr64(i64 addrspace(1)* %out, i64 %in, i64 %index, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001060entry:
1061 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1062 %val = cmpxchg volatile i64 addrspace(1)* %ptr, i64 %old, i64 %in seq_cst seq_cst
1063 ret void
1064}
1065
Matt Arsenault4e309b02017-07-29 01:03:53 +00001066; GCN-LABEL: {{^}}atomic_cmpxchg_i64_ret_addr64:
Matt Arsenault88701812016-06-09 23:42:48 +00001067; CI: buffer_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1068; VI: flat_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001069; CIVI: buffer_store_dwordx2 v{{\[}}[[RET]]:
1070
1071; GFX9: global_atomic_cmpswap_x2 v{{\[}}[[RET:[0-9]+]]:{{[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001072define amdgpu_kernel void @atomic_cmpxchg_i64_ret_addr64(i64 addrspace(1)* %out, i64 addrspace(1)* %out2, i64 %in, i64 %index, i64 %old) {
Matt Arsenault88701812016-06-09 23:42:48 +00001073entry:
1074 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1075 %val = cmpxchg volatile i64 addrspace(1)* %ptr, i64 %old, i64 %in seq_cst seq_cst
1076 %extract0 = extractvalue { i64, i1 } %val, 0
1077 store i64 %extract0, i64 addrspace(1)* %out2
1078 ret void
1079}
1080
Matt Arsenault4e309b02017-07-29 01:03:53 +00001081; GCN-LABEL: {{^}}atomic_load_i64_offset:
Matt Arsenault25363d32016-06-09 23:42:44 +00001082; CI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
1083; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001084; CIVI: buffer_store_dwordx2 [[RET]]
1085
1086; GFX9: global_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}], off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001087define amdgpu_kernel void @atomic_load_i64_offset(i64 addrspace(1)* %in, i64 addrspace(1)* %out) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001088entry:
1089 %gep = getelementptr i64, i64 addrspace(1)* %in, i64 4
1090 %val = load atomic i64, i64 addrspace(1)* %gep seq_cst, align 8
1091 store i64 %val, i64 addrspace(1)* %out
1092 ret void
1093}
1094
Matt Arsenault4e309b02017-07-29 01:03:53 +00001095; GCN-LABEL: {{^}}atomic_load_i64:
Matt Arsenault25363d32016-06-09 23:42:44 +00001096; CI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
1097; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc
Matt Arsenault4e309b02017-07-29 01:03:53 +00001098; CIVI: buffer_store_dwordx2 [[RET]]
1099
1100; GFX9: global_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001101define amdgpu_kernel void @atomic_load_i64(i64 addrspace(1)* %in, i64 addrspace(1)* %out) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001102entry:
1103 %val = load atomic i64, i64 addrspace(1)* %in seq_cst, align 8
1104 store i64 %val, i64 addrspace(1)* %out
1105 ret void
1106}
1107
Matt Arsenault4e309b02017-07-29 01:03:53 +00001108; GCN-LABEL: {{^}}atomic_load_i64_addr64_offset:
Matt Arsenault25363d32016-06-09 23:42:44 +00001109; CI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
1110; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001111; CIVI: buffer_store_dwordx2 [[RET]]
1112
1113; GFX9: global_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], off offset:32 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001114define amdgpu_kernel void @atomic_load_i64_addr64_offset(i64 addrspace(1)* %in, i64 addrspace(1)* %out, i64 %index) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001115entry:
1116 %ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %index
1117 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1118 %val = load atomic i64, i64 addrspace(1)* %gep seq_cst, align 8
1119 store i64 %val, i64 addrspace(1)* %out
1120 ret void
1121}
1122
Matt Arsenault4e309b02017-07-29 01:03:53 +00001123; GCN-LABEL: {{^}}atomic_load_i64_addr64:
Matt Arsenault25363d32016-06-09 23:42:44 +00001124; CI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1125; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001126; CIVI: buffer_store_dwordx2 [[RET]]
1127
1128; GFX9: global_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001129define amdgpu_kernel void @atomic_load_i64_addr64(i64 addrspace(1)* %in, i64 addrspace(1)* %out, i64 %index) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001130entry:
1131 %ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %index
1132 %val = load atomic i64, i64 addrspace(1)* %ptr seq_cst, align 8
1133 store i64 %val, i64 addrspace(1)* %out
1134 ret void
1135}
1136
Matt Arsenault4e309b02017-07-29 01:03:53 +00001137; GCN-LABEL: {{^}}atomic_store_i64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001138; CI: buffer_store_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32{{$}}
1139; VI: flat_store_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001140; GFX9: global_store_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}], off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001141define amdgpu_kernel void @atomic_store_i64_offset(i64 %in, i64 addrspace(1)* %out) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001142entry:
1143 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
1144 store atomic i64 %in, i64 addrspace(1)* %gep seq_cst, align 8
1145 ret void
1146}
1147
Matt Arsenault4e309b02017-07-29 01:03:53 +00001148; GCN-LABEL: {{^}}atomic_store_i64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001149; CI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
1150; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001151; GFX9: global_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001152define amdgpu_kernel void @atomic_store_i64(i64 %in, i64 addrspace(1)* %out) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001153entry:
1154 store atomic i64 %in, i64 addrspace(1)* %out seq_cst, align 8
1155 ret void
1156}
1157
Matt Arsenault4e309b02017-07-29 01:03:53 +00001158; GCN-LABEL: {{^}}atomic_store_i64_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001159; CI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32{{$}}
1160; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001161; GFX9: global_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], off offset:32{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001162define amdgpu_kernel void @atomic_store_i64_addr64_offset(i64 %in, i64 addrspace(1)* %out, i64 %index) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001163entry:
1164 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1165 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1166 store atomic i64 %in, i64 addrspace(1)* %gep seq_cst, align 8
1167 ret void
1168}
1169
Matt Arsenault4e309b02017-07-29 01:03:53 +00001170; GCN-LABEL: {{^}}atomic_store_i64_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001171; CI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
1172; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001173; GFX9: global_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001174define amdgpu_kernel void @atomic_store_i64_addr64(i64 %in, i64 addrspace(1)* %out, i64 %index) {
Matt Arsenault25363d32016-06-09 23:42:44 +00001175entry:
1176 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1177 store atomic i64 %in, i64 addrspace(1)* %ptr seq_cst, align 8
1178 ret void
1179}