On Tue, 18 Jul 2017, Tamar Christina wrote: > > > 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. > > Fair enough, Just to check I understood correctly. > > It should be a match.pd rule that uses a match predicate, so expand in > gimple-match.c. but don't do this if the target doesn't have the xorsign > optab and don't do it if honouring SNAN.
Note that this will trigger too early (IMHO), so unless you feel like inventing new infrastructure I'd put manual pattern matching in tree-ssa-math-opts.c pass_optimize_widening_mul where we currently do this kind of "late GIMPLE instruction selection". Richard. > I'll make the changes then. > Thanks, > Tamar > > > > > 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) > > -- Richard Biener <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)