From e337b30c7d46d66ce80a35af066f0c02cd5a123b Mon Sep 17 00:00:00 2001 From: Jan Vesely Date: Mon, 4 Sep 2017 15:52:05 +0000 Subject: [PATCH] r600: Cleanup barrier implementation. We don't have memory fences for r600 so just call group barrier directly Make sure that barrier is called even with 0 flags Signed-off-by: Jan Vesely Reviewed-by: Aaron Watry llvm-svn: 312492 --- libclc/amdgpu/lib/SOURCES | 1 - libclc/amdgpu/lib/synchronization/barrier.cl | 10 -------- libclc/r600/lib/synchronization/barrier_impl.ll | 31 ++++--------------------- 3 files changed, 5 insertions(+), 37 deletions(-) delete mode 100644 libclc/amdgpu/lib/synchronization/barrier.cl diff --git a/libclc/amdgpu/lib/SOURCES b/libclc/amdgpu/lib/SOURCES index 9379ad7..f817538 100644 --- a/libclc/amdgpu/lib/SOURCES +++ b/libclc/amdgpu/lib/SOURCES @@ -1,7 +1,6 @@ atomic/atomic.cl math/nextafter.cl math/sqrt.cl -synchronization/barrier.cl image/get_image_width.cl image/get_image_height.cl image/get_image_depth.cl diff --git a/libclc/amdgpu/lib/synchronization/barrier.cl b/libclc/amdgpu/lib/synchronization/barrier.cl deleted file mode 100644 index 6f2900b..0000000 --- a/libclc/amdgpu/lib/synchronization/barrier.cl +++ /dev/null @@ -1,10 +0,0 @@ - -#include - -_CLC_DEF int __clc_clk_local_mem_fence() { - return CLK_LOCAL_MEM_FENCE; -} - -_CLC_DEF int __clc_clk_global_mem_fence() { - return CLK_GLOBAL_MEM_FENCE; -} diff --git a/libclc/r600/lib/synchronization/barrier_impl.ll b/libclc/r600/lib/synchronization/barrier_impl.ll index 9b8fefb..777001a 100644 --- a/libclc/r600/lib/synchronization/barrier_impl.ll +++ b/libclc/r600/lib/synchronization/barrier_impl.ll @@ -1,32 +1,11 @@ -declare i32 @__clc_clk_local_mem_fence() #1 -declare i32 @__clc_clk_global_mem_fence() #1 declare void @llvm.r600.group.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.r600.group.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.r600.group.barrier() - br label %done - -done: +define void @barrier(i32 %flags) #1 { +entry: + ; We should call mem_fence here, but that is not implemented for r600 yet + tail call void @llvm.r600.group.barrier() ret void } attributes #0 = { nounwind convergent } -attributes #1 = { nounwind alwaysinline } -attributes #2 = { nounwind convergent alwaysinline } +attributes #1 = { nounwind convergent alwaysinline } -- 2.7.4