On Dec 20, 2024, Jakub Jelinek <ja...@redhat.com> wrote:

> On Wed, Dec 18, 2024 at 12:59:11AM -0300, Alexandre Oliva wrote:
>> * gcc.dg/field-merge-16.c: New.

> Note the test FAILs on i686-linux or on x86_64-linux with -m32.

Also fixed herein.


A number of tests that check for specific ifcombine transformations
fail on AVR and PRU targets, whose type sizes and alignments aren't
conducive of the expected transformations.  Adjust the expectations.

Most execution tests should run successfully regardless of the
transformations, but a few that could conceivably fail if short and
char have the same bit width now check for that and bypass the tests
that would fail.

Conversely, one test that had such a runtime test, but that would work
regardless, no longer has that runtime test, and its types are
narrowed so that the transformations on 32-bit targets are more likely
to be the same as those that used to take place on 64-bit targets.
This latter change is somewhat obviated by a separate patch, but I've
left it in place anyway.

Regstrapped on x86_64-linux-gnu.  I'd appreciate if someone who can test
AVR and PRU would confirm that it fixes all field-merge-* failures.  Ok
to install?


for  gcc/testsuite/ChangeLog

        PR testsuite/118025
        * field-merge-1.c: Skip BIT_FIELD_REF counting on AVR and PRU.
        * field-merge-3.c: Bypass the test if short doesn't have the
        expected size.
        * field-merge-8.c: Likewise.
        * field-merge-9.c: Likewise.  Skip optimization counting on
        AVR and PRU.
        * field-merge-14.c: Skip optimization counting on AVR and PRU.
        * field-merge-15.c: Likewise.
        * field-merge-17.c: Likewise.
        * field-merge-16.c: Likewise.  Drop runtime bypass.  Use
        smaller types.
---
 gcc/testsuite/gcc.dg/field-merge-1.c  |    2 +-
 gcc/testsuite/gcc.dg/field-merge-13.c |    2 +-
 gcc/testsuite/gcc.dg/field-merge-14.c |    3 ++-
 gcc/testsuite/gcc.dg/field-merge-15.c |    2 +-
 gcc/testsuite/gcc.dg/field-merge-16.c |   17 +++++++----------
 gcc/testsuite/gcc.dg/field-merge-17.c |    2 +-
 gcc/testsuite/gcc.dg/field-merge-3.c  |    2 ++
 gcc/testsuite/gcc.dg/field-merge-8.c  |    2 ++
 gcc/testsuite/gcc.dg/field-merge-9.c  |    4 +++-
 9 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/field-merge-1.c 
b/gcc/testsuite/gcc.dg/field-merge-1.c
index 1818e104437e1..4405d40ee79d8 100644
--- a/gcc/testsuite/gcc.dg/field-merge-1.c
+++ b/gcc/testsuite/gcc.dg/field-merge-1.c
@@ -58,7 +58,7 @@ int main () {
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "BIT_FIELD_REF" 8 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "BIT_FIELD_REF" 8 "optimized" { target { 
! { avr-*-* pru-*-* } } } } } */
 /* { dg-final { scan-assembler-not "cmpb" { target { i*86-*-* || x86_64-*-* } 
} } } */
 /* { dg-final { scan-assembler-times "cmpl" 8 { target { i*86-*-* || 
x86_64-*-* } } } } */
 /* { dg-final { scan-assembler-times "cmpw" 8 { target { powerpc*-*-* || 
rs6000-*-* } } } } */
diff --git a/gcc/testsuite/gcc.dg/field-merge-13.c 
b/gcc/testsuite/gcc.dg/field-merge-13.c
index 7e4f4c499347f..eeef73338f8e5 100644
--- a/gcc/testsuite/gcc.dg/field-merge-13.c
+++ b/gcc/testsuite/gcc.dg/field-merge-13.c
@@ -90,4 +90,4 @@ int main () {
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "optimizing" 9 "ifcombine" } } */
+/* { dg-final { scan-tree-dump-times "optimizing" 9 "ifcombine" { target { ! { 
avr-*-* pru-*-* } } } } } */
diff --git a/gcc/testsuite/gcc.dg/field-merge-14.c 
b/gcc/testsuite/gcc.dg/field-merge-14.c
index 91d84cfebf196..73259e0936e4e 100644
--- a/gcc/testsuite/gcc.dg/field-merge-14.c
+++ b/gcc/testsuite/gcc.dg/field-merge-14.c
@@ -1,7 +1,8 @@
 /* { dg-do run } */
 /* { dg-options "-O -fdump-tree-ifcombine-details" } */
 
-/* Check that we don't get confused by multiple conversions.  */
+/* Check that we don't get confused by multiple conversions.  Conceivably, we
+   could combine both tests using b, but the current logic won't do that.  */
 
 __attribute__((noipa))
 int f(int *a,int *d)
diff --git a/gcc/testsuite/gcc.dg/field-merge-15.c 
b/gcc/testsuite/gcc.dg/field-merge-15.c
index 34641e893c92f..fc38464527161 100644
--- a/gcc/testsuite/gcc.dg/field-merge-15.c
+++ b/gcc/testsuite/gcc.dg/field-merge-15.c
@@ -33,4 +33,4 @@ int main () {
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "optimizing" 6 "ifcombine" } } */
+/* { dg-final { scan-tree-dump-times "optimizing" 6 "ifcombine" { target { ! { 
avr-*-* pru-*-* } } } } } */
diff --git a/gcc/testsuite/gcc.dg/field-merge-16.c 
b/gcc/testsuite/gcc.dg/field-merge-16.c
index 2ca23ea663a45..afdaf45b6a949 100644
--- a/gcc/testsuite/gcc.dg/field-merge-16.c
+++ b/gcc/testsuite/gcc.dg/field-merge-16.c
@@ -4,17 +4,17 @@
 /* Check that tests for sign-extension bits are handled correctly.  */
 
 struct s {
-  short a;
-  short b;
-  unsigned short c;
-  unsigned short d;
-} __attribute__ ((aligned (8)));
+  signed char a;
+  signed char b;
+  unsigned char c;
+  unsigned char d;
+} __attribute__ ((aligned (4)));
 
 struct s p = { -1,  0, 0, 0 };
 struct s q = {  0, -1, 0, 0 };
 struct s r = {  1,  1, 0, 0 };
 
-const long long mask = 1ll << (sizeof (long long) * __CHAR_BIT__ - 5);
+const long mask = 1l << (sizeof (long) * __CHAR_BIT__ - 5);
 
 int fp ()
 {
@@ -50,9 +50,6 @@ int fr ()
 }
 
 int main () {
-  /* Unlikely, but play safe.  */
-  if (sizeof (long long) == sizeof (short))
-    return 0;
   if (fp () < 0
       || fq () < 0
       || fr () > 0)
@@ -63,4 +60,4 @@ int main () {
 /* We test .b after other fields instead of right after .a to give field
    merging a chance, otherwise the masked compares with zero are combined by
    other ifcombine logic.  The .c test is discarded by earlier optimizers.  */
-/* { dg-final { scan-tree-dump-times "optimizing" 6 "ifcombine" } } */
+/* { dg-final { scan-tree-dump-times "optimizing" 6 "ifcombine" { target { ! { 
avr-*-* pru-*-* } } } } } */
diff --git a/gcc/testsuite/gcc.dg/field-merge-17.c 
b/gcc/testsuite/gcc.dg/field-merge-17.c
index 06c8ec16e86c6..a42658ac5c516 100644
--- a/gcc/testsuite/gcc.dg/field-merge-17.c
+++ b/gcc/testsuite/gcc.dg/field-merge-17.c
@@ -43,4 +43,4 @@ int main () {
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "optimizing" 4 "ifcombine" } } */
+/* { dg-final { scan-tree-dump-times "optimizing" 4 "ifcombine" { target { ! { 
avr-*-* pru-*-* } } } } } */
diff --git a/gcc/testsuite/gcc.dg/field-merge-3.c 
b/gcc/testsuite/gcc.dg/field-merge-3.c
index f26e8a96ea04f..a9fe404fa4261 100644
--- a/gcc/testsuite/gcc.dg/field-merge-3.c
+++ b/gcc/testsuite/gcc.dg/field-merge-3.c
@@ -31,6 +31,8 @@ void f (void) {
 }
 
 int main () {
+  if (sizeof (short) != 2)
+    return 0;
   f ();
   return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/field-merge-8.c 
b/gcc/testsuite/gcc.dg/field-merge-8.c
index ae270e10070e4..7d49c2789013b 100644
--- a/gcc/testsuite/gcc.dg/field-merge-8.c
+++ b/gcc/testsuite/gcc.dg/field-merge-8.c
@@ -20,6 +20,8 @@ void f (void) {
 }
 
 int main () {
+  if (sizeof (short) != 2)
+    return 0;
   f ();
   return 0;
 }
diff --git a/gcc/testsuite/gcc.dg/field-merge-9.c 
b/gcc/testsuite/gcc.dg/field-merge-9.c
index 04df54c2b74ef..49ef59847ac07 100644
--- a/gcc/testsuite/gcc.dg/field-merge-9.c
+++ b/gcc/testsuite/gcc.dg/field-merge-9.c
@@ -29,8 +29,10 @@ void f (void) {
 }
 
 int main () {
+  if (sizeof (short) != 2)
+    return 0;
   f ();
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "optimizing two comparisons" 2 
"ifcombine" } } */
+/* { dg-final { scan-tree-dump-times "optimizing two comparisons" 2 
"ifcombine" { target { ! { avr-*-* pru-*-* } } } } } */


-- 
Alexandre Oliva, happy hacker            https://FSFLA.org/blogs/lxo/
   Free Software Activist                   GNU Toolchain Engineer
More tolerance and less prejudice are key for inclusion and diversity
Excluding neuro-others for not behaving ""normal"" is *not* inclusive

Reply via email to