xref: /llvm-project/llvm/test/CodeGen/AMDGPU/s-barrier-lowering.ll (revision 8c752900dda82115ebb8231e6d5ac703e703547e)
1*8c752900SGang Chen; RUN: opt -S -mtriple=amdgcn-- -amdgpu-lower-module-lds < %s 2>&1 | FileCheck %s
2*8c752900SGang Chen
3*8c752900SGang Chen@bar2 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison
4*8c752900SGang Chen@bar3 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison
5*8c752900SGang Chen@bar1 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison
6*8c752900SGang Chen
7*8c752900SGang Chen; CHECK: @bar2 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison, !absolute_symbol !0
8*8c752900SGang Chen; CHECK-NEXT: @bar3 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison, !absolute_symbol !1
9*8c752900SGang Chen; CHECK-NEXT: @bar1 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison, !absolute_symbol !2
10*8c752900SGang Chen; CHECK-NEXT: @bar1.kernel1 = internal addrspace(3) global target("amdgcn.named.barrier", 0) poison, !absolute_symbol !2
11*8c752900SGang Chen
12*8c752900SGang Chendefine void @func1() {
13*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar3, i32 7)
14*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @bar3)
15*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.wait(i16 1)
16*8c752900SGang Chen    ret void
17*8c752900SGang Chen}
18*8c752900SGang Chen
19*8c752900SGang Chendefine void @func2() {
20*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar2, i32 7)
21*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @bar2)
22*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.wait(i16 1)
23*8c752900SGang Chen    ret void
24*8c752900SGang Chen}
25*8c752900SGang Chen
26*8c752900SGang Chendefine amdgpu_kernel void @kernel1() #0 {
27*8c752900SGang Chen; CHECK-DAG: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1.kernel1, i32 11)
28*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1, i32 11)
29*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @bar1)
30*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.wait(i16 1)
31*8c752900SGang Chen    call void @llvm.amdgcn.s.wakeup.barrier(ptr addrspace(3) @bar1)
32*8c752900SGang Chen    %state = call i32 @llvm.amdgcn.s.get.named.barrier.state(ptr addrspace(3) @bar1)
33*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier()
34*8c752900SGang Chen    call void @func1()
35*8c752900SGang Chen    call void @func2()
36*8c752900SGang Chen    ret void
37*8c752900SGang Chen}
38*8c752900SGang Chen
39*8c752900SGang Chendefine amdgpu_kernel void @kernel2() #0 {
40*8c752900SGang Chen; CHECK-DAG: call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1, i32 9)
41*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3) @bar1, i32 9)
42*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.join(ptr addrspace(3) @bar1)
43*8c752900SGang Chen    call void @llvm.amdgcn.s.barrier.wait(i16 1)
44*8c752900SGang Chen
45*8c752900SGang Chen    call void @func2()
46*8c752900SGang Chen    ret void
47*8c752900SGang Chen}
48*8c752900SGang Chen
49*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier() #1
50*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.wait(i16) #1
51*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.signal(i32) #1
52*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.signal.var(ptr addrspace(3), i32) #1
53*8c752900SGang Chendeclare i1 @llvm.amdgcn.s.barrier.signal.isfirst(i32) #1
54*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.init(ptr addrspace(3), i32) #1
55*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.join(ptr addrspace(3)) #1
56*8c752900SGang Chendeclare void @llvm.amdgcn.s.barrier.leave(i16) #1
57*8c752900SGang Chendeclare void @llvm.amdgcn.s.wakeup.barrier(ptr addrspace(3)) #1
58*8c752900SGang Chendeclare i32 @llvm.amdgcn.s.get.named.barrier.state(ptr addrspace(3)) #1
59*8c752900SGang Chen
60*8c752900SGang Chenattributes #0 = { nounwind }
61*8c752900SGang Chenattributes #1 = { convergent nounwind }
62*8c752900SGang Chenattributes #2 = { nounwind readnone }
63*8c752900SGang Chen
64*8c752900SGang Chen; CHECK: !0 = !{i32 8396816, i32 8396817}
65*8c752900SGang Chen; CHECK-NEXT: !1 = !{i32 8396848, i32 8396849}
66*8c752900SGang Chen; CHECK-NEXT: !2 = !{i32 8396832, i32 8396833}
67