On Wed, 28 Sep 2016, Joseph Myers wrote: > On Wed, 28 Sep 2016, Richard Biener wrote: > > > Index: gcc/testsuite/gcc.dg/pr55152.c > > =================================================================== > > --- gcc/testsuite/gcc.dg/pr55152.c (revision 0) > > +++ gcc/testsuite/gcc.dg/pr55152.c (working copy) > > @@ -0,0 +1,13 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-O -ffinite-math-only -fstrict-overflow > > -fdump-tree-optimized" } */ > > + > > +double g (double a) > > +{ > > + return (a>=-a)?a:-a; > > You should need -fno-signed-zeros for this (that is, for the > transformation to MAX_EXPR), not -ffinite-math-only. For a == -0, that > function should return -0, but abs would produce +0.
This means that tree-ssa-phiopt.c has a bug: static bool minmax_replacement (basic_block cond_bb, basic_block middle_bb, edge e0, edge e1, gimple *phi, tree arg0, tree arg1) { ... /* The optimization may be unsafe due to NaNs. */ if (HONOR_NANS (type)) return false; and it should check HONOR_SIGNED_ZEROS as well. I'll fix that as a followup. Thanks, Richard.