This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Adjust builtin-bswap-6/7


On Tue, Apr 08, 2014 at 10:26:30AM +0200, Richard Biener wrote:
> On Mon, Apr 7, 2014 at 6:22 PM, Andreas Krebbel
> <krebbel@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]