diff --git a/libclc/amdgcn/lib/SOURCES b/libclc/amdgcn/lib/SOURCES index 24f59495cf94..a1f9483f5be4 100644 --- a/libclc/amdgcn/lib/SOURCES +++ b/libclc/amdgcn/lib/SOURCES @@ -1,7 +1,7 @@ math/ldexp.cl mem_fence/fence.cl mem_fence/waitcnt.ll -synchronization/barrier_impl.ll +synchronization/barrier.cl workitem/get_global_offset.cl workitem/get_group_id.cl workitem/get_global_size.ll diff --git a/libclc/amdgcn/lib/synchronization/barrier.cl b/libclc/amdgcn/lib/synchronization/barrier.cl new file mode 100644 index 000000000000..e2f3c1369bbe --- /dev/null +++ b/libclc/amdgcn/lib/synchronization/barrier.cl @@ -0,0 +1,7 @@ +#include + +_CLC_DEF void barrier(cl_mem_fence_flags flags) +{ + mem_fence(flags); + __builtin_amdgcn_s_barrier(); +} diff --git a/libclc/amdgcn/lib/synchronization/barrier_impl.ll b/libclc/amdgcn/lib/synchronization/barrier_impl.ll deleted file mode 100644 index 1809eddf695b..000000000000 --- a/libclc/amdgcn/lib/synchronization/barrier_impl.ll +++ /dev/null @@ -1,32 +0,0 @@ -declare i32 @__clc_clk_local_mem_fence() #1 -declare i32 @__clc_clk_global_mem_fence() #1 -declare void @llvm.amdgcn.s.barrier() #0 - -define void @barrier(i32 %flags) #2 { -barrier_local_test: - %CLK_LOCAL_MEM_FENCE = call i32 @__clc_clk_local_mem_fence() - %0 = and i32 %flags, %CLK_LOCAL_MEM_FENCE - %1 = icmp ne i32 %0, 0 - br i1 %1, label %barrier_local, label %barrier_global_test - -barrier_local: - call void @llvm.amdgcn.s.barrier() - br label %barrier_global_test - -barrier_global_test: - %CLK_GLOBAL_MEM_FENCE = call i32 @__clc_clk_global_mem_fence() - %2 = and i32 %flags, %CLK_GLOBAL_MEM_FENCE - %3 = icmp ne i32 %2, 0 - br i1 %3, label %barrier_global, label %done - -barrier_global: - call void @llvm.amdgcn.s.barrier() - br label %done - -done: - ret void -} - -attributes #0 = { nounwind convergent } -attributes #1 = { nounwind alwaysinline } -attributes #2 = { nounwind convergent alwaysinline }