blob: b48ed36dfc203dd227b621ff2f713312b862cdee [file] [log] [blame]
Neil Henning66416572018-10-08 15:49:19 +00001; RUN: llc -march=amdgcn -amdgpu-atomic-optimizations=false -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,SICIVI,FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -amdgpu-atomic-optimizations=false -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,SICIVI,FUNC %s
3; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-flat-for-global -amdgpu-atomic-optimizations=false -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX9,FUNC %s
4; RUN: llc -march=r600 -mcpu=redwood -amdgpu-atomic-optimizations=false < %s | FileCheck -enable-var-scope -check-prefixes=R600,FUNC %s
Aaron Watry372cecf2013-09-06 20:17:42 +00005
Tom Stellard79243d92014-10-01 17:15:17 +00006; FUNC-LABEL: {{^}}atomic_sub_local:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +00007; SICIVI: s_mov_b32 m0
8; GFX9-NOT: m0
9
Matt Arsenault72574102014-06-11 18:08:34 +000010; R600: LDS_SUB *
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000011; GCN: ds_sub_u32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000012define amdgpu_kernel void @atomic_sub_local(i32 addrspace(3)* %local) {
Matt Arsenault72574102014-06-11 18:08:34 +000013 %unused = atomicrmw volatile sub i32 addrspace(3)* %local, i32 5 seq_cst
Aaron Watry372cecf2013-09-06 20:17:42 +000014 ret void
15}
16
Tom Stellard79243d92014-10-01 17:15:17 +000017; FUNC-LABEL: {{^}}atomic_sub_local_const_offset:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000018; SICIVI: s_mov_b32 m0
19; GFX9-NOT: m0
20
Matt Arsenault72574102014-06-11 18:08:34 +000021; R600: LDS_SUB *
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000022; GCN: ds_sub_u32 v{{[0-9]+}}, v{{[0-9]+}} offset:16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000023define amdgpu_kernel void @atomic_sub_local_const_offset(i32 addrspace(3)* %local) {
David Blaikie79e6c742015-02-27 19:29:02 +000024 %gep = getelementptr i32, i32 addrspace(3)* %local, i32 4
Matt Arsenault72574102014-06-11 18:08:34 +000025 %val = atomicrmw volatile sub i32 addrspace(3)* %gep, i32 5 seq_cst
26 ret void
27}
28
Tom Stellard79243d92014-10-01 17:15:17 +000029; FUNC-LABEL: {{^}}atomic_sub_ret_local:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000030; SICIVI: s_mov_b32 m0
31; GFX9-NOT: m0
32
Matt Arsenault72574102014-06-11 18:08:34 +000033; R600: LDS_SUB_RET *
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000034; GCN: ds_sub_rtn_u32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000035define amdgpu_kernel void @atomic_sub_ret_local(i32 addrspace(1)* %out, i32 addrspace(3)* %local) {
Matt Arsenault72574102014-06-11 18:08:34 +000036 %val = atomicrmw volatile sub i32 addrspace(3)* %local, i32 5 seq_cst
37 store i32 %val, i32 addrspace(1)* %out
38 ret void
39}
40
Tom Stellard79243d92014-10-01 17:15:17 +000041; FUNC-LABEL: {{^}}atomic_sub_ret_local_const_offset:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000042; SICIVI: s_mov_b32 m0
43; GFX9-NOT: m0
44
Matt Arsenault72574102014-06-11 18:08:34 +000045; R600: LDS_SUB_RET *
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000046; GCN: ds_sub_rtn_u32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} offset:20
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000047define amdgpu_kernel void @atomic_sub_ret_local_const_offset(i32 addrspace(1)* %out, i32 addrspace(3)* %local) {
David Blaikie79e6c742015-02-27 19:29:02 +000048 %gep = getelementptr i32, i32 addrspace(3)* %local, i32 5
Matt Arsenault72574102014-06-11 18:08:34 +000049 %val = atomicrmw volatile sub i32 addrspace(3)* %gep, i32 5 seq_cst
50 store i32 %val, i32 addrspace(1)* %out
Aaron Watry372cecf2013-09-06 20:17:42 +000051 ret void
52}