[libclc] 1357279 - [libclc] Move rsqrt to the CLC library (#129045)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 27 07:47:02 PST 2025


Author: Fraser Cormack
Date: 2025-02-27T15:46:58Z
New Revision: 1357279df9d255ac60cec0dd755349a12083c8b0

URL: https://github.com/llvm/llvm-project/commit/1357279df9d255ac60cec0dd755349a12083c8b0
DIFF: https://github.com/llvm/llvm-project/commit/1357279df9d255ac60cec0dd755349a12083c8b0.diff

LOG: [libclc] Move rsqrt to the CLC library (#129045)

This also adds missing half variants to certain targets.

It also optimizes some targets' implementations to perform the operation
directly in vector types, as opposed to scalarizing.

Added: 
    libclc/clc/include/clc/math/clc_rsqrt.h
    libclc/clc/lib/generic/math/clc_rsqrt.cl
    libclc/clc/lib/generic/math/clc_rsqrt.inc
    libclc/clc/lib/r600/SOURCES
    libclc/clc/lib/r600/math/clc_rsqrt_override.cl

Modified: 
    libclc/CMakeLists.txt
    libclc/clc/lib/generic/SOURCES
    libclc/generic/lib/math/rsqrt.cl
    libclc/r600/lib/SOURCES

Removed: 
    libclc/r600/lib/math/rsqrt.cl


################################################################################
diff  --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index 8f076be1599db..cc1abda7d7fce 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -31,6 +31,7 @@ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
   clc/lib/amdgcn/SOURCES;
   clc/lib/amdgpu/SOURCES;
   clc/lib/clspv/SOURCES;
+  clc/lib/r600/SOURCES;
   clc/lib/spirv/SOURCES;
 )
 

diff  --git a/libclc/clc/include/clc/math/clc_rsqrt.h b/libclc/clc/include/clc/math/clc_rsqrt.h
new file mode 100644
index 0000000000000..f05ef73074d26
--- /dev/null
+++ b/libclc/clc/include/clc/math/clc_rsqrt.h
@@ -0,0 +1,12 @@
+#ifndef __CLC_MATH_CLC_RSQRT_H__
+#define __CLC_MATH_CLC_RSQRT_H__
+
+#define __CLC_BODY <clc/math/unary_decl.inc>
+#define __CLC_FUNCTION __clc_rsqrt
+
+#include <clc/math/gentype.inc>
+
+#undef __CLC_BODY
+#undef __CLC_FUNCTION
+
+#endif // __CLC_MATH_CLC_RSQRT_H__

diff  --git a/libclc/clc/lib/generic/SOURCES b/libclc/clc/lib/generic/SOURCES
index 97c504d21aa88..206c7c18ce1a1 100644
--- a/libclc/clc/lib/generic/SOURCES
+++ b/libclc/clc/lib/generic/SOURCES
@@ -33,6 +33,7 @@ math/clc_nan.cl
 math/clc_nextafter.cl
 math/clc_rint.cl
 math/clc_round.cl
+math/clc_rsqrt.cl
 math/clc_sqrt.cl
 math/clc_sw_fma.cl
 math/clc_trunc.cl

diff  --git a/libclc/clc/lib/generic/math/clc_rsqrt.cl b/libclc/clc/lib/generic/math/clc_rsqrt.cl
new file mode 100644
index 0000000000000..b7a72e90850c9
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_rsqrt.cl
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2014,2015 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <clc/internal/clc.h>
+
+#define __CLC_BODY <clc_rsqrt.inc>
+#include <clc/math/gentype.inc>

diff  --git a/libclc/clc/lib/generic/math/clc_rsqrt.inc b/libclc/clc/lib/generic/math/clc_rsqrt.inc
new file mode 100644
index 0000000000000..88e1ce3e3b3fb
--- /dev/null
+++ b/libclc/clc/lib/generic/math/clc_rsqrt.inc
@@ -0,0 +1,5 @@
+__attribute__((weak)) _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE
+__clc_rsqrt(__CLC_GENTYPE val) {
+#pragma clang fp contract(fast)
+  return __CLC_FP_LIT(1.0) / __builtin_elementwise_sqrt(val);
+}

diff  --git a/libclc/clc/lib/r600/SOURCES b/libclc/clc/lib/r600/SOURCES
new file mode 100644
index 0000000000000..8f66107e0454e
--- /dev/null
+++ b/libclc/clc/lib/r600/SOURCES
@@ -0,0 +1 @@
+math/clc_rsqrt_override.cl

diff  --git a/libclc/clc/lib/r600/math/clc_rsqrt_override.cl b/libclc/clc/lib/r600/math/clc_rsqrt_override.cl
new file mode 100644
index 0000000000000..86d8b2e12f53a
--- /dev/null
+++ b/libclc/clc/lib/r600/math/clc_rsqrt_override.cl
@@ -0,0 +1,20 @@
+#include <clc/clcmacro.h>
+#include <clc/internal/clc.h>
+
+_CLC_OVERLOAD _CLC_DEF float __clc_rsqrt(float x) {
+  return __builtin_r600_recipsqrt_ieeef(x);
+}
+
+_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, __clc_rsqrt, float);
+
+#ifdef cl_khr_fp64
+
+#pragma OPENCL EXTENSION cl_khr_fp64 : enable
+
+_CLC_OVERLOAD _CLC_DEF double __clc_rsqrt(double x) {
+  return __builtin_r600_recipsqrt_ieee(x);
+}
+
+_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, __clc_rsqrt, double);
+
+#endif

diff  --git a/libclc/generic/lib/math/rsqrt.cl b/libclc/generic/lib/math/rsqrt.cl
index b38d4a1c3cc82..150d6e0927170 100644
--- a/libclc/generic/lib/math/rsqrt.cl
+++ b/libclc/generic/lib/math/rsqrt.cl
@@ -1,22 +1,7 @@
 #include <clc/clc.h>
-#include <clc/clcmacro.h>
+#include <clc/math/clc_rsqrt.h>
 
-_CLC_OVERLOAD _CLC_DEF float rsqrt(float x)
-{
-    return 1.0f / sqrt(x);
-}
+#define FUNCTION rsqrt
+#define __CLC_BODY <clc/shared/unary_def.inc>
 
-_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, rsqrt, float);
-
-#ifdef cl_khr_fp64
-
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-
-_CLC_OVERLOAD _CLC_DEF double rsqrt(double x)
-{
-    return 1.0 / sqrt(x);
-}
-
-_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, rsqrt, double);
-
-#endif
+#include <clc/math/gentype.inc>

diff  --git a/libclc/r600/lib/SOURCES b/libclc/r600/lib/SOURCES
index 6e01bbb2b8b99..cad45785dc483 100644
--- a/libclc/r600/lib/SOURCES
+++ b/libclc/r600/lib/SOURCES
@@ -1,7 +1,6 @@
 math/fmax.cl
 math/fmin.cl
 math/native_rsqrt.cl
-math/rsqrt.cl
 synchronization/barrier.cl
 workitem/get_global_offset.cl
 workitem/get_group_id.cl

diff  --git a/libclc/r600/lib/math/rsqrt.cl b/libclc/r600/lib/math/rsqrt.cl
deleted file mode 100644
index 53f7d4040463f..0000000000000
--- a/libclc/r600/lib/math/rsqrt.cl
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <clc/clc.h>
-#include <clc/clcmacro.h>
-
-_CLC_OVERLOAD _CLC_DEF float rsqrt(float x)
-{
-    return __builtin_r600_recipsqrt_ieeef(x);
-}
-
-_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, float, rsqrt, float);
-
-#ifdef cl_khr_fp64
-
-#pragma OPENCL EXTENSION cl_khr_fp64 : enable
-
-_CLC_OVERLOAD _CLC_DEF double rsqrt(double x)
-{
-    return __builtin_r600_recipsqrt_ieee(x);
-}
-
-_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, double, rsqrt, double);
-
-#endif


        


More information about the cfe-commits mailing list