[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