blob: 8e153181decb7cd9200bcd09443e30f3f8b72f8a [file] [log] [blame]
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +00001; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,CIVI %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,CIVI %s
3; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
Matt Arsenault7757c592016-06-09 23:42:54 +00004
5; GCN-LABEL: {{^}}atomic_add_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +00006; CIVI: flat_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
7; GFX9: flat_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00008define amdgpu_kernel void @atomic_add_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +00009entry:
10 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
11 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
12 ret void
13}
14
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000015; GCN-LABEL: {{^}}atomic_add_i32_max_offset:
16; CIVI: flat_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
17; GFX9: flat_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:4092{{$}}
18define amdgpu_kernel void @atomic_add_i32_max_offset(i32 addrspace(4)* %out, i32 %in) {
19entry:
20 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 1023
21 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
22 ret void
23}
24
25; GCN-LABEL: {{^}}atomic_add_i32_max_offset_p1:
26; GCN: flat_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
27define amdgpu_kernel void @atomic_add_i32_max_offset_p1(i32 addrspace(4)* %out, i32 %in) {
28entry:
29 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 1024
30 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
31 ret void
32}
33
Matt Arsenault7757c592016-06-09 23:42:54 +000034; GCN-LABEL: {{^}}atomic_add_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000035; CIVI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
36; GFX9: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +000037; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000038define amdgpu_kernel void @atomic_add_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000039entry:
40 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
41 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
42 store i32 %val, i32 addrspace(4)* %out2
43 ret void
44}
45
46; GCN-LABEL: {{^}}atomic_add_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000047; CIVI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
48; GFX9: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000049define amdgpu_kernel void @atomic_add_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000050entry:
51 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
52 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
53 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
54 ret void
55}
56
57; GCN-LABEL: {{^}}atomic_add_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000058; CIVI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
59; GFX9: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +000060; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000061define amdgpu_kernel void @atomic_add_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000062entry:
63 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
64 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
65 %val = atomicrmw volatile add i32 addrspace(4)* %gep, i32 %in seq_cst
66 store i32 %val, i32 addrspace(4)* %out2
67 ret void
68}
69
70; GCN-LABEL: {{^}}atomic_add_i32:
71; GCN: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000072define amdgpu_kernel void @atomic_add_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000073entry:
74 %val = atomicrmw volatile add i32 addrspace(4)* %out, i32 %in seq_cst
75 ret void
76}
77
78; GCN-LABEL: {{^}}atomic_add_i32_ret:
79; GCN: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
80; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000081define amdgpu_kernel void @atomic_add_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000082entry:
83 %val = atomicrmw volatile add i32 addrspace(4)* %out, i32 %in seq_cst
84 store i32 %val, i32 addrspace(4)* %out2
85 ret void
86}
87
88; GCN-LABEL: {{^}}atomic_add_i32_addr64:
89; GCN: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000090define amdgpu_kernel void @atomic_add_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000091entry:
92 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
93 %val = atomicrmw volatile add i32 addrspace(4)* %ptr, i32 %in seq_cst
94 ret void
95}
96
97; GCN-LABEL: {{^}}atomic_add_i32_ret_addr64:
98; GCN: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
99; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000100define amdgpu_kernel void @atomic_add_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000101entry:
102 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
103 %val = atomicrmw volatile add i32 addrspace(4)* %ptr, i32 %in seq_cst
104 store i32 %val, i32 addrspace(4)* %out2
105 ret void
106}
107
108; GCN-LABEL: {{^}}atomic_and_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000109; CIVI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
110; GFX9: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000111define amdgpu_kernel void @atomic_and_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000112entry:
113 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
114 %val = atomicrmw volatile and i32 addrspace(4)* %gep, i32 %in seq_cst
115 ret void
116}
117
118; GCN-LABEL: {{^}}atomic_and_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000119; CIVI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
120; GFX9: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000121; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000122define amdgpu_kernel void @atomic_and_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000123entry:
124 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
125 %val = atomicrmw volatile and i32 addrspace(4)* %gep, i32 %in seq_cst
126 store i32 %val, i32 addrspace(4)* %out2
127 ret void
128}
129
130; GCN-LABEL: {{^}}atomic_and_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000131; CIVI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
132; GFX9: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000133define amdgpu_kernel void @atomic_and_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000134entry:
135 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
136 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
137 %val = atomicrmw volatile and i32 addrspace(4)* %gep, i32 %in seq_cst
138 ret void
139}
140
141; GCN-LABEL: {{^}}atomic_and_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000142; CIVI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
143; GFX9: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000144; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000145define amdgpu_kernel void @atomic_and_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000146entry:
147 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
148 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
149 %val = atomicrmw volatile and i32 addrspace(4)* %gep, i32 %in seq_cst
150 store i32 %val, i32 addrspace(4)* %out2
151 ret void
152}
153
154; GCN-LABEL: {{^}}atomic_and_i32:
155; GCN: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000156define amdgpu_kernel void @atomic_and_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000157entry:
158 %val = atomicrmw volatile and i32 addrspace(4)* %out, i32 %in seq_cst
159 ret void
160}
161
162; GCN-LABEL: {{^}}atomic_and_i32_ret:
163; GCN: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
164; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000165define amdgpu_kernel void @atomic_and_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000166entry:
167 %val = atomicrmw volatile and i32 addrspace(4)* %out, i32 %in seq_cst
168 store i32 %val, i32 addrspace(4)* %out2
169 ret void
170}
171
172; GCN-LABEL: {{^}}atomic_and_i32_addr64:
173; GCN: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000174define amdgpu_kernel void @atomic_and_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000175entry:
176 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
177 %val = atomicrmw volatile and i32 addrspace(4)* %ptr, i32 %in seq_cst
178 ret void
179}
180
181; GCN-LABEL: {{^}}atomic_and_i32_ret_addr64:
182; GCN: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
183; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000184define amdgpu_kernel void @atomic_and_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000185entry:
186 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
187 %val = atomicrmw volatile and i32 addrspace(4)* %ptr, i32 %in seq_cst
188 store i32 %val, i32 addrspace(4)* %out2
189 ret void
190}
191
192; GCN-LABEL: {{^}}atomic_sub_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000193; CIVI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
194; GFX9: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000195define amdgpu_kernel void @atomic_sub_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000196entry:
197 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
198 %val = atomicrmw volatile sub i32 addrspace(4)* %gep, i32 %in seq_cst
199 ret void
200}
201
202; GCN-LABEL: {{^}}atomic_sub_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000203; CIVI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
204; GFX9: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000205; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000206define amdgpu_kernel void @atomic_sub_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000207entry:
208 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
209 %val = atomicrmw volatile sub i32 addrspace(4)* %gep, i32 %in seq_cst
210 store i32 %val, i32 addrspace(4)* %out2
211 ret void
212}
213
214; GCN-LABEL: {{^}}atomic_sub_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000215; CIVI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
216; GFX9: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000217define amdgpu_kernel void @atomic_sub_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000218entry:
219 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
220 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
221 %val = atomicrmw volatile sub i32 addrspace(4)* %gep, i32 %in seq_cst
222 ret void
223}
224
225; GCN-LABEL: {{^}}atomic_sub_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000226; CIVI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
227; GFX9: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000228; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000229define amdgpu_kernel void @atomic_sub_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000230entry:
231 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
232 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
233 %val = atomicrmw volatile sub i32 addrspace(4)* %gep, i32 %in seq_cst
234 store i32 %val, i32 addrspace(4)* %out2
235 ret void
236}
237
238; GCN-LABEL: {{^}}atomic_sub_i32:
239; GCN: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000240define amdgpu_kernel void @atomic_sub_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000241entry:
242 %val = atomicrmw volatile sub i32 addrspace(4)* %out, i32 %in seq_cst
243 ret void
244}
245
246; GCN-LABEL: {{^}}atomic_sub_i32_ret:
247; GCN: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
248; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000249define amdgpu_kernel void @atomic_sub_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000250entry:
251 %val = atomicrmw volatile sub i32 addrspace(4)* %out, i32 %in seq_cst
252 store i32 %val, i32 addrspace(4)* %out2
253 ret void
254}
255
256; GCN-LABEL: {{^}}atomic_sub_i32_addr64:
257; GCN: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000258define amdgpu_kernel void @atomic_sub_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000259entry:
260 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
261 %val = atomicrmw volatile sub i32 addrspace(4)* %ptr, i32 %in seq_cst
262 ret void
263}
264
265; GCN-LABEL: {{^}}atomic_sub_i32_ret_addr64:
266; GCN: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
267; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000268define amdgpu_kernel void @atomic_sub_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000269entry:
270 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
271 %val = atomicrmw volatile sub i32 addrspace(4)* %ptr, i32 %in seq_cst
272 store i32 %val, i32 addrspace(4)* %out2
273 ret void
274}
275
276; GCN-LABEL: {{^}}atomic_max_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000277; CIVI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
278; GFX9: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000279define amdgpu_kernel void @atomic_max_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000280entry:
281 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
282 %val = atomicrmw volatile max i32 addrspace(4)* %gep, i32 %in seq_cst
283 ret void
284}
285
286; GCN-LABEL: {{^}}atomic_max_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000287; CIVI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
288; GFX9: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000289; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000290define amdgpu_kernel void @atomic_max_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000291entry:
292 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
293 %val = atomicrmw volatile max i32 addrspace(4)* %gep, i32 %in seq_cst
294 store i32 %val, i32 addrspace(4)* %out2
295 ret void
296}
297
298; GCN-LABEL: {{^}}atomic_max_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000299; CIVI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
300; GFX9: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000301define amdgpu_kernel void @atomic_max_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000302entry:
303 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
304 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
305 %val = atomicrmw volatile max i32 addrspace(4)* %gep, i32 %in seq_cst
306 ret void
307}
308
309; GCN-LABEL: {{^}}atomic_max_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000310; CIVI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
311; GFX9: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000312; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000313define amdgpu_kernel void @atomic_max_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000314entry:
315 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
316 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
317 %val = atomicrmw volatile max i32 addrspace(4)* %gep, i32 %in seq_cst
318 store i32 %val, i32 addrspace(4)* %out2
319 ret void
320}
321
322; GCN-LABEL: {{^}}atomic_max_i32:
323; GCN: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000324define amdgpu_kernel void @atomic_max_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000325entry:
326 %val = atomicrmw volatile max i32 addrspace(4)* %out, i32 %in seq_cst
327 ret void
328}
329
330; GCN-LABEL: {{^}}atomic_max_i32_ret:
331; GCN: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
332; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000333define amdgpu_kernel void @atomic_max_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000334entry:
335 %val = atomicrmw volatile max i32 addrspace(4)* %out, i32 %in seq_cst
336 store i32 %val, i32 addrspace(4)* %out2
337 ret void
338}
339
340; GCN-LABEL: {{^}}atomic_max_i32_addr64:
341; GCN: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000342define amdgpu_kernel void @atomic_max_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000343entry:
344 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
345 %val = atomicrmw volatile max i32 addrspace(4)* %ptr, i32 %in seq_cst
346 ret void
347}
348
349; GCN-LABEL: {{^}}atomic_max_i32_ret_addr64:
350; GCN: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
351; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000352define amdgpu_kernel void @atomic_max_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000353entry:
354 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
355 %val = atomicrmw volatile max i32 addrspace(4)* %ptr, i32 %in seq_cst
356 store i32 %val, i32 addrspace(4)* %out2
357 ret void
358}
359
360; GCN-LABEL: {{^}}atomic_umax_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000361; CIVI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
362; GFX9: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000363define amdgpu_kernel void @atomic_umax_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000364entry:
365 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
366 %val = atomicrmw volatile umax i32 addrspace(4)* %gep, i32 %in seq_cst
367 ret void
368}
369
370; GCN-LABEL: {{^}}atomic_umax_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000371; CIVI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
372; GFX9: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000373; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000374define amdgpu_kernel void @atomic_umax_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000375entry:
376 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
377 %val = atomicrmw volatile umax i32 addrspace(4)* %gep, i32 %in seq_cst
378 store i32 %val, i32 addrspace(4)* %out2
379 ret void
380}
381
382; GCN-LABEL: {{^}}atomic_umax_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000383; CIVI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
384; GFX9: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000385define amdgpu_kernel void @atomic_umax_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000386entry:
387 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
388 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
389 %val = atomicrmw volatile umax i32 addrspace(4)* %gep, i32 %in seq_cst
390 ret void
391}
392
393; GCN-LABEL: {{^}}atomic_umax_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000394; CIVI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
395; GFX9: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000396; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000397define amdgpu_kernel void @atomic_umax_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000398entry:
399 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
400 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
401 %val = atomicrmw volatile umax i32 addrspace(4)* %gep, i32 %in seq_cst
402 store i32 %val, i32 addrspace(4)* %out2
403 ret void
404}
405
406; GCN-LABEL: {{^}}atomic_umax_i32:
407; GCN: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000408define amdgpu_kernel void @atomic_umax_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000409entry:
410 %val = atomicrmw volatile umax i32 addrspace(4)* %out, i32 %in seq_cst
411 ret void
412}
413
414; GCN-LABEL: {{^}}atomic_umax_i32_ret:
415; GCN: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
416; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000417define amdgpu_kernel void @atomic_umax_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000418entry:
419 %val = atomicrmw volatile umax i32 addrspace(4)* %out, i32 %in seq_cst
420 store i32 %val, i32 addrspace(4)* %out2
421 ret void
422}
423
424; GCN-LABEL: {{^}}atomic_umax_i32_addr64:
425; GCN: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000426define amdgpu_kernel void @atomic_umax_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000427entry:
428 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
429 %val = atomicrmw volatile umax i32 addrspace(4)* %ptr, i32 %in seq_cst
430 ret void
431}
432
433; GCN-LABEL: {{^}}atomic_umax_i32_ret_addr64:
434; GCN: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
435; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000436define amdgpu_kernel void @atomic_umax_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000437entry:
438 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
439 %val = atomicrmw volatile umax i32 addrspace(4)* %ptr, i32 %in seq_cst
440 store i32 %val, i32 addrspace(4)* %out2
441 ret void
442}
443
444; GCN-LABEL: {{^}}atomic_min_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000445; CIVI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
446; GFX9: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000447define amdgpu_kernel void @atomic_min_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000448entry:
449 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
450 %val = atomicrmw volatile min i32 addrspace(4)* %gep, i32 %in seq_cst
451 ret void
452}
453
454; GCN-LABEL: {{^}}atomic_min_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000455; CIVI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
456; GFX9: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000457; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000458define amdgpu_kernel void @atomic_min_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000459entry:
460 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
461 %val = atomicrmw volatile min i32 addrspace(4)* %gep, i32 %in seq_cst
462 store i32 %val, i32 addrspace(4)* %out2
463 ret void
464}
465
466; GCN-LABEL: {{^}}atomic_min_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000467; CIVI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
468; GFX9: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000469define amdgpu_kernel void @atomic_min_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000470entry:
471 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
472 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
473 %val = atomicrmw volatile min i32 addrspace(4)* %gep, i32 %in seq_cst
474 ret void
475}
476
477; GCN-LABEL: {{^}}atomic_min_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000478; CIVI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
479; GFX9: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000480; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000481define amdgpu_kernel void @atomic_min_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000482entry:
483 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
484 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
485 %val = atomicrmw volatile min i32 addrspace(4)* %gep, i32 %in seq_cst
486 store i32 %val, i32 addrspace(4)* %out2
487 ret void
488}
489
490; GCN-LABEL: {{^}}atomic_min_i32:
491; GCN: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000492define amdgpu_kernel void @atomic_min_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000493entry:
494 %val = atomicrmw volatile min i32 addrspace(4)* %out, i32 %in seq_cst
495 ret void
496}
497
498; GCN-LABEL: {{^}}atomic_min_i32_ret:
499; GCN: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
500; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000501define amdgpu_kernel void @atomic_min_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000502entry:
503 %val = atomicrmw volatile min i32 addrspace(4)* %out, i32 %in seq_cst
504 store i32 %val, i32 addrspace(4)* %out2
505 ret void
506}
507
508; GCN-LABEL: {{^}}atomic_min_i32_addr64:
509; GCN: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000510define amdgpu_kernel void @atomic_min_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000511entry:
512 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
513 %val = atomicrmw volatile min i32 addrspace(4)* %ptr, i32 %in seq_cst
514 ret void
515}
516
517; GCN-LABEL: {{^}}atomic_min_i32_ret_addr64:
518; GCN: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
519; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000520define amdgpu_kernel void @atomic_min_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000521entry:
522 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
523 %val = atomicrmw volatile min i32 addrspace(4)* %ptr, i32 %in seq_cst
524 store i32 %val, i32 addrspace(4)* %out2
525 ret void
526}
527
528; GCN-LABEL: {{^}}atomic_umin_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000529; CIVI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
530; GFX9: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000531define amdgpu_kernel void @atomic_umin_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000532entry:
533 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
534 %val = atomicrmw volatile umin i32 addrspace(4)* %gep, i32 %in seq_cst
535 ret void
536}
537
538; GCN-LABEL: {{^}}atomic_umin_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000539; CIVI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
540; GFX9: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000541; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000542define amdgpu_kernel void @atomic_umin_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000543entry:
544 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
545 %val = atomicrmw volatile umin i32 addrspace(4)* %gep, i32 %in seq_cst
546 store i32 %val, i32 addrspace(4)* %out2
547 ret void
548}
549
550; GCN-LABEL: {{^}}atomic_umin_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000551; CIVI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
552; GFX9: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000553define amdgpu_kernel void @atomic_umin_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000554entry:
555 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
556 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
557 %val = atomicrmw volatile umin i32 addrspace(4)* %gep, i32 %in seq_cst
558 ret void
559}
560
561; GCN-LABEL: {{^}}atomic_umin_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000562; CIVI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
563; GFX9: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000564; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000565define amdgpu_kernel void @atomic_umin_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000566entry:
567 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
568 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
569 %val = atomicrmw volatile umin i32 addrspace(4)* %gep, i32 %in seq_cst
570 store i32 %val, i32 addrspace(4)* %out2
571 ret void
572}
573
574; GCN-LABEL: {{^}}atomic_umin_i32:
575; GCN: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000576define amdgpu_kernel void @atomic_umin_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000577entry:
578 %val = atomicrmw volatile umin i32 addrspace(4)* %out, i32 %in seq_cst
579 ret void
580}
581
582; GCN-LABEL: {{^}}atomic_umin_i32_ret:
Stanislav Mekhanoshin79da2a72017-03-11 00:29:27 +0000583; GCN: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000584; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000585define amdgpu_kernel void @atomic_umin_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000586entry:
587 %val = atomicrmw volatile umin i32 addrspace(4)* %out, i32 %in seq_cst
588 store i32 %val, i32 addrspace(4)* %out2
589 ret void
590}
591
592; GCN-LABEL: {{^}}atomic_umin_i32_addr64:
593; GCN: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000594define amdgpu_kernel void @atomic_umin_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000595entry:
596 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
597 %val = atomicrmw volatile umin i32 addrspace(4)* %ptr, i32 %in seq_cst
598 ret void
599}
600
601; GCN-LABEL: {{^}}atomic_umin_i32_ret_addr64:
602; GCN: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
603; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000604 define amdgpu_kernel void @atomic_umin_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000605entry:
606 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
607 %val = atomicrmw volatile umin i32 addrspace(4)* %ptr, i32 %in seq_cst
608 store i32 %val, i32 addrspace(4)* %out2
609 ret void
610}
611
612; GCN-LABEL: {{^}}atomic_or_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000613; CIVI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
614; GFX9: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000615define amdgpu_kernel void @atomic_or_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000616entry:
617 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
618 %val = atomicrmw volatile or i32 addrspace(4)* %gep, i32 %in seq_cst
619 ret void
620}
621
622; GCN-LABEL: {{^}}atomic_or_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000623; CIVI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
624; GFX9: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000625; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000626define amdgpu_kernel void @atomic_or_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000627entry:
628 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
629 %val = atomicrmw volatile or i32 addrspace(4)* %gep, i32 %in seq_cst
630 store i32 %val, i32 addrspace(4)* %out2
631 ret void
632}
633
634; GCN-LABEL: {{^}}atomic_or_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000635; CIVI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
636; GFX9: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000637define amdgpu_kernel void @atomic_or_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000638entry:
639 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
640 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
641 %val = atomicrmw volatile or i32 addrspace(4)* %gep, i32 %in seq_cst
642 ret void
643}
644
645; GCN-LABEL: {{^}}atomic_or_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000646; CIVI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
647; GFX9: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000648; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000649define amdgpu_kernel void @atomic_or_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000650entry:
651 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
652 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
653 %val = atomicrmw volatile or i32 addrspace(4)* %gep, i32 %in seq_cst
654 store i32 %val, i32 addrspace(4)* %out2
655 ret void
656}
657
658; GCN-LABEL: {{^}}atomic_or_i32:
659; GCN: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000660define amdgpu_kernel void @atomic_or_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000661entry:
662 %val = atomicrmw volatile or i32 addrspace(4)* %out, i32 %in seq_cst
663 ret void
664}
665
666; GCN-LABEL: {{^}}atomic_or_i32_ret:
667; GCN: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
668; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000669define amdgpu_kernel void @atomic_or_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000670entry:
671 %val = atomicrmw volatile or i32 addrspace(4)* %out, i32 %in seq_cst
672 store i32 %val, i32 addrspace(4)* %out2
673 ret void
674}
675
676; GCN-LABEL: {{^}}atomic_or_i32_addr64:
677; GCN: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000678define amdgpu_kernel void @atomic_or_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000679entry:
680 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
681 %val = atomicrmw volatile or i32 addrspace(4)* %ptr, i32 %in seq_cst
682 ret void
683}
684
685; GCN-LABEL: {{^}}atomic_or_i32_ret_addr64:
686; GCN: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
687; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000688define amdgpu_kernel void @atomic_or_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000689entry:
690 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
691 %val = atomicrmw volatile or i32 addrspace(4)* %ptr, i32 %in seq_cst
692 store i32 %val, i32 addrspace(4)* %out2
693 ret void
694}
695
696; GCN-LABEL: {{^}}atomic_xchg_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000697; CIVI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
698; GFX9: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000699define amdgpu_kernel void @atomic_xchg_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000700entry:
701 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
702 %val = atomicrmw volatile xchg i32 addrspace(4)* %gep, i32 %in seq_cst
703 ret void
704}
705
706; GCN-LABEL: {{^}}atomic_xchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000707; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
708; GFX9: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000709; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000710define amdgpu_kernel void @atomic_xchg_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000711entry:
712 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
713 %val = atomicrmw volatile xchg i32 addrspace(4)* %gep, i32 %in seq_cst
714 store i32 %val, i32 addrspace(4)* %out2
715 ret void
716}
717
718; GCN-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000719; CIVI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
720; GFX9: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000721define amdgpu_kernel void @atomic_xchg_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000722entry:
723 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
724 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
725 %val = atomicrmw volatile xchg i32 addrspace(4)* %gep, i32 %in seq_cst
726 ret void
727}
728
729; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000730; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
731; GFX9: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000732; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000733define amdgpu_kernel void @atomic_xchg_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000734entry:
735 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
736 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
737 %val = atomicrmw volatile xchg i32 addrspace(4)* %gep, i32 %in seq_cst
738 store i32 %val, i32 addrspace(4)* %out2
739 ret void
740}
741
742; GCN-LABEL: {{^}}atomic_xchg_i32:
743; GCN: flat_atomic_swap v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000744define amdgpu_kernel void @atomic_xchg_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000745entry:
746 %val = atomicrmw volatile xchg i32 addrspace(4)* %out, i32 %in seq_cst
747 ret void
748}
749
750; GCN-LABEL: {{^}}atomic_xchg_i32_ret:
751; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
752; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000753define amdgpu_kernel void @atomic_xchg_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000754entry:
755 %val = atomicrmw volatile xchg i32 addrspace(4)* %out, i32 %in seq_cst
756 store i32 %val, i32 addrspace(4)* %out2
757 ret void
758}
759
760; GCN-LABEL: {{^}}atomic_xchg_i32_addr64:
761; GCN: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000762define amdgpu_kernel void @atomic_xchg_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000763entry:
764 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
765 %val = atomicrmw volatile xchg i32 addrspace(4)* %ptr, i32 %in seq_cst
766 ret void
767}
768
769; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
770; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
771; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000772define amdgpu_kernel void @atomic_xchg_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000773entry:
774 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
775 %val = atomicrmw volatile xchg i32 addrspace(4)* %ptr, i32 %in seq_cst
776 store i32 %val, i32 addrspace(4)* %out2
777 ret void
778}
779
780; CMP_SWAP
781
782; GCN-LABEL: {{^}}atomic_cmpxchg_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000783; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
784; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000785define amdgpu_kernel void @atomic_cmpxchg_i32_offset(i32 addrspace(4)* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000786entry:
787 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
788 %val = cmpxchg volatile i32 addrspace(4)* %gep, i32 %old, i32 %in seq_cst seq_cst
789 ret void
790}
791
792; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000793; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
794; GFX9: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000795; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000796define amdgpu_kernel void @atomic_cmpxchg_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000797entry:
798 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
799 %val = cmpxchg volatile i32 addrspace(4)* %gep, i32 %old, i32 %in seq_cst seq_cst
800 %flag = extractvalue { i32, i1 } %val, 0
801 store i32 %flag, i32 addrspace(4)* %out2
802 ret void
803}
804
805; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000806; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
807; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000808define amdgpu_kernel void @atomic_cmpxchg_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000809entry:
810 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
811 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
812 %val = cmpxchg volatile i32 addrspace(4)* %gep, i32 %old, i32 %in seq_cst seq_cst
813 ret void
814}
815
816; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000817; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
818; GFX9: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000819; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000820define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000821entry:
822 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
823 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
824 %val = cmpxchg volatile i32 addrspace(4)* %gep, i32 %old, i32 %in seq_cst seq_cst
825 %flag = extractvalue { i32, i1 } %val, 0
826 store i32 %flag, i32 addrspace(4)* %out2
827 ret void
828}
829
830; GCN-LABEL: {{^}}atomic_cmpxchg_i32:
831; GCN: flat_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000832define amdgpu_kernel void @atomic_cmpxchg_i32(i32 addrspace(4)* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000833entry:
834 %val = cmpxchg volatile i32 addrspace(4)* %out, i32 %old, i32 %in seq_cst seq_cst
835 ret void
836}
837
838; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret:
839; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc
840; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000841define amdgpu_kernel void @atomic_cmpxchg_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000842entry:
843 %val = cmpxchg volatile i32 addrspace(4)* %out, i32 %old, i32 %in seq_cst seq_cst
844 %flag = extractvalue { i32, i1 } %val, 0
845 store i32 %flag, i32 addrspace(4)* %out2
846 ret void
847}
848
849; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
850; GCN: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000851define amdgpu_kernel void @atomic_cmpxchg_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000852entry:
853 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
854 %val = cmpxchg volatile i32 addrspace(4)* %ptr, i32 %old, i32 %in seq_cst seq_cst
855 ret void
856}
857
858; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
859; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
860; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000861define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000862entry:
863 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
864 %val = cmpxchg volatile i32 addrspace(4)* %ptr, i32 %old, i32 %in seq_cst seq_cst
865 %flag = extractvalue { i32, i1 } %val, 0
866 store i32 %flag, i32 addrspace(4)* %out2
867 ret void
868}
869
870; GCN-LABEL: {{^}}atomic_xor_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000871; CIVI: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
872; GFX9: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000873define amdgpu_kernel void @atomic_xor_i32_offset(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000874entry:
875 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
876 %val = atomicrmw volatile xor i32 addrspace(4)* %gep, i32 %in seq_cst
877 ret void
878}
879
880; GCN-LABEL: {{^}}atomic_xor_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000881; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
882; GFX9: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000883; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000884define amdgpu_kernel void @atomic_xor_i32_ret_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000885entry:
886 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
887 %val = atomicrmw volatile xor i32 addrspace(4)* %gep, i32 %in seq_cst
888 store i32 %val, i32 addrspace(4)* %out2
889 ret void
890}
891
892; GCN-LABEL: {{^}}atomic_xor_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000893; CIVI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
894; GFX9: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000895define amdgpu_kernel void @atomic_xor_i32_addr64_offset(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000896entry:
897 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
898 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
899 %val = atomicrmw volatile xor i32 addrspace(4)* %gep, i32 %in seq_cst
900 ret void
901}
902
903; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000904; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
905; GFX9: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000906; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000907define amdgpu_kernel void @atomic_xor_i32_ret_addr64_offset(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000908entry:
909 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
910 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
911 %val = atomicrmw volatile xor i32 addrspace(4)* %gep, i32 %in seq_cst
912 store i32 %val, i32 addrspace(4)* %out2
913 ret void
914}
915
916; GCN-LABEL: {{^}}atomic_xor_i32:
917; GCN: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000918define amdgpu_kernel void @atomic_xor_i32(i32 addrspace(4)* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000919entry:
920 %val = atomicrmw volatile xor i32 addrspace(4)* %out, i32 %in seq_cst
921 ret void
922}
923
924; GCN-LABEL: {{^}}atomic_xor_i32_ret:
925; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
926; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000927define amdgpu_kernel void @atomic_xor_i32_ret(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000928entry:
929 %val = atomicrmw volatile xor i32 addrspace(4)* %out, i32 %in seq_cst
930 store i32 %val, i32 addrspace(4)* %out2
931 ret void
932}
933
934; GCN-LABEL: {{^}}atomic_xor_i32_addr64:
935; GCN: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000936define amdgpu_kernel void @atomic_xor_i32_addr64(i32 addrspace(4)* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000937entry:
938 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
939 %val = atomicrmw volatile xor i32 addrspace(4)* %ptr, i32 %in seq_cst
940 ret void
941}
942
943; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64:
944; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
945; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000946define amdgpu_kernel void @atomic_xor_i32_ret_addr64(i32 addrspace(4)* %out, i32 addrspace(4)* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000947entry:
948 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
949 %val = atomicrmw volatile xor i32 addrspace(4)* %ptr, i32 %in seq_cst
950 store i32 %val, i32 addrspace(4)* %out2
951 ret void
952}
953
954; GCN-LABEL: {{^}}atomic_load_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000955; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
956; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000957; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000958define amdgpu_kernel void @atomic_load_i32_offset(i32 addrspace(4)* %in, i32 addrspace(4)* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000959entry:
960 %gep = getelementptr i32, i32 addrspace(4)* %in, i32 4
961 %val = load atomic i32, i32 addrspace(4)* %gep seq_cst, align 4
962 store i32 %val, i32 addrspace(4)* %out
963 ret void
964}
965
966; GCN-LABEL: {{^}}atomic_load_i32:
967; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
968; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000969define amdgpu_kernel void @atomic_load_i32(i32 addrspace(4)* %in, i32 addrspace(4)* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000970entry:
971 %val = load atomic i32, i32 addrspace(4)* %in seq_cst, align 4
972 store i32 %val, i32 addrspace(4)* %out
973 ret void
974}
975
976; GCN-LABEL: {{^}}atomic_load_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000977; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
978; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000979; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000980define amdgpu_kernel void @atomic_load_i32_addr64_offset(i32 addrspace(4)* %in, i32 addrspace(4)* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000981entry:
982 %ptr = getelementptr i32, i32 addrspace(4)* %in, i64 %index
983 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
984 %val = load atomic i32, i32 addrspace(4)* %gep seq_cst, align 4
985 store i32 %val, i32 addrspace(4)* %out
986 ret void
987}
988
989; GCN-LABEL: {{^}}atomic_load_i32_addr64:
990; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
991; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000992define amdgpu_kernel void @atomic_load_i32_addr64(i32 addrspace(4)* %in, i32 addrspace(4)* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000993entry:
994 %ptr = getelementptr i32, i32 addrspace(4)* %in, i64 %index
995 %val = load atomic i32, i32 addrspace(4)* %ptr seq_cst, align 4
996 store i32 %val, i32 addrspace(4)* %out
997 ret void
998}
999
1000; GCN-LABEL: {{^}}atomic_store_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +00001001; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1002; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001003define amdgpu_kernel void @atomic_store_i32_offset(i32 %in, i32 addrspace(4)* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001004entry:
1005 %gep = getelementptr i32, i32 addrspace(4)* %out, i32 4
1006 store atomic i32 %in, i32 addrspace(4)* %gep seq_cst, align 4
1007 ret void
1008}
1009
1010; GCN-LABEL: {{^}}atomic_store_i32:
1011; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001012define amdgpu_kernel void @atomic_store_i32(i32 %in, i32 addrspace(4)* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001013entry:
1014 store atomic i32 %in, i32 addrspace(4)* %out seq_cst, align 4
1015 ret void
1016}
1017
1018; GCN-LABEL: {{^}}atomic_store_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +00001019; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
1020; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001021define amdgpu_kernel void @atomic_store_i32_addr64_offset(i32 %in, i32 addrspace(4)* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001022entry:
1023 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
1024 %gep = getelementptr i32, i32 addrspace(4)* %ptr, i32 4
1025 store atomic i32 %in, i32 addrspace(4)* %gep seq_cst, align 4
1026 ret void
1027}
1028
1029; GCN-LABEL: {{^}}atomic_store_i32_addr64:
1030; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001031define amdgpu_kernel void @atomic_store_i32_addr64(i32 %in, i32 addrspace(4)* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001032entry:
1033 %ptr = getelementptr i32, i32 addrspace(4)* %out, i64 %index
1034 store atomic i32 %in, i32 addrspace(4)* %ptr seq_cst, align 4
1035 ret void
1036}