[libclc] [libclc] Move fract to the CLC library (PR #137785)
Fraser Cormack via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 03:53:58 PDT 2025
https://github.com/frasercrmck updated https://github.com/llvm/llvm-project/pull/137785
>From f9a265e0d9bcecb80d25b97c394d7b9aa68d27ea Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at codeplay.com>
Date: Tue, 29 Apr 2025 11:43:00 +0100
Subject: [PATCH 1/2] [libclc] Move fract to the CLC library
The builtin was already vectorized so there's no difference to codegen
for non-SPIR-V targets.
---
.../include/clc/math/clc_fract.h} | 15 +++++--
libclc/clc/lib/generic/SOURCES | 1 +
libclc/clc/lib/generic/math/clc_fract.cl | 17 ++++++++
libclc/clc/lib/generic/math/clc_fract.inc | 38 +++++++++++++++++
libclc/generic/include/clc/math/fract.h | 4 +-
libclc/generic/lib/math/fract.cl | 4 +-
libclc/generic/lib/math/fract.inc | 41 -------------------
7 files changed, 74 insertions(+), 46 deletions(-)
rename libclc/{generic/include/clc/math/fract.inc => clc/include/clc/math/clc_fract.h} (57%)
create mode 100644 libclc/clc/lib/generic/math/clc_fract.cl
create mode 100644 libclc/clc/lib/generic/math/clc_fract.inc
delete mode 100644 libclc/generic/lib/math/fract.inc
diff --git a/libclc/generic/include/clc/math/fract.inc b/libclc/clc/include/clc/math/clc_fract.h
similarity index 57%
rename from libclc/generic/include/clc/math/fract.inc
rename to libclc/clc/include/clc/math/clc_fract.h
index 72e65d4409041..8ea47d47d914f 100644
--- a/libclc/generic/include/clc/math/fract.inc
+++ b/libclc/clc/include/clc/math/clc_fract.h
@@ -6,6 +6,15 @@
//
//===----------------------------------------------------------------------===//
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, global __CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, local __CLC_GENTYPE *iptr);
-_CLC_OVERLOAD _CLC_DECL __CLC_GENTYPE fract(__CLC_GENTYPE x, private __CLC_GENTYPE *iptr);
+#ifndef __CLC_MATH_CLC_FRACT_H__
+#define __CLC_MATH_CLC_FRACT_H__
+
+#define __CLC_FUNCTION __clc_fract
+#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_FRACT_H__
diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES
index 4c81a152290a9..dafc69e1d83a4 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -46,6 +46,7 @@ math/clc_fmax.cl
math/clc_fmin.cl
math/clc_floor.cl
math/clc_fmod.cl
+math/clc_fract.cl
math/clc_frexp.cl
math/clc_hypot.cl
math/clc_ldexp.cl
diff --git a/libclc/clc/lib/generic/math/clc_fract.cl b/libclc/clc/lib/generic/math/clc_fract.cl
new file mode 100644
index 0000000000000..1a0c5ab7a8d47
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_fract.cl
@@ -0,0 +1,17 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <clc/clcmacro.h>
+#include <clc/internal/clc.h>
+#include <clc/math/clc_floor.h>
+#include <clc/math/clc_fmin.h>
+#include <clc/relational/clc_isnan.h>
+#include <clc/relational/clc_isinf.h>
+
+#define __CLC_BODY <clc_fract.inc>
+#include <clc/math/gentype.inc>
diff --git a/libclc/clc/lib/generic/math/clc_fract.inc b/libclc/clc/lib/generic/math/clc_fract.inc
new file mode 100644
index 0000000000000..31d32399e3f03
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_fract.inc
@@ -0,0 +1,38 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#if __CLC_FPSIZE == 64
+#define MIN_CONSTANT 0x1.fffffffffffffp-1
+#elif __CLC_FPSIZE == 32
+#define MIN_CONSTANT 0x1.fffffep-1f
+#elif __CLC_FPSIZE == 16
+#define MIN_CONSTANT 0x1.ffcp-1h
+#endif
+
+_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract(__CLC_GENTYPE x,
+ private __CLC_GENTYPE *iptr) {
+ *iptr = __clc_floor(x);
+ __CLC_GENTYPE r = __clc_fmin(x - *iptr, MIN_CONSTANT);
+ r = __clc_isinf(x) ? __CLC_FP_LIT(0.0) : r;
+ r = __clc_isnan(x) ? x : r;
+ return r;
+}
+
+#define FRACT_DEF(addrspace) \
+ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_fract( \
+ __CLC_GENTYPE x, addrspace __CLC_GENTYPE *iptr) { \
+ __CLC_GENTYPE private_iptr; \
+ __CLC_GENTYPE ret = __clc_fract(x, &private_iptr); \
+ *iptr = private_iptr; \
+ return ret; \
+ }
+
+FRACT_DEF(local);
+FRACT_DEF(global);
+
+#undef MIN_CONSTANT
diff --git a/libclc/generic/include/clc/math/fract.h b/libclc/generic/include/clc/math/fract.h
index 75bce83575b02..8443d4968c985 100644
--- a/libclc/generic/include/clc/math/fract.h
+++ b/libclc/generic/include/clc/math/fract.h
@@ -6,5 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#define __CLC_BODY <clc/math/fract.inc>
+#define __CLC_FUNCTION fract
+#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/fract.cl b/libclc/generic/lib/math/fract.cl
index 35eb7daa10da9..54a2cf8411665 100644
--- a/libclc/generic/lib/math/fract.cl
+++ b/libclc/generic/lib/math/fract.cl
@@ -7,6 +7,8 @@
//===----------------------------------------------------------------------===//
#include <clc/clc.h>
+#include <clc/math/clc_fract.h>
-#define __CLC_BODY <fract.inc>
+#define FUNCTION fract
+#define __CLC_BODY <clc/math/unary_def_with_ptr.inc>
#include <clc/math/gentype.inc>
diff --git a/libclc/generic/lib/math/fract.inc b/libclc/generic/lib/math/fract.inc
deleted file mode 100644
index e6f43b8334a58..0000000000000
--- a/libclc/generic/lib/math/fract.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#if __CLC_FPSIZE == 64
-#define MIN_CONSTANT 0x1.fffffffffffffp-1
-#define ZERO 0.0
-#elif __CLC_FPSIZE == 32
-#define MIN_CONSTANT 0x1.fffffep-1f
-#define ZERO 0.0f
-#elif __CLC_FPSIZE == 16
-#define MIN_CONSTANT 0x1.ffcp-1h
-#define ZERO 0.0h
-#endif
-
-_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fract(__CLC_GENTYPE x, private __CLC_GENTYPE *iptr) {
- *iptr = floor(x);
- __CLC_GENTYPE r = fmin(x - *iptr, MIN_CONSTANT);
- r = isinf(x) ? ZERO : r;
- r = isnan(x) ? x : r;
- return r;
-}
-
-
-#define FRACT_DEF(addrspace) \
- _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE fract(__CLC_GENTYPE x, addrspace __CLC_GENTYPE *iptr) { \
- __CLC_GENTYPE private_iptr; \
- __CLC_GENTYPE ret = fract(x, &private_iptr); \
- *iptr = private_iptr; \
- return ret; \
- }
-
-FRACT_DEF(local);
-FRACT_DEF(global);
-
-#undef MIN_CONSTANT
-#undef ZERO
>From 8f047add6509f9aae7479081572505a755e4e572 Mon Sep 17 00:00:00 2001
From: Fraser Cormack <fraser at codeplay.com>
Date: Tue, 29 Apr 2025 11:53:47 +0100
Subject: [PATCH 2/2] fix formatting
---
libclc/clc/lib/generic/math/clc_fract.cl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libclc/clc/lib/generic/math/clc_fract.cl b/libclc/clc/lib/generic/math/clc_fract.cl
index 1a0c5ab7a8d47..7db43ef878710 100644
--- a/libclc/clc/lib/generic/math/clc_fract.cl
+++ b/libclc/clc/lib/generic/math/clc_fract.cl
@@ -10,8 +10,8 @@
#include <clc/internal/clc.h>
#include <clc/math/clc_floor.h>
#include <clc/math/clc_fmin.h>
-#include <clc/relational/clc_isnan.h>
#include <clc/relational/clc_isinf.h>
+#include <clc/relational/clc_isnan.h>
#define __CLC_BODY <clc_fract.inc>
#include <clc/math/gentype.inc>
More information about the cfe-commits
mailing list