blob: 1c22c375bc50da0ed3a50823bb8b469a630b2245 [file] [log] [blame]
Matt Arsenault4e309b02017-07-29 01:03:53 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,SI,SIVI %s
2; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI,SIVI %s
3; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX9 %s
Tom Stellard7980fc82014-09-25 18:30:26 +00004
Matt Arsenault4e309b02017-07-29 01:03:53 +00005; GCN-LABEL: {{^}}atomic_add_i32_offset:
6; SIVI: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
7; GFX9: global_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00008define amdgpu_kernel void @atomic_add_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Tom Stellard7980fc82014-09-25 18:30:26 +00009entry:
Matt Arsenault25363d32016-06-09 23:42:44 +000010 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
11 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
12 ret void
13}
14
Matt Arsenault4e309b02017-07-29 01:03:53 +000015; GCN-LABEL: {{^}}atomic_add_i32_max_neg_offset:
16; GFX9: global_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off offset:-4096{{$}}
17define amdgpu_kernel void @atomic_add_i32_max_neg_offset(i32 addrspace(1)* %out, i32 %in) {
18entry:
19 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 -1024
20 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
21 ret void
22}
23
24; GCN-LABEL: {{^}}atomic_add_i32_soffset:
25; SIVI: s_mov_b32 [[SREG:s[0-9]+]], 0x8ca0
26; SIVI: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], [[SREG]]{{$}}
27
28; GFX9: global_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000029define amdgpu_kernel void @atomic_add_i32_soffset(i32 addrspace(1)* %out, i32 %in) {
Matt Arsenault25363d32016-06-09 23:42:44 +000030entry:
31 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 9000
32 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
33 ret void
34}
35
Matt Arsenault4e309b02017-07-29 01:03:53 +000036; GCN-LABEL: {{^}}atomic_add_i32_huge_offset:
Matt Arsenault25363d32016-06-09 23:42:44 +000037; SI-DAG: v_mov_b32_e32 v[[PTRLO:[0-9]+]], 0xdeac
38; SI-DAG: v_mov_b32_e32 v[[PTRHI:[0-9]+]], 0xabcd
39; SI: buffer_atomic_add v{{[0-9]+}}, v{{\[}}[[PTRLO]]:[[PTRHI]]{{\]}}, s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000040
Matt Arsenault25363d32016-06-09 23:42:44 +000041; VI: flat_atomic_add
Matt Arsenault4e309b02017-07-29 01:03:53 +000042
43; GFX9: global_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000044define amdgpu_kernel void @atomic_add_i32_huge_offset(i32 addrspace(1)* %out, i32 %in) {
Matt Arsenault25363d32016-06-09 23:42:44 +000045entry:
46 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 47224239175595
47
48 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry28682cf2014-10-17 23:32:50 +000049 ret void
50}
51
Matt Arsenault4e309b02017-07-29 01:03:53 +000052; GCN-LABEL: {{^}}atomic_add_i32_ret_offset:
53; SIVI: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
54; SIVI: buffer_store_dword [[RET]]
55
56; GFX9: global_atomic_add v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000057define amdgpu_kernel void @atomic_add_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry28682cf2014-10-17 23:32:50 +000058entry:
Matt Arsenault25363d32016-06-09 23:42:44 +000059 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
60 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
61 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry28682cf2014-10-17 23:32:50 +000062 ret void
63}
64
Matt Arsenault4e309b02017-07-29 01:03:53 +000065; GCN-LABEL: {{^}}atomic_add_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +000066; 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 +000067; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000068; GFX9: global_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000069define amdgpu_kernel void @atomic_add_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry28682cf2014-10-17 23:32:50 +000070entry:
David Blaikie79e6c742015-02-27 19:29:02 +000071 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +000072 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
73 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry28682cf2014-10-17 23:32:50 +000074 ret void
75}
76
Matt Arsenault4e309b02017-07-29 01:03:53 +000077; GCN-LABEL: {{^}}atomic_add_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +000078; 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 +000079; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +000080; SIVI: buffer_store_dword [[RET]]
81
82; GFX9: global_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
83; GFX9: global_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000084define amdgpu_kernel void @atomic_add_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry28682cf2014-10-17 23:32:50 +000085entry:
David Blaikie79e6c742015-02-27 19:29:02 +000086 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +000087 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
88 %val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 %in seq_cst
89 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry28682cf2014-10-17 23:32:50 +000090 ret void
91}
92
Matt Arsenault4e309b02017-07-29 01:03:53 +000093; GCN-LABEL: {{^}}atomic_add_i32:
94; SIVI: buffer_atomic_add v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
95; GFX9: global_atomic_add v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000096define amdgpu_kernel void @atomic_add_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry28682cf2014-10-17 23:32:50 +000097entry:
Matt Arsenault25363d32016-06-09 23:42:44 +000098 %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
Tom Stellard7980fc82014-09-25 18:30:26 +000099 ret void
100}
101
Matt Arsenault4e309b02017-07-29 01:03:53 +0000102; GCN-LABEL: {{^}}atomic_add_i32_ret:
103; SIVI: buffer_atomic_add [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
104; SIVI: buffer_store_dword [[RET]]
105
106; GFX9: global_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
107; GFX9: global_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000108define amdgpu_kernel void @atomic_add_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Tom Stellard7980fc82014-09-25 18:30:26 +0000109entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000110 %val = atomicrmw volatile add i32 addrspace(1)* %out, i32 %in seq_cst
111 store i32 %val, i32 addrspace(1)* %out2
Tom Stellard7980fc82014-09-25 18:30:26 +0000112 ret void
113}
114
Matt Arsenault4e309b02017-07-29 01:03:53 +0000115; GCN-LABEL: {{^}}atomic_add_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000116; 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 +0000117; VI: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000118; GFX9: global_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000119define amdgpu_kernel void @atomic_add_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Tom Stellard7980fc82014-09-25 18:30:26 +0000120entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000121 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000122 %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
Tom Stellard7980fc82014-09-25 18:30:26 +0000123 ret void
124}
125
Matt Arsenault4e309b02017-07-29 01:03:53 +0000126; GCN-LABEL: {{^}}atomic_add_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000127; 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 +0000128; VI: flat_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000129; SIVI: buffer_store_dword [[RET]]
130
131; GFX9: global_atomic_add [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000132define amdgpu_kernel 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 +0000133entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000134 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000135 %val = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %in seq_cst
136 store i32 %val, i32 addrspace(1)* %out2
Tom Stellard7980fc82014-09-25 18:30:26 +0000137 ret void
138}
Aaron Watry328f1ba2014-10-17 23:32:52 +0000139
Matt Arsenault4e309b02017-07-29 01:03:53 +0000140; GCN-LABEL: {{^}}atomic_and_i32_offset:
141; SIVI: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
142
143; GFX9: global_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000144define amdgpu_kernel void @atomic_and_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry62127802014-10-17 23:32:54 +0000145entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000146 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
147 %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry62127802014-10-17 23:32:54 +0000148 ret void
149}
150
Matt Arsenault4e309b02017-07-29 01:03:53 +0000151; GCN-LABEL: {{^}}atomic_and_i32_ret_offset:
152; SIVI: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
153; SIVI: buffer_store_dword [[RET]]
154
155; GFX9: global_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000156define amdgpu_kernel void @atomic_and_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry62127802014-10-17 23:32:54 +0000157entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000158 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
159 %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
160 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry62127802014-10-17 23:32:54 +0000161 ret void
162}
163
Matt Arsenault4e309b02017-07-29 01:03:53 +0000164; GCN-LABEL: {{^}}atomic_and_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000165; 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 +0000166; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000167
168; GFX9: global_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000169define amdgpu_kernel void @atomic_and_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry62127802014-10-17 23:32:54 +0000170entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000171 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000172 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
173 %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry62127802014-10-17 23:32:54 +0000174 ret void
175}
176
Matt Arsenault4e309b02017-07-29 01:03:53 +0000177; GCN-LABEL: {{^}}atomic_and_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000178; 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 +0000179; VI: flat_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000180; SIVI: buffer_store_dword [[RET]]
181
182; GFX9: global_atomic_and [[RET:v[0-9]]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000183define amdgpu_kernel void @atomic_and_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry62127802014-10-17 23:32:54 +0000184entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000185 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000186 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
187 %val = atomicrmw volatile and i32 addrspace(1)* %gep, i32 %in seq_cst
188 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry62127802014-10-17 23:32:54 +0000189 ret void
190}
191
Matt Arsenault4e309b02017-07-29 01:03:53 +0000192; GCN-LABEL: {{^}}atomic_and_i32:
193; SIVI: buffer_atomic_and v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
194
195; GFX9: global_atomic_and v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000196define amdgpu_kernel void @atomic_and_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry62127802014-10-17 23:32:54 +0000197entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000198 %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry62127802014-10-17 23:32:54 +0000199 ret void
200}
201
Matt Arsenault4e309b02017-07-29 01:03:53 +0000202; GCN-LABEL: {{^}}atomic_and_i32_ret:
203; SIVI: buffer_atomic_and [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
204; SIVI: buffer_store_dword [[RET]]
205
206; GFX9: global_atomic_and v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000207define amdgpu_kernel void @atomic_and_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry62127802014-10-17 23:32:54 +0000208entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000209 %val = atomicrmw volatile and i32 addrspace(1)* %out, i32 %in seq_cst
210 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry62127802014-10-17 23:32:54 +0000211 ret void
212}
213
Matt Arsenault4e309b02017-07-29 01:03:53 +0000214; GCN-LABEL: {{^}}atomic_and_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000215; 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 +0000216; VI: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000217
218; GFX9: global_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000219define amdgpu_kernel void @atomic_and_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry62127802014-10-17 23:32:54 +0000220entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000221 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000222 %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry62127802014-10-17 23:32:54 +0000223 ret void
224}
225
Matt Arsenault4e309b02017-07-29 01:03:53 +0000226; GCN-LABEL: {{^}}atomic_and_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000227; 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 +0000228; VI: flat_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000229; SIVI: buffer_store_dword [[RET]]
230
231; GFX9: global_atomic_and [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000232define amdgpu_kernel void @atomic_and_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry62127802014-10-17 23:32:54 +0000233entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000234 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000235 %val = atomicrmw volatile and i32 addrspace(1)* %ptr, i32 %in seq_cst
236 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry62127802014-10-17 23:32:54 +0000237 ret void
238}
239
Matt Arsenault4e309b02017-07-29 01:03:53 +0000240; GCN-LABEL: {{^}}atomic_sub_i32_offset:
241; SIVI: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
242
243; GFX9: global_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000244define amdgpu_kernel void @atomic_sub_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000245entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000246 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
247 %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry328f1ba2014-10-17 23:32:52 +0000248 ret void
249}
250
Matt Arsenault4e309b02017-07-29 01:03:53 +0000251; GCN-LABEL: {{^}}atomic_sub_i32_ret_offset:
252; SIVI: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
253; SIVI: buffer_store_dword [[RET]]
254
255; GFX9: global_atomic_sub v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000256define amdgpu_kernel void @atomic_sub_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000257entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000258 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
259 %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
260 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry328f1ba2014-10-17 23:32:52 +0000261 ret void
262}
263
Matt Arsenault4e309b02017-07-29 01:03:53 +0000264; GCN-LABEL: {{^}}atomic_sub_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000265; 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 +0000266; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000267
268; GFX9: global_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000269define amdgpu_kernel void @atomic_sub_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000270entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000271 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000272 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
273 %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry328f1ba2014-10-17 23:32:52 +0000274 ret void
275}
276
Matt Arsenault4e309b02017-07-29 01:03:53 +0000277; GCN-LABEL: {{^}}atomic_sub_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000278; 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 +0000279; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000280; SIVI: buffer_store_dword [[RET]]
281
282; GFX9: global_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000283define amdgpu_kernel void @atomic_sub_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000284entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000285 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000286 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
287 %val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 %in seq_cst
288 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry328f1ba2014-10-17 23:32:52 +0000289 ret void
290}
291
Matt Arsenault4e309b02017-07-29 01:03:53 +0000292; GCN-LABEL: {{^}}atomic_sub_i32:
293; SIVI: buffer_atomic_sub v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
294
295; GFX9: global_atomic_sub v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000296define amdgpu_kernel void @atomic_sub_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000297entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000298 %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry328f1ba2014-10-17 23:32:52 +0000299 ret void
300}
301
Matt Arsenault4e309b02017-07-29 01:03:53 +0000302; GCN-LABEL: {{^}}atomic_sub_i32_ret:
303; SIVI: buffer_atomic_sub [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
304; SIVI: buffer_store_dword [[RET]]
305
306; GFX9: global_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000307define amdgpu_kernel void @atomic_sub_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000308entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000309 %val = atomicrmw volatile sub i32 addrspace(1)* %out, i32 %in seq_cst
310 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry328f1ba2014-10-17 23:32:52 +0000311 ret void
312}
313
Matt Arsenault4e309b02017-07-29 01:03:53 +0000314; GCN-LABEL: {{^}}atomic_sub_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000315; 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 +0000316; VI: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000317
318; GFX9: global_atomic_sub v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000319define amdgpu_kernel void @atomic_sub_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000320entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000321 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000322 %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry328f1ba2014-10-17 23:32:52 +0000323 ret void
324}
325
Matt Arsenault4e309b02017-07-29 01:03:53 +0000326; GCN-LABEL: {{^}}atomic_sub_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000327; 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 +0000328; VI: flat_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000329; SIVI: buffer_store_dword [[RET]]
330
331; GFX9: global_atomic_sub [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000332define amdgpu_kernel void @atomic_sub_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry328f1ba2014-10-17 23:32:52 +0000333entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000334 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000335 %val = atomicrmw volatile sub i32 addrspace(1)* %ptr, i32 %in seq_cst
336 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry328f1ba2014-10-17 23:32:52 +0000337 ret void
338}
Aaron Watry29f295d2014-10-17 23:32:56 +0000339
Matt Arsenault4e309b02017-07-29 01:03:53 +0000340; GCN-LABEL: {{^}}atomic_max_i32_offset:
341; SIVI: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
342
343; GFX9: global_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000344define amdgpu_kernel void @atomic_max_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000345entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000346 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
347 %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000348 ret void
349}
350
Matt Arsenault4e309b02017-07-29 01:03:53 +0000351; GCN-LABEL: {{^}}atomic_max_i32_ret_offset:
352; SIVI: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
353; SIVI: buffer_store_dword [[RET]]
354
355; GFX9: global_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000356define amdgpu_kernel void @atomic_max_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000357entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000358 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
359 %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
360 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000361 ret void
362}
363
Matt Arsenault4e309b02017-07-29 01:03:53 +0000364; GCN-LABEL: {{^}}atomic_max_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000365; 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 +0000366; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000367
368; GFX9: global_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000369define amdgpu_kernel void @atomic_max_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000370entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000371 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000372 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
373 %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000374 ret void
375}
376
Matt Arsenault4e309b02017-07-29 01:03:53 +0000377; GCN-LABEL: {{^}}atomic_max_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000378; 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 +0000379; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000380; SIVI: buffer_store_dword [[RET]]
381
382; GFX9: global_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000383define amdgpu_kernel void @atomic_max_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000384entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000385 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000386 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
387 %val = atomicrmw volatile max i32 addrspace(1)* %gep, i32 %in seq_cst
388 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000389 ret void
390}
391
Matt Arsenault4e309b02017-07-29 01:03:53 +0000392; GCN-LABEL: {{^}}atomic_max_i32:
393; SIVI: buffer_atomic_smax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
394
395; GFX9: global_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000396define amdgpu_kernel void @atomic_max_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000397entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000398 %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000399 ret void
400}
401
Matt Arsenault4e309b02017-07-29 01:03:53 +0000402; GCN-LABEL: {{^}}atomic_max_i32_ret:
403; SIVI: buffer_atomic_smax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
404; SIVI: buffer_store_dword [[RET]]
405
406; GFX9: global_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000407define amdgpu_kernel void @atomic_max_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000408entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000409 %val = atomicrmw volatile max i32 addrspace(1)* %out, i32 %in seq_cst
410 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000411 ret void
412}
413
Matt Arsenault4e309b02017-07-29 01:03:53 +0000414; GCN-LABEL: {{^}}atomic_max_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000415; 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 +0000416; VI: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000417
418; GFX9: global_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000419define amdgpu_kernel void @atomic_max_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000420entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000421 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000422 %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000423 ret void
424}
425
Matt Arsenault4e309b02017-07-29 01:03:53 +0000426; GCN-LABEL: {{^}}atomic_max_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000427; 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 +0000428; VI: flat_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000429; SIVI: buffer_store_dword [[RET]]
430
431; GFX9: global_atomic_smax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000432define amdgpu_kernel void @atomic_max_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000433entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000434 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000435 %val = atomicrmw volatile max i32 addrspace(1)* %ptr, i32 %in seq_cst
436 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000437 ret void
438}
439
Matt Arsenault4e309b02017-07-29 01:03:53 +0000440; GCN-LABEL: {{^}}atomic_umax_i32_offset:
441; SIVI: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
442
443; GFX9: global_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000444define amdgpu_kernel void @atomic_umax_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000445entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000446 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
447 %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000448 ret void
449}
450
Matt Arsenault4e309b02017-07-29 01:03:53 +0000451; GCN-LABEL: {{^}}atomic_umax_i32_ret_offset:
452; SIVI: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
453; SIVI: buffer_store_dword [[RET]]
454
455; GFX9: global_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000456define amdgpu_kernel void @atomic_umax_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000457entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000458 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
459 %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
460 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000461 ret void
462}
463
Matt Arsenault4e309b02017-07-29 01:03:53 +0000464; GCN-LABEL: {{^}}atomic_umax_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000465; 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 +0000466; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000467; GFX9: global_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000468define amdgpu_kernel void @atomic_umax_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000469entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000470 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000471 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
472 %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000473 ret void
474}
475
Matt Arsenault4e309b02017-07-29 01:03:53 +0000476; GCN-LABEL: {{^}}atomic_umax_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000477; 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 +0000478; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000479; SIVI: buffer_store_dword [[RET]]
480
481; GFX9: global_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000482define amdgpu_kernel void @atomic_umax_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000483entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000484 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000485 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
486 %val = atomicrmw volatile umax i32 addrspace(1)* %gep, i32 %in seq_cst
487 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000488 ret void
489}
490
Matt Arsenault4e309b02017-07-29 01:03:53 +0000491; GCN-LABEL: {{^}}atomic_umax_i32:
492; SIVI: buffer_atomic_umax v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
493
494; GFX9: global_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000495define amdgpu_kernel void @atomic_umax_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000496entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000497 %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000498 ret void
499}
500
Matt Arsenault4e309b02017-07-29 01:03:53 +0000501; GCN-LABEL: {{^}}atomic_umax_i32_ret:
502; SIVI: buffer_atomic_umax [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
503; SIVI: buffer_store_dword [[RET]]
504
505; GFX9: global_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000506define amdgpu_kernel void @atomic_umax_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000507entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000508 %val = atomicrmw volatile umax i32 addrspace(1)* %out, i32 %in seq_cst
509 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000510 ret void
511}
512
Matt Arsenault4e309b02017-07-29 01:03:53 +0000513; GCN-LABEL: {{^}}atomic_umax_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000514; 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 +0000515; VI: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000516; GFX9: global_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000517define amdgpu_kernel void @atomic_umax_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000518entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000519 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000520 %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry29f295d2014-10-17 23:32:56 +0000521 ret void
522}
523
Matt Arsenault4e309b02017-07-29 01:03:53 +0000524; GCN-LABEL: {{^}}atomic_umax_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000525; 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 +0000526; VI: flat_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000527; SIVI: buffer_store_dword [[RET]]
528
529; GFX9: global_atomic_umax [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000530define amdgpu_kernel void @atomic_umax_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry29f295d2014-10-17 23:32:56 +0000531entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000532 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000533 %val = atomicrmw volatile umax i32 addrspace(1)* %ptr, i32 %in seq_cst
534 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry29f295d2014-10-17 23:32:56 +0000535 ret void
536}
Aaron Watry58c99922014-10-17 23:32:57 +0000537
Matt Arsenault4e309b02017-07-29 01:03:53 +0000538; GCN-LABEL: {{^}}atomic_min_i32_offset:
539; SIVI: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
540
541; GFX9: global_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000542define amdgpu_kernel void @atomic_min_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000543entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000544 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
545 %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000546 ret void
547}
548
Matt Arsenault4e309b02017-07-29 01:03:53 +0000549; GCN-LABEL: {{^}}atomic_min_i32_ret_offset:
550; SIVI: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
551; SIVI: buffer_store_dword [[RET]]
552
553; GFX9: global_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000554define amdgpu_kernel void @atomic_min_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000555entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000556 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
557 %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
558 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000559 ret void
560}
561
Matt Arsenault4e309b02017-07-29 01:03:53 +0000562; GCN-LABEL: {{^}}atomic_min_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000563; 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 +0000564; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000565; GFX9: global_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000566define amdgpu_kernel void @atomic_min_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000567entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000568 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000569 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
570 %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000571 ret void
572}
573
Matt Arsenault4e309b02017-07-29 01:03:53 +0000574; GCN-LABEL: {{^}}atomic_min_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000575; 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 +0000576; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000577; SIVI: buffer_store_dword [[RET]]
578
579; GFX9: global_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000580define amdgpu_kernel void @atomic_min_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000581entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000582 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000583 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
584 %val = atomicrmw volatile min i32 addrspace(1)* %gep, i32 %in seq_cst
585 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000586 ret void
587}
588
Matt Arsenault4e309b02017-07-29 01:03:53 +0000589; GCN-LABEL: {{^}}atomic_min_i32:
590; SIVI: buffer_atomic_smin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
591
592; GFX9: global_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000593define amdgpu_kernel void @atomic_min_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000594entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000595 %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000596 ret void
597}
598
Matt Arsenault4e309b02017-07-29 01:03:53 +0000599; GCN-LABEL: {{^}}atomic_min_i32_ret:
600; SIVI: buffer_atomic_smin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
601; SIVI: buffer_store_dword [[RET]]
602
603; GFX9: global_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000604define amdgpu_kernel void @atomic_min_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000605entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000606 %val = atomicrmw volatile min i32 addrspace(1)* %out, i32 %in seq_cst
607 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000608 ret void
609}
610
Matt Arsenault4e309b02017-07-29 01:03:53 +0000611; GCN-LABEL: {{^}}atomic_min_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000612; 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 +0000613; VI: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000614; GFX9: global_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000615define amdgpu_kernel void @atomic_min_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000616entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000617 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000618 %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000619 ret void
620}
621
Matt Arsenault4e309b02017-07-29 01:03:53 +0000622; GCN-LABEL: {{^}}atomic_min_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000623; 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 +0000624; VI: flat_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000625; SIVI: buffer_store_dword [[RET]]
626
627; GFX9: global_atomic_smin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000628define amdgpu_kernel void @atomic_min_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000629entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000630 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000631 %val = atomicrmw volatile min i32 addrspace(1)* %ptr, i32 %in seq_cst
632 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000633 ret void
634}
635
Matt Arsenault4e309b02017-07-29 01:03:53 +0000636; GCN-LABEL: {{^}}atomic_umin_i32_offset:
637; SIVI: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
638
639; GFX9: global_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000640define amdgpu_kernel void @atomic_umin_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000641entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000642 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
643 %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000644 ret void
645}
646
Matt Arsenault4e309b02017-07-29 01:03:53 +0000647; GCN-LABEL: {{^}}atomic_umin_i32_ret_offset:
648; SIVI: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
649; SIVI: buffer_store_dword [[RET]]
650
651; GFX9: global_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000652define amdgpu_kernel void @atomic_umin_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000653entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000654 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
655 %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
656 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000657 ret void
658}
659
Matt Arsenault4e309b02017-07-29 01:03:53 +0000660; GCN-LABEL: {{^}}atomic_umin_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000661; 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 +0000662; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000663; GFX9: global_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000664define amdgpu_kernel void @atomic_umin_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000665entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000666 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000667 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
668 %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000669 ret void
670}
671
Matt Arsenault4e309b02017-07-29 01:03:53 +0000672; GCN-LABEL: {{^}}atomic_umin_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000673; 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 +0000674; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000675; SIVI: buffer_store_dword [[RET]]
676
677; GFX9: global_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000678define amdgpu_kernel void @atomic_umin_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000679entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000680 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000681 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
682 %val = atomicrmw volatile umin i32 addrspace(1)* %gep, i32 %in seq_cst
683 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000684 ret void
685}
686
Matt Arsenault4e309b02017-07-29 01:03:53 +0000687; GCN-LABEL: {{^}}atomic_umin_i32:
688; SIVI: buffer_atomic_umin v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
689; GFX9: global_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000690define amdgpu_kernel void @atomic_umin_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000691entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000692 %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000693 ret void
694}
695
Matt Arsenault4e309b02017-07-29 01:03:53 +0000696; GCN-LABEL: {{^}}atomic_umin_i32_ret:
697; SIVI: buffer_atomic_umin [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
698; SIVI: buffer_store_dword [[RET]]
699
700; GFX9: global_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000701define amdgpu_kernel void @atomic_umin_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry58c99922014-10-17 23:32:57 +0000702entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000703 %val = atomicrmw volatile umin i32 addrspace(1)* %out, i32 %in seq_cst
704 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000705 ret void
706}
707
Matt Arsenault4e309b02017-07-29 01:03:53 +0000708; GCN-LABEL: {{^}}atomic_umin_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000709; 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 +0000710; VI: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000711; GFX9: global_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000712define amdgpu_kernel void @atomic_umin_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000713entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000714 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000715 %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry58c99922014-10-17 23:32:57 +0000716 ret void
717}
718
Matt Arsenault4e309b02017-07-29 01:03:53 +0000719; GCN-LABEL: {{^}}atomic_umin_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000720; 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 +0000721; VI: flat_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000722; SIVI: buffer_store_dword [[RET]]
723
724; GFX9: global_atomic_umin [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000725define amdgpu_kernel void @atomic_umin_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry58c99922014-10-17 23:32:57 +0000726entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000727 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000728 %val = atomicrmw volatile umin i32 addrspace(1)* %ptr, i32 %in seq_cst
729 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry58c99922014-10-17 23:32:57 +0000730 ret void
731}
Aaron Watry8a911e62014-10-17 23:32:59 +0000732
Matt Arsenault4e309b02017-07-29 01:03:53 +0000733; GCN-LABEL: {{^}}atomic_or_i32_offset:
734; SIVI: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
735
736; GFX9: global_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000737define amdgpu_kernel void @atomic_or_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000738entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000739 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
740 %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry8a911e62014-10-17 23:32:59 +0000741 ret void
742}
743
Matt Arsenault4e309b02017-07-29 01:03:53 +0000744; GCN-LABEL: {{^}}atomic_or_i32_ret_offset:
745; SIVI: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
746; SIVI: buffer_store_dword [[RET]]
747
748; GFX9: global_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000749define amdgpu_kernel void @atomic_or_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000750entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000751 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
752 %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
753 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry8a911e62014-10-17 23:32:59 +0000754 ret void
755}
756
Matt Arsenault4e309b02017-07-29 01:03:53 +0000757; GCN-LABEL: {{^}}atomic_or_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000758; 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 +0000759; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000760; GFX9: global_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000761define amdgpu_kernel void @atomic_or_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000762entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000763 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000764 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
765 %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry8a911e62014-10-17 23:32:59 +0000766 ret void
767}
768
Matt Arsenault4e309b02017-07-29 01:03:53 +0000769; GCN-LABEL: {{^}}atomic_or_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000770; 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 +0000771; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000772; SIVI: buffer_store_dword [[RET]]
773
774; GFX9: global_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000775define amdgpu_kernel void @atomic_or_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000776entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000777 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000778 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
779 %val = atomicrmw volatile or i32 addrspace(1)* %gep, i32 %in seq_cst
780 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry8a911e62014-10-17 23:32:59 +0000781 ret void
782}
783
Matt Arsenault4e309b02017-07-29 01:03:53 +0000784; GCN-LABEL: {{^}}atomic_or_i32:
785; SIVI: buffer_atomic_or v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
786
787; GFX9: global_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000788define amdgpu_kernel void @atomic_or_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000789entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000790 %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry8a911e62014-10-17 23:32:59 +0000791 ret void
792}
793
Matt Arsenault4e309b02017-07-29 01:03:53 +0000794; GCN-LABEL: {{^}}atomic_or_i32_ret:
795; SIVI: buffer_atomic_or [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
796; SIVI: buffer_store_dword [[RET]]
797
798; GFX9: global_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000799define amdgpu_kernel void @atomic_or_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000800entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000801 %val = atomicrmw volatile or i32 addrspace(1)* %out, i32 %in seq_cst
802 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry8a911e62014-10-17 23:32:59 +0000803 ret void
804}
805
Matt Arsenault4e309b02017-07-29 01:03:53 +0000806; GCN-LABEL: {{^}}atomic_or_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000807; 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 +0000808; VI: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000809; GFX9: global_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000810define amdgpu_kernel void @atomic_or_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000811entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000812 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000813 %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry8a911e62014-10-17 23:32:59 +0000814 ret void
815}
816
Matt Arsenault4e309b02017-07-29 01:03:53 +0000817; GCN-LABEL: {{^}}atomic_or_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000818; 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 +0000819; VI: flat_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000820; SIVI: buffer_store_dword [[RET]]
821
822; GFX9: global_atomic_or [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000823define amdgpu_kernel void @atomic_or_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry8a911e62014-10-17 23:32:59 +0000824entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000825 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000826 %val = atomicrmw volatile or i32 addrspace(1)* %ptr, i32 %in seq_cst
827 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry8a911e62014-10-17 23:32:59 +0000828 ret void
829}
Aaron Watryd672ee22014-10-17 23:33:01 +0000830
Matt Arsenault4e309b02017-07-29 01:03:53 +0000831; GCN-LABEL: {{^}}atomic_xchg_i32_offset:
832; SIVI: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
833
834; GFX9: global_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000835define amdgpu_kernel void @atomic_xchg_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry81144372014-10-17 23:33:03 +0000836entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000837 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
838 %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry81144372014-10-17 23:33:03 +0000839 ret void
840}
841
Matt Arsenault4e309b02017-07-29 01:03:53 +0000842; GCN-LABEL: {{^}}atomic_xchg_i32_ret_offset:
843; SIVI: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
844; SIVI: buffer_store_dword [[RET]]
845
846; GFX9: global_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000847define amdgpu_kernel void @atomic_xchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry81144372014-10-17 23:33:03 +0000848entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000849 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
850 %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
851 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry81144372014-10-17 23:33:03 +0000852 ret void
853}
854
Matt Arsenault4e309b02017-07-29 01:03:53 +0000855; GCN-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000856; SI: buffer_atomic_swap v{{[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000857; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
858; GFX9: global_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000859define amdgpu_kernel void @atomic_xchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry81144372014-10-17 23:33:03 +0000860entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000861 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000862 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
863 %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watry81144372014-10-17 23:33:03 +0000864 ret void
865}
866
Matt Arsenault4e309b02017-07-29 01:03:53 +0000867; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +0000868; 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 +0000869; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000870; SIVI: buffer_store_dword [[RET]]
871
872; GFX9: global_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000873define amdgpu_kernel void @atomic_xchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry81144372014-10-17 23:33:03 +0000874entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000875 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000876 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
877 %val = atomicrmw volatile xchg i32 addrspace(1)* %gep, i32 %in seq_cst
878 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry81144372014-10-17 23:33:03 +0000879 ret void
880}
881
Matt Arsenault4e309b02017-07-29 01:03:53 +0000882; GCN-LABEL: {{^}}atomic_xchg_i32:
883; SIVI: buffer_atomic_swap v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
884; GFX9: global_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000885define amdgpu_kernel void @atomic_xchg_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watry81144372014-10-17 23:33:03 +0000886entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000887 %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watry81144372014-10-17 23:33:03 +0000888 ret void
889}
890
Matt Arsenault4e309b02017-07-29 01:03:53 +0000891; GCN-LABEL: {{^}}atomic_xchg_i32_ret:
892; SIVI: buffer_atomic_swap [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
893; SIVI: buffer_store_dword [[RET]]
894
895; GFX9: global_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000896define amdgpu_kernel void @atomic_xchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watry81144372014-10-17 23:33:03 +0000897entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000898 %val = atomicrmw volatile xchg i32 addrspace(1)* %out, i32 %in seq_cst
899 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry81144372014-10-17 23:33:03 +0000900 ret void
901}
902
Matt Arsenault4e309b02017-07-29 01:03:53 +0000903; GCN-LABEL: {{^}}atomic_xchg_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000904; 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 +0000905; VI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000906; GFX9: global_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000907define amdgpu_kernel void @atomic_xchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watry81144372014-10-17 23:33:03 +0000908entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000909 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000910 %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watry81144372014-10-17 23:33:03 +0000911 ret void
912}
913
Matt Arsenault4e309b02017-07-29 01:03:53 +0000914; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000915; 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 +0000916; VI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000917; SIVI: buffer_store_dword [[RET]]
918
919; GFX9: global_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000920define amdgpu_kernel void @atomic_xchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watry81144372014-10-17 23:33:03 +0000921entry:
David Blaikie79e6c742015-02-27 19:29:02 +0000922 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000923 %val = atomicrmw volatile xchg i32 addrspace(1)* %ptr, i32 %in seq_cst
924 store i32 %val, i32 addrspace(1)* %out2
Aaron Watry81144372014-10-17 23:33:03 +0000925 ret void
926}
927
Matt Arsenault4e309b02017-07-29 01:03:53 +0000928; GCN-LABEL: {{^}}atomic_cmpxchg_i32_offset:
929; SIVI: buffer_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
930
931; GFX9: global_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000932define amdgpu_kernel void @atomic_cmpxchg_i32_offset(i32 addrspace(1)* %out, i32 %in, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000933entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000934 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
935 %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
Tom Stellard354a43c2016-04-01 18:27:37 +0000936 ret void
937}
938
Matt Arsenault4e309b02017-07-29 01:03:53 +0000939; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
940; SIVI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]{{:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
941; SIVI: buffer_store_dword v[[RET]]
942
943; GFX9: global_atomic_cmpswap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{\[[0-9]+:[0-9]+\]}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000944define amdgpu_kernel void @atomic_cmpxchg_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000945entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000946 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
947 %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
948 %extract0 = extractvalue { i32, i1 } %val, 0
949 store i32 %extract0, i32 addrspace(1)* %out2
Tom Stellard354a43c2016-04-01 18:27:37 +0000950 ret void
951}
952
Matt Arsenault4e309b02017-07-29 01:03:53 +0000953; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
Tom Stellard354a43c2016-04-01 18:27:37 +0000954; SI: buffer_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Matt Arsenault25363d32016-06-09 23:42:44 +0000955
956; VI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000957; GFX9: global_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000958define amdgpu_kernel void @atomic_cmpxchg_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000959entry:
960 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000961 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
962 %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
Tom Stellard354a43c2016-04-01 18:27:37 +0000963 ret void
964}
965
Matt Arsenault4e309b02017-07-29 01:03:53 +0000966; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
Tom Stellard354a43c2016-04-01 18:27:37 +0000967; 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{{$}}
968; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +0000969; SIVI: buffer_store_dword v[[RET]]
970
971; GFX9: global_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000972define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000973entry:
974 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +0000975 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
976 %val = cmpxchg volatile i32 addrspace(1)* %gep, i32 %old, i32 %in seq_cst seq_cst
977 %extract0 = extractvalue { i32, i1 } %val, 0
978 store i32 %extract0, i32 addrspace(1)* %out2
Tom Stellard354a43c2016-04-01 18:27:37 +0000979 ret void
980}
981
Matt Arsenault4e309b02017-07-29 01:03:53 +0000982; GCN-LABEL: {{^}}atomic_cmpxchg_i32:
983; SIVI: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
984
985; GFX9: global_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000986define amdgpu_kernel void @atomic_cmpxchg_i32(i32 addrspace(1)* %out, i32 %in, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000987entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000988 %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
Tom Stellard354a43c2016-04-01 18:27:37 +0000989 ret void
990}
991
Matt Arsenault4e309b02017-07-29 01:03:53 +0000992; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret:
993; SIVI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
994; SIVI: buffer_store_dword v[[RET]]
995
996; GFX9: global_atomic_cmpswap [[RET:v[0-9]+]], v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000997define amdgpu_kernel void @atomic_cmpxchg_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +0000998entry:
Matt Arsenault25363d32016-06-09 23:42:44 +0000999 %val = cmpxchg volatile i32 addrspace(1)* %out, i32 %old, i32 %in seq_cst seq_cst
1000 %extract0 = extractvalue { i32, i1 } %val, 0
1001 store i32 %extract0, i32 addrspace(1)* %out2
Tom Stellard354a43c2016-04-01 18:27:37 +00001002 ret void
1003}
1004
Matt Arsenault4e309b02017-07-29 01:03:53 +00001005; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
Tom Stellard354a43c2016-04-01 18:27:37 +00001006; SI: buffer_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
1007; VI: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001008; GFX9: global_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001009define amdgpu_kernel void @atomic_cmpxchg_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +00001010entry:
1011 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001012 %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
Tom Stellard354a43c2016-04-01 18:27:37 +00001013 ret void
1014}
1015
Matt Arsenault4e309b02017-07-29 01:03:53 +00001016; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
Tom Stellard354a43c2016-04-01 18:27:37 +00001017; SI: buffer_atomic_cmpswap v{{\[}}[[RET:[0-9]+]]:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1018; VI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001019; SIVI: buffer_store_dword v[[RET]]
1020
1021; GFX9: global_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001022define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index, i32 %old) {
Tom Stellard354a43c2016-04-01 18:27:37 +00001023entry:
1024 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001025 %val = cmpxchg volatile i32 addrspace(1)* %ptr, i32 %old, i32 %in seq_cst seq_cst
1026 %extract0 = extractvalue { i32, i1 } %val, 0
1027 store i32 %extract0, i32 addrspace(1)* %out2
Tom Stellard354a43c2016-04-01 18:27:37 +00001028 ret void
1029}
1030
Matt Arsenault4e309b02017-07-29 01:03:53 +00001031; GCN-LABEL: {{^}}atomic_xor_i32_offset:
1032; SIVI: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
1033
1034; GFX9: global_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001035define amdgpu_kernel void @atomic_xor_i32_offset(i32 addrspace(1)* %out, i32 %in) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001036entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001037 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
1038 %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watryd672ee22014-10-17 23:33:01 +00001039 ret void
1040}
1041
Matt Arsenault4e309b02017-07-29 01:03:53 +00001042; GCN-LABEL: {{^}}atomic_xor_i32_ret_offset:
1043; SIVI: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16 glc{{$}}
1044; SIVI: buffer_store_dword [[RET]]
1045
1046; GFX9: global_atomic_xor v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001047define amdgpu_kernel void @atomic_xor_i32_ret_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001048entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001049 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
1050 %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
1051 store i32 %val, i32 addrspace(1)* %out2
Aaron Watryd672ee22014-10-17 23:33:01 +00001052 ret void
1053}
1054
Matt Arsenault4e309b02017-07-29 01:03:53 +00001055; GCN-LABEL: {{^}}atomic_xor_i32_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +00001056; 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 +00001057; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001058; GFX9: global_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001059define amdgpu_kernel void @atomic_xor_i32_addr64_offset(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001060entry:
David Blaikie79e6c742015-02-27 19:29:02 +00001061 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001062 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
1063 %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
Aaron Watryd672ee22014-10-17 23:33:01 +00001064 ret void
1065}
1066
Matt Arsenault4e309b02017-07-29 01:03:53 +00001067; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
Matt Arsenaultfb13b222014-12-03 03:12:13 +00001068; 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 +00001069; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001070; SIVI: buffer_store_dword [[RET]]
1071
1072; GFX9: global_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001073define amdgpu_kernel void @atomic_xor_i32_ret_addr64_offset(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001074entry:
David Blaikie79e6c742015-02-27 19:29:02 +00001075 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001076 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
1077 %val = atomicrmw volatile xor i32 addrspace(1)* %gep, i32 %in seq_cst
1078 store i32 %val, i32 addrspace(1)* %out2
Aaron Watryd672ee22014-10-17 23:33:01 +00001079 ret void
1080}
1081
Matt Arsenault4e309b02017-07-29 01:03:53 +00001082; GCN-LABEL: {{^}}atomic_xor_i32:
1083; SIVI: buffer_atomic_xor v{{[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
1084; GFX9: global_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001085define amdgpu_kernel void @atomic_xor_i32(i32 addrspace(1)* %out, i32 %in) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001086entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001087 %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
Aaron Watryd672ee22014-10-17 23:33:01 +00001088 ret void
1089}
1090
Matt Arsenault4e309b02017-07-29 01:03:53 +00001091; GCN-LABEL: {{^}}atomic_xor_i32_ret:
1092; SIVI: buffer_atomic_xor [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
1093; SIVI: buffer_store_dword [[RET]]
1094
1095; GFX9: global_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001096define amdgpu_kernel void @atomic_xor_i32_ret(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001097entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001098 %val = atomicrmw volatile xor i32 addrspace(1)* %out, i32 %in seq_cst
1099 store i32 %val, i32 addrspace(1)* %out2
Aaron Watryd672ee22014-10-17 23:33:01 +00001100 ret void
1101}
1102
Matt Arsenault4e309b02017-07-29 01:03:53 +00001103; GCN-LABEL: {{^}}atomic_xor_i32_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +00001104; 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 +00001105; VI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001106; GFX9: global_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001107define amdgpu_kernel void @atomic_xor_i32_addr64(i32 addrspace(1)* %out, i32 %in, i64 %index) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001108entry:
David Blaikie79e6c742015-02-27 19:29:02 +00001109 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001110 %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
Aaron Watryd672ee22014-10-17 23:33:01 +00001111 ret void
1112}
1113
Matt Arsenault4e309b02017-07-29 01:03:53 +00001114; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64:
Tom Stellard326d6ec2014-11-05 14:50:53 +00001115; 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 +00001116; VI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001117; SIVI: buffer_store_dword [[RET]]
1118
1119; GFX9: global_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}}, off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001120define amdgpu_kernel void @atomic_xor_i32_ret_addr64(i32 addrspace(1)* %out, i32 addrspace(1)* %out2, i32 %in, i64 %index) {
Aaron Watryd672ee22014-10-17 23:33:01 +00001121entry:
David Blaikie79e6c742015-02-27 19:29:02 +00001122 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001123 %val = atomicrmw volatile xor i32 addrspace(1)* %ptr, i32 %in seq_cst
1124 store i32 %val, i32 addrspace(1)* %out2
Aaron Watryd672ee22014-10-17 23:33:01 +00001125 ret void
1126}
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001127
Matt Arsenault4e309b02017-07-29 01:03:53 +00001128; GCN-LABEL: {{^}}atomic_load_i32_offset:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001129; 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 +00001130; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001131; SIVI: buffer_store_dword [[RET]]
1132
1133; GFX9: global_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001134define amdgpu_kernel void @atomic_load_i32_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001135entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001136 %gep = getelementptr i32, i32 addrspace(1)* %in, i64 4
1137 %val = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4
1138 store i32 %val, i32 addrspace(1)* %out
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001139 ret void
1140}
1141
Matt Arsenault4e309b02017-07-29 01:03:53 +00001142; GCN-LABEL: {{^}}atomic_load_i32:
Nikolay Haustov4f672a32016-04-29 09:02:30 +00001143; SI: buffer_load_dword [[RET:v[0-9]+]], off, s[{{[0-9]+}}:{{[0-9]+}}], 0 glc
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001144; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
Matt Arsenault4e309b02017-07-29 01:03:53 +00001145; SIVI: buffer_store_dword [[RET]]
1146
1147; GFX9: global_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], off glc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001148define amdgpu_kernel void @atomic_load_i32(i32 addrspace(1)* %in, i32 addrspace(1)* %out) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001149entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001150 %val = load atomic i32, i32 addrspace(1)* %in seq_cst, align 4
1151 store i32 %val, i32 addrspace(1)* %out
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001152 ret void
1153}
1154
Matt Arsenault4e309b02017-07-29 01:03:53 +00001155; GCN-LABEL: {{^}}atomic_load_i32_addr64_offset:
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001156; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16 glc{{$}}
1157; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001158; SIVI: buffer_store_dword [[RET]]
1159
1160; GFX9: global_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], off offset:16 glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001161define amdgpu_kernel void @atomic_load_i32_addr64_offset(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001162entry:
1163 %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001164 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
1165 %val = load atomic i32, i32 addrspace(1)* %gep seq_cst, align 4
1166 store i32 %val, i32 addrspace(1)* %out
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001167 ret void
1168}
1169
Matt Arsenault4e309b02017-07-29 01:03:53 +00001170; GCN-LABEL: {{^}}atomic_load_i32_addr64:
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001171; SI: buffer_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 glc{{$}}
1172; VI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001173; SIVI: buffer_store_dword [[RET]]
1174
1175; GFX9: global_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], off glc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001176define amdgpu_kernel void @atomic_load_i32_addr64(i32 addrspace(1)* %in, i32 addrspace(1)* %out, i64 %index) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001177entry:
1178 %ptr = getelementptr i32, i32 addrspace(1)* %in, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001179 %val = load atomic i32, i32 addrspace(1)* %ptr seq_cst, align 4
1180 store i32 %val, i32 addrspace(1)* %out
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001181 ret void
1182}
1183
Matt Arsenault4e309b02017-07-29 01:03:53 +00001184; GCN-LABEL: {{^}}atomic_store_i32_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001185; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0 offset:16{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001186; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+$}}
1187; GFX9: global_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001188define amdgpu_kernel void @atomic_store_i32_offset(i32 %in, i32 addrspace(1)* %out) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001189entry:
Matt Arsenault25363d32016-06-09 23:42:44 +00001190 %gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001191 store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4
1192 ret void
1193}
1194
Matt Arsenault4e309b02017-07-29 01:03:53 +00001195; GCN-LABEL: {{^}}atomic_store_i32:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001196; SI: buffer_store_dword {{v[0-9]+}}, off, s[{{[0-9]+}}:{{[0-9]+}}], 0{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001197; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+$}}
1198; GFX9: global_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001199define amdgpu_kernel void @atomic_store_i32(i32 %in, i32 addrspace(1)* %out) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001200entry:
1201 store atomic i32 %in, i32 addrspace(1)* %out seq_cst, align 4
1202 ret void
1203}
1204
Matt Arsenault4e309b02017-07-29 01:03:53 +00001205; GCN-LABEL: {{^}}atomic_store_i32_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001206; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64 offset:16{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001207; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+$}}
1208; GFX9: global_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}, off offset:16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001209define amdgpu_kernel void @atomic_store_i32_addr64_offset(i32 %in, i32 addrspace(1)* %out, i64 %index) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001210entry:
1211 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
Matt Arsenault25363d32016-06-09 23:42:44 +00001212 %gep = getelementptr i32, i32 addrspace(1)* %ptr, i64 4
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001213 store atomic i32 %in, i32 addrspace(1)* %gep seq_cst, align 4
1214 ret void
1215}
1216
Matt Arsenault4e309b02017-07-29 01:03:53 +00001217; GCN-LABEL: {{^}}atomic_store_i32_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001218; SI: buffer_store_dword {{v[0-9]+}}, v[{{[0-9]+}}:{{[0-9]+}}], s[{{[0-9]+}}:{{[0-9]+}}], 0 addr64{{$}}
Matt Arsenault4e309b02017-07-29 01:03:53 +00001219; VI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+$}}
1220; GFX9: global_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}, off{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +00001221define amdgpu_kernel void @atomic_store_i32_addr64(i32 %in, i32 addrspace(1)* %out, i64 %index) {
Jan Vesely43b7b5b2016-04-07 19:23:11 +00001222entry:
1223 %ptr = getelementptr i32, i32 addrspace(1)* %out, i64 %index
1224 store atomic i32 %in, i32 addrspace(1)* %ptr seq_cst, align 4
1225 ret void
1226}