[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-17 Thread Matt Arsenault via llvm-branch-commits

arsenm wrote:

### Merge activity

* **Jun 18, 4:19 AM UTC**: A user started a stack merge that includes this pull 
request via 
[Graphite](https://app.graphite.dev/github/pr/llvm/llvm-project/144382).


https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-17 Thread Nemanja Ivanovic via llvm-branch-commits

https://github.com/nemanjai approved this pull request.

LGTM.
I believe that the finite functions are provided by GLIBC on PPC for F128, but 
perhaps someone from IBM can confirm (@lei137 @w2yehia @RolandF77).

https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread Matt Arsenault via llvm-branch-commits


@@ -321,6 +321,24 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::OGT_F128, "__gtkf2");
 setLibcallName(RTLIB::UO_F128, "__unordkf2");
 
+setLibcallName(RTLIB::ACOS_F128, "acosf128");
+setLibcallName(RTLIB::ASIN_F128, "asinf128");
+setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
+setLibcallName(RTLIB::ATAN_F128, "atanf128");
+setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
+setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
+setLibcallName(RTLIB::COSH_F128, "coshf128");
+setLibcallName(RTLIB::EXP10_F128, "exp10f128");
+setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
+setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
+setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
+setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
+setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
+setLibcallName(RTLIB::MODF_F128, "modff128");
+setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
+setLibcallName(RTLIB::SINH_F128, "sinhf128");
+setLibcallName(RTLIB::TANH_F128, "tanhf128");
+setLibcallName(RTLIB::TAN_F128, "tanf128");

arsenm wrote:

This is throwaway code that extracts the functional change out of a future 
patch that replaces this with shared tablegen 

https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread Nikita Popov via llvm-branch-commits


@@ -321,6 +321,24 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::OGT_F128, "__gtkf2");
 setLibcallName(RTLIB::UO_F128, "__unordkf2");
 
+setLibcallName(RTLIB::ACOS_F128, "acosf128");
+setLibcallName(RTLIB::ASIN_F128, "asinf128");
+setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
+setLibcallName(RTLIB::ATAN_F128, "atanf128");
+setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
+setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
+setLibcallName(RTLIB::COSH_F128, "coshf128");
+setLibcallName(RTLIB::EXP10_F128, "exp10f128");
+setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
+setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
+setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
+setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
+setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
+setLibcallName(RTLIB::MODF_F128, "modff128");
+setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
+setLibcallName(RTLIB::SINH_F128, "sinhf128");
+setLibcallName(RTLIB::TANH_F128, "tanhf128");
+setLibcallName(RTLIB::TAN_F128, "tanf128");

nikic wrote:

We should share this list with the x86 code above.

(Side note: This is probably only correct for gnu environments, similar to x86.)

https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread via llvm-branch-commits

llvmbot wrote:




@llvm/pr-subscribers-backend-powerpc

Author: Matt Arsenault (arsenm)


Changes

This wasn't setting the correct libcall names, which default to the
l suffixed libm names.

---
Full diff: https://github.com/llvm/llvm-project/pull/144382.diff


2 Files Affected:

- (modified) llvm/lib/IR/RuntimeLibcalls.cpp (+25) 
- (modified) llvm/test/CodeGen/PowerPC/f128-arith.ll (+24-24) 


``diff
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index d63d398e243f9..51d7738151237 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -321,6 +321,24 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::OGT_F128, "__gtkf2");
 setLibcallName(RTLIB::UO_F128, "__unordkf2");
 
+setLibcallName(RTLIB::ACOS_F128, "acosf128");
+setLibcallName(RTLIB::ASIN_F128, "asinf128");
+setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
+setLibcallName(RTLIB::ATAN_F128, "atanf128");
+setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
+setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
+setLibcallName(RTLIB::COSH_F128, "coshf128");
+setLibcallName(RTLIB::EXP10_F128, "exp10f128");
+setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
+setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
+setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
+setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
+setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
+setLibcallName(RTLIB::MODF_F128, "modff128");
+setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
+setLibcallName(RTLIB::SINH_F128, "sinhf128");
+setLibcallName(RTLIB::TANH_F128, "tanhf128");
+setLibcallName(RTLIB::TAN_F128, "tanf128");
 setLibcallName(RTLIB::LOG_F128, "logf128");
 setLibcallName(RTLIB::LOG2_F128, "log2f128");
 setLibcallName(RTLIB::LOG10_F128, "log10f128");
@@ -347,6 +365,13 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::FMA_F128, "fmaf128");
 setLibcallName(RTLIB::FREXP_F128, "frexpf128");
 
+// TODO: Do these exist?
+setLibcallName(RTLIB::EXP_FINITE_F128, nullptr);
+setLibcallName(RTLIB::EXP2_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG2_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG10_FINITE_F128, nullptr);
+
 if (TT.isOSAIX()) {
   bool isPPC64 = TT.isPPC64();
   setLibcallName(RTLIB::MEMCPY, isPPC64 ? "___memmove64" : "___memmove");
diff --git a/llvm/test/CodeGen/PowerPC/f128-arith.ll 
b/llvm/test/CodeGen/PowerPC/f128-arith.ll
index ffa7ac6cb0078..f9c953d483ff2 100644
--- a/llvm/test/CodeGen/PowerPC/f128-arith.ll
+++ b/llvm/test/CodeGen/PowerPC/f128-arith.ll
@@ -1413,7 +1413,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl acosl
+; CHECK-NEXT:bl acosf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1427,7 +1427,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl acosl
+; CHECK-P8-NEXT:bl acosf128
 ; CHECK-P8-NEXT:nop
 ; CHECK-P8-NEXT:addi r1, r1, 32
 ; CHECK-P8-NEXT:ld r0, 16(r1)
@@ -1445,7 +1445,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl asinl
+; CHECK-NEXT:bl asinf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1459,7 +1459,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl asinl
+; CHECK-P8-NEXT:bl asinf128
 ; CHECK-P8-NEXT:nop
 ; CHECK-P8-NEXT:addi r1, r1, 32
 ; CHECK-P8-NEXT:ld r0, 16(r1)
@@ -1477,7 +1477,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl atanl
+; CHECK-NEXT:bl atanf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1491,7 +1491,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl atanl
+; CHECK-P8-NEXT:bl atanf128
 ; CHECK-P8-NEXT:nop
 ; CHECK-P8-NEXT:addi r1, r1, 32
 ; CHECK-P8-NEXT:ld r0, 16(r1)
@@ -1509,7 +1509,7 @@ define dso_local fp128 @atan2_f128(fp128 %x, fp128 %y) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 1

[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread Matt Arsenault via llvm-branch-commits

https://github.com/arsenm ready_for_review 
https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread Matt Arsenault via llvm-branch-commits

arsenm wrote:

> [!WARNING]
> This pull request is not mergeable via GitHub because a downstack PR is 
> open. Once all requirements are satisfied, merge this PR as a stack  href="https://app.graphite.dev/github/pr/llvm/llvm-project/144382?utm_source=stack-comment-downstack-mergeability-warning";
>  >on Graphite.
> https://graphite.dev/docs/merge-pull-requests";>Learn more

* **#144382** https://app.graphite.dev/github/pr/llvm/llvm-project/144382?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/> 👈 https://app.graphite.dev/github/pr/llvm/llvm-project/144382?utm_source=stack-comment-view-in-graphite";
 target="_blank">(View in Graphite)
* **#144381** https://app.graphite.dev/github/pr/llvm/llvm-project/144381?utm_source=stack-comment-icon";
 target="_blank">https://static.graphite.dev/graphite-32x32-black.png"; alt="Graphite" 
width="10px" height="10px"/>
* `main`




This stack of pull requests is managed by https://graphite.dev?utm-source=stack-comment";>Graphite. Learn 
more about https://stacking.dev/?utm_source=stack-comment";>stacking.


https://github.com/llvm/llvm-project/pull/144382
___
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)

2025-06-16 Thread Matt Arsenault via llvm-branch-commits

https://github.com/arsenm created 
https://github.com/llvm/llvm-project/pull/144382

This wasn't setting the correct libcall names, which default to the
l suffixed libm names.

>From 2c41a2154737d1e237fcfefecf1638a80dc09da1 Mon Sep 17 00:00:00 2001
From: Matt Arsenault 
Date: Tue, 17 Jun 2025 01:03:13 +0900
Subject: [PATCH] PowerPC: Fix using long double libm functions for f128
 intrinsics

This wasn't setting the correct libcall names, which default to the
l suffixed libm names.
---
 llvm/lib/IR/RuntimeLibcalls.cpp | 25 +
 llvm/test/CodeGen/PowerPC/f128-arith.ll | 48 -
 2 files changed, 49 insertions(+), 24 deletions(-)

diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index d63d398e243f9..51d7738151237 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -321,6 +321,24 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::OGT_F128, "__gtkf2");
 setLibcallName(RTLIB::UO_F128, "__unordkf2");
 
+setLibcallName(RTLIB::ACOS_F128, "acosf128");
+setLibcallName(RTLIB::ASIN_F128, "asinf128");
+setLibcallName(RTLIB::ATAN2_F128, "atan2f128");
+setLibcallName(RTLIB::ATAN_F128, "atanf128");
+setLibcallName(RTLIB::CBRT_F128, "cbrtf128");
+setLibcallName(RTLIB::COPYSIGN_F128, "copysignf128");
+setLibcallName(RTLIB::COSH_F128, "coshf128");
+setLibcallName(RTLIB::EXP10_F128, "exp10f128");
+setLibcallName(RTLIB::FMAXIMUM_F128, "fmaximumf128");
+setLibcallName(RTLIB::FMAXIMUM_NUM_F128, "fmaximum_numf128");
+setLibcallName(RTLIB::FMINIMUM_F128, "fminimumf128");
+setLibcallName(RTLIB::FMINIMUM_NUM_F128, "fminimum_numf128");
+setLibcallName(RTLIB::LDEXP_F128, "ldexpf128");
+setLibcallName(RTLIB::MODF_F128, "modff128");
+setLibcallName(RTLIB::ROUNDEVEN_F128, "roundevenf128");
+setLibcallName(RTLIB::SINH_F128, "sinhf128");
+setLibcallName(RTLIB::TANH_F128, "tanhf128");
+setLibcallName(RTLIB::TAN_F128, "tanf128");
 setLibcallName(RTLIB::LOG_F128, "logf128");
 setLibcallName(RTLIB::LOG2_F128, "log2f128");
 setLibcallName(RTLIB::LOG10_F128, "log10f128");
@@ -347,6 +365,13 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT) {
 setLibcallName(RTLIB::FMA_F128, "fmaf128");
 setLibcallName(RTLIB::FREXP_F128, "frexpf128");
 
+// TODO: Do these exist?
+setLibcallName(RTLIB::EXP_FINITE_F128, nullptr);
+setLibcallName(RTLIB::EXP2_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG2_FINITE_F128, nullptr);
+setLibcallName(RTLIB::LOG10_FINITE_F128, nullptr);
+
 if (TT.isOSAIX()) {
   bool isPPC64 = TT.isPPC64();
   setLibcallName(RTLIB::MEMCPY, isPPC64 ? "___memmove64" : "___memmove");
diff --git a/llvm/test/CodeGen/PowerPC/f128-arith.ll 
b/llvm/test/CodeGen/PowerPC/f128-arith.ll
index ffa7ac6cb0078..f9c953d483ff2 100644
--- a/llvm/test/CodeGen/PowerPC/f128-arith.ll
+++ b/llvm/test/CodeGen/PowerPC/f128-arith.ll
@@ -1413,7 +1413,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl acosl
+; CHECK-NEXT:bl acosf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1427,7 +1427,7 @@ define dso_local fp128 @acos_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl acosl
+; CHECK-P8-NEXT:bl acosf128
 ; CHECK-P8-NEXT:nop
 ; CHECK-P8-NEXT:addi r1, r1, 32
 ; CHECK-P8-NEXT:ld r0, 16(r1)
@@ -1445,7 +1445,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl asinl
+; CHECK-NEXT:bl asinf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1459,7 +1459,7 @@ define dso_local fp128 @asin_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl asinl
+; CHECK-P8-NEXT:bl asinf128
 ; CHECK-P8-NEXT:nop
 ; CHECK-P8-NEXT:addi r1, r1, 32
 ; CHECK-P8-NEXT:ld r0, 16(r1)
@@ -1477,7 +1477,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
 ; CHECK-NEXT:std r0, 48(r1)
 ; CHECK-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-NEXT:.cfi_offset lr, 16
-; CHECK-NEXT:bl atanl
+; CHECK-NEXT:bl atanf128
 ; CHECK-NEXT:nop
 ; CHECK-NEXT:addi r1, r1, 32
 ; CHECK-NEXT:ld r0, 16(r1)
@@ -1491,7 +1491,7 @@ define dso_local fp128 @atan_f128(fp128 %x) {
 ; CHECK-P8-NEXT:std r0, 48(r1)
 ; CHECK-P8-NEXT:.cfi_def_cfa_offset 32
 ; CHECK-P8-NEXT:.cfi_offset lr, 16
-; CHECK-P8-NEXT:bl atanl
+; CHECK-P8-NEXT:bl atanf128
 ; CHECK-P8-NEXT:nop