https://gcc.gnu.org/g:68981680a46ca69c96597dfa96adbb88563ccc83
commit 68981680a46ca69c96597dfa96adbb88563ccc83 Author: Alexandre Oliva <ol...@gnu.org> Date: Fri Dec 20 18:58:01 2024 -0300 testsuite: generalize ifcombine field-merge tests [PR118025] Diff: --- 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 1818e104437e..4405d40ee79d 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 7e4f4c499347..eeef73338f8e 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 91d84cfebf19..73259e0936e4 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 34641e893c92..fc3846452716 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 2ca23ea663a4..afdaf45b6a94 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 06c8ec16e86c..a42658ac5c51 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 f26e8a96ea04..a9fe404fa426 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 ae270e10070e..7d49c2789013 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 04df54c2b74e..49ef59847ac0 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-*-* } } } } } */