https://gcc.gnu.org/g:e639772f09eba78dda05b839dcab413fc4a78bd3
commit e639772f09eba78dda05b839dcab413fc4a78bd3 Author: Alexandre Oliva <ol...@adacore.com> Date: Thu May 8 02:19:07 2025 -0300 [testsuite] [ppc] add -mpowerpc-gfxopt or -mcmpb to copysign tests Requiring float128_sw for ifn_copysign on ppc was an error; for SFmode and DFmode, the condition is far more 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, so adjust the tests. 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. * gcc.dg/tree-ssa/backprop-6.c: Likewise. Likewise. Diff: --- 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 | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gcc/testsuite/gcc.dg/pr55152-2.c b/gcc/testsuite/gcc.dg/pr55152-2.c index 24068cffa4a8..ed293c0cae3e 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 "-msse -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 4144d1cd954a..4d2654af3bd7 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 "-msse -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 && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= -" 1 "optimized" { target { ifn_copysign && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 2 "optimized" { target { ifn_copysign && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times "= \.COPYSIGN" 3 "optimized" { target { ifn_copysign && { powerpc*-*-* s390*-*-* } } } } } */ /* { 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 dbde681e3832..42db33107aea 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 "-msse -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 && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 2 "backprop" { target { ifn_copysign && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = ABS_EXPR <} 1 "backprop" { target { ifn_copysign && { ! { powerpc*-*-* s390*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {Deleting[^\n]* = \.COPYSIGN} 3 "backprop" { target { ifn_copysign && { powerpc*-*-* s390*-*-* } } } } } */ /* { 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 d86ff3f9738b..2421ca225e8d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8421,7 +8421,7 @@ proc check_effective_target_ifn_copysign { } { || ([istarget loongarch*-*-*] && [check_effective_target_hard_float]) || ([istarget powerpc*-*-*] - && [check_ppc_float128_sw_available]) + && [check_effective_target_hard_float]) || [istarget alpha*-*-*] || [istarget aarch64*-*-*] || [is-effective-target arm_neon]