From b04e74f49539f4aac5c57f53a3dad2234c6abd1a Mon Sep 17 00:00:00 2001 From: Wenju He Date: Thu, 17 Jul 2025 09:13:54 +0200 Subject: [PATCH] [libspirv] Reuse clc functions in generic implementation of math native built-ins llvm-diff show no change to libspirv-nvptx64--nvidiacl.bc. In libspirv-amdgcn--amdhsa.bc, __spirv_ocl_native_exp/exp2/log10 are changed to use amdgpu version of __clc_native_* functions. --- .../libspirv/lib/generic/math/native_cos.cl | 7 ++-- .../libspirv/lib/generic/math/native_exp.cl | 7 ++-- .../libspirv/lib/generic/math/native_exp2.cl | 7 ++-- .../libspirv/lib/generic/math/native_log.cl | 7 ++-- .../libspirv/lib/generic/math/native_log10.cl | 7 ++-- .../libspirv/lib/generic/math/native_log2.cl | 7 ++-- .../libspirv/lib/generic/math/native_sin.cl | 7 ++-- .../libspirv/lib/generic/math/native_sqrt.cl | 7 ++-- .../generic/math/native_unary_intrinsic.inc | 27 ------------ .../lib/generic/math/unary_intrin.inc | 42 ------------------- 10 files changed, 32 insertions(+), 93 deletions(-) delete mode 100644 libclc/libspirv/lib/generic/math/native_unary_intrinsic.inc delete mode 100644 libclc/libspirv/lib/generic/math/unary_intrin.inc diff --git a/libclc/libspirv/lib/generic/math/native_cos.cl b/libclc/libspirv/lib/generic/math/native_cos.cl index 2af2c1a50e8e2..f3052ee91df2e 100644 --- a/libclc/libspirv/lib/generic/math/native_cos.cl +++ b/libclc/libspirv/lib/generic/math/native_cos.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC cos - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_cos +#define __CLC_FUNCTION(x) __clc_native_cos +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_exp.cl b/libclc/libspirv/lib/generic/math/native_exp.cl index 098abe5109e2e..db144aa8aabaf 100644 --- a/libclc/libspirv/lib/generic/math/native_exp.cl +++ b/libclc/libspirv/lib/generic/math/native_exp.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC exp - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_exp +#define __CLC_FUNCTION(x) __clc_native_exp +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_exp2.cl b/libclc/libspirv/lib/generic/math/native_exp2.cl index fba2f9f162abc..ee1b12615bb7b 100644 --- a/libclc/libspirv/lib/generic/math/native_exp2.cl +++ b/libclc/libspirv/lib/generic/math/native_exp2.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC exp2 - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_exp2 +#define __CLC_FUNCTION(x) __clc_native_exp2 +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_log.cl b/libclc/libspirv/lib/generic/math/native_log.cl index e617c20954bc3..7ea985807b41e 100644 --- a/libclc/libspirv/lib/generic/math/native_log.cl +++ b/libclc/libspirv/lib/generic/math/native_log.cl @@ -20,10 +20,11 @@ * THE SOFTWARE. */ +#include #include -#define __CLC_NATIVE_INTRINSIC log - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_log +#define __CLC_FUNCTION(x) __clc_native_log +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_log10.cl b/libclc/libspirv/lib/generic/math/native_log10.cl index b74afdc37f453..03258d3c35662 100644 --- a/libclc/libspirv/lib/generic/math/native_log10.cl +++ b/libclc/libspirv/lib/generic/math/native_log10.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC log10 - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_log10 +#define __CLC_FUNCTION(x) __clc_native_log10 +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_log2.cl b/libclc/libspirv/lib/generic/math/native_log2.cl index eddedf6e3f6ea..5470e6ce02c08 100644 --- a/libclc/libspirv/lib/generic/math/native_log2.cl +++ b/libclc/libspirv/lib/generic/math/native_log2.cl @@ -20,10 +20,11 @@ * THE SOFTWARE. */ +#include #include -#define __CLC_NATIVE_INTRINSIC log2 - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_log2 +#define __CLC_FUNCTION(x) __clc_native_log2 +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_sin.cl b/libclc/libspirv/lib/generic/math/native_sin.cl index 03ae6572b1762..1cf274e2bcccf 100644 --- a/libclc/libspirv/lib/generic/math/native_sin.cl +++ b/libclc/libspirv/lib/generic/math/native_sin.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC sin - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_sin +#define __CLC_FUNCTION(x) __clc_native_sin +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_sqrt.cl b/libclc/libspirv/lib/generic/math/native_sqrt.cl index fc85775608be4..545beee08eec8 100644 --- a/libclc/libspirv/lib/generic/math/native_sqrt.cl +++ b/libclc/libspirv/lib/generic/math/native_sqrt.cl @@ -6,10 +6,11 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_NATIVE_INTRINSIC sqrt - -#define __CLC_BODY #define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_native_sqrt +#define __CLC_FUNCTION(x) __clc_native_sqrt +#define __CLC_BODY #include diff --git a/libclc/libspirv/lib/generic/math/native_unary_intrinsic.inc b/libclc/libspirv/lib/generic/math/native_unary_intrinsic.inc deleted file mode 100644 index 44042f85aea5c..0000000000000 --- a/libclc/libspirv/lib/generic/math/native_unary_intrinsic.inc +++ /dev/null @@ -1,27 +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 -// -//===----------------------------------------------------------------------===// - -#include - -#ifdef __CLC_SCALAR -#define __CLC_FUNCTION __CLC_XCONCAT(__clc_native_, __CLC_NATIVE_INTRINSIC) -#define __CLC_INTRINSIC "llvm." __CLC_XSTR(__CLC_NATIVE_INTRINSIC) - -#undef cl_khr_fp64 -#include - -#endif - -#define __CLC_FUNCTION \ - __CLC_XCONCAT(__spirv_ocl_native_, __CLC_NATIVE_INTRINSIC) - -_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION(__CLC_GENTYPE val) { - return __CLC_XCONCAT(__clc_native_, __CLC_NATIVE_INTRINSIC)(val); -} - -#undef __CLC_FUNCTION diff --git a/libclc/libspirv/lib/generic/math/unary_intrin.inc b/libclc/libspirv/lib/generic/math/unary_intrin.inc deleted file mode 100644 index 8028470114b8e..0000000000000 --- a/libclc/libspirv/lib/generic/math/unary_intrin.inc +++ /dev/null @@ -1,42 +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 -// -//===----------------------------------------------------------------------===// - -#include -#include - -_CLC_OVERLOAD float __CLC_FUNCTION(float f) __asm(__CLC_INTRINSIC ".f32"); -_CLC_OVERLOAD float2 __CLC_FUNCTION(float2 f) __asm(__CLC_INTRINSIC ".v2f32"); -_CLC_OVERLOAD float3 __CLC_FUNCTION(float3 f) __asm(__CLC_INTRINSIC ".v3f32"); -_CLC_OVERLOAD float4 __CLC_FUNCTION(float4 f) __asm(__CLC_INTRINSIC ".v4f32"); -_CLC_OVERLOAD float8 __CLC_FUNCTION(float8 f) __asm(__CLC_INTRINSIC ".v8f32"); -_CLC_OVERLOAD float16 __CLC_FUNCTION(float16 f) __asm(__CLC_INTRINSIC - ".v16f32"); - -#ifdef cl_khr_fp64 -#pragma OPENCL EXTENSION cl_khr_fp64 : enable -_CLC_OVERLOAD double __CLC_FUNCTION(double d) __asm(__CLC_INTRINSIC ".f64"); -_CLC_OVERLOAD double2 __CLC_FUNCTION(double2 d) __asm(__CLC_INTRINSIC ".v2f64"); -_CLC_OVERLOAD double3 __CLC_FUNCTION(double3 d) __asm(__CLC_INTRINSIC ".v3f64"); -_CLC_OVERLOAD double4 __CLC_FUNCTION(double4 d) __asm(__CLC_INTRINSIC ".v4f64"); -_CLC_OVERLOAD double8 __CLC_FUNCTION(double8 d) __asm(__CLC_INTRINSIC ".v8f64"); -_CLC_OVERLOAD double16 __CLC_FUNCTION(double16 d) __asm(__CLC_INTRINSIC - ".v16f64"); -#endif - -#ifdef cl_khr_fp16 -#pragma OPENCL EXTENSION cl_khr_fp16 : enable -_CLC_OVERLOAD half __CLC_FUNCTION(half d) __asm(__CLC_INTRINSIC ".f16"); -_CLC_OVERLOAD half2 __CLC_FUNCTION(half2 d) __asm(__CLC_INTRINSIC ".v2f16"); -_CLC_OVERLOAD half3 __CLC_FUNCTION(half3 d) __asm(__CLC_INTRINSIC ".v3f16"); -_CLC_OVERLOAD half4 __CLC_FUNCTION(half4 d) __asm(__CLC_INTRINSIC ".v4f16"); -_CLC_OVERLOAD half8 __CLC_FUNCTION(half8 d) __asm(__CLC_INTRINSIC ".v8f16"); -_CLC_OVERLOAD half16 __CLC_FUNCTION(half16 d) __asm(__CLC_INTRINSIC ".v16f16"); -#endif - -#undef __CLC_FUNCTION -#undef __CLC_INTRINSIC