[libclc] [libclc] Enable `clang fp reciprocal` in clc_native_divide/recip/rsqrt/tan (PR #149269)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 17 01:32:44 PDT 2025
https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/149269
>From 9ac644cb8ed43ac28e0ee715f0a0e6bed4df470a Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Thu, 17 Jul 2025 10:02:20 +0200
Subject: [PATCH 1/2] [libclc] Enable `clang fp reciprocal` in
clc_native_divide/recip/rsqrt/tan
The pragma adds `arcp` flag to `fdiv` instruction in these functions.
The flag can provide better performance.
---
libclc/clc/lib/generic/math/clc_native_divide.inc | 1 +
libclc/clc/lib/generic/math/clc_native_recip.inc | 1 +
libclc/clc/lib/generic/math/clc_native_rsqrt.inc | 1 +
libclc/clc/lib/generic/math/clc_native_tan.inc | 1 +
4 files changed, 4 insertions(+)
diff --git a/libclc/clc/lib/generic/math/clc_native_divide.inc b/libclc/clc/lib/generic/math/clc_native_divide.inc
index fdf1794812c5a..684b521802043 100644
--- a/libclc/clc/lib/generic/math/clc_native_divide.inc
+++ b/libclc/clc/lib/generic/math/clc_native_divide.inc
@@ -8,5 +8,6 @@
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_divide(__CLC_GENTYPE x,
__CLC_GENTYPE y) {
+#pragma clang fp reciprocal(on)
return x / y;
}
diff --git a/libclc/clc/lib/generic/math/clc_native_recip.inc b/libclc/clc/lib/generic/math/clc_native_recip.inc
index 57eb35a9522f8..ff8d0b81c8b20 100644
--- a/libclc/clc/lib/generic/math/clc_native_recip.inc
+++ b/libclc/clc/lib/generic/math/clc_native_recip.inc
@@ -7,5 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_recip(__CLC_GENTYPE val) {
+#pragma clang fp reciprocal(on)
return 1.0f / val;
}
diff --git a/libclc/clc/lib/generic/math/clc_native_rsqrt.inc b/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
index 7a3b0b2af2721..ecf5898165c63 100644
--- a/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
+++ b/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
@@ -7,5 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_rsqrt(__CLC_GENTYPE val) {
+#pragma clang fp reciprocal(on)
return 1.0f / __clc_native_sqrt(val);
}
diff --git a/libclc/clc/lib/generic/math/clc_native_tan.inc b/libclc/clc/lib/generic/math/clc_native_tan.inc
index f61a78968a754..30ea5bfc35c95 100644
--- a/libclc/clc/lib/generic/math/clc_native_tan.inc
+++ b/libclc/clc/lib/generic/math/clc_native_tan.inc
@@ -7,5 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_tan(__CLC_GENTYPE val) {
+#pragma clang fp reciprocal(on)
return __clc_native_sin(val) / __clc_native_cos(val);
}
>From bea269bfbb260661ff4c1334f739efa7c5392a24 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Thu, 17 Jul 2025 10:31:15 +0200
Subject: [PATCH 2/2] use _Pragma
---
libclc/clc/lib/generic/math/clc_native_divide.inc | 2 +-
libclc/clc/lib/generic/math/clc_native_recip.inc | 2 +-
libclc/clc/lib/generic/math/clc_native_rsqrt.inc | 2 +-
libclc/clc/lib/generic/math/clc_native_tan.inc | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/libclc/clc/lib/generic/math/clc_native_divide.inc b/libclc/clc/lib/generic/math/clc_native_divide.inc
index 684b521802043..dac176fb986bd 100644
--- a/libclc/clc/lib/generic/math/clc_native_divide.inc
+++ b/libclc/clc/lib/generic/math/clc_native_divide.inc
@@ -8,6 +8,6 @@
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_divide(__CLC_GENTYPE x,
__CLC_GENTYPE y) {
-#pragma clang fp reciprocal(on)
+ _Pragma("clang fp reciprocal(on)");
return x / y;
}
diff --git a/libclc/clc/lib/generic/math/clc_native_recip.inc b/libclc/clc/lib/generic/math/clc_native_recip.inc
index ff8d0b81c8b20..e7246dc08a77c 100644
--- a/libclc/clc/lib/generic/math/clc_native_recip.inc
+++ b/libclc/clc/lib/generic/math/clc_native_recip.inc
@@ -7,6 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_recip(__CLC_GENTYPE val) {
-#pragma clang fp reciprocal(on)
+ _Pragma("clang fp reciprocal(on)");
return 1.0f / val;
}
diff --git a/libclc/clc/lib/generic/math/clc_native_rsqrt.inc b/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
index ecf5898165c63..2b2c4bdada9f9 100644
--- a/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
+++ b/libclc/clc/lib/generic/math/clc_native_rsqrt.inc
@@ -7,6 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_rsqrt(__CLC_GENTYPE val) {
-#pragma clang fp reciprocal(on)
+ _Pragma("clang fp reciprocal(on)");
return 1.0f / __clc_native_sqrt(val);
}
diff --git a/libclc/clc/lib/generic/math/clc_native_tan.inc b/libclc/clc/lib/generic/math/clc_native_tan.inc
index 30ea5bfc35c95..f0c6c6d37d2b7 100644
--- a/libclc/clc/lib/generic/math/clc_native_tan.inc
+++ b/libclc/clc/lib/generic/math/clc_native_tan.inc
@@ -7,6 +7,6 @@
//===----------------------------------------------------------------------===//
_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_native_tan(__CLC_GENTYPE val) {
-#pragma clang fp reciprocal(on)
+ _Pragma("clang fp reciprocal(on)");
return __clc_native_sin(val) / __clc_native_cos(val);
}
More information about the cfe-commits
mailing list