[libclc] 079115e - [libclc] Move modf to the CLC library (#127828)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 20 00:36:49 PST 2025


Author: Fraser Cormack
Date: 2025-02-20T08:36:46Z
New Revision: 079115e6eac0412214104b593849ee805d8921ce

URL: https://github.com/llvm/llvm-project/commit/079115e6eac0412214104b593849ee805d8921ce
DIFF: https://github.com/llvm/llvm-project/commit/079115e6eac0412214104b593849ee805d8921ce.diff

LOG: [libclc] Move modf to the CLC library (#127828)

The "generic" unary_(def|decl)_with_ptr files are intended to be re-used
by the sincos and fract builtins in the future as they share an
identical type signature.

Added: 
    libclc/clc/include/clc/math/clc_modf.h
    libclc/clc/include/clc/math/unary_decl_with_ptr.inc
    libclc/clc/include/clc/math/unary_def_with_ptr.inc
    libclc/clc/lib/generic/math/clc_modf.cl
    libclc/clc/lib/generic/math/clc_modf.inc

Modified: 
    libclc/clc/lib/generic/SOURCES
    libclc/generic/include/clc/math/modf.h
    libclc/generic/lib/math/modf.cl

Removed: 
    libclc/generic/include/clc/math/modf.inc
    libclc/generic/lib/math/modf.inc


################################################################################
diff  --git a/libclc/clc/include/clc/math/clc_modf.h b/libclc/clc/include/clc/math/clc_modf.h
new file mode 100644
index 0000000000000..45484b09628a4
--- /dev/null
+++ b/libclc/clc/include/clc/math/clc_modf.h
@@ -0,0 +1,11 @@
+#ifndef __CLC_MATH_CLC_MODF_H__
+#define __CLC_MATH_CLC_MODF_H__
+
+#define __CLC_FUNCTION __clc_modf
+#define __CLC_BODY <clc/math/unary_decl_with_ptr.inc>
+#include <clc/math/gentype.inc>
+
+#undef __CLC_BODY
+#undef __CLC_FUNCTION
+
+#endif // __CLC_MATH_CLC_MODF_H__

diff  --git a/libclc/clc/include/clc/math/unary_decl_with_ptr.inc b/libclc/clc/include/clc/math/unary_decl_with_ptr.inc
new file mode 100644
index 0000000000000..04122108bc1f7
--- /dev/null
+++ b/libclc/clc/include/clc/math/unary_decl_with_ptr.inc
@@ -0,0 +1,6 @@
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x,
+                                                     global __CLC_GENTYPE *ptr);
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE x,
+                                                     local __CLC_GENTYPE *ptr);
+_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE
+__CLC_FUNCTION(__CLC_GENTYPE x, private __CLC_GENTYPE *ptr);

diff  --git a/libclc/clc/include/clc/math/unary_def_with_ptr.inc b/libclc/clc/include/clc/math/unary_def_with_ptr.inc
new file mode 100644
index 0000000000000..de7c9af756980
--- /dev/null
+++ b/libclc/clc/include/clc/math/unary_def_with_ptr.inc
@@ -0,0 +1,20 @@
+#include <clc/utils.h>
+
+#ifndef __CLC_FUNCTION
+#define __CLC_FUNCTION(x) __CLC_CONCAT(__clc_, x)
+#endif
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE FUNCTION(__CLC_GENTYPE x,
+                                              private __CLC_GENTYPE *ptr) {
+  return __CLC_FUNCTION(FUNCTION)(x, ptr);
+}
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE FUNCTION(__CLC_GENTYPE x,
+                                              global __CLC_GENTYPE *ptr) {
+  return __CLC_FUNCTION(FUNCTION)(x, ptr);
+}
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE FUNCTION(__CLC_GENTYPE x,
+                                              local __CLC_GENTYPE *ptr) {
+  return __CLC_FUNCTION(FUNCTION)(x, ptr);
+}

diff  --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES
index b0eaf84c41438..ef0ad006307d7 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -22,6 +22,7 @@ math/clc_copysign.cl
 math/clc_fabs.cl
 math/clc_floor.cl
 math/clc_mad.cl
+math/clc_modf.cl
 math/clc_nextafter.cl
 math/clc_rint.cl
 math/clc_trunc.cl

diff  --git a/libclc/generic/include/clc/math/modf.inc b/libclc/clc/lib/generic/math/clc_modf.cl
similarity index 76%
rename from libclc/generic/include/clc/math/modf.inc
rename to libclc/clc/lib/generic/math/clc_modf.cl
index 42bcf625686d2..27d2a08515257 100644
--- a/libclc/generic/include/clc/math/modf.inc
+++ b/libclc/clc/lib/generic/math/clc_modf.cl
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2015 Advanced Micro Devices, Inc.
+ * Copyright (c) 2015 Advanced Micro Devices, Inc.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
@@ -20,6 +20,11 @@
  * THE SOFTWARE.
  */
 
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE modf(__CLC_GENTYPE x, global __CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE modf(__CLC_GENTYPE x, local __CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE modf(__CLC_GENTYPE x, private __CLC_GENTYPE *iptr);
+#include <clc/internal/clc.h>
+#include <clc/math/clc_copysign.h>
+#include <clc/math/clc_trunc.h>
+#include <clc/math/math.h>
+#include <clc/relational/clc_isinf.h>
+
+#define __CLC_BODY <clc_modf.inc>
+#include <clc/math/gentype.inc>

diff  --git a/libclc/generic/lib/math/modf.inc b/libclc/clc/lib/generic/math/clc_modf.inc
similarity index 68%
rename from libclc/generic/lib/math/modf.inc
rename to libclc/clc/lib/generic/math/clc_modf.inc
index ff7ef30dd42f8..8242291c98d4e 100644
--- a/libclc/generic/lib/math/modf.inc
+++ b/libclc/clc/lib/generic/math/clc_modf.inc
@@ -19,31 +19,22 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-
-#if __CLC_FPSIZE == 64
-#define ZERO 0.0
-#elif __CLC_FPSIZE == 32
-#define ZERO 0.0f
-#elif __CLC_FPSIZE == 16
-#define ZERO 0.0h
-#endif
-
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE modf(__CLC_GENTYPE x,
-                                          private __CLC_GENTYPE *iptr) {
-  *iptr = trunc(x);
-  return copysign(isinf(x) ? ZERO : x - *iptr, x);
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_modf(__CLC_GENTYPE x,
+                                                private __CLC_GENTYPE *iptr) {
+  *iptr = __clc_trunc(x);
+  return __clc_copysign(__clc_isinf(x) ? __CLC_FP_LIT(0.0) : x - *iptr, x);
 }
 
-#define MODF_DEF(addrspace)                                                    \
-  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE modf(__CLC_GENTYPE x,                   \
-                                            addrspace __CLC_GENTYPE *iptr) {   \
+#define CLC_MODF_DEF(addrspace)                                                \
+  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_modf(                             \
+      __CLC_GENTYPE x, addrspace __CLC_GENTYPE *iptr) {                        \
     __CLC_GENTYPE private_iptr;                                                \
-    __CLC_GENTYPE ret = modf(x, &private_iptr);                                \
+    __CLC_GENTYPE ret = __clc_modf(x, &private_iptr);                          \
     *iptr = private_iptr;                                                      \
     return ret;                                                                \
   }
 
-MODF_DEF(local);
-MODF_DEF(global);
+CLC_MODF_DEF(local);
+CLC_MODF_DEF(global);
 
-#undef ZERO
+#undef CLC_MODF_DEF

diff  --git a/libclc/generic/include/clc/math/modf.h b/libclc/generic/include/clc/math/modf.h
index f0fb6ca81920a..76eb1284432e4 100644
--- a/libclc/generic/include/clc/math/modf.h
+++ b/libclc/generic/include/clc/math/modf.h
@@ -20,5 +20,8 @@
  * THE SOFTWARE.
  */
 
-#define __CLC_BODY <clc/math/modf.inc>
+#define __CLC_FUNCTION modf
+#define __CLC_BODY <clc/math/unary_decl_with_ptr.inc>
 #include <clc/math/gentype.inc>
+
+#undef __CLC_FUNCTION

diff  --git a/libclc/generic/lib/math/modf.cl b/libclc/generic/lib/math/modf.cl
index 5098a41d079c5..5a01a316132e2 100644
--- a/libclc/generic/lib/math/modf.cl
+++ b/libclc/generic/lib/math/modf.cl
@@ -21,7 +21,8 @@
  */
 
 #include <clc/clc.h>
-#include <clc/math/math.h>
+#include <clc/math/clc_modf.h>
 
-#define __CLC_BODY <modf.inc>
+#define FUNCTION modf
+#define __CLC_BODY <clc/math/unary_def_with_ptr.inc>
 #include <clc/math/gentype.inc>


        


More information about the cfe-commits mailing list