Author: awatry Date: Thu Sep 5 11:04:01 2013 New Revision: 190058 URL: http://llvm.org/viewvc/llvm-project?rev=190058&view=rev Log: Add atomic_inc and atomic_add builtins
Reviewed-by: Aaron Watry <[email protected]> Added: libclc/trunk/generic/include/clc/atomic/ libclc/trunk/generic/include/clc/atomic/atomic_add.h libclc/trunk/generic/include/clc/atomic/atomic_decl.inc libclc/trunk/generic/include/clc/atomic/atomic_inc.h libclc/trunk/generic/lib/atomic/ libclc/trunk/generic/lib/atomic/atomic_impl.ll libclc/trunk/r600/lib/atomic/ libclc/trunk/r600/lib/atomic/atomic.cl Modified: libclc/trunk/generic/include/clc/clc.h libclc/trunk/generic/lib/SOURCES libclc/trunk/r600/lib/SOURCES Added: libclc/trunk/generic/include/clc/atomic/atomic_add.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/atomic/atomic_add.h?rev=190058&view=auto ============================================================================== --- libclc/trunk/generic/include/clc/atomic/atomic_add.h (added) +++ libclc/trunk/generic/include/clc/atomic/atomic_add.h Thu Sep 5 11:04:01 2013 @@ -0,0 +1,3 @@ +#define __CLC_FUNCTION atomic_add +#include <clc/atomic/atomic_decl.inc> +#undef __CLC_FUNCTION Added: libclc/trunk/generic/include/clc/atomic/atomic_decl.inc URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/atomic/atomic_decl.inc?rev=190058&view=auto ============================================================================== --- libclc/trunk/generic/include/clc/atomic/atomic_decl.inc (added) +++ libclc/trunk/generic/include/clc/atomic/atomic_decl.inc Thu Sep 5 11:04:01 2013 @@ -0,0 +1,10 @@ + +#define __CLC_DECLARE_ATOMIC(ADDRSPACE, TYPE) \ + _CLC_OVERLOAD _CLC_DECL TYPE __CLC_FUNCTION (volatile ADDRSPACE TYPE *, TYPE); + +#define __CLC_DECLARE_ATOMIC_ADDRSPACE(TYPE) \ + __CLC_DECLARE_ATOMIC(global, TYPE); \ + __CLC_DECLARE_ATOMIC(local, TYPE); + +__CLC_DECLARE_ATOMIC_ADDRSPACE(int); +__CLC_DECLARE_ATOMIC_ADDRSPACE(uint); Added: libclc/trunk/generic/include/clc/atomic/atomic_inc.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/atomic/atomic_inc.h?rev=190058&view=auto ============================================================================== --- libclc/trunk/generic/include/clc/atomic/atomic_inc.h (added) +++ libclc/trunk/generic/include/clc/atomic/atomic_inc.h Thu Sep 5 11:04:01 2013 @@ -0,0 +1 @@ +#define atomic_inc(p) atomic_add(p, 1); Modified: libclc/trunk/generic/include/clc/clc.h URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/clc.h?rev=190058&r1=190057&r2=190058&view=diff ============================================================================== --- libclc/trunk/generic/include/clc/clc.h (original) +++ libclc/trunk/generic/include/clc/clc.h Thu Sep 5 11:04:01 2013 @@ -99,4 +99,8 @@ #include <clc/synchronization/cl_mem_fence_flags.h> #include <clc/synchronization/barrier.h> +/* 6.11.11 Atomic Functins */ +#include <clc/atomic/atomic_add.h> +#include <clc/atomic/atomic_inc.h> + #pragma OPENCL EXTENSION all : disable Modified: libclc/trunk/generic/lib/SOURCES URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/SOURCES?rev=190058&r1=190057&r2=190058&view=diff ============================================================================== --- libclc/trunk/generic/lib/SOURCES (original) +++ libclc/trunk/generic/lib/SOURCES Thu Sep 5 11:04:01 2013 @@ -1,3 +1,4 @@ +atomic/atomic_impl.ll convert.cl geometric/cross.cl geometric/dot.cl Added: libclc/trunk/generic/lib/atomic/atomic_impl.ll URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/atomic/atomic_impl.ll?rev=190058&view=auto ============================================================================== --- libclc/trunk/generic/lib/atomic/atomic_impl.ll (added) +++ libclc/trunk/generic/lib/atomic/atomic_impl.ll Thu Sep 5 11:04:01 2013 @@ -0,0 +1,11 @@ +define i32 @__clc_atomic_add_addr1(i32 addrspace(1)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + %0 = atomicrmw volatile add i32 addrspace(1)* %ptr, i32 %value seq_cst + ret i32 %0 +} + +define i32 @__clc_atomic_add_addr3(i32 addrspace(3)* nocapture %ptr, i32 %value) nounwind alwaysinline { +entry: + %0 = atomicrmw volatile add i32 addrspace(3)* %ptr, i32 %value seq_cst + ret i32 %0 +} Modified: libclc/trunk/r600/lib/SOURCES URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/SOURCES?rev=190058&r1=190057&r2=190058&view=diff ============================================================================== --- libclc/trunk/r600/lib/SOURCES (original) +++ libclc/trunk/r600/lib/SOURCES Thu Sep 5 11:04:01 2013 @@ -1,3 +1,4 @@ +atomic/atomic.cl workitem/get_num_groups.ll workitem/get_group_id.ll workitem/get_local_size.ll Added: libclc/trunk/r600/lib/atomic/atomic.cl URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/r600/lib/atomic/atomic.cl?rev=190058&view=auto ============================================================================== --- libclc/trunk/r600/lib/atomic/atomic.cl (added) +++ libclc/trunk/r600/lib/atomic/atomic.cl Thu Sep 5 11:04:01 2013 @@ -0,0 +1,20 @@ +#include <clc/clc.h> + +#define ATOMIC_FUNC_TYPE(SIGN, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ +_CLC_OVERLOAD _CLC_DEF SIGN TYPE FUNCTION (volatile CL_ADDRSPACE SIGN TYPE *p, SIGN TYPE val) { \ + return (SIGN TYPE)__clc_##FUNCTION##_addr##LLVM_ADDRSPACE((volatile CL_ADDRSPACE signed TYPE*)p, (signed TYPE)val); \ +} + +#define ATOMIC_FUNC_SIGN(TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ + _CLC_DECL signed TYPE __clc_##FUNCTION##_addr##LLVM_ADDRSPACE(volatile CL_ADDRSPACE signed TYPE*, signed TYPE); \ + ATOMIC_FUNC_TYPE(signed, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ + ATOMIC_FUNC_TYPE(unsigned, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) + +#define ATOMIC_FUNC_ADDRSPACE(TYPE, FUNCTION) \ + ATOMIC_FUNC_SIGN(TYPE, FUNCTION, global, 1) \ + ATOMIC_FUNC_SIGN(TYPE, FUNCTION, local, 3) + +#define ATOMIC_FUNC(FUNCTION) \ + ATOMIC_FUNC_ADDRSPACE(int, FUNCTION) + +ATOMIC_FUNC(atomic_add) _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
