> 
> Why's this now done during RTL expansion rather than during late GIMPLE,
> using match.pd and an internal function for xorsign?
> 

Mainly because of Andrew's email on the 10th which stated:

> But you should get the general idea.  I would like to see more of these 
> special expand patterns really.

And there were no objections so I figured this was also an acceptable solution.

> Thanks,
> Richard.
> 
> >
> > gcc/
> > 2017-07-10  Tamar Christina  <tamar.christ...@arm.com>
> >         Andrew Pinski <pins...@gmail.com>
> >
> >     PR middle-end/19706
> >     * expr.c (is_copysign_call_with_1): New.
> >     (maybe_expand_mult_copysign): Likewise.
> >     (expand_expr_real_2): Expand copysign.
> >     * optabs.def (xorsign_optab): New.
> >
> > ________________________________________
> > From: Andrew Pinski <pins...@gmail.com>
> > Sent: Monday, July 10, 2017 12:21:29 AM
> > To: Tamar Christina
> > Cc: GCC Patches; nd; l...@redhat.com; i...@airs.com; rguent...@suse.de
> > Subject: Re: [GCC][PATCH][mid-end] Optimize x * copysign (1.0, y)
> > [Patch (1/2)]
> >
> > 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)
> > >
> > > 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.
> >
> >
> > Note this is also PR 19706.
> >
> > Thanks,
> > Andrew
> >
> > >
> > > 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