[libclc] r326819 - select: Add vector implementation

Jan Vesely via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 6 09:48:43 PST 2018


Author: jvesely
Date: Tue Mar  6 09:48:43 2018
New Revision: 326819

URL: http://llvm.org/viewvc/llvm-project?rev=326819&view=rev
Log:
select: Add vector implementation

Passes CTS on Carrizo

Reviewed-by: Aaron Watry <awatry at gmail.com>
Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>

Added:
    libclc/trunk/generic/include/clc/relational/select.inc
    libclc/trunk/generic/lib/relational/select.cl
    libclc/trunk/generic/lib/relational/select.inc
Modified:
    libclc/trunk/generic/include/clc/relational/select.h
    libclc/trunk/generic/lib/SOURCES

Modified: libclc/trunk/generic/include/clc/relational/select.h
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/relational/select.h?rev=326819&r1=326818&r2=326819&view=diff
==============================================================================
--- libclc/trunk/generic/include/clc/relational/select.h (original)
+++ libclc/trunk/generic/include/clc/relational/select.h Tue Mar  6 09:48:43 2018
@@ -1 +1,11 @@
-#define select(a, b, c) ((c) ? (b) : (a))
+/* Duplciate these so we don't have to distribute utils.h */
+#define __CLC_CONCAT(x, y) x ## y
+#define __CLC_XCONCAT(x, y) __CLC_CONCAT(x, y)
+
+#define __CLC_BODY <clc/relational/select.inc>
+#include <clc/math/gentype.inc>
+#define __CLC_BODY <clc/relational/select.inc>
+#include <clc/integer/gentype.inc>
+
+#undef __CLC_CONCAT
+#undef __CLC_XCONCAT

Added: libclc/trunk/generic/include/clc/relational/select.inc
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/include/clc/relational/select.inc?rev=326819&view=auto
==============================================================================
--- libclc/trunk/generic/include/clc/relational/select.inc (added)
+++ libclc/trunk/generic/include/clc/relational/select.inc Tue Mar  6 09:48:43 2018
@@ -0,0 +1,25 @@
+#ifdef __CLC_SCALAR
+#define __CLC_VECSIZE
+#endif
+
+#if __CLC_FPSIZE == 64
+#define __CLC_S_GENTYPE __CLC_XCONCAT(long, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(ulong, __CLC_VECSIZE)
+#elif __CLC_FPSIZE == 32
+#define __CLC_S_GENTYPE __CLC_XCONCAT(int, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(uint, __CLC_VECSIZE)
+#elif __CLC_FPSIZE == 16
+#define __CLC_S_GENTYPE __CLC_XCONCAT(char, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(uchar, __CLC_VECSIZE)
+#endif
+
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_S_GENTYPE z);
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_U_GENTYPE z);
+
+#ifdef __CLC_FPSIZE
+#undef __CLC_S_GENTYPE
+#undef __CLC_U_GENTYPE
+#endif
+#ifdef __CLC_SCALAR
+#undef __CLC_VECSIZE
+#endif

Modified: libclc/trunk/generic/lib/SOURCES
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/SOURCES?rev=326819&r1=326818&r2=326819&view=diff
==============================================================================
--- libclc/trunk/generic/lib/SOURCES (original)
+++ libclc/trunk/generic/lib/SOURCES Tue Mar  6 09:48:43 2018
@@ -189,6 +189,7 @@ relational/isnormal.cl
 relational/isnotequal.cl
 relational/isordered.cl
 relational/isunordered.cl
+relational/select.cl
 relational/signbit.cl
 shared/clamp.cl
 shared/max.cl

Added: libclc/trunk/generic/lib/relational/select.cl
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/relational/select.cl?rev=326819&view=auto
==============================================================================
--- libclc/trunk/generic/lib/relational/select.cl (added)
+++ libclc/trunk/generic/lib/relational/select.cl Tue Mar  6 09:48:43 2018
@@ -0,0 +1,7 @@
+#include <clc/clc.h>
+#include <utils.h>
+
+#define __CLC_BODY <select.inc>
+#include <clc/math/gentype.inc>
+#define __CLC_BODY <select.inc>
+#include <clc/integer/gentype.inc>

Added: libclc/trunk/generic/lib/relational/select.inc
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/generic/lib/relational/select.inc?rev=326819&view=auto
==============================================================================
--- libclc/trunk/generic/lib/relational/select.inc (added)
+++ libclc/trunk/generic/lib/relational/select.inc Tue Mar  6 09:48:43 2018
@@ -0,0 +1,47 @@
+#ifdef __CLC_SCALAR
+#define __CLC_VECSIZE
+#endif
+
+#if __CLC_FPSIZE == 64
+#define __CLC_S_GENTYPE __CLC_XCONCAT(long, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(ulong, __CLC_VECSIZE)
+#elif __CLC_FPSIZE == 32
+#define __CLC_S_GENTYPE __CLC_XCONCAT(int, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(uint, __CLC_VECSIZE)
+#elif __CLC_FPSIZE == 16
+#define __CLC_S_GENTYPE __CLC_XCONCAT(char, __CLC_VECSIZE)
+#define __CLC_U_GENTYPE __CLC_XCONCAT(uchar, __CLC_VECSIZE)
+#endif
+#ifdef __CLC_FPSIZE
+#define __CLC_GENSIZE   __CLC_FPSIZE
+#endif
+
+#define __CLC_AS_S_GENTYPE __CLC_XCONCAT(as_, __CLC_S_GENTYPE)
+#define __CLC_AS_GENTYPE __CLC_XCONCAT(as_, __CLC_GENTYPE)
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_S_GENTYPE z)
+{
+#ifdef __CLC_SCALAR
+	return z ? y : x;
+#else
+	__CLC_S_GENTYPE bitmask = z >> (__CLC_GENSIZE - 1);
+	return __CLC_AS_GENTYPE(bitselect(__CLC_AS_S_GENTYPE(x), __CLC_AS_S_GENTYPE(y), bitmask));
+#endif
+}
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE select(__CLC_GENTYPE x, __CLC_GENTYPE y, __CLC_U_GENTYPE z)
+{
+	return select(x, y, __CLC_AS_S_GENTYPE(z));
+}
+
+#undef __CLC_AS_S_GENTYPE
+#undef __CLC_AS_GENTYPE
+
+#ifdef __CLC_FPSIZE
+#undef __CLC_S_GENTYPE
+#undef __CLC_U_GENTYPE
+#undef __CLC_GENSIZE
+#endif
+#ifdef __CLC_SCALAR
+#undef __CLC_VECSIZE
+#endif




More information about the cfe-commits mailing list