From 1524ec5fe165ab66ffa4696a6d5c838b0f8a2feb Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 13 Aug 2025 04:53:25 +0200 Subject: [PATCH] [libspirv] Use clc function in libspirv generic math half_* functions Also delete double/half type implementations, which are not allowed per spec. llvm-diff shows lots of changes in libspirv-amdgcn--amdhsa.bc and libspirv-nvptx64--nvidiacl.bc, due to use of __ocml_* and __nv_* built-ins in clc and libspirv in intel/llvm repo. Based on review comment in https://github.com/llvm/llvm-project/pull/153328, libclc shouldn't use __ocml_*. So bitcode change in this PR is expected. --- libclc/libspirv/lib/generic/math/half_cos.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_divide.cl | 10 ++++++---- libclc/libspirv/lib/generic/math/half_exp.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_exp10.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_exp2.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_log.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_log10.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_log2.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_powr.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_recip.cl | 10 ++++++---- libclc/libspirv/lib/generic/math/half_rsqrt.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_sin.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_sqrt.cl | 10 +++++++--- libclc/libspirv/lib/generic/math/half_tan.cl | 10 +++++++--- 14 files changed, 96 insertions(+), 44 deletions(-) diff --git a/libclc/libspirv/lib/generic/math/half_cos.cl b/libclc/libspirv/lib/generic/math/half_cos.cl index b1417e16c5f66..8acc6fe4bc570 100644 --- a/libclc/libspirv/lib/generic/math/half_cos.cl +++ b/libclc/libspirv/lib/generic/math/half_cos.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_cos -#define __CLC_FUNCTION __spirv_ocl_half_cos -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_cos +#define __IMPL_FUNCTION(x) __clc_half_cos +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_divide.cl b/libclc/libspirv/lib/generic/math/half_divide.cl index 62fb99a2946e1..63157455e1e92 100644 --- a/libclc/libspirv/lib/generic/math/half_divide.cl +++ b/libclc/libspirv/lib/generic/math/half_divide.cl @@ -6,10 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define divide(x, y) (x / y) +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_divide +#define __IMPL_FUNCTION(x) __clc_half_divide +#define __CLC_BODY -#define __CLC_BUILTIN divide -#define __CLC_FUNCTION __spirv_ocl_half_divide -#include +#include diff --git a/libclc/libspirv/lib/generic/math/half_exp.cl b/libclc/libspirv/lib/generic/math/half_exp.cl index eb020db285d0b..5a5085cb01036 100644 --- a/libclc/libspirv/lib/generic/math/half_exp.cl +++ b/libclc/libspirv/lib/generic/math/half_exp.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_exp -#define __CLC_FUNCTION __spirv_ocl_half_exp -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_exp +#define __IMPL_FUNCTION(x) __clc_half_exp +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_exp10.cl b/libclc/libspirv/lib/generic/math/half_exp10.cl index c59fe844e0c45..d46cbc60b7112 100644 --- a/libclc/libspirv/lib/generic/math/half_exp10.cl +++ b/libclc/libspirv/lib/generic/math/half_exp10.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_exp10 -#define __CLC_FUNCTION __spirv_ocl_half_exp10 -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_exp10 +#define __IMPL_FUNCTION(x) __clc_half_exp10 +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_exp2.cl b/libclc/libspirv/lib/generic/math/half_exp2.cl index b7b8afbe50227..ebb4413a4925a 100644 --- a/libclc/libspirv/lib/generic/math/half_exp2.cl +++ b/libclc/libspirv/lib/generic/math/half_exp2.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_exp2 -#define __CLC_FUNCTION __spirv_ocl_half_exp2 -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_exp2 +#define __IMPL_FUNCTION(x) __clc_half_exp2 +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_log.cl b/libclc/libspirv/lib/generic/math/half_log.cl index 478eed30ff4cc..526d8fb1c9f4b 100644 --- a/libclc/libspirv/lib/generic/math/half_log.cl +++ b/libclc/libspirv/lib/generic/math/half_log.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_log -#define __CLC_FUNCTION __spirv_ocl_half_log -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_log +#define __IMPL_FUNCTION(x) __clc_half_log +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_log10.cl b/libclc/libspirv/lib/generic/math/half_log10.cl index a42d678c4c07f..3696c5bd20f9d 100644 --- a/libclc/libspirv/lib/generic/math/half_log10.cl +++ b/libclc/libspirv/lib/generic/math/half_log10.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_log10 -#define __CLC_FUNCTION __spirv_ocl_half_log10 -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_log10 +#define __IMPL_FUNCTION(x) __clc_half_log10 +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_log2.cl b/libclc/libspirv/lib/generic/math/half_log2.cl index 1db8370556c46..2ac90acfbc724 100644 --- a/libclc/libspirv/lib/generic/math/half_log2.cl +++ b/libclc/libspirv/lib/generic/math/half_log2.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_log2 -#define __CLC_FUNCTION __spirv_ocl_half_log2 -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_log2 +#define __IMPL_FUNCTION(x) __clc_half_log2 +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_powr.cl b/libclc/libspirv/lib/generic/math/half_powr.cl index 7472a0668b9be..45faa6a8dc97a 100644 --- a/libclc/libspirv/lib/generic/math/half_powr.cl +++ b/libclc/libspirv/lib/generic/math/half_powr.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_powr -#define __CLC_FUNCTION __spirv_ocl_half_powr -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_powr +#define __IMPL_FUNCTION(x) __clc_half_powr +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_recip.cl b/libclc/libspirv/lib/generic/math/half_recip.cl index 5b842d38a6297..939b15bd96fb6 100644 --- a/libclc/libspirv/lib/generic/math/half_recip.cl +++ b/libclc/libspirv/lib/generic/math/half_recip.cl @@ -6,10 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define recip(x) (1.0f / x) +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_recip +#define __IMPL_FUNCTION(x) __clc_half_recip +#define __CLC_BODY -#define __CLC_BUILTIN recip -#define __CLC_FUNCTION __spirv_ocl_half_recip -#include +#include diff --git a/libclc/libspirv/lib/generic/math/half_rsqrt.cl b/libclc/libspirv/lib/generic/math/half_rsqrt.cl index 242a8bdce233d..cd59cf7f652bf 100644 --- a/libclc/libspirv/lib/generic/math/half_rsqrt.cl +++ b/libclc/libspirv/lib/generic/math/half_rsqrt.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_rsqrt -#define __CLC_FUNCTION __spirv_ocl_half_rsqrt -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_rsqrt +#define __IMPL_FUNCTION(x) __clc_half_rsqrt +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_sin.cl b/libclc/libspirv/lib/generic/math/half_sin.cl index b10c07cdfd12d..aa97d3fe70824 100644 --- a/libclc/libspirv/lib/generic/math/half_sin.cl +++ b/libclc/libspirv/lib/generic/math/half_sin.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_sin -#define __CLC_FUNCTION __spirv_ocl_half_sin -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_sin +#define __IMPL_FUNCTION(x) __clc_half_sin +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_sqrt.cl b/libclc/libspirv/lib/generic/math/half_sqrt.cl index 04ec44c9b479e..2235ba9cd63d9 100644 --- a/libclc/libspirv/lib/generic/math/half_sqrt.cl +++ b/libclc/libspirv/lib/generic/math/half_sqrt.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_sqrt -#define __CLC_FUNCTION __spirv_ocl_half_sqrt -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_sqrt +#define __IMPL_FUNCTION(x) __clc_half_sqrt +#define __CLC_BODY + +#include diff --git a/libclc/libspirv/lib/generic/math/half_tan.cl b/libclc/libspirv/lib/generic/math/half_tan.cl index 975c6286d0bd5..17fd63657baea 100644 --- a/libclc/libspirv/lib/generic/math/half_tan.cl +++ b/libclc/libspirv/lib/generic/math/half_tan.cl @@ -6,8 +6,12 @@ // //===----------------------------------------------------------------------===// +#include #include -#define __CLC_BUILTIN __spirv_ocl_tan -#define __CLC_FUNCTION __spirv_ocl_half_tan -#include +#define __FLOAT_ONLY +#define FUNCTION __spirv_ocl_half_tan +#define __IMPL_FUNCTION(x) __clc_half_tan +#define __CLC_BODY + +#include