[clang] [OFFLOAD] Introduce libdevice function declarartions for future use for math OpenMP wrappers (PR #182215)

Viktoria Maximova via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 24 03:29:02 PDT 2026


================
@@ -0,0 +1,137 @@
+/*===-- __clang_spirv_libdevice_declares.h - decls for libdevice functions --===
+ *
+ * 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 __CLANG_SPIRV_LIBDEVICE_DECLARES_H__
+#define __CLANG_SPIRV_LIBDEVICE_DECLARES_H__
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#define _CLC_OVERLOAD [[clang::overloadable]]
+#define _CLC_CONSTFN [[gnu::const]]
+_CLC_OVERLOAD _CLC_CONSTFN unsigned int __spirv_ocl_s_abs(int);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acos(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_acos(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_acosh(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_acosh(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asin(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_asin(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_asinh(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_asinh(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atan(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atan2(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atan2(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_atanh(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_atanh(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cbrt(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cbrt(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ceil(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_ceil(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cos(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cos(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cosh(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cosh(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_cospi(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_cospi(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erf(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_erf(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_erfc(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_erfc(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp2(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp2(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_exp10(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_exp10(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_expm1(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_expm1(double);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsNan(float);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsNan(double);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsInf(float);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsInf(double);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsFinite(float);
+_CLC_OVERLOAD _CLC_CONSTFN bool __spirv_IsFinite(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_copysign(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_copysign(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_ldexp(float, int);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_ldexp(double, int);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fabs(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fabs(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_logb(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_logb(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmax(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmax(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmin(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmin(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fdim(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fdim(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_floor(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_floor(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fma(float, float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fma(double, double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_fmod(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_fmod(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_frexp(float, int *);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_frexp(double, int *);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_hypot(float, float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_hypot(double, double);
+_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_ilogb(float);
+_CLC_OVERLOAD _CLC_CONSTFN int __spirv_ocl_ilogb(double);
+_CLC_OVERLOAD _CLC_CONSTFN unsigned long __spirv_ocl_s_abs(long);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_lgamma(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_lgamma(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_round(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_round(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log10(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log10(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log1p(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log1p(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_log2(float);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_log2(double);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_modf(float, float *);
+_CLC_OVERLOAD _CLC_CONSTFN double __spirv_ocl_modf(double, double *);
+_CLC_OVERLOAD _CLC_CONSTFN float __spirv_ocl_nextafter(float, float);
----------------
vmaksimo wrote:

it's the other one. there should be __spirv_ocl_nan (opcode 46 of OCL EIS)

https://github.com/llvm/llvm-project/pull/182215


More information about the cfe-commits mailing list