libclc: Implement the min(vec, scalar) version of the min builtin.

Checks if the current GENTYPE is scalar, and if not, then defines a separate
implementation of the function which casts the second arg to vector before
proceeding.

Patch by: Aaron Watry

llvm-svn: 185002
This commit is contained in:
Tom Stellard 2013-06-26 18:21:44 +00:00
parent 0be3acfc70
commit 075b31a2fa
4 changed files with 41 additions and 0 deletions

View File

@ -1,4 +1,8 @@
//These 2 defines only change when switching between data sizes or base types to
//keep this file manageable.
#define GENSIZE 8
#define SCALAR_GENTYPE char
#define GENTYPE char
#define UGENTYPE uchar
#define SGENTYPE char
@ -49,6 +53,9 @@
#undef UGENTYPE
#undef SGENTYPE
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE uchar
#define GENTYPE uchar
#define UGENTYPE uchar
#define SGENTYPE char
@ -101,6 +108,8 @@
#undef GENSIZE
#define GENSIZE 16
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE short
#define GENTYPE short
#define UGENTYPE ushort
@ -152,6 +161,9 @@
#undef UGENTYPE
#undef SGENTYPE
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE ushort
#define GENTYPE ushort
#define UGENTYPE ushort
#define SGENTYPE short
@ -204,6 +216,8 @@
#undef GENSIZE
#define GENSIZE 32
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE int
#define GENTYPE int
#define UGENTYPE uint
@ -255,6 +269,9 @@
#undef UGENTYPE
#undef SGENTYPE
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE uint
#define GENTYPE uint
#define UGENTYPE uint
#define SGENTYPE int
@ -307,6 +324,8 @@
#undef GENSIZE
#define GENSIZE 64
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE long
#define GENTYPE long
#define UGENTYPE ulong
@ -358,6 +377,9 @@
#undef UGENTYPE
#undef SGENTYPE
#undef SCALAR_GENTYPE
#define SCALAR_GENTYPE ulong
#define GENTYPE ulong
#define UGENTYPE ulong
#define SGENTYPE long
@ -409,4 +431,5 @@
#undef SGENTYPE
#undef GENSIZE
#undef SCALAR_GENTYPE
#undef BODY

View File

@ -1,3 +1,5 @@
#define SCALAR_GENTYPE float
#define GENTYPE float
#define SCALAR
#include BODY
@ -24,7 +26,11 @@
#include BODY
#undef GENTYPE
#undef SCALAR_GENTYPE
#ifdef cl_khr_fp64
#define SCALAR_GENTYPE double
#define SCALAR
#define GENTYPE double
#include BODY
@ -50,6 +56,8 @@
#define GENTYPE double16
#include BODY
#undef GENTYPE
#undef SCALAR_GENTYPE
#endif
#undef BODY

View File

@ -1 +1,5 @@
_CLC_OVERLOAD _CLC_DECL GENTYPE min(GENTYPE a, GENTYPE b);
#ifndef SCALAR
_CLC_OVERLOAD _CLC_DECL GENTYPE min(GENTYPE a, SCALAR_GENTYPE b);
#endif

View File

@ -1,3 +1,9 @@
_CLC_OVERLOAD _CLC_DEF GENTYPE min(GENTYPE a, GENTYPE b) {
return (a < b ? a : b);
}
#ifndef SCALAR
_CLC_OVERLOAD _CLC_DEF GENTYPE min(GENTYPE a, SCALAR_GENTYPE b) {
return (a < (GENTYPE)b ? a : (GENTYPE)b);
}
#endif