[libclc] libclc: increase fp16 support (PR #98149)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 9 05:33:15 PDT 2024
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff 402eca265f7162e26b8b74d18297fd76c9f100de 4524f49360c28c6c024a9d13664773024ae053ad -- libclc/generic/include/clc/convert.h libclc/generic/include/math/clc_ldexp.h libclc/generic/lib/clcmacro.h libclc/generic/lib/math/clc_sw_binary.inc libclc/generic/lib/math/clc_sw_unary.inc libclc/generic/lib/math/fdim.inc libclc/generic/lib/math/frexp.inc libclc/generic/lib/math/lgamma_r.inc libclc/generic/lib/math/log_base.h libclc/generic/lib/math/pown.inc libclc/generic/lib/math/remquo.inc libclc/generic/lib/math/rootn.inc libclc/generic/lib/math/sincos.inc
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/libclc/generic/include/clc/convert.h b/libclc/generic/include/clc/convert.h
index b587f5f973..db7bb04024 100644
--- a/libclc/generic/include/clc/convert.h
+++ b/libclc/generic/include/clc/convert.h
@@ -21,17 +21,17 @@
_CLC_VECTOR_CONVERT_DECL(FROM_TYPE, float, SUFFIX)
#if defined(cl_khr_fp64) && defined(cl_khr_fp16)
-#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
- _CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \
- _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, double, SUFFIX) \
+#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
+ _CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \
+ _CLC_VECTOR_CONVERT_DECL(FROM_TYPE, double, SUFFIX) \
_CLC_VECTOR_CONVERT_DECL(FROM_TYPE, half, SUFFIX)
#elif defined(cl_khr_fp64)
#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
_CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \
_CLC_VECTOR_CONVERT_DECL(FROM_TYPE, double, SUFFIX)
#elif defined(cl_khr_fp16)
-#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
- _CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \
+#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
+ _CLC_VECTOR_CONVERT_FROM1(FROM_TYPE, SUFFIX) \
_CLC_VECTOR_CONVERT_DECL(FROM_TYPE, half, SUFFIX)
#else
#define _CLC_VECTOR_CONVERT_FROM(FROM_TYPE, SUFFIX) \
@@ -50,17 +50,17 @@
_CLC_VECTOR_CONVERT_FROM(float, SUFFIX)
#if defined(cl_khr_fp64) && defined(cl_khr_fp16)
-#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
- _CLC_VECTOR_CONVERT_TO1(SUFFIX) \
- _CLC_VECTOR_CONVERT_FROM(double, SUFFIX) \
+#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
+ _CLC_VECTOR_CONVERT_TO1(SUFFIX) \
+ _CLC_VECTOR_CONVERT_FROM(double, SUFFIX) \
_CLC_VECTOR_CONVERT_FROM(half, SUFFIX)
#elif defined(cl_khr_fp64)
#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
_CLC_VECTOR_CONVERT_TO1(SUFFIX) \
_CLC_VECTOR_CONVERT_FROM(double, SUFFIX)
#elif defined(cl_khr_fp16)
-#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
- _CLC_VECTOR_CONVERT_TO1(SUFFIX) \
+#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
+ _CLC_VECTOR_CONVERT_TO1(SUFFIX) \
_CLC_VECTOR_CONVERT_FROM(half, SUFFIX)
#define _CLC_VECTOR_CONVERT_TO(SUFFIX) \
_CLC_VECTOR_CONVERT_TO1(SUFFIX)
diff --git a/libclc/generic/lib/clcmacro.h b/libclc/generic/lib/clcmacro.h
index d55e5988eb..9edef7dda9 100644
--- a/libclc/generic/lib/clcmacro.h
+++ b/libclc/generic/lib/clcmacro.h
@@ -108,44 +108,55 @@
\
DECLSPEC RET_TYPE##16 FUNCTION(ARG1_TYPE x, ARG2_TYPE y, ARG3_TYPE##16 z) { \
return (RET_TYPE##16)(FUNCTION(x, y, z.lo), FUNCTION(x, y, z.hi)); \
- } \
-\
+ }
-#define _CLC_V_V_VP_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, ADDR_SPACE, ARG2_TYPE) \
- DECLSPEC __CLC_XCONCAT(RET_TYPE, 2) FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 2) x, ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 2) *y) { \
- return (__CLC_XCONCAT(RET_TYPE, 2))( \
- FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE*)y), \
- FUNCTION(x.y, (ADDR_SPACE ARG2_TYPE*)((ADDR_SPACE ARG2_TYPE*)y+1)) \
- ); \
- } \
-\
- DECLSPEC __CLC_XCONCAT(RET_TYPE, 3) FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 3) x, ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 3) *y) { \
- return (__CLC_XCONCAT(RET_TYPE, 3))( \
- FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE*)y), \
- FUNCTION(x.y, (ADDR_SPACE ARG2_TYPE*)((ADDR_SPACE ARG2_TYPE*)y+1)), \
- FUNCTION(x.z, (ADDR_SPACE ARG2_TYPE*)((ADDR_SPACE ARG2_TYPE*)y+2)) \
- ); \
- } \
-\
- DECLSPEC __CLC_XCONCAT(RET_TYPE, 4) FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 4) x, ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 4) *y) { \
- return (__CLC_XCONCAT(RET_TYPE, 4))( \
- FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 2)*)y), \
- FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 2)*)((ADDR_SPACE ARG2_TYPE*)y+2)) \
- ); \
- } \
-\
- DECLSPEC __CLC_XCONCAT(RET_TYPE, 8) FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 8) x, ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 8) *y) { \
- return (__CLC_XCONCAT(RET_TYPE, 8))( \
- FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 4)*)y), \
- FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 4)*)((ADDR_SPACE ARG2_TYPE*)y+4)) \
- ); \
- } \
-\
- DECLSPEC __CLC_XCONCAT(RET_TYPE, 16) FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 16) x, ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 16) *y) { \
- return (__CLC_XCONCAT(RET_TYPE, 16))( \
- FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 8)*)y), \
- FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 8)*)((ADDR_SPACE ARG2_TYPE*)y+8)) \
- ); \
+#define _CLC_V_V_VP_VECTORIZE(DECLSPEC, RET_TYPE, FUNCTION, ARG1_TYPE, \
+ ADDR_SPACE, ARG2_TYPE) \
+ DECLSPEC __CLC_XCONCAT(RET_TYPE, 2) \
+ FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 2) x, \
+ ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 2) * y) { \
+ return (__CLC_XCONCAT(RET_TYPE, 2))( \
+ FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE *)y), \
+ FUNCTION(x.y, \
+ (ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 1))); \
+ } \
+ \
+ DECLSPEC __CLC_XCONCAT(RET_TYPE, 3) \
+ FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 3) x, \
+ ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 3) * y) { \
+ return (__CLC_XCONCAT(RET_TYPE, 3))( \
+ FUNCTION(x.x, (ADDR_SPACE ARG2_TYPE *)y), \
+ FUNCTION(x.y, \
+ (ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 1)), \
+ FUNCTION(x.z, \
+ (ADDR_SPACE ARG2_TYPE *)((ADDR_SPACE ARG2_TYPE *)y + 2))); \
+ } \
+ \
+ DECLSPEC __CLC_XCONCAT(RET_TYPE, 4) \
+ FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 4) x, \
+ ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 4) * y) { \
+ return (__CLC_XCONCAT(RET_TYPE, 4))( \
+ FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 2) *)y), \
+ FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT( \
+ ARG2_TYPE, 2) *)((ADDR_SPACE ARG2_TYPE *)y + 2))); \
+ } \
+ \
+ DECLSPEC __CLC_XCONCAT(RET_TYPE, 8) \
+ FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 8) x, \
+ ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 8) * y) { \
+ return (__CLC_XCONCAT(RET_TYPE, 8))( \
+ FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 4) *)y), \
+ FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT( \
+ ARG2_TYPE, 4) *)((ADDR_SPACE ARG2_TYPE *)y + 4))); \
+ } \
+ \
+ DECLSPEC __CLC_XCONCAT(RET_TYPE, 16) \
+ FUNCTION(__CLC_XCONCAT(ARG1_TYPE, 16) x, \
+ ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 16) * y) { \
+ return (__CLC_XCONCAT(RET_TYPE, 16))( \
+ FUNCTION(x.lo, (ADDR_SPACE __CLC_XCONCAT(ARG2_TYPE, 8) *)y), \
+ FUNCTION(x.hi, (ADDR_SPACE __CLC_XCONCAT( \
+ ARG2_TYPE, 8) *)((ADDR_SPACE ARG2_TYPE *)y + 8))); \
}
#define _CLC_DEFINE_BINARY_BUILTIN(RET_TYPE, FUNCTION, BUILTIN, ARG1_TYPE, ARG2_TYPE) \
@@ -168,17 +179,17 @@ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, RET_TYPE, FUNCTION, ARG1_TYPE)
#pragma OPENCL EXTENSION cl_khr_fp16 : enable
-#define _CLC_DEFINE_UNARY_BUILTIN_FP16(FUNCTION) \
-_CLC_DEF _CLC_OVERLOAD half FUNCTION(half x) { \
- return (half)FUNCTION((float)x); \
-} \
-_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half)
-
-#define _CLC_DEFINE_BINARY_BUILTIN_FP16(FUNCTION) \
-_CLC_DEF _CLC_OVERLOAD half FUNCTION(half x, half y) { \
- return (half)FUNCTION((float)x, (float)y); \
-} \
-_CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half, half)
+#define _CLC_DEFINE_UNARY_BUILTIN_FP16(FUNCTION) \
+ _CLC_DEF _CLC_OVERLOAD half FUNCTION(half x) { \
+ return (half)FUNCTION((float)x); \
+ } \
+ _CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half)
+
+#define _CLC_DEFINE_BINARY_BUILTIN_FP16(FUNCTION) \
+ _CLC_DEF _CLC_OVERLOAD half FUNCTION(half x, half y) { \
+ return (half)FUNCTION((float)x, (float)y); \
+ } \
+ _CLC_BINARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, half, FUNCTION, half, half)
#else
diff --git a/libclc/generic/lib/math/clc_sw_binary.inc b/libclc/generic/lib/math/clc_sw_binary.inc
index 63fd97729d..5cf15a21f7 100644
--- a/libclc/generic/lib/math/clc_sw_binary.inc
+++ b/libclc/generic/lib/math/clc_sw_binary.inc
@@ -8,12 +8,17 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x, __CLC_GENTYPE y
}
#elif __CLC_FPSIZE == 16
#ifdef __CLC_SCALAR
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x, __CLC_GENTYPE y) {
- return convert_half(__CLC_SW_FUNC(__CLC_FUNC)(convert_float(x), convert_float(y)));
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x,
+ __CLC_GENTYPE y) {
+ return convert_half(
+ __CLC_SW_FUNC(__CLC_FUNC)(convert_float(x), convert_float(y)));
}
#else
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x, __CLC_GENTYPE y) {
- return __CLC_XCONCAT(convert_half, __CLC_VECSIZE)(__CLC_SW_FUNC(__CLC_FUNC)(__CLC_XCONCAT(convert_float, __CLC_VECSIZE)(x), __CLC_XCONCAT(convert_float, __CLC_VECSIZE)(y)));
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x,
+ __CLC_GENTYPE y) {
+ return __CLC_XCONCAT(convert_half, __CLC_VECSIZE)(__CLC_SW_FUNC(__CLC_FUNC)(
+ __CLC_XCONCAT(convert_float, __CLC_VECSIZE)(x),
+ __CLC_XCONCAT(convert_float, __CLC_VECSIZE)(y)));
}
#endif
#endif
diff --git a/libclc/generic/lib/math/clc_sw_unary.inc b/libclc/generic/lib/math/clc_sw_unary.inc
index b5a4c6bd70..9b908aee87 100644
--- a/libclc/generic/lib/math/clc_sw_unary.inc
+++ b/libclc/generic/lib/math/clc_sw_unary.inc
@@ -13,7 +13,8 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x) {
}
#else
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNC(__CLC_GENTYPE x) {
- return __CLC_XCONCAT(convert_half, __CLC_VECSIZE)(__CLC_SW_FUNC(__CLC_FUNC)(__CLC_XCONCAT(convert_float, __CLC_VECSIZE)(x)));
+ return __CLC_XCONCAT(convert_half, __CLC_VECSIZE)(__CLC_SW_FUNC(__CLC_FUNC)(
+ __CLC_XCONCAT(convert_float, __CLC_VECSIZE)(x)));
}
#endif
#endif
diff --git a/libclc/generic/lib/math/fdim.inc b/libclc/generic/lib/math/fdim.inc
index bd9adbd767..98cbef6076 100644
--- a/libclc/generic/lib/math/fdim.inc
+++ b/libclc/generic/lib/math/fdim.inc
@@ -73,18 +73,19 @@ __CLC_FDIM_VEC(16)
#if __CLC_FPSIZE == 16
#ifdef __CLC_SCALAR
#define QNANBITPATT_FP16 ((short)0x7e00)
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fdim(__CLC_GENTYPE x, private __CLC_GENTYPE y) {
- short n = -(isnan(x) | isnan(y)) & QNANBITPATT_FP16;
- short r = -(x > y) & as_short(x - y);
- return as_half((short)(n | r));
-}
-#define __CLC_FDIM_VEC(width) \
-_CLC_OVERLOAD _CLC_DEF half##width fdim(half##width x, half##width y) { \
- /* See comment in float implementation for explanation. */ \
- short##width n = ~((x == x) & (y == y)) & QNANBITPATT_FP16; \
- short##width r = (x > y) & as_short##width(x - y); \
- return as_half##width(n | r); \
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fdim(__CLC_GENTYPE x,
+ private __CLC_GENTYPE y) {
+ short n = -(isnan(x) | isnan(y)) & QNANBITPATT_FP16;
+ short r = -(x > y) & as_short(x - y);
+ return as_half((short)(n | r));
}
+#define __CLC_FDIM_VEC(width) \
+ _CLC_OVERLOAD _CLC_DEF half##width fdim(half##width x, half##width y) { \
+ /* See comment in float implementation for explanation. */ \
+ short##width n = ~((x == x) & (y == y)) & QNANBITPATT_FP16; \
+ short##width r = (x > y) & as_short##width(x - y); \
+ return as_half##width(n | r); \
+ }
__CLC_FDIM_VEC(2)
__CLC_FDIM_VEC(3)
__CLC_FDIM_VEC(4)
diff --git a/libclc/generic/lib/math/frexp.inc b/libclc/generic/lib/math/frexp.inc
index 691abf49f1..e6e2af4923 100644
--- a/libclc/generic/lib/math/frexp.inc
+++ b/libclc/generic/lib/math/frexp.inc
@@ -44,10 +44,12 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, __CLC_ADDRESS_SPACE
#if __CLC_FPSIZE == 16
#ifdef __CLC_SCALAR
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, __CLC_ADDRESS_SPACE __CLC_INTN *ep) {
- return (__CLC_GENTYPE)frexp((float)x, ep);
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x,
+ __CLC_ADDRESS_SPACE __CLC_INTN *ep) {
+ return (__CLC_GENTYPE)frexp((float)x, ep);
}
-_CLC_V_V_VP_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, __CLC_GENTYPE, frexp, __CLC_GENTYPE, __CLC_ADDRESS_SPACE, __CLC_INTN);
+_CLC_V_V_VP_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, __CLC_GENTYPE, frexp,
+ __CLC_GENTYPE, __CLC_ADDRESS_SPACE, __CLC_INTN);
#endif
#endif
diff --git a/libclc/generic/lib/math/log_base.h b/libclc/generic/lib/math/log_base.h
index cf31ea115d..b8110ca177 100644
--- a/libclc/generic/lib/math/log_base.h
+++ b/libclc/generic/lib/math/log_base.h
@@ -301,15 +301,15 @@ log(double x)
_CLC_OVERLOAD _CLC_DEF half
#if defined(COMPILING_LOG2)
log2(half x) {
- return (half)log2((float)x);
+ return (half)log2((float)x);
}
#elif defined(COMPILING_LOG10)
log10(half x) {
- return (half)log10((float)x);
+ return (half)log10((float)x);
}
#else
log(half x) {
- return (half)log((float)x);
+ return (half)log((float)x);
}
#endif
``````````
</details>
https://github.com/llvm/llvm-project/pull/98149
More information about the cfe-commits
mailing list