blob: 30b197a3604fda7db16e270319e6dea5ff81fc90 [file] [log] [blame]
Tom Stellard70580f82015-07-20 14:28:41 +00001; RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs | FileCheck --check-prefix=GCN --check-prefix=SI --check-prefix=FUNC %s
2; RUN: llc < %s -march=amdgcn -mcpu=tonga -verify-machineinstrs | FileCheck --check-prefix=GCN --check-prefix=VI --check-prefix=FUNC %s
3
Tom Stellard7980fc82014-09-25 18:30:26 +00004
Aaron Watry1d13d362014-10-17 23:32:49 +00005; FUNC-LABEL: {{^}}atomic_add_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00006; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry1d13d362014-10-17 23:32:49 +00007define void @atomic_add_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Tom Stellard7980fc82014-09-25 18:30:26 +00008entry:
David Blaikie79e6c742015-02-27 19:29:02 +00009 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry28682cf2014-10-17 23:32:50 +000010 %0 = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
11 ret void
12}
13
14; FUNC-LABEL: {{^}}atomic_add_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +000015; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +000016; GCN: buffer_store_dword [[RET]]
Aaron Watry28682cf2014-10-17 23:32:50 +000017define void @atomic_add_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
18entry:
David Blaikie79e6c742015-02-27 19:29:02 +000019 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry28682cf2014-10-17 23:32:50 +000020 %0 = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
21 store i32 %0, i32 addrspace(1)* %out2
22 ret void
23}
24
25; FUNC-LABEL: {{^}}atomic_add_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +000026; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +000027; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
28
Aaron Watry28682cf2014-10-17 23:32:50 +000029define void @atomic_add_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
30entry:
David Blaikie79e6c742015-02-27 19:29:02 +000031 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
32 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry28682cf2014-10-17 23:32:50 +000033 %0 = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
34 ret void
35}
36
37; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +000038; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +000039; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
40; GCN: buffer_store_dword [[RET]]
Aaron Watry28682cf2014-10-17 23:32:50 +000041define void @atomic_add_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
42entry:
David Blaikie79e6c742015-02-27 19:29:02 +000043 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
44 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry28682cf2014-10-17 23:32:50 +000045 %0 = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
46 store i32 %0, i32 addrspace(1)* %out2
47 ret void
48}
49
50; FUNC-LABEL: {{^}}atomic_add_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +000051; GCN: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry28682cf2014-10-17 23:32:50 +000052define void @atomic_add_i32(i32 addrspace(1)* %out, i32 %in) {
53entry:
Tom Stellard7980fc82014-09-25 18:30:26 +000054 %0 = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
55 ret void
56}
57
Aaron Watry28682cf2014-10-17 23:32:50 +000058; FUNC-LABEL: {{^}}atomic_add_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +000059; GCN: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +000060; GCN: buffer_store_dword [[RET]]
Aaron Watry28682cf2014-10-17 23:32:50 +000061define void @atomic_add_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Tom Stellard7980fc82014-09-25 18:30:26 +000062entry:
63 %0 = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
64 store i32 %0, i32 addrspace(1)* %out2
65 ret void
66}
67
Aaron Watry1d13d362014-10-17 23:32:49 +000068; FUNC-LABEL: {{^}}atomic_add_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000069; SI: buffer_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +000070; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry1d13d362014-10-17 23:32:49 +000071define void @atomic_add_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Tom Stellard7980fc82014-09-25 18:30:26 +000072entry:
David Blaikie79e6c742015-02-27 19:29:02 +000073 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Tom Stellard7980fc82014-09-25 18:30:26 +000074 %0 = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
75 ret void
76}
77
Aaron Watry1d13d362014-10-17 23:32:49 +000078; FUNC-LABEL: {{^}}atomic_add_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +000079; SI: buffer_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +000080; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
81; GCN: buffer_store_dword [[RET]]
Aaron Watry1d13d362014-10-17 23:32:49 +000082define void @atomic_add_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Tom Stellard7980fc82014-09-25 18:30:26 +000083entry:
David Blaikie79e6c742015-02-27 19:29:02 +000084 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Tom Stellard7980fc82014-09-25 18:30:26 +000085 %0 = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
86 store i32 %0, i32 addrspace(1)* %out2
87 ret void
88}
Aaron Watry328f1ba2014-10-17 23:32:52 +000089
Aaron Watry62127802014-10-17 23:32:54 +000090; FUNC-LABEL: {{^}}atomic_and_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +000091; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry62127802014-10-17 23:32:54 +000092define void @atomic_and_i32_offset(i32 addrspace(1)* %out, i32 %in) {
93entry:
David Blaikie79e6c742015-02-27 19:29:02 +000094 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry62127802014-10-17 23:32:54 +000095 %0 = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
96 ret void
97}
98
99; FUNC-LABEL: {{^}}atomic_and_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000100; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000101; GCN: buffer_store_dword [[RET]]
Aaron Watry62127802014-10-17 23:32:54 +0000102define void @atomic_and_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
103entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000104 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry62127802014-10-17 23:32:54 +0000105 %0 = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
106 store i32 %0, i32 addrspace(1)* %out2
107 ret void
108}
109
110; FUNC-LABEL: {{^}}atomic_and_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000111; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000112; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry62127802014-10-17 23:32:54 +0000113define void @atomic_and_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
114entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000115 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
116 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry62127802014-10-17 23:32:54 +0000117 %0 = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
118 ret void
119}
120
121; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000122; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000123; VI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
124; GCN: buffer_store_dword [[RET]]
Aaron Watry62127802014-10-17 23:32:54 +0000125define void @atomic_and_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
126entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000127 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
128 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry62127802014-10-17 23:32:54 +0000129 %0 = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
130 store i32 %0, i32 addrspace(1)* %out2
131 ret void
132}
133
134; FUNC-LABEL: {{^}}atomic_and_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000135; GCN: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry62127802014-10-17 23:32:54 +0000136define void @atomic_and_i32(i32 addrspace(1)* %out, i32 %in) {
137entry:
138 %0 = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
139 ret void
140}
141
142; FUNC-LABEL: {{^}}atomic_and_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000143; GCN: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000144; GCN: buffer_store_dword [[RET]]
Aaron Watry62127802014-10-17 23:32:54 +0000145define void @atomic_and_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
146entry:
147 %0 = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
148 store i32 %0, i32 addrspace(1)* %out2
149 ret void
150}
151
152; FUNC-LABEL: {{^}}atomic_and_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000153; SI: buffer_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000154; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry62127802014-10-17 23:32:54 +0000155define void @atomic_and_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
156entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000157 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry62127802014-10-17 23:32:54 +0000158 %0 = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
159 ret void
160}
161
162; FUNC-LABEL: {{^}}atomic_and_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000163; SI: buffer_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000164; VI: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
165; GCN: buffer_store_dword [[RET]]
Aaron Watry62127802014-10-17 23:32:54 +0000166define void @atomic_and_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
167entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000168 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry62127802014-10-17 23:32:54 +0000169 %0 = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
170 store i32 %0, i32 addrspace(1)* %out2
171 ret void
172}
173
Aaron Watry328f1ba2014-10-17 23:32:52 +0000174; FUNC-LABEL: {{^}}atomic_sub_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000175; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry328f1ba2014-10-17 23:32:52 +0000176define void @atomic_sub_i32_offset(i32 addrspace(1)* %out, i32 %in) {
177entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000178 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry328f1ba2014-10-17 23:32:52 +0000179 %0 = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
180 ret void
181}
182
183; FUNC-LABEL: {{^}}atomic_sub_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000184; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000185; GCN: buffer_store_dword [[RET]]
Aaron Watry328f1ba2014-10-17 23:32:52 +0000186define void @atomic_sub_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
187entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000188 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry328f1ba2014-10-17 23:32:52 +0000189 %0 = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
190 store i32 %0, i32 addrspace(1)* %out2
191 ret void
192}
193
194; FUNC-LABEL: {{^}}atomic_sub_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000195; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000196; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry328f1ba2014-10-17 23:32:52 +0000197define void @atomic_sub_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
198entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000199 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
200 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry328f1ba2014-10-17 23:32:52 +0000201 %0 = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
202 ret void
203}
204
205; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000206; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000207; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
208; GCN: buffer_store_dword [[RET]]
Aaron Watry328f1ba2014-10-17 23:32:52 +0000209define void @atomic_sub_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
210entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000211 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
212 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry328f1ba2014-10-17 23:32:52 +0000213 %0 = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
214 store i32 %0, i32 addrspace(1)* %out2
215 ret void
216}
217
218; FUNC-LABEL: {{^}}atomic_sub_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000219; GCN: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry328f1ba2014-10-17 23:32:52 +0000220define void @atomic_sub_i32(i32 addrspace(1)* %out, i32 %in) {
221entry:
222 %0 = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
223 ret void
224}
225
226; FUNC-LABEL: {{^}}atomic_sub_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000227; GCN: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000228; GCN: buffer_store_dword [[RET]]
Aaron Watry328f1ba2014-10-17 23:32:52 +0000229define void @atomic_sub_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
230entry:
231 %0 = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
232 store i32 %0, i32 addrspace(1)* %out2
233 ret void
234}
235
236; FUNC-LABEL: {{^}}atomic_sub_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000237; SI: buffer_atomic_sub v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000238; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry328f1ba2014-10-17 23:32:52 +0000239define void @atomic_sub_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
240entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000241 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry328f1ba2014-10-17 23:32:52 +0000242 %0 = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
243 ret void
244}
245
246; FUNC-LABEL: {{^}}atomic_sub_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000247; SI: buffer_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000248; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
249; GCN: buffer_store_dword [[RET]]
Aaron Watry328f1ba2014-10-17 23:32:52 +0000250define void @atomic_sub_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
251entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000252 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry328f1ba2014-10-17 23:32:52 +0000253 %0 = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
254 store i32 %0, i32 addrspace(1)* %out2
255 ret void
256}
Aaron Watry29f295d2014-10-17 23:32:56 +0000257
258; FUNC-LABEL: {{^}}atomic_max_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000259; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000260define void @atomic_max_i32_offset(i32 addrspace(1)* %out, i32 %in) {
261entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000262 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000263 %0 = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
264 ret void
265}
266
267; FUNC-LABEL: {{^}}atomic_max_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000268; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000269; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000270define void @atomic_max_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
271entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000272 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000273 %0 = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
274 store i32 %0, i32 addrspace(1)* %out2
275 ret void
276}
277
278; FUNC-LABEL: {{^}}atomic_max_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000279; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000280; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000281define void @atomic_max_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
282entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000283 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
284 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000285 %0 = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
286 ret void
287}
288
289; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000290; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000291; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
292; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000293define void @atomic_max_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
294entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000295 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
296 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000297 %0 = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
298 store i32 %0, i32 addrspace(1)* %out2
299 ret void
300}
301
302; FUNC-LABEL: {{^}}atomic_max_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000303; GCN: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000304define void @atomic_max_i32(i32 addrspace(1)* %out, i32 %in) {
305entry:
306 %0 = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
307 ret void
308}
309
310; FUNC-LABEL: {{^}}atomic_max_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000311; GCN: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000312; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000313define void @atomic_max_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
314entry:
315 %0 = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
316 store i32 %0, i32 addrspace(1)* %out2
317 ret void
318}
319
320; FUNC-LABEL: {{^}}atomic_max_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000321; SI: buffer_atomic_smax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000322; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000323define void @atomic_max_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
324entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000325 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry29f295d2014-10-17 23:32:56 +0000326 %0 = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
327 ret void
328}
329
330; FUNC-LABEL: {{^}}atomic_max_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000331; SI: buffer_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000332; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
333; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000334define void @atomic_max_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
335entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000336 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry29f295d2014-10-17 23:32:56 +0000337 %0 = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
338 store i32 %0, i32 addrspace(1)* %out2
339 ret void
340}
341
342; FUNC-LABEL: {{^}}atomic_umax_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000343; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000344define void @atomic_umax_i32_offset(i32 addrspace(1)* %out, i32 %in) {
345entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000346 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000347 %0 = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
348 ret void
349}
350
351; FUNC-LABEL: {{^}}atomic_umax_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000352; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000353; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000354define void @atomic_umax_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
355entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000356 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000357 %0 = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
358 store i32 %0, i32 addrspace(1)* %out2
359 ret void
360}
361
362; FUNC-LABEL: {{^}}atomic_umax_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000363; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000364; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000365define void @atomic_umax_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
366entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000367 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
368 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000369 %0 = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
370 ret void
371}
372
373; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000374; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000375; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
376; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000377define void @atomic_umax_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
378entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000379 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
380 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry29f295d2014-10-17 23:32:56 +0000381 %0 = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
382 store i32 %0, i32 addrspace(1)* %out2
383 ret void
384}
385
386; FUNC-LABEL: {{^}}atomic_umax_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000387; GCN: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000388define void @atomic_umax_i32(i32 addrspace(1)* %out, i32 %in) {
389entry:
390 %0 = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
391 ret void
392}
393
394; FUNC-LABEL: {{^}}atomic_umax_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000395; GCN: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000396; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000397define void @atomic_umax_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
398entry:
399 %0 = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
400 store i32 %0, i32 addrspace(1)* %out2
401 ret void
402}
403
404; FUNC-LABEL: {{^}}atomic_umax_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000405; SI: buffer_atomic_umax v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000406; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry29f295d2014-10-17 23:32:56 +0000407define void @atomic_umax_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
408entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000409 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry29f295d2014-10-17 23:32:56 +0000410 %0 = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
411 ret void
412}
413
414; FUNC-LABEL: {{^}}atomic_umax_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000415; SI: buffer_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000416; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
417; GCN: buffer_store_dword [[RET]]
Aaron Watry29f295d2014-10-17 23:32:56 +0000418define void @atomic_umax_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
419entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000420 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry29f295d2014-10-17 23:32:56 +0000421 %0 = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
422 store i32 %0, i32 addrspace(1)* %out2
423 ret void
424}
Aaron Watry58c99922014-10-17 23:32:57 +0000425
426; FUNC-LABEL: {{^}}atomic_min_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000427; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000428define void @atomic_min_i32_offset(i32 addrspace(1)* %out, i32 %in) {
429entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000430 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000431 %0 = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
432 ret void
433}
434
435; FUNC-LABEL: {{^}}atomic_min_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000436; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000437; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000438define void @atomic_min_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
439entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000440 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000441 %0 = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
442 store i32 %0, i32 addrspace(1)* %out2
443 ret void
444}
445
446; FUNC-LABEL: {{^}}atomic_min_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000447; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000448; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000449define void @atomic_min_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
450entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000451 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
452 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000453 %0 = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
454 ret void
455}
456
457; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000458; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000459; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
460; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000461define void @atomic_min_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
462entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000463 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
464 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000465 %0 = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
466 store i32 %0, i32 addrspace(1)* %out2
467 ret void
468}
469
470; FUNC-LABEL: {{^}}atomic_min_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000471; GCN: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000472define void @atomic_min_i32(i32 addrspace(1)* %out, i32 %in) {
473entry:
474 %0 = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
475 ret void
476}
477
478; FUNC-LABEL: {{^}}atomic_min_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000479; GCN: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000480; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000481define void @atomic_min_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
482entry:
483 %0 = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
484 store i32 %0, i32 addrspace(1)* %out2
485 ret void
486}
487
488; FUNC-LABEL: {{^}}atomic_min_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000489; SI: buffer_atomic_smin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000490; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000491define void @atomic_min_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
492entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000493 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry58c99922014-10-17 23:32:57 +0000494 %0 = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
495 ret void
496}
497
498; FUNC-LABEL: {{^}}atomic_min_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000499; SI: buffer_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000500; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
501; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000502define void @atomic_min_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
503entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000504 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry58c99922014-10-17 23:32:57 +0000505 %0 = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
506 store i32 %0, i32 addrspace(1)* %out2
507 ret void
508}
509
510; FUNC-LABEL: {{^}}atomic_umin_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000511; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000512define void @atomic_umin_i32_offset(i32 addrspace(1)* %out, i32 %in) {
513entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000514 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000515 %0 = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
516 ret void
517}
518
519; FUNC-LABEL: {{^}}atomic_umin_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000520; GCN: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000521; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000522define void @atomic_umin_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
523entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000524 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000525 %0 = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
526 store i32 %0, i32 addrspace(1)* %out2
527 ret void
528}
529
530; FUNC-LABEL: {{^}}atomic_umin_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000531; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000532; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000533define void @atomic_umin_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
534entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000535 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
536 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000537 %0 = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
538 ret void
539}
540
541; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000542; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000543; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
544; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000545define void @atomic_umin_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
546entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000547 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
548 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry58c99922014-10-17 23:32:57 +0000549 %0 = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
550 store i32 %0, i32 addrspace(1)* %out2
551 ret void
552}
553
554; FUNC-LABEL: {{^}}atomic_umin_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000555; GCN: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000556define void @atomic_umin_i32(i32 addrspace(1)* %out, i32 %in) {
557entry:
558 %0 = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
559 ret void
560}
561
562; FUNC-LABEL: {{^}}atomic_umin_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000563; SI: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000564; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000565define void @atomic_umin_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
566entry:
567 %0 = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
568 store i32 %0, i32 addrspace(1)* %out2
569 ret void
570}
571
572; FUNC-LABEL: {{^}}atomic_umin_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000573; SI: buffer_atomic_umin v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000574; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry58c99922014-10-17 23:32:57 +0000575define void @atomic_umin_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
576entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000577 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry58c99922014-10-17 23:32:57 +0000578 %0 = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
579 ret void
580}
581
582; FUNC-LABEL: {{^}}atomic_umin_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000583; SI: buffer_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000584; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
585; GCN: buffer_store_dword [[RET]]
Aaron Watry58c99922014-10-17 23:32:57 +0000586define void @atomic_umin_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
587entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000588 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry58c99922014-10-17 23:32:57 +0000589 %0 = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
590 store i32 %0, i32 addrspace(1)* %out2
591 ret void
592}
Aaron Watry8a911e62014-10-17 23:32:59 +0000593
594; FUNC-LABEL: {{^}}atomic_or_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000595; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry8a911e62014-10-17 23:32:59 +0000596define void @atomic_or_i32_offset(i32 addrspace(1)* %out, i32 %in) {
597entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000598 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry8a911e62014-10-17 23:32:59 +0000599 %0 = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
600 ret void
601}
602
603; FUNC-LABEL: {{^}}atomic_or_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000604; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000605; GCN: buffer_store_dword [[RET]]
Aaron Watry8a911e62014-10-17 23:32:59 +0000606define void @atomic_or_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
607entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000608 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry8a911e62014-10-17 23:32:59 +0000609 %0 = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
610 store i32 %0, i32 addrspace(1)* %out2
611 ret void
612}
613
614; FUNC-LABEL: {{^}}atomic_or_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000615; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000616; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry8a911e62014-10-17 23:32:59 +0000617define void @atomic_or_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
618entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000619 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
620 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry8a911e62014-10-17 23:32:59 +0000621 %0 = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
622 ret void
623}
624
625; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000626; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000627; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
628; GCN: buffer_store_dword [[RET]]
Aaron Watry8a911e62014-10-17 23:32:59 +0000629define void @atomic_or_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
630entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000631 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
632 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry8a911e62014-10-17 23:32:59 +0000633 %0 = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
634 store i32 %0, i32 addrspace(1)* %out2
635 ret void
636}
637
638; FUNC-LABEL: {{^}}atomic_or_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000639; GCN: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry8a911e62014-10-17 23:32:59 +0000640define void @atomic_or_i32(i32 addrspace(1)* %out, i32 %in) {
641entry:
642 %0 = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
643 ret void
644}
645
646; FUNC-LABEL: {{^}}atomic_or_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000647; GCN: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000648; GCN: buffer_store_dword [[RET]]
Aaron Watry8a911e62014-10-17 23:32:59 +0000649define void @atomic_or_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
650entry:
651 %0 = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
652 store i32 %0, i32 addrspace(1)* %out2
653 ret void
654}
655
656; FUNC-LABEL: {{^}}atomic_or_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000657; SI: buffer_atomic_or v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000658; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry8a911e62014-10-17 23:32:59 +0000659define void @atomic_or_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
660entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000661 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry8a911e62014-10-17 23:32:59 +0000662 %0 = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
663 ret void
664}
665
666; FUNC-LABEL: {{^}}atomic_or_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000667; SI: buffer_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000668; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
669; GCN: buffer_store_dword [[RET]]
Aaron Watry8a911e62014-10-17 23:32:59 +0000670define void @atomic_or_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
671entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000672 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry8a911e62014-10-17 23:32:59 +0000673 %0 = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
674 store i32 %0, i32 addrspace(1)* %out2
675 ret void
676}
Aaron Watryd672ee22014-10-17 23:33:01 +0000677
Aaron Watry81144372014-10-17 23:33:03 +0000678; FUNC-LABEL: {{^}}atomic_xchg_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000679; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watry81144372014-10-17 23:33:03 +0000680define void @atomic_xchg_i32_offset(i32 addrspace(1)* %out, i32 %in) {
681entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000682 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry81144372014-10-17 23:33:03 +0000683 %0 = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
684 ret void
685}
686
687; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000688; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000689; GCN: buffer_store_dword [[RET]]
Aaron Watry81144372014-10-17 23:33:03 +0000690define void @atomic_xchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
691entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000692 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watry81144372014-10-17 23:33:03 +0000693 %0 = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
694 store i32 %0, i32 addrspace(1)* %out2
695 ret void
696}
697
698; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000699; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Aaron Watry81144372014-10-17 23:33:03 +0000700define void @atomic_xchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
701entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000702 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
703 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry81144372014-10-17 23:33:03 +0000704 %0 = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
705 ret void
706}
707
708; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000709; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000710; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
711; GCN: buffer_store_dword [[RET]]
Aaron Watry81144372014-10-17 23:33:03 +0000712define void @atomic_xchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
713entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000714 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
715 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watry81144372014-10-17 23:33:03 +0000716 %0 = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
717 store i32 %0, i32 addrspace(1)* %out2
718 ret void
719}
720
721; FUNC-LABEL: {{^}}atomic_xchg_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000722; GCN: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watry81144372014-10-17 23:33:03 +0000723define void @atomic_xchg_i32(i32 addrspace(1)* %out, i32 %in) {
724entry:
725 %0 = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
726 ret void
727}
728
729; FUNC-LABEL: {{^}}atomic_xchg_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000730; GCN: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000731; GCN: buffer_store_dword [[RET]]
Aaron Watry81144372014-10-17 23:33:03 +0000732define void @atomic_xchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
733entry:
734 %0 = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
735 store i32 %0, i32 addrspace(1)* %out2
736 ret void
737}
738
739; FUNC-LABEL: {{^}}atomic_xchg_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000740; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000741; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watry81144372014-10-17 23:33:03 +0000742define void @atomic_xchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
743entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000744 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry81144372014-10-17 23:33:03 +0000745 %0 = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
746 ret void
747}
748
749; FUNC-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000750; SI: buffer_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000751; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
752; GCN: buffer_store_dword [[RET]]
Aaron Watry81144372014-10-17 23:33:03 +0000753define void @atomic_xchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
754entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000755 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watry81144372014-10-17 23:33:03 +0000756 %0 = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
757 store i32 %0, i32 addrspace(1)* %out2
758 ret void
759}
760
Tom Stellard354a43c2016-04-01 18:27:37 +0000761; CMP_SWAP
762
763; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000764; GCN: buffer_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Tom Stellard354a43c2016-04-01 18:27:37 +0000765define void @atomic_cmpxchg_i32_offset(i32 addrspace(1)* %out, i32 %in, i32 %old) {
766entry:
767 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
768 %0 = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
769 ret void
770}
771
772; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000773; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard354a43c2016-04-01 18:27:37 +0000774; GCN: buffer_store_dword v[[RET]]
775define void @atomic_cmpxchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
776entry:
777 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
778 %0 = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
779 %1 = extractvalue { i32, i1 } %0, 0
780 store i32 %1, i32 addrspace(1)* %out2
781 ret void
782}
783
784; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
785; SI: buffer_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
786define void @atomic_cmpxchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
787entry:
788 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
789 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
790 %0 = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
791 ret void
792}
793
794; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
795; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
796; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
797; GCN: buffer_store_dword v[[RET]]
798define void @atomic_cmpxchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
799entry:
800 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
801 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
802 %0 = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
803 %1 = extractvalue { i32, i1 } %0, 0
804 store i32 %1, i32 addrspace(1)* %out2
805 ret void
806}
807
808; FUNC-LABEL: {{^}}atomic_cmpxchg_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000809; GCN: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Tom Stellard354a43c2016-04-01 18:27:37 +0000810define void @atomic_cmpxchg_i32(i32 addrspace(1)* %out, i32 %in, i32 %old) {
811entry:
812 %0 = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
813 ret void
814}
815
816; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000817; GCN: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard354a43c2016-04-01 18:27:37 +0000818; GCN: buffer_store_dword v[[RET]]
819define void @atomic_cmpxchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
820entry:
821 %0 = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
822 %1 = extractvalue { i32, i1 } %0, 0
823 store i32 %1, i32 addrspace(1)* %out2
824 ret void
825}
826
827; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
828; SI: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
829; VI: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
830define void @atomic_cmpxchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
831entry:
832 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
833 %0 = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
834 ret void
835}
836
837; FUNC-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
838; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
839; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
840; GCN: buffer_store_dword v[[RET]]
841define void @atomic_cmpxchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
842entry:
843 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
844 %0 = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
845 %1 = extractvalue { i32, i1 } %0, 0
846 store i32 %1, i32 addrspace(1)* %out2
847 ret void
848}
849
Aaron Watryd672ee22014-10-17 23:33:01 +0000850; FUNC-LABEL: {{^}}atomic_xor_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000851; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Aaron Watryd672ee22014-10-17 23:33:01 +0000852define void @atomic_xor_i32_offset(i32 addrspace(1)* %out, i32 %in) {
853entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000854 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watryd672ee22014-10-17 23:33:01 +0000855 %0 = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
856 ret void
857}
858
859; FUNC-LABEL: {{^}}atomic_xor_i32_ret_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000860; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000861; GCN: buffer_store_dword [[RET]]
Aaron Watryd672ee22014-10-17 23:33:01 +0000862define void @atomic_xor_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
863entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000864 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
Aaron Watryd672ee22014-10-17 23:33:01 +0000865 %0 = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
866 store i32 %0, i32 addrspace(1)* %out2
867 ret void
868}
869
870; FUNC-LABEL: {{^}}atomic_xor_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000871; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000872; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watryd672ee22014-10-17 23:33:01 +0000873define void @atomic_xor_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
874entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000875 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
876 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watryd672ee22014-10-17 23:33:01 +0000877 %0 = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
878 ret void
879}
880
881; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000882; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000883; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
884; GCN: buffer_store_dword [[RET]]
Aaron Watryd672ee22014-10-17 23:33:01 +0000885define void @atomic_xor_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
886entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000887 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
888 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
Aaron Watryd672ee22014-10-17 23:33:01 +0000889 %0 = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
890 store i32 %0, i32 addrspace(1)* %out2
891 ret void
892}
893
894; FUNC-LABEL: {{^}}atomic_xor_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000895; GCN: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Aaron Watryd672ee22014-10-17 23:33:01 +0000896define void @atomic_xor_i32(i32 addrspace(1)* %out, i32 %in) {
897entry:
898 %0 = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
899 ret void
900}
901
902; FUNC-LABEL: {{^}}atomic_xor_i32_ret:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000903; GCN: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Tom Stellard70580f82015-07-20 14:28:41 +0000904; GCN: buffer_store_dword [[RET]]
Aaron Watryd672ee22014-10-17 23:33:01 +0000905define void @atomic_xor_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
906entry:
907 %0 = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
908 store i32 %0, i32 addrspace(1)* %out2
909 ret void
910}
911
912; FUNC-LABEL: {{^}}atomic_xor_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000913; SI: buffer_atomic_xor v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000914; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Aaron Watryd672ee22014-10-17 23:33:01 +0000915define void @atomic_xor_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
916entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000917 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watryd672ee22014-10-17 23:33:01 +0000918 %0 = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
919 ret void
920}
921
922; FUNC-LABEL: {{^}}atomic_xor_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000923; SI: buffer_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
Tom Stellard70580f82015-07-20 14:28:41 +0000924; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
925; GCN: buffer_store_dword [[RET]]
Aaron Watryd672ee22014-10-17 23:33:01 +0000926define void @atomic_xor_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
927entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000928 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Aaron Watryd672ee22014-10-17 23:33:01 +0000929 %0 = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
930 store i32 %0, i32 addrspace(1)* %out2
931 ret void
932}
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000933
934; ATOMIC_LOAD
935; FUNC-LABEL: {{^}}atomic_load_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000936; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000937; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
938; GCN: buffer_store_dword [[RET]]
939define void @atomic_load_i32_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
940entry:
941 %gep = getelementptr i32, i32 addrspace(1)* %in, i32 4
942 %0 = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4
943 store i32 %0, i32 addrspace(1)* %out
944 ret void
945}
946
947; FUNC-LABEL: {{^}}atomic_load_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000948; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000949; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
950; GCN: buffer_store_dword [[RET]]
951define void @atomic_load_i32(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
952entry:
953 %0 = load atomic i32, i32 addrspace(1)* %in seq_cst, align 4
954 store i32 %0, i32 addrspace(1)* %out
955 ret void
956}
957
958; FUNC-LABEL: {{^}}atomic_load_i32_addr64_offset:
959; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
960; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
961; GCN: buffer_store_dword [[RET]]
962define void @atomic_load_i32_addr64_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
963entry:
964 %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
965 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
966 %0 = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4
967 store i32 %0, i32 addrspace(1)* %out
968 ret void
969}
970
971; FUNC-LABEL: {{^}}atomic_load_i32_addr64:
972; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
973; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
974; GCN: buffer_store_dword [[RET]]
975define void @atomic_load_i32_addr64(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
976entry:
977 %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
978 %0 = load atomic i32, i32 addrspace(1)* %ptr seq_cst, align 4
979 store i32 %0, i32 addrspace(1)* %out
980 ret void
981}
982
983; FUNC-LABEL: {{^}}atomic_load_i64_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000984; SI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000985; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
986; GCN: buffer_store_dwordx2 [[RET]]
987define void @atomic_load_i64_offset(i64 addrspace(1)* %in, i64 addrspace(1)* %out) {
988entry:
989 %gep = getelementptr i64, i64 addrspace(1)* %in, i64 4
990 %0 = load atomic i64, i64 addrspace(1)* %gep seq_cst, align 8
991 store i64 %0, i64 addrspace(1)* %out
992 ret void
993}
994
995; FUNC-LABEL: {{^}}atomic_load_i64:
Nikolay Haustov4f672a32016-04-29 09:02:30 +0000996; SI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Jan Vesely43b7b5b2016-04-07 19:23:11 +0000997; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc
998; GCN: buffer_store_dwordx2 [[RET]]
999define void @atomic_load_i64(i64 addrspace(1)* %in, i64 addrspace(1)* %out) {
1000entry:
1001 %0 = load atomic i64, i64 addrspace(1)* %in seq_cst, align 8
1002 store i64 %0, i64 addrspace(1)* %out
1003 ret void
1004}
1005
1006; FUNC-LABEL: {{^}}atomic_load_i64_addr64_offset:
1007; SI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
1008; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
1009; GCN: buffer_store_dwordx2 [[RET]]
1010define void @atomic_load_i64_addr64_offset(i64 addrspace(1)* %in, i64 addrspace(1)* %out, i64 %index) {
1011entry:
1012 %ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %index
1013 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1014 %0 = load atomic i64, i64 addrspace(1)* %gep seq_cst, align 8
1015 store i64 %0, i64 addrspace(1)* %out
1016 ret void
1017}
1018
1019; FUNC-LABEL: {{^}}atomic_load_i64_addr64:
1020; SI: buffer_load_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1021; VI: flat_load_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
1022; GCN: buffer_store_dwordx2 [[RET]]
1023define void @atomic_load_i64_addr64(i64 addrspace(1)* %in, i64 addrspace(1)* %out, i64 %index) {
1024entry:
1025 %ptr = getelementptr i64, i64 addrspace(1)* %in, i64 %index
1026 %0 = load atomic i64, i64 addrspace(1)* %ptr seq_cst, align 8
1027 store i64 %0, i64 addrspace(1)* %out
1028 ret void
1029}
1030
1031; ATOMIC_STORE
1032; FUNC-LABEL: {{^}}atomic_store_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001033; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001034; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1035define void @atomic_store_i32_offset(i32 %in, i32 addrspace(1)* %out) {
1036entry:
1037 %gep = getelementptr i32, i32 addrspace(1)* %out, i32 4
1038 store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4
1039 ret void
1040}
1041
1042; FUNC-LABEL: {{^}}atomic_store_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001043; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc{{$}}
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001044; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1045define void @atomic_store_i32(i32 %in, i32 addrspace(1)* %out) {
1046entry:
1047 store atomic i32 %in, i32 addrspace(1)* %out seq_cst, align 4
1048 ret void
1049}
1050
1051; FUNC-LABEL: {{^}}atomic_store_i32_addr64_offset:
1052; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
1053; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1054define void @atomic_store_i32_addr64_offset(i32 %in, i32 addrspace(1)* %out, i64 %index) {
1055entry:
1056 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
1057 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i32 4
1058 store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4
1059 ret void
1060}
1061
1062; FUNC-LABEL: {{^}}atomic_store_i32_addr64:
1063; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1064; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1065define void @atomic_store_i32_addr64(i32 %in, i32 addrspace(1)* %out, i64 %index) {
1066entry:
1067 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
1068 store atomic i32 %in, i32 addrspace(1)* %ptr seq_cst, align 4
1069 ret void
1070}
1071
1072; FUNC-LABEL: {{^}}atomic_store_i64_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001073; SI: buffer_store_dwordx2 [[RET:v\[[0-9]+:[0-9]+\]]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:32 glc{{$}}
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001074; VI: flat_store_dwordx2 [[RET:v\[[0-9]+:[0-9]\]]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
1075define void @atomic_store_i64_offset(i64 %in, i64 addrspace(1)* %out) {
1076entry:
1077 %gep = getelementptr i64, i64 addrspace(1)* %out, i64 4
1078 store atomic i64 %in, i64 addrspace(1)* %gep seq_cst, align 8
1079 ret void
1080}
1081
1082; FUNC-LABEL: {{^}}atomic_store_i64:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001083; SI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001084; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}] glc
1085define void @atomic_store_i64(i64 %in, i64 addrspace(1)* %out) {
1086entry:
1087 store atomic i64 %in, i64 addrspace(1)* %out seq_cst, align 8
1088 ret void
1089}
1090
1091; FUNC-LABEL: {{^}}atomic_store_i64_addr64_offset:
1092; SI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:32 glc{{$}}
1093; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}] glc{{$}}
1094define void @atomic_store_i64_addr64_offset(i64 %in, i64 addrspace(1)* %out, i64 %index) {
1095entry:
1096 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1097 %gep = getelementptr i64, i64 addrspace(1)* %ptr, i64 4
1098 store atomic i64 %in, i64 addrspace(1)* %gep seq_cst, align 8
1099 ret void
1100}
1101
1102; FUNC-LABEL: {{^}}atomic_store_i64_addr64:
1103; SI: buffer_store_dwordx2 {{v\[[0-9]+:[0-9]\]}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1104; VI: flat_store_dwordx2 {{v\[[0-9]+:[0-9]+\]}}, v[{{[0-9]+:[0-9]+}}] glc{{$}}
1105define void @atomic_store_i64_addr64(i64 %in, i64 addrspace(1)* %out, i64 %index) {
1106entry:
1107 %ptr = getelementptr i64, i64 addrspace(1)* %out, i64 %index
1108 store atomic i64 %in, i64 addrspace(1)* %ptr seq_cst, align 8
1109 ret void
1110}