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

Reply via email to