blob: 1edb48600f7fc4947f2eed8dbea68dfdd48334a8 [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
706; GCN-LABEL: {{^}}atomic_xchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000707; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
708; GFX9: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000709; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000710define amdgpu_kernel void @atomic_xchg_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000711entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000712 %gep = getelementptr i32, i32* %out, i32 4
713 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
714 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000715 ret void
716}
717
718; GCN-LABEL: {{^}}atomic_xchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000719; CIVI: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
720; GFX9: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000721define amdgpu_kernel void @atomic_xchg_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000722entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000723 %ptr = getelementptr i32, i32* %out, i64 %index
724 %gep = getelementptr i32, i32* %ptr, i32 4
725 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000726 ret void
727}
728
729; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000730; CIVI: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
731; GFX9: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000732; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000733define amdgpu_kernel void @atomic_xchg_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000734entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000735 %ptr = getelementptr i32, i32* %out, i64 %index
736 %gep = getelementptr i32, i32* %ptr, i32 4
737 %val = atomicrmw volatile xchg i32* %gep, i32 %in seq_cst
738 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000739 ret void
740}
741
742; GCN-LABEL: {{^}}atomic_xchg_i32:
743; GCN: flat_atomic_swap v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000744define amdgpu_kernel void @atomic_xchg_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000745entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000746 %val = atomicrmw volatile xchg i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000747 ret void
748}
749
750; GCN-LABEL: {{^}}atomic_xchg_i32_ret:
751; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
752; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000753define amdgpu_kernel void @atomic_xchg_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000754entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000755 %val = atomicrmw volatile xchg i32* %out, i32 %in seq_cst
756 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000757 ret void
758}
759
760; GCN-LABEL: {{^}}atomic_xchg_i32_addr64:
761; GCN: flat_atomic_swap v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000762define amdgpu_kernel void @atomic_xchg_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000763entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000764 %ptr = getelementptr i32, i32* %out, i64 %index
765 %val = atomicrmw volatile xchg i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000766 ret void
767}
768
769; GCN-LABEL: {{^}}atomic_xchg_i32_ret_addr64:
770; GCN: flat_atomic_swap [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
771; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000772define amdgpu_kernel void @atomic_xchg_i32_ret_addr64(i32* %out, i32* %out2, 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
776 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000777 ret void
778}
779
780; CMP_SWAP
781
782; GCN-LABEL: {{^}}atomic_cmpxchg_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000783; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
784; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000785define amdgpu_kernel void @atomic_cmpxchg_i32_offset(i32* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000786entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000787 %gep = getelementptr i32, i32* %out, i32 4
788 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000789 ret void
790}
791
792; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000793; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
794; GFX9: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000795; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000796define amdgpu_kernel void @atomic_cmpxchg_i32_ret_offset(i32* %out, i32* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000797entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000798 %gep = getelementptr i32, i32* %out, i32 4
799 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000800 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000801 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000802 ret void
803}
804
805; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000806; CIVI: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
807; GFX9: flat_atomic_cmpswap v[{{[0-9]+\:[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000808define amdgpu_kernel void @atomic_cmpxchg_i32_addr64_offset(i32* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000809entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000810 %ptr = getelementptr i32, i32* %out, i64 %index
811 %gep = getelementptr i32, i32* %ptr, i32 4
812 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000813 ret void
814}
815
816; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000817; CIVI: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
818; GFX9: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000819; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000820define 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 +0000821entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000822 %ptr = getelementptr i32, i32* %out, i64 %index
823 %gep = getelementptr i32, i32* %ptr, i32 4
824 %val = cmpxchg volatile i32* %gep, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000825 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000826 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000827 ret void
828}
829
830; GCN-LABEL: {{^}}atomic_cmpxchg_i32:
831; GCN: flat_atomic_cmpswap v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000832define amdgpu_kernel void @atomic_cmpxchg_i32(i32* %out, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000833entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000834 %val = cmpxchg volatile i32* %out, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000835 ret void
836}
837
838; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret:
839; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v[{{[0-9]+}}:{{[0-9]+}}] glc
840; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000841define amdgpu_kernel void @atomic_cmpxchg_i32_ret(i32* %out, i32* %out2, i32 %in, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000842entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000843 %val = cmpxchg volatile i32* %out, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000844 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000845 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000846 ret void
847}
848
849; GCN-LABEL: {{^}}atomic_cmpxchg_i32_addr64:
850; GCN: flat_atomic_cmpswap v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}]{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000851define amdgpu_kernel void @atomic_cmpxchg_i32_addr64(i32* %out, i32 %in, i64 %index, i32 %old) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000852entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000853 %ptr = getelementptr i32, i32* %out, i64 %index
854 %val = cmpxchg volatile i32* %ptr, i32 %old, i32 %in seq_cst seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000855 ret void
856}
857
858; GCN-LABEL: {{^}}atomic_cmpxchg_i32_ret_addr64:
859; GCN: flat_atomic_cmpswap v[[RET:[0-9]+]], v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] glc{{$}}
860; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, v[[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000861define 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 +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 %flag = extractvalue { i32, i1 } %val, 0
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000866 store i32 %flag, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000867 ret void
868}
869
870; GCN-LABEL: {{^}}atomic_xor_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000871; CIVI: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
872; GFX9: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000873define amdgpu_kernel void @atomic_xor_i32_offset(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000874entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000875 %gep = getelementptr i32, i32* %out, i32 4
876 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000877 ret void
878}
879
880; GCN-LABEL: {{^}}atomic_xor_i32_ret_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000881; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
882; GFX9: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000883; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000884define amdgpu_kernel void @atomic_xor_i32_ret_offset(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000885entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000886 %gep = getelementptr i32, i32* %out, i32 4
887 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
888 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000889 ret void
890}
891
892; GCN-LABEL: {{^}}atomic_xor_i32_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000893; CIVI: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
894; GFX9: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000895define amdgpu_kernel void @atomic_xor_i32_addr64_offset(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000896entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000897 %ptr = getelementptr i32, i32* %out, i64 %index
898 %gep = getelementptr i32, i32* %ptr, i32 4
899 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000900 ret void
901}
902
903; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000904; CIVI: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
905; GFX9: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000906; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000907define amdgpu_kernel void @atomic_xor_i32_ret_addr64_offset(i32* %out, i32* %out2, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000908entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000909 %ptr = getelementptr i32, i32* %out, i64 %index
910 %gep = getelementptr i32, i32* %ptr, i32 4
911 %val = atomicrmw volatile xor i32* %gep, i32 %in seq_cst
912 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000913 ret void
914}
915
916; GCN-LABEL: {{^}}atomic_xor_i32:
917; GCN: flat_atomic_xor v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000918define amdgpu_kernel void @atomic_xor_i32(i32* %out, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000919entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000920 %val = atomicrmw volatile xor i32* %out, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000921 ret void
922}
923
924; GCN-LABEL: {{^}}atomic_xor_i32_ret:
925; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}], v{{[0-9]+}} glc{{$}}
926; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000927define amdgpu_kernel void @atomic_xor_i32_ret(i32* %out, i32* %out2, i32 %in) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000928entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000929 %val = atomicrmw volatile xor i32* %out, i32 %in seq_cst
930 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000931 ret void
932}
933
934; GCN-LABEL: {{^}}atomic_xor_i32_addr64:
935; GCN: flat_atomic_xor v[{{[0-9]+:[0-9]+}}], v{{[0-9]+$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000936define amdgpu_kernel void @atomic_xor_i32_addr64(i32* %out, i32 %in, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000937entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000938 %ptr = getelementptr i32, i32* %out, i64 %index
939 %val = atomicrmw volatile xor i32* %ptr, i32 %in seq_cst
Matt Arsenault7757c592016-06-09 23:42:54 +0000940 ret void
941}
942
943; GCN-LABEL: {{^}}atomic_xor_i32_ret_addr64:
944; GCN: flat_atomic_xor [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} glc{{$}}
945; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000946define amdgpu_kernel void @atomic_xor_i32_ret_addr64(i32* %out, i32* %out2, 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
950 store i32 %val, i32* %out2
Matt Arsenault7757c592016-06-09 23:42:54 +0000951 ret void
952}
953
954; GCN-LABEL: {{^}}atomic_load_i32_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000955; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc{{$}}
956; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000957; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000958define amdgpu_kernel void @atomic_load_i32_offset(i32* %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000959entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000960 %gep = getelementptr i32, i32* %in, i32 4
961 %val = load atomic i32, i32* %gep seq_cst, align 4
962 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000963 ret void
964}
965
966; GCN-LABEL: {{^}}atomic_load_i32:
967; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+}}:{{[0-9]+}}] glc
968; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000969define amdgpu_kernel void @atomic_load_i32(i32* %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000970entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000971 %val = load atomic i32, i32* %in 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_addr64_offset:
Matt Arsenaultdb7c6a82017-06-12 16:53:51 +0000977; CIVI: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
978; GFX9: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] offset:16 glc{{$}}
Matt Arsenault7757c592016-06-09 23:42:54 +0000979; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000980define amdgpu_kernel void @atomic_load_i32_addr64_offset(i32* %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000981entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000982 %ptr = getelementptr i32, i32* %in, i64 %index
983 %gep = getelementptr i32, i32* %ptr, i32 4
984 %val = load atomic i32, i32* %gep seq_cst, align 4
985 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000986 ret void
987}
988
989; GCN-LABEL: {{^}}atomic_load_i32_addr64:
990; GCN: flat_load_dword [[RET:v[0-9]+]], v[{{[0-9]+:[0-9]+}}] glc{{$}}
991; GCN: flat_store_dword v{{\[[0-9]+:[0-9]+\]}}, [[RET]]
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000992define amdgpu_kernel void @atomic_load_i32_addr64(i32* %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +0000993entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +0000994 %ptr = getelementptr i32, i32* %in, i64 %index
995 %val = load atomic i32, i32* %ptr seq_cst, align 4
996 store i32 %val, i32* %out
Matt Arsenault7757c592016-06-09 23:42:54 +0000997 ret void
998}
999
1000; GCN-LABEL: {{^}}atomic_store_i32_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001001; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
1002; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001003define amdgpu_kernel void @atomic_store_i32_offset(i32 %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001004entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001005 %gep = getelementptr i32, i32* %out, i32 4
1006 store atomic i32 %in, i32* %gep seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001007 ret void
1008}
1009
1010; GCN-LABEL: {{^}}atomic_store_i32:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001011; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001012define amdgpu_kernel void @atomic_store_i32(i32 %in, i32* %out) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001013entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001014 store atomic i32 %in, i32* %out seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001015 ret void
1016}
1017
1018; GCN-LABEL: {{^}}atomic_store_i32_addr64_offset:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001019; CIVI: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
1020; GFX9: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}} offset:16{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001021define amdgpu_kernel void @atomic_store_i32_addr64_offset(i32 %in, i32* %out, i64 %index) {
Matt Arsenault7757c592016-06-09 23:42:54 +00001022entry:
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001023 %ptr = getelementptr i32, i32* %out, i64 %index
1024 %gep = getelementptr i32, i32* %ptr, i32 4
1025 store atomic i32 %in, i32* %gep seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001026 ret void
1027}
1028
1029; GCN-LABEL: {{^}}atomic_store_i32_addr64:
Konstantin Zhuravlyove9a5a772017-07-21 21:19:23 +00001030; GCN: flat_store_dword v[{{[0-9]+}}:{{[0-9]+}}], {{v[0-9]+}}{{$}}
Yaxun Liu2a22c5d2018-02-02 16:07:16 +00001031define amdgpu_kernel void @atomic_store_i32_addr64(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 store atomic i32 %in, i32* %ptr seq_cst, align 4
Matt Arsenault7757c592016-06-09 23:42:54 +00001035 ret void
1036}