[libclc] r190058 - Add atomic_inc and atomic_add builtins
Aaron Watry
awatry at gmail.com
Thu Sep 5 09:04:02 PDT 2013
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 <awatry at gmail.com>
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)
More information about the cfe-commits
mailing list