https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/181782
This is the missing of the FP class queries. >From d3036a1828c92f5fc3519ad7100ca1af78efe404 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Mon, 16 Feb 2026 22:51:37 +0100 Subject: [PATCH] libclc: Add __clc_issubnormal This is the missing of the FP class queries. --- .../include/clc/relational/clc_issubnormal.h | 42 +++++++++++++++++++ .../clc/include/clc/relational/relational.h | 1 + libclc/clc/lib/generic/SOURCES | 1 + .../lib/generic/relational/clc_issubnormal.cl | 32 ++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 libclc/clc/include/clc/relational/clc_issubnormal.h create mode 100644 libclc/clc/lib/generic/relational/clc_issubnormal.cl 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..808afe4d9dfc5 --- /dev/null +++ b/libclc/clc/lib/generic/relational/clc_issubnormal.cl @@ -0,0 +1,32 @@ +//===----------------------------------------------------------------------===// +// +// 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/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
