[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