On Tue, 18 Jul 2017, Tamar Christina wrote: > > > > 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.
I see. But the implementation challenge is that this interacts badly with SSA coalescing done before this and thus should really happen on GIMPLE before that. And yes, I also like to see more of this, it's basically doing some instruction selection on (late) GIMPLE. Ideally we'd be able to generate an expand.pd match.pd variant from the machine description (named) define_insns, creating IFNs that we know how to expand. Think of a combine pass combining GIMPLE stmts to (recognized) RTL insn (sequences). Until RTL expansion the RTL insn (sequence) would be represented by an internal function call (or alternatively for multi-output cases an GIMPLE ASM with enumerated asm text). Richard. > > 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) > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)