On Sat, 24 Jun 2017, Andrew Pinski wrote:

> On Mon, Jun 12, 2017 at 12:56 AM, Tamar Christina
> <tamar.christ...@arm.com> wrote:
> > Hi All,
> >
> > this patch implements a optimization rewriting
> >
> > x * copysign (1.0, y) and
> > x * copysign (-1.0, y)
> 
> 
> This reminds me:
> copysign(-1.0, y) can be just optimized to:
> copysign(1.0, y)

I think I suggested that in my earlie review.

> I did that in my patch here:
> https://gcc.gnu.org/ml/gcc-patches/2017-06/msg01860.html
> 
> This should allow you to reduce the number of patterns needed to match here.
> Note I still think we could do this in expand without a new
> builtin/internal function.
> I might go and code that up soonish.
> 
> Thanks,
> Andrew
> 
> >
> > to:
> >
> > x ^ (y & (1 << sign_bit_position))
> >
> > This is done by creating a special builtin during matching and generate the
> > appropriate instructions during expand. This new builtin is called XORSIGN.
> >
> > The expansion of xorsign depends on if the backend has an appropriate optab
> > available. If this is not the case then we use a modified version of the 
> > existing
> > copysign which does not take the abs value of the first argument as a fall 
> > back.
> >
> > This patch is a revival of a previous patch
> > https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00069.html
> >
> > Bootstrapped on both aarch64-none-linux-gnu and x86_64 with no issues.
> > Regression done on aarch64-none-linux-gnu and no regressions.
> >
> > Ok for trunk?
> >
> > gcc/
> > 2017-06-07  Tamar Christina  <tamar.christ...@arm.com>
> >
> >         * builtins.def (BUILT_IN_XORSIGN, BUILT_IN_XORSIGNF): New.
> >         (BUILT_IN_XORSIGNL, BUILT_IN_XORSIGN_FLOAT_NX): Likewise.
> >         * match.pd (mult (COPYSIGN:s real_onep @0) @1): New simplifier.
> >         (mult (COPYSIGN:s real_mus_onep @0) @1): Likewise.
> >         (copysigns @0 (negate @1)): Likewise.
> >         * builtins.c (expand_builtin_copysign): Promoted local to argument.
> >         (expand_builtin): Added CASE_FLT_FN_FLOATN_NX (BUILT_IN_XORSIGN) and
> >         CASE_FLT_FN (BUILT_IN_XORSIGN).
> >         (BUILT_IN_COPYSIGN): Updated function call.
> >         * optabs.h (expand_copysign): New bool.
> >         (expand_xorsign): New.
> >         * optabs.def (xorsign_optab): New.
> >         * optabs.c (expand_copysign): New parameter.
> >         * fortran/f95-lang.c (xorsignl, xorsign, xorsignf): New.
> >         * fortran/mathbuiltins.def (XORSIGN): New.
> >
> > gcc/testsuite/
> > 2017-06-07  Tamar Christina  <tamar.christ...@arm.com>
> >
> >         * gcc.dg/tree-ssa/xorsign.c: New.
> >         * gcc.dg/xorsign_exec.c: New.
> >         * gcc.dg/vec-xorsign_exec.c: New.
> >         * gcc.dg/tree-ssa/reassoc-39.c (f2, f3): Updated constant to 2.
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to