https://gcc.gnu.org/g:2947add44fa30f6652dfa11ebe3ef6b7d4d4db2a

commit 2947add44fa30f6652dfa11ebe3ef6b7d4d4db2a
Author: Alexandre Oliva <ol...@gnu.org>
Date:   Thu May 8 20:18:19 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       | 3 ++-
 5 files changed, 14 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..e86af846449b 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 && { ! { 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 dbde681e3832..af58a7d5b333 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 && { ! { 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 287e51bbfc66..2421ca225e8d 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -8420,7 +8420,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]

Reply via email to