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

Fraser Cormack via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 19 08:57:21 PST 2025


https://github.com/frasercrmck updated https://github.com/llvm/llvm-project/pull/127828

>From 34c217f46e81cbceda12ffa47c1825a57706fdc8 Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at codeplay.com>
Date: Wed, 19 Feb 2025 16:25:22 +0000
Subject: [PATCH] [libclc] Move modf to the CLC library

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.
---
 libclc/clc/include/clc/math/clc_modf.h        | 11 +++++++
 .../include/clc/math/unary_decl_with_ptr.inc  |  6 ++++
 .../include/clc/math/unary_def_with_ptr.inc   | 20 ++++++++++++
 libclc/clc/lib/generic/SOURCES                |  1 +
 .../lib/generic/math/clc_modf.cl}             | 13 +++++---
 .../lib/generic/math/clc_modf.inc}            | 31 +++++++------------
 libclc/generic/include/clc/math/modf.h        |  5 ++-
 libclc/generic/lib/math/modf.cl               |  5 +--
 8 files changed, 65 insertions(+), 27 deletions(-)
 create mode 100644 libclc/clc/include/clc/math/clc_modf.h
 create mode 100644 libclc/clc/include/clc/math/unary_decl_with_ptr.inc
 create mode 100644 libclc/clc/include/clc/math/unary_def_with_ptr.inc
 rename libclc/{generic/include/clc/math/modf.inc => clc/lib/generic/math/clc_modf.cl} (76%)
 rename libclc/{generic/lib/math/modf.inc => clc/lib/generic/math/clc_modf.inc} (68%)

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