[gcc(refs/users/aoliva/heads/testme)] [testsuite] [ppc] add -mpowerpc-gfxopt or -mcmpb to copysign tests
Alexandre Oliva
aoliva@gcc.gnu.org
Tue Feb 10 04:43:23 GMT 2026
https://gcc.gnu.org/g:792de2c11d9a5eae87de3e564e9466597898ae40
commit 792de2c11d9a5eae87de3e564e9466597898ae40
Author: Alexandre Oliva <oliva@adacore.com>
Date: Thu May 8 20:18:19 2025 -0300
[testsuite] [ppc] add -mpowerpc-gfxopt or -mcmpb to copysign tests
When it comes to ifn_copysign on ppc, for SFmode and DFmode, the
conditions are quite elaborate. It takes hard_float in addition to any
of -mcmpb, vsx vectors for the mode, or -mpowerpc-gfxopt with fast-math
(-ffinith-math-only and -fno-signed-zeros).
A number of ifn_copysign tests add custom options for x86, so I'm
adding only the ppc hard_float requirement to ifn_copysign, and ppc
options that suffice to enable ifn_copysign along with other options
already present in each test.
As on s390, ppc prefers copysign over -abs. This encompasses 64-bit
long double, but not 128-bit long double. Adjust the tests to cover
both.
for gcc/testsuite/ChangeLog
* lib/target-supports.exp (check_effective_target_ifn_copysign):
Require hard float on ppc.
* gcc.dg/pr55152-2.c: Add -mpowerpc-gfxopt on ppc.
* gcc.dg/tree-ssa/copy-sign-2.c: Likewise.
* gcc.dg/fold-copysign-1.c: Add -mcmpb on ppc.
* gcc.dg/abs-4.c: Likewise. Expect 3 copysigns on ppc
longdouble64, and 2 on longdouble128.
* gcc.dg/tree-ssa/backprop-6.c: Likewise. Likewise.
Diff:
---
gcc/testsuite/gcc.dg/fold-copysign-1.c | 1 +
gcc/testsuite/gcc.dg/pr55152-2.c | 1 +
gcc/testsuite/gcc.dg/tree-ssa/abs-4.c | 9 +++++----
gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c | 9 +++++----
gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c | 1 +
gcc/testsuite/lib/target-supports.exp | 3 ++-
6 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/gcc/testsuite/gcc.dg/fold-copysign-1.c b/gcc/testsuite/gcc.dg/fold-copysign-1.c
index b65c08bd9a08..f9b3ba19f99b 100644
--- a/gcc/testsuite/gcc.dg/fold-copysign-1.c
+++ b/gcc/testsuite/gcc.dg/fold-copysign-1.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-cddce1" } */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-additional-options "-mcmpb" { target { powerpc*-*-* } } } */
/* { dg-additional-options "-mdouble=64" { target { avr-*-* } } } */
double foo (double x)
diff --git a/gcc/testsuite/gcc.dg/pr55152-2.c b/gcc/testsuite/gcc.dg/pr55152-2.c
index 7533ab4db601..40933f7f9dc4 100644
--- a/gcc/testsuite/gcc.dg/pr55152-2.c
+++ b/gcc/testsuite/gcc.dg/pr55152-2.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O -ffinite-math-only -fno-signed-zeros -fstrict-overflow -fdump-tree-optimized" } */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-additional-options "-mpowerpc-gfxopt" { target { powerpc*-*-* } } } */
double g (double a)
{
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c b/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c
index f43018d0dff4..c58d24834ab4 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/abs-4.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-optimized" } */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-additional-options "-mcmpb" { target { powerpc*-*-* } } } */
/* PR tree-optimization/109829 */
float abs_f(float x) { return __builtin_signbit(x) ? x : -x; }
@@ -10,9 +11,9 @@ long double abs_ld(long double x) { return __builtin_signbit(x) ? x : -x; }
/* __builtin_signbit(x) ? x : -x. Should be convert into - ABS_EXP<x> */
/* { dg-final { scan-tree-dump-not "signbit" "optimized"} } */
-/* { dg-final { scan-tree-dump-times "= ABS_EXPR" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times "= -" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 2 "optimized" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 3 "optimized" { target { ifn_copysign && s390*-*-* } } } } */
+/* { dg-final { scan-tree-dump-times "= ABS_EXPR" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times "= -" 1 "optimized" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 2 "optimized" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 3 "optimized" { target { ifn_copysign && { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } */
/* { dg-final { scan-tree-dump-times "= ABS_EXPR" 3 "optimized" { target { ! ifn_copysign } } } } */
/* { dg-final { scan-tree-dump-times "= -" 3 "optimized" { target { ! ifn_copysign } } } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c b/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c
index efb53f17f861..2aa8980afe7a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/backprop-6.c
@@ -1,6 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-O -fdump-tree-backprop-details" } */
/* { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-additional-options "-mcmpb" { target { powerpc*-*-* } } } */
void start (void *);
void end (void *);
@@ -27,9 +28,9 @@ TEST_FUNCTION (float, f)
TEST_FUNCTION (double, )
TEST_FUNCTION (long double, l)
-/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 4 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 2 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 1 "backprop" { target { ifn_copysign && { ! { s390*-*-* } } } } } } */
-/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 3 "backprop" { target { ifn_copysign && s390*-*-* } } } } */
+/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 4 "backprop" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 2 "backprop" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 1 "backprop" { target { ifn_copysign && { ! { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } } */
+/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 3 "backprop" { target { ifn_copysign && { s390*-*-* || { powerpc*-*-* && longdouble64 } } } } } } */
/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = -} 6 "backprop" { target { ! ifn_copysign } } } } */
/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 3 "backprop" { target { ! ifn_copysign } } } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c b/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c
index e43bc315bef2..bc1aa698faac 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/copy-sign-2.c
@@ -1,5 +1,6 @@
/* { dg-options "-O2 -ffast-math -fdump-tree-optimized" } */
/* { dg-additional-options "-msse -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
+/* { dg-additional-options "-mpowerpc-gfxopt" { target { powerpc*-*-* } } } */
/* { dg-do compile } */
float f(float x)
{
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index c87918275569..5834b6858dd2 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -8723,7 +8723,8 @@ proc check_effective_target_ifn_copysign { } {
&& [is-effective-target sse])
|| ([istarget loongarch*-*-*]
&& [check_effective_target_hard_float])
- || [istarget powerpc*-*-*]
+ || ([istarget powerpc*-*-*]
+ && [check_effective_target_hard_float])
|| [istarget alpha*-*-*]
|| [istarget aarch64*-*-*]
|| [is-effective-target arm_neon]
More information about the Gcc-cvs
mailing list