Implement barrier() builtin

Reviewed and Tested-by: Aaron Watry <awatry@gmail.com>

llvm-svn: 185837
This commit is contained in:
Tom Stellard
2013-07-08 17:26:39 +00:00
parent a4cadba551
commit 3a81b5d083
3 changed files with 29 additions and 0 deletions

View File

@@ -2,3 +2,5 @@ workitem/get_group_id.ll
workitem/get_local_size.ll
workitem/get_local_id.ll
workitem/get_global_size.ll
synchronization/barrier.cl
synchronization/barrier_impl.ll

View File

@@ -0,0 +1,15 @@
#include <clc/clc.h>
void barrier_local(void);
void barrier_global(void);
void barrier(cl_mem_fence_flags flags) {
if (flags & CLK_LOCAL_MEM_FENCE) {
barrier_local();
}
if (flags & CLK_GLOBAL_MEM_FENCE) {
barrier_global();
}
}

View File

@@ -0,0 +1,12 @@
declare void @llvm.AMDGPU.barrier.local() nounwind
declare void @llvm.AMDGPU.barrier.global() nounwind
define void @barrier_local() nounwind alwaysinline {
call void @llvm.AMDGPU.barrier.local()
ret void
}
define void @barrier_global() nounwind alwaysinline {
call void @llvm.AMDGPU.barrier.global()
ret void
}