On Tue, Apr 08, 2014 at 10:26:30AM +0200, Richard Biener wrote: > On Mon, Apr 7, 2014 at 6:22 PM, Andreas Krebbel > <kreb...@linux.vnet.ibm.com> wrote: > > On Mon, Apr 07, 2014 at 04:19:06PM +0200, Richard Biener wrote: > >> The adjusted testcases now fail on x86_64/i?86 at least. See PR60776. > > > > They seem to require at least -O2 on x86 with that change. Ok to apply? > > Hmm, they passed before your change. Do you mean that this was > by accident (and only because of the special return value)? If so then > the patch is ok.
The reason why it worked with the if ... return 1; else return 0; case is that in that case it has already been expanded as store flag insn and thus in that case ce1 pass didn't discover the conditional move there, thus no dead code waiting to be eliminated after ce1 and still present during combine pass. Another alternative for -O2 would be -O -fno-if-conversion I guess. OT, when touching the testcase, I'd say it would be better if you've converted it to single dg-options + /* { dg-additional-options "-march=z900" { target s390*-*-* } } */ > > --- a/gcc/testsuite/gcc.dg/builtin-bswap-6.c > > +++ b/gcc/testsuite/gcc.dg/builtin-bswap-6.c > > @@ -1,7 +1,7 @@ > > /* { dg-do compile { target arm*-*-* alpha*-*-* i?86-*-* powerpc*-*-* > > rs6000-*-* x86_64-*-* s390*-*-* } } */ > > /* { dg-require-effective-target stdint_types } */ > > -/* { dg-options "-O -fdump-rtl-combine" } */ > > -/* { dg-options "-O -fdump-rtl-combine -march=z900" { target s390-*-* } } > > */ > > +/* { dg-options "-O2 -fdump-rtl-combine" } */ > > +/* { dg-options "-O2 -fdump-rtl-combine -march=z900" { target s390-*-* } } > > */ > > > > /* The test intentionally returns 1/2 instead of the obvious 0/1 to > > prevent GCC from calculating the return value with arithmetic > > diff --git a/gcc/testsuite/gcc.dg/builtin-bswap-7.c > > b/gcc/testsuite/gcc.dg/builtin-bswap-7.c > > index 0eecdd8..98529f2 100644 > > --- a/gcc/testsuite/gcc.dg/builtin-bswap-7.c > > +++ b/gcc/testsuite/gcc.dg/builtin-bswap-7.c > > @@ -1,7 +1,7 @@ > > /* { dg-do compile { target arm*-*-* alpha*-*-* ia64*-*-* x86_64-*-* > > s390x-*-* powerpc*-*-* rs6000-*-* } } */ > > /* { dg-require-effective-target stdint_types } */ > > /* { dg-require-effective-target lp64 } */ > > -/* { dg-options "-O -fdump-rtl-combine" } */ > > +/* { dg-options "-O2 -fdump-rtl-combine" } */ > > > > /* The test intentionally returns 1/2 instead of the obvious 0/1 to > > prevent GCC from calculating the return value with arithmetic > > Jakub