blob: 9b8fefb917d6e470a211cbccd71f487ac691164a [file] [log] [blame]
Matt Arsenaulta48e15c2016-02-13 01:01:59 +00001declare i32 @__clc_clk_local_mem_fence() #1
2declare i32 @__clc_clk_global_mem_fence() #1
Matt Arsenault1ab0d9c2016-07-18 18:42:17 +00003declare void @llvm.r600.group.barrier() #0
Tom Stellard3a81b5d2013-07-08 17:26:39 +00004
Matt Arsenaulta48e15c2016-02-13 01:01:59 +00005define void @barrier(i32 %flags) #2 {
Tom Stellardd2e83922013-10-31 15:50:48 +00006barrier_local_test:
7 %CLK_LOCAL_MEM_FENCE = call i32 @__clc_clk_local_mem_fence()
8 %0 = and i32 %flags, %CLK_LOCAL_MEM_FENCE
9 %1 = icmp ne i32 %0, 0
10 br i1 %1, label %barrier_local, label %barrier_global_test
Tom Stellard3a81b5d2013-07-08 17:26:39 +000011
Tom Stellardd2e83922013-10-31 15:50:48 +000012barrier_local:
Matt Arsenault1ab0d9c2016-07-18 18:42:17 +000013 call void @llvm.r600.group.barrier()
Tom Stellardd2e83922013-10-31 15:50:48 +000014 br label %barrier_global_test
15
16barrier_global_test:
17 %CLK_GLOBAL_MEM_FENCE = call i32 @__clc_clk_global_mem_fence()
18 %2 = and i32 %flags, %CLK_GLOBAL_MEM_FENCE
19 %3 = icmp ne i32 %2, 0
20 br i1 %3, label %barrier_global, label %done
21
22barrier_global:
Matt Arsenault1ab0d9c2016-07-18 18:42:17 +000023 call void @llvm.r600.group.barrier()
Tom Stellardd2e83922013-10-31 15:50:48 +000024 br label %done
25
26done:
Tom Stellard3a81b5d2013-07-08 17:26:39 +000027 ret void
28}
Matt Arsenaulta48e15c2016-02-13 01:01:59 +000029
30attributes #0 = { nounwind convergent }
31attributes #1 = { nounwind alwaysinline }
32attributes #2 = { nounwind convergent alwaysinline }