[libclc] libclc: Add __clc_issubnormal (PR #181782)
Matt Arsenault via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 18 01:03:01 PST 2026
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/181782
>From d3036a1828c92f5fc3519ad7100ca1af78efe404 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 16 Feb 2026 22:51:37 +0100
Subject: [PATCH 1/2] 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
>From 7b3e96753a3ae4a85248bcdba92b1468cf148f14 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 18 Feb 2026 09:57:00 +0100
Subject: [PATCH 2/2] Add include
---
libclc/clc/lib/generic/relational/clc_issubnormal.cl | 1 +
1 file changed, 1 insertion(+)
diff --git a/libclc/clc/lib/generic/relational/clc_issubnormal.cl b/libclc/clc/lib/generic/relational/clc_issubnormal.cl
index 808afe4d9dfc5..d9138057844d7 100644
--- a/libclc/clc/lib/generic/relational/clc_issubnormal.cl
+++ b/libclc/clc/lib/generic/relational/clc_issubnormal.cl
@@ -8,6 +8,7 @@
#include <clc/internal/clc.h>
#include <clc/relational/relational.h>
+#include <clc/relational/clc_issubnormal.h>
_CLC_DEFINE_ISFPCLASS(int, int, __clc_issubnormal, fcSubnormal, float)
More information about the cfe-commits
mailing list