aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFraser Cormack <fraser@codeplay.com>2025-04-29 13:58:13 +0100
committerGitHub <noreply@github.com>2025-04-29 13:58:13 +0100
commit78d95cc54455755eaac43d956baed6a3612bc72c (patch)
treef86bb2809fbb100f528258be0c3fcadded2eb944
parentfaf87e141438138c3ade265af472b00b25b67ac5 (diff)
downloadllvm-78d95cc54455755eaac43d956baed6a3612bc72c.zip
llvm-78d95cc54455755eaac43d956baed6a3612bc72c.tar.gz
llvm-78d95cc54455755eaac43d956baed6a3612bc72c.tar.bz2
[libclc] Move fract to the CLC library (#137785)
The builtin was already vectorized so there's no difference to codegen for non-SPIR-V targets.
-rw-r--r--libclc/clc/include/clc/math/clc_fract.h (renamed from libclc/generic/include/clc/math/fract.inc)15
-rw-r--r--libclc/clc/lib/generic/SOURCES1
-rw-r--r--libclc/clc/lib/generic/math/clc_fract.cl17
-rw-r--r--libclc/clc/lib/generic/math/clc_fract.inc38
-rw-r--r--libclc/generic/include/clc/math/fract.h4
-rw-r--r--libclc/generic/lib/math/fract.cl4
-rw-r--r--libclc/generic/lib/math/fract.inc41
7 files changed, 74 insertions, 46 deletions
diff --git a/libclc/generic/include/clc/math/fract.inc b/libclc/clc/include/clc/math/clc_fract.h
index 72e65d4..8ea47d4 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 4c81a15..dafc69e 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 0000000..7db43ef
--- /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_isinf.h>
+#include <clc/relational/clc_isnan.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 0000000..31d3239
--- /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 75bce83..8443d49 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 35eb7da..54a2cf8 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 e6f43b8..0000000
--- 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