https://github.com/frasercrmck created https://github.com/llvm/llvm-project/pull/137785
The builtin was already vectorized so there's no difference to codegen for non-SPIR-V targets. >From f9a265e0d9bcecb80d25b97c394d7b9aa68d27ea Mon Sep 17 00:00:00 2001 From: Fraser Cormack <fra...@codeplay.com> Date: Tue, 29 Apr 2025 11:43:00 +0100 Subject: [PATCH] [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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits