• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=r600 -mcpu=SI -verify-machineinstrs < %s | FileCheck %s -check-prefix=SI -check-prefix=FUNC
2; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=R600 -check-prefix=FUNC %s
3
4; FUNC-LABEL: @atomic_add_local
5; R600: LDS_ADD *
6; SI: DS_ADD_RTN_U32
7define void @atomic_add_local(i32 addrspace(3)* %local) {
8   %unused = atomicrmw volatile add i32 addrspace(3)* %local, i32 5 seq_cst
9   ret void
10}
11
12; FUNC-LABEL: @atomic_add_local_const_offset
13; R600: LDS_ADD *
14; SI: DS_ADD_RTN_U32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}, 0x10
15define void @atomic_add_local_const_offset(i32 addrspace(3)* %local) {
16  %gep = getelementptr i32 addrspace(3)* %local, i32 4
17  %val = atomicrmw volatile add i32 addrspace(3)* %gep, i32 5 seq_cst
18  ret void
19}
20
21; FUNC-LABEL: @atomic_add_ret_local
22; R600: LDS_ADD_RET *
23; SI: DS_ADD_RTN_U32
24define void @atomic_add_ret_local(i32 addrspace(1)* %out, i32 addrspace(3)* %local) {
25  %val = atomicrmw volatile add i32 addrspace(3)* %local, i32 5 seq_cst
26  store i32 %val, i32 addrspace(1)* %out
27  ret void
28}
29
30; FUNC-LABEL: @atomic_add_ret_local_const_offset
31; R600: LDS_ADD_RET *
32; SI: DS_ADD_RTN_U32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}, 0x14
33define void @atomic_add_ret_local_const_offset(i32 addrspace(1)* %out, i32 addrspace(3)* %local) {
34  %gep = getelementptr i32 addrspace(3)* %local, i32 5
35  %val = atomicrmw volatile add i32 addrspace(3)* %gep, i32 5 seq_cst
36  store i32 %val, i32 addrspace(1)* %out
37  ret void
38}
39