Author: Matt Arsenault Date: 2026-02-18T10:29:36+01:00 New Revision: ecd25afa90ee3a81bacbf160495147662bfca07c
URL: https://github.com/llvm/llvm-project/commit/ecd25afa90ee3a81bacbf160495147662bfca07c DIFF: https://github.com/llvm/llvm-project/commit/ecd25afa90ee3a81bacbf160495147662bfca07c.diff LOG: libclc: Add __clc_issubnormal (#181782) This is the missing of the FP class queries. Added: libclc/clc/include/clc/relational/clc_issubnormal.h libclc/clc/lib/generic/relational/clc_issubnormal.cl Modified: libclc/clc/include/clc/relational/relational.h libclc/clc/lib/generic/SOURCES Removed: ################################################################################ diff --git a/libclc/clc/include/clc/relational/clc_issubnormal.h b/libclc/clc/include/clc/relational/clc_issubnormal.h new file mode 100644 index 0000000000000..548d50a08a6e3 --- /dev/null +++ b/libclc/clc/include/clc/relational/clc_issubnormal.h @@ -0,0 +1,42 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef __CLC_RELATIONAL_CLC_ISSUBNORMAL_H__ +#define __CLC_RELATIONAL_CLC_ISSUBNORMAL_H__ + +#include <clc/clcfunc.h> + +#define _CLC_ISSUBNORMAL_DECL(RET_TYPE, ARG_TYPE) \ + _CLC_OVERLOAD _CLC_CONST _CLC_DECL RET_TYPE __clc_issubnormal(ARG_TYPE); + +#define _CLC_VECTOR_ISSUBNORMAL_DECL(RET_TYPE, ARG_TYPE) \ + _CLC_ISSUBNORMAL_DECL(RET_TYPE##2, ARG_TYPE##2) \ + _CLC_ISSUBNORMAL_DECL(RET_TYPE##3, ARG_TYPE##3) \ + _CLC_ISSUBNORMAL_DECL(RET_TYPE##4, ARG_TYPE##4) \ + _CLC_ISSUBNORMAL_DECL(RET_TYPE##8, ARG_TYPE##8) \ + _CLC_ISSUBNORMAL_DECL(RET_TYPE##16, ARG_TYPE##16) + +_CLC_ISSUBNORMAL_DECL(int, float) +_CLC_VECTOR_ISSUBNORMAL_DECL(int, float) + +#ifdef cl_khr_fp64 +#pragma OPENCL EXTENSION cl_khr_fp64 : enable +_CLC_ISSUBNORMAL_DECL(int, double) +_CLC_VECTOR_ISSUBNORMAL_DECL(long, double) +#endif + +#ifdef cl_khr_fp16 +#pragma OPENCL EXTENSION cl_khr_fp16 : enable +_CLC_ISSUBNORMAL_DECL(int, half) +_CLC_VECTOR_ISSUBNORMAL_DECL(short, half) +#endif + +#undef _CLC_ISSUBNORMAL_DECL +#undef _CLC_VECTOR_ISSUBNORMAL_DECL + +#endif // __CLC_RELATIONAL_CLC_ISSUBNORMAL_H__ diff --git a/libclc/clc/include/clc/relational/relational.h b/libclc/clc/include/clc/relational/relational.h index fa22232349944..32ed9f431ddbd 100644 --- a/libclc/clc/include/clc/relational/relational.h +++ b/libclc/clc/include/clc/relational/relational.h @@ -43,6 +43,7 @@ #define fcNan (__FPCLASS_SNAN | __FPCLASS_QNAN) #define fcInf (__FPCLASS_POSINF | __FPCLASS_NEGINF) #define fcNormal (__FPCLASS_POSNORMAL | __FPCLASS_NEGNORMAL) +#define fcSubnormal (__FPCLASS_POSSUBNORMAL | __FPCLASS_NEGSUBNORMAL) #define fcPosFinite \ (__FPCLASS_POSNORMAL | __FPCLASS_POSSUBNORMAL | __FPCLASS_POSZERO) #define fcNegFinite \ diff --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES index ee080cd356629..ac820239baa17 100644 --- a/libclc/clc/lib/generic/SOURCES +++ b/libclc/clc/lib/generic/SOURCES @@ -166,6 +166,7 @@ relational/clc_isnan.cl relational/clc_isnormal.cl relational/clc_isnotequal.cl relational/clc_isordered.cl +relational/clc_issubnormal.cl relational/clc_isunordered.cl relational/clc_select.cl relational/clc_signbit.cl diff --git a/libclc/clc/lib/generic/relational/clc_issubnormal.cl b/libclc/clc/lib/generic/relational/clc_issubnormal.cl new file mode 100644 index 0000000000000..cdbae69ee0c92 --- /dev/null +++ b/libclc/clc/lib/generic/relational/clc_issubnormal.cl @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// 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/internal/clc.h> +#include <clc/relational/clc_issubnormal.h> +#include <clc/relational/relational.h> + +_CLC_DEFINE_ISFPCLASS(int, int, __clc_issubnormal, fcSubnormal, float) + +#ifdef cl_khr_fp64 + +#pragma OPENCL EXTENSION cl_khr_fp64 : enable + +// The scalar version of __clc_issubnormal(double) returns an int, but the +// vector versions return a long. +_CLC_DEFINE_ISFPCLASS(int, long, __clc_issubnormal, fcSubnormal, double) + +#endif + +#ifdef cl_khr_fp16 + +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +// The scalar version of __clc_issubnormal(half) returns an int, but the vector +// versions return a short. +_CLC_DEFINE_ISFPCLASS(int, short, __clc_issubnormal, fcSubnormal, half) + +#endif _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
