On Mon, 10 Jul 2017, Tamar Christina wrote:

> Hi All,
> 
> I've re-spun the patch with the changes requested.
> 
> 
> This is only done when not honoring signaling NaNs.
> This transormation is done at expand time by using
> a new optab "xorsign". If the optab is not available
> then copysign is expanded as normal.
> 
> 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?

+static rtx
+maybe_expand_mult_copysign (tree treeop0, tree treeop1, rtx target)
+{
+  tree type = TREE_TYPE (treeop0);
+  rtx op0, op1;
+
+  if (HONOR_SNANS (type))
+    return NULL_RTX;
+
+  if (TREE_CODE (treeop0) == SSA_NAME && TREE_CODE (treeop1) == SSA_NAME)
+    {
+      gimple *call0 = SSA_NAME_DEF_STMT (treeop0);

you can't lookup arbitrary def stmts during RTL expansion but you
have to go through get_gimple_for_ssa_name which may return NULL
if SSA name coalescing makes doing so unsafe.

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

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