[llvm-branch-commits] [llvm] PowerPC: Fix using long double libm functions for f128 intrinsics (PR #144382)
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)
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)
@@ -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)
@@ -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)
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)
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)
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)
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
