blob: d20894979ed20fc25270074bbc26421bc2ddcd09 [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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00008define amdgpu_kernel void @atomic_add_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +00009entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000010 %gep = getelementptr i32, i32* %out, i32 4
11 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000012 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000018define amdgpu_kernel void @atomic_add_i32_max_offset(i32* %out, i32 %in) {
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000019entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000020 %gep = getelementptr i32, i32* %out, i32 1023
21 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000022 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]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000027define amdgpu_kernel void @atomic_add_i32_max_offset_p1(i32* %out, i32 %in) {
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000028entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000029 %gep = getelementptr i32, i32* %out, i32 1024
30 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +000031 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000038define amdgpu_kernel void @atomic_add_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000039entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000040 %gep = getelementptr i32, i32* %out, i32 4
41 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
42 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000043 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000049define amdgpu_kernel void @atomic_add_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000050entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000051 %ptr = getelementptr i32, i32* %out, i64 %index
52 %gep = getelementptr i32, i32* %ptr, i32 4
53 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000054 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000061define amdgpu_kernel void @atomic_add_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000062entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000063 %ptr = getelementptr i32, i32* %out, i64 %index
64 %gep = getelementptr i32, i32* %ptr, i32 4
65 %val = atomicrmw volatile add i32* %gep, i32 %in seq_cst
66 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000067 ret void
68}
69
70; GCN-LABEL: {{^}}atomic_add_i32:
71; GCN: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000072define amdgpu_kernel void @atomic_add_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000073entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000074 %val = atomicrmw volatile add i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000075 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000081define amdgpu_kernel void @atomic_add_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +000082entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000083 %val = atomicrmw volatile add i32* %out, i32 %in seq_cst
84 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +000085 ret void
86}
87
88; GCN-LABEL: {{^}}atomic_add_i32_addr64:
89; GCN: flat_atomic_add v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000090define amdgpu_kernel void @atomic_add_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +000091entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +000092 %ptr = getelementptr i32, i32* %out, i64 %index
93 %val = atomicrmw volatile add i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +000094 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000100define amdgpu_kernel void @atomic_add_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000101entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000102 %ptr = getelementptr i32, i32* %out, i64 %index
103 %val = atomicrmw volatile add i32* %ptr, i32 %in seq_cst
104 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000105 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000111define amdgpu_kernel void @atomic_and_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000112entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000113 %gep = getelementptr i32, i32* %out, i32 4
114 %val = atomicrmw volatile and i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000115 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000122define amdgpu_kernel void @atomic_and_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000123entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000124 %gep = getelementptr i32, i32* %out, i32 4
125 %val = atomicrmw volatile and i32* %gep, i32 %in seq_cst
126 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000127 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000133define amdgpu_kernel void @atomic_and_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000134entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000135 %ptr = getelementptr i32, i32* %out, i64 %index
136 %gep = getelementptr i32, i32* %ptr, i32 4
137 %val = atomicrmw volatile and i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000138 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000145define amdgpu_kernel void @atomic_and_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000146entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000147 %ptr = getelementptr i32, i32* %out, i64 %index
148 %gep = getelementptr i32, i32* %ptr, i32 4
149 %val = atomicrmw volatile and i32* %gep, i32 %in seq_cst
150 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000151 ret void
152}
153
154; GCN-LABEL: {{^}}atomic_and_i32:
155; GCN: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000156define amdgpu_kernel void @atomic_and_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000157entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000158 %val = atomicrmw volatile and i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000159 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000165define amdgpu_kernel void @atomic_and_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000166entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000167 %val = atomicrmw volatile and i32* %out, i32 %in seq_cst
168 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000169 ret void
170}
171
172; GCN-LABEL: {{^}}atomic_and_i32_addr64:
173; GCN: flat_atomic_and v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000174define amdgpu_kernel void @atomic_and_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000175entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000176 %ptr = getelementptr i32, i32* %out, i64 %index
177 %val = atomicrmw volatile and i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000178 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000184define amdgpu_kernel void @atomic_and_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000185entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000186 %ptr = getelementptr i32, i32* %out, i64 %index
187 %val = atomicrmw volatile and i32* %ptr, i32 %in seq_cst
188 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000189 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000195define amdgpu_kernel void @atomic_sub_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000196entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000197 %gep = getelementptr i32, i32* %out, i32 4
198 %val = atomicrmw volatile sub i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000199 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000206define amdgpu_kernel void @atomic_sub_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000207entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000208 %gep = getelementptr i32, i32* %out, i32 4
209 %val = atomicrmw volatile sub i32* %gep, i32 %in seq_cst
210 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000211 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000217define amdgpu_kernel void @atomic_sub_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000218entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000219 %ptr = getelementptr i32, i32* %out, i64 %index
220 %gep = getelementptr i32, i32* %ptr, i32 4
221 %val = atomicrmw volatile sub i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000222 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000229define amdgpu_kernel void @atomic_sub_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000230entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000231 %ptr = getelementptr i32, i32* %out, i64 %index
232 %gep = getelementptr i32, i32* %ptr, i32 4
233 %val = atomicrmw volatile sub i32* %gep, i32 %in seq_cst
234 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000235 ret void
236}
237
238; GCN-LABEL: {{^}}atomic_sub_i32:
239; GCN: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000240define amdgpu_kernel void @atomic_sub_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000241entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000242 %val = atomicrmw volatile sub i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000243 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000249define amdgpu_kernel void @atomic_sub_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000250entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000251 %val = atomicrmw volatile sub i32* %out, i32 %in seq_cst
252 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000253 ret void
254}
255
256; GCN-LABEL: {{^}}atomic_sub_i32_addr64:
257; GCN: flat_atomic_sub v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000258define amdgpu_kernel void @atomic_sub_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000259entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000260 %ptr = getelementptr i32, i32* %out, i64 %index
261 %val = atomicrmw volatile sub i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000262 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000268define amdgpu_kernel void @atomic_sub_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000269entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000270 %ptr = getelementptr i32, i32* %out, i64 %index
271 %val = atomicrmw volatile sub i32* %ptr, i32 %in seq_cst
272 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000273 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000279define amdgpu_kernel void @atomic_max_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000280entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000281 %gep = getelementptr i32, i32* %out, i32 4
282 %val = atomicrmw volatile max i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000283 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000290define amdgpu_kernel void @atomic_max_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000291entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000292 %gep = getelementptr i32, i32* %out, i32 4
293 %val = atomicrmw volatile max i32* %gep, i32 %in seq_cst
294 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000295 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000301define amdgpu_kernel void @atomic_max_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000302entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000303 %ptr = getelementptr i32, i32* %out, i64 %index
304 %gep = getelementptr i32, i32* %ptr, i32 4
305 %val = atomicrmw volatile max i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000306 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000313define amdgpu_kernel void @atomic_max_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000314entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000315 %ptr = getelementptr i32, i32* %out, i64 %index
316 %gep = getelementptr i32, i32* %ptr, i32 4
317 %val = atomicrmw volatile max i32* %gep, i32 %in seq_cst
318 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000319 ret void
320}
321
322; GCN-LABEL: {{^}}atomic_max_i32:
323; GCN: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000324define amdgpu_kernel void @atomic_max_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000325entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000326 %val = atomicrmw volatile max i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000327 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000333define amdgpu_kernel void @atomic_max_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000334entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000335 %val = atomicrmw volatile max i32* %out, i32 %in seq_cst
336 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000337 ret void
338}
339
340; GCN-LABEL: {{^}}atomic_max_i32_addr64:
341; GCN: flat_atomic_smax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000342define amdgpu_kernel void @atomic_max_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000343entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000344 %ptr = getelementptr i32, i32* %out, i64 %index
345 %val = atomicrmw volatile max i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000346 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000352define amdgpu_kernel void @atomic_max_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000353entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000354 %ptr = getelementptr i32, i32* %out, i64 %index
355 %val = atomicrmw volatile max i32* %ptr, i32 %in seq_cst
356 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000357 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000363define amdgpu_kernel void @atomic_umax_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000364entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000365 %gep = getelementptr i32, i32* %out, i32 4
366 %val = atomicrmw volatile umax i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000367 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000374define amdgpu_kernel void @atomic_umax_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000375entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000376 %gep = getelementptr i32, i32* %out, i32 4
377 %val = atomicrmw volatile umax i32* %gep, i32 %in seq_cst
378 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000379 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000385define amdgpu_kernel void @atomic_umax_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000386entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000387 %ptr = getelementptr i32, i32* %out, i64 %index
388 %gep = getelementptr i32, i32* %ptr, i32 4
389 %val = atomicrmw volatile umax i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000390 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000397define amdgpu_kernel void @atomic_umax_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000398entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000399 %ptr = getelementptr i32, i32* %out, i64 %index
400 %gep = getelementptr i32, i32* %ptr, i32 4
401 %val = atomicrmw volatile umax i32* %gep, i32 %in seq_cst
402 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000403 ret void
404}
405
406; GCN-LABEL: {{^}}atomic_umax_i32:
407; GCN: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000408define amdgpu_kernel void @atomic_umax_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000409entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000410 %val = atomicrmw volatile umax i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000411 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000417define amdgpu_kernel void @atomic_umax_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000418entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000419 %val = atomicrmw volatile umax i32* %out, i32 %in seq_cst
420 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000421 ret void
422}
423
424; GCN-LABEL: {{^}}atomic_umax_i32_addr64:
425; GCN: flat_atomic_umax v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000426define amdgpu_kernel void @atomic_umax_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000427entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000428 %ptr = getelementptr i32, i32* %out, i64 %index
429 %val = atomicrmw volatile umax i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000430 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000436define amdgpu_kernel void @atomic_umax_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000437entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000438 %ptr = getelementptr i32, i32* %out, i64 %index
439 %val = atomicrmw volatile umax i32* %ptr, i32 %in seq_cst
440 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000441 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000447define amdgpu_kernel void @atomic_min_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000448entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000449 %gep = getelementptr i32, i32* %out, i32 4
450 %val = atomicrmw volatile min i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000451 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000458define amdgpu_kernel void @atomic_min_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000459entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000460 %gep = getelementptr i32, i32* %out, i32 4
461 %val = atomicrmw volatile min i32* %gep, i32 %in seq_cst
462 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000463 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000469define amdgpu_kernel void @atomic_min_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000470entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000471 %ptr = getelementptr i32, i32* %out, i64 %index
472 %gep = getelementptr i32, i32* %ptr, i32 4
473 %val = atomicrmw volatile min i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000474 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000481define amdgpu_kernel void @atomic_min_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000482entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000483 %ptr = getelementptr i32, i32* %out, i64 %index
484 %gep = getelementptr i32, i32* %ptr, i32 4
485 %val = atomicrmw volatile min i32* %gep, i32 %in seq_cst
486 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000487 ret void
488}
489
490; GCN-LABEL: {{^}}atomic_min_i32:
491; GCN: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000492define amdgpu_kernel void @atomic_min_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000493entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000494 %val = atomicrmw volatile min i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000495 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000501define amdgpu_kernel void @atomic_min_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000502entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000503 %val = atomicrmw volatile min i32* %out, i32 %in seq_cst
504 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000505 ret void
506}
507
508; GCN-LABEL: {{^}}atomic_min_i32_addr64:
509; GCN: flat_atomic_smin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000510define amdgpu_kernel void @atomic_min_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000511entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000512 %ptr = getelementptr i32, i32* %out, i64 %index
513 %val = atomicrmw volatile min i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000514 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000520define amdgpu_kernel void @atomic_min_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000521entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000522 %ptr = getelementptr i32, i32* %out, i64 %index
523 %val = atomicrmw volatile min i32* %ptr, i32 %in seq_cst
524 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000525 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000531define amdgpu_kernel void @atomic_umin_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000532entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000533 %gep = getelementptr i32, i32* %out, i32 4
534 %val = atomicrmw volatile umin i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000535 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000542define amdgpu_kernel void @atomic_umin_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000543entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000544 %gep = getelementptr i32, i32* %out, i32 4
545 %val = atomicrmw volatile umin i32* %gep, i32 %in seq_cst
546 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000547 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000553define amdgpu_kernel void @atomic_umin_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000554entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000555 %ptr = getelementptr i32, i32* %out, i64 %index
556 %gep = getelementptr i32, i32* %ptr, i32 4
557 %val = atomicrmw volatile umin i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000558 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000565define amdgpu_kernel void @atomic_umin_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000566entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000567 %ptr = getelementptr i32, i32* %out, i64 %index
568 %gep = getelementptr i32, i32* %ptr, i32 4
569 %val = atomicrmw volatile umin i32* %gep, i32 %in seq_cst
570 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000571 ret void
572}
573
574; GCN-LABEL: {{^}}atomic_umin_i32:
575; GCN: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000576define amdgpu_kernel void @atomic_umin_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000577entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000578 %val = atomicrmw volatile umin i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000579 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000585define amdgpu_kernel void @atomic_umin_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000586entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000587 %val = atomicrmw volatile umin i32* %out, i32 %in seq_cst
588 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000589 ret void
590}
591
592; GCN-LABEL: {{^}}atomic_umin_i32_addr64:
593; GCN: flat_atomic_umin v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000594define amdgpu_kernel void @atomic_umin_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000595entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000596 %ptr = getelementptr i32, i32* %out, i64 %index
597 %val = atomicrmw volatile umin i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000598 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]]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000604 define amdgpu_kernel void @atomic_umin_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000605entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000606 %ptr = getelementptr i32, i32* %out, i64 %index
607 %val = atomicrmw volatile umin i32* %ptr, i32 %in seq_cst
608 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000609 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000615define amdgpu_kernel void @atomic_or_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000616entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000617 %gep = getelementptr i32, i32* %out, i32 4
618 %val = atomicrmw volatile or i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000619 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000626define amdgpu_kernel void @atomic_or_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000627entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000628 %gep = getelementptr i32, i32* %out, i32 4
629 %val = atomicrmw volatile or i32* %gep, i32 %in seq_cst
630 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000631 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000637define amdgpu_kernel void @atomic_or_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000638entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000639 %ptr = getelementptr i32, i32* %out, i64 %index
640 %gep = getelementptr i32, i32* %ptr, i32 4
641 %val = atomicrmw volatile or i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000642 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000649define amdgpu_kernel void @atomic_or_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000650entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000651 %ptr = getelementptr i32, i32* %out, i64 %index
652 %gep = getelementptr i32, i32* %ptr, i32 4
653 %val = atomicrmw volatile or i32* %gep, i32 %in seq_cst
654 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000655 ret void
656}
657
658; GCN-LABEL: {{^}}atomic_or_i32:
659; GCN: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000660define amdgpu_kernel void @atomic_or_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000661entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000662 %val = atomicrmw volatile or i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000663 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000669define amdgpu_kernel void @atomic_or_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000670entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000671 %val = atomicrmw volatile or i32* %out, i32 %in seq_cst
672 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000673 ret void
674}
675
676; GCN-LABEL: {{^}}atomic_or_i32_addr64:
677; GCN: flat_atomic_or v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000678define amdgpu_kernel void @atomic_or_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000679entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000680 %ptr = getelementptr i32, i32* %out, i64 %index
681 %val = atomicrmw volatile or i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000682 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]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000688define amdgpu_kernel void @atomic_or_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000689entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000690 %ptr = getelementptr i32, i32* %out, i64 %index
691 %val = atomicrmw volatile or i32* %ptr, i32 %in seq_cst
692 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000693 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{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000699define amdgpu_kernel void @atomic_xchg_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000700entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000701 %gep = getelementptr i32, i32* %out, i32 4
702 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000703 ret void
704}
705
Matt Arsenault0cb08e42019-01-17 10:49:01 +0000706; GCN-LABEL: {{^}}atomic_xchg_f32_offset:
707; CIVI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
708; GFX9: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
709define amdgpu_kernel void @atomic_xchg_f32_offset(float* %out, float %in) {
710entry:
711 %gep = getelementptr float, float* %out, i32 4
712 %val = atomicrmw volatile xchg float* %gep, float %in seq_cst
713 ret void
714}
715
Matt Arsenault7757c592016-06-09 23:42:54 +0000716; GCN-LABEL: {{^}}atomic_xchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000717; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
718; 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 +0000719; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000720define amdgpu_kernel void @atomic_xchg_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000721entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000722 %gep = getelementptr i32, i32* %out, i32 4
723 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
724 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000725 ret void
726}
727
728; GCN-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000729; CIVI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
730; GFX9: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000731define amdgpu_kernel void @atomic_xchg_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000732entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000733 %ptr = getelementptr i32, i32* %out, i64 %index
734 %gep = getelementptr i32, i32* %ptr, i32 4
735 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000736 ret void
737}
738
739; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000740; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
741; 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 +0000742; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000743define amdgpu_kernel void @atomic_xchg_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000744entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000745 %ptr = getelementptr i32, i32* %out, i64 %index
746 %gep = getelementptr i32, i32* %ptr, i32 4
747 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
748 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000749 ret void
750}
751
752; GCN-LABEL: {{^}}atomic_xchg_i32:
753; GCN: flat_atomic_swap v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000754define amdgpu_kernel void @atomic_xchg_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000755entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000756 %val = atomicrmw volatile xchg i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000757 ret void
758}
759
760; GCN-LABEL: {{^}}atomic_xchg_i32_ret:
761; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
762; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000763define amdgpu_kernel void @atomic_xchg_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000764entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000765 %val = atomicrmw volatile xchg i32* %out, i32 %in seq_cst
766 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000767 ret void
768}
769
770; GCN-LABEL: {{^}}atomic_xchg_i32_addr64:
771; GCN: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000772define amdgpu_kernel void @atomic_xchg_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000773entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000774 %ptr = getelementptr i32, i32* %out, i64 %index
775 %val = atomicrmw volatile xchg i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000776 ret void
777}
778
779; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
780; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
781; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000782define amdgpu_kernel void @atomic_xchg_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000783entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000784 %ptr = getelementptr i32, i32* %out, i64 %index
785 %val = atomicrmw volatile xchg i32* %ptr, i32 %in seq_cst
786 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000787 ret void
788}
789
790; CMP_SWAP
791
792; GCN-LABEL: {{^}}atomic_cmpxchg_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000793; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
794; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000795define amdgpu_kernel void @atomic_cmpxchg_i32_offset(i32* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000796entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000797 %gep = getelementptr i32, i32* %out, i32 4
798 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000799 ret void
800}
801
802; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000803; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
804; 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 +0000805; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000806define amdgpu_kernel void @atomic_cmpxchg_i32_ret_offset(i32* %out, i32* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000807entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000808 %gep = getelementptr i32, i32* %out, i32 4
809 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000810 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000811 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000812 ret void
813}
814
815; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000816; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
817; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000818define amdgpu_kernel void @atomic_cmpxchg_i32_addr64_offset(i32* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000819entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000820 %ptr = getelementptr i32, i32* %out, i64 %index
821 %gep = getelementptr i32, i32* %ptr, i32 4
822 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000823 ret void
824}
825
826; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000827; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
828; 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 +0000829; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000830define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000831entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000832 %ptr = getelementptr i32, i32* %out, i64 %index
833 %gep = getelementptr i32, i32* %ptr, i32 4
834 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000835 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000836 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000837 ret void
838}
839
840; GCN-LABEL: {{^}}atomic_cmpxchg_i32:
841; GCN: flat_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000842define amdgpu_kernel void @atomic_cmpxchg_i32(i32* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000843entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000844 %val = cmpxchg volatile i32* %out, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000845 ret void
846}
847
848; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret:
849; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc
850; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000851define amdgpu_kernel void @atomic_cmpxchg_i32_ret(i32* %out, i32* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000852entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000853 %val = cmpxchg volatile i32* %out, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000854 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000855 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000856 ret void
857}
858
859; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
860; GCN: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000861define amdgpu_kernel void @atomic_cmpxchg_i32_addr64(i32* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000862entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000863 %ptr = getelementptr i32, i32* %out, i64 %index
864 %val = cmpxchg volatile i32* %ptr, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000865 ret void
866}
867
868; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
869; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
870; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000871define amdgpu_kernel void @atomic_cmpxchg_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000872entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000873 %ptr = getelementptr i32, i32* %out, i64 %index
874 %val = cmpxchg volatile i32* %ptr, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000875 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000876 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000877 ret void
878}
879
880; GCN-LABEL: {{^}}atomic_xor_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000881; CIVI: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
882; GFX9: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000883define amdgpu_kernel void @atomic_xor_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000884entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000885 %gep = getelementptr i32, i32* %out, i32 4
886 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000887 ret void
888}
889
890; GCN-LABEL: {{^}}atomic_xor_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000891; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
892; 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 +0000893; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000894define amdgpu_kernel void @atomic_xor_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000895entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000896 %gep = getelementptr i32, i32* %out, i32 4
897 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
898 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000899 ret void
900}
901
902; GCN-LABEL: {{^}}atomic_xor_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000903; CIVI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
904; GFX9: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000905define amdgpu_kernel void @atomic_xor_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000906entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000907 %ptr = getelementptr i32, i32* %out, i64 %index
908 %gep = getelementptr i32, i32* %ptr, i32 4
909 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000910 ret void
911}
912
913; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000914; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
915; 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 +0000916; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000917define amdgpu_kernel void @atomic_xor_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000918entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000919 %ptr = getelementptr i32, i32* %out, i64 %index
920 %gep = getelementptr i32, i32* %ptr, i32 4
921 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
922 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000923 ret void
924}
925
926; GCN-LABEL: {{^}}atomic_xor_i32:
927; GCN: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000928define amdgpu_kernel void @atomic_xor_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000929entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000930 %val = atomicrmw volatile xor i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000931 ret void
932}
933
934; GCN-LABEL: {{^}}atomic_xor_i32_ret:
935; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
936; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000937define amdgpu_kernel void @atomic_xor_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000938entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000939 %val = atomicrmw volatile xor i32* %out, i32 %in seq_cst
940 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000941 ret void
942}
943
944; GCN-LABEL: {{^}}atomic_xor_i32_addr64:
945; GCN: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000946define amdgpu_kernel void @atomic_xor_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000947entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000948 %ptr = getelementptr i32, i32* %out, i64 %index
949 %val = atomicrmw volatile xor i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000950 ret void
951}
952
953; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64:
954; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
955; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000956define amdgpu_kernel void @atomic_xor_i32_ret_addr64(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000957entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000958 %ptr = getelementptr i32, i32* %out, i64 %index
959 %val = atomicrmw volatile xor i32* %ptr, i32 %in seq_cst
960 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000961 ret void
962}
963
964; GCN-LABEL: {{^}}atomic_load_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000965; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
966; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000967; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000968define amdgpu_kernel void @atomic_load_i32_offset(i32* %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000969entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000970 %gep = getelementptr i32, i32* %in, i32 4
971 %val = load atomic i32, i32* %gep seq_cst, align 4
972 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000973 ret void
974}
975
976; GCN-LABEL: {{^}}atomic_load_i32:
977; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
978; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000979define amdgpu_kernel void @atomic_load_i32(i32* %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000980entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000981 %val = load atomic i32, i32* %in seq_cst, align 4
982 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000983 ret void
984}
985
986; GCN-LABEL: {{^}}atomic_load_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000987; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
988; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000989; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000990define amdgpu_kernel void @atomic_load_i32_addr64_offset(i32* %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000991entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000992 %ptr = getelementptr i32, i32* %in, i64 %index
993 %gep = getelementptr i32, i32* %ptr, i32 4
994 %val = load atomic i32, i32* %gep seq_cst, align 4
995 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000996 ret void
997}
998
999; GCN-LABEL: {{^}}atomic_load_i32_addr64:
1000; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
1001; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001002define amdgpu_kernel void @atomic_load_i32_addr64(i32* %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001003entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001004 %ptr = getelementptr i32, i32* %in, i64 %index
1005 %val = load atomic i32, i32* %ptr seq_cst, align 4
1006 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +00001007 ret void
1008}
1009
1010; GCN-LABEL: {{^}}atomic_store_i32_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001011; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
1012; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001013define amdgpu_kernel void @atomic_store_i32_offset(i32 %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001014entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001015 %gep = getelementptr i32, i32* %out, i32 4
1016 store atomic i32 %in, i32* %gep seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001017 ret void
1018}
1019
1020; GCN-LABEL: {{^}}atomic_store_i32:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001021; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001022define amdgpu_kernel void @atomic_store_i32(i32 %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001023entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001024 store atomic i32 %in, i32* %out seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001025 ret void
1026}
1027
1028; GCN-LABEL: {{^}}atomic_store_i32_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001029; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
1030; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001031define amdgpu_kernel void @atomic_store_i32_addr64_offset(i32 %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001032entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001033 %ptr = getelementptr i32, i32* %out, i64 %index
1034 %gep = getelementptr i32, i32* %ptr, i32 4
1035 store atomic i32 %in, i32* %gep seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001036 ret void
1037}
1038
1039; GCN-LABEL: {{^}}atomic_store_i32_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001040; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001041define amdgpu_kernel void @atomic_store_i32_addr64(i32 %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001042entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001043 %ptr = getelementptr i32, i32* %out, i64 %index
1044 store atomic i32 %in, i32* %ptr seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001045 ret void
1046}