On Wed, Oct 23, 2024 at 8:38 PM Jeff Law <jeffreya...@gmail.com> wrote:
>
>
>
> On 10/20/24 3:18 PM, Andrew Pinski wrote:
> > The gimple (and generic) levels have this optmization since 
> > r12-2041-g7d6979197274a662da7bdc5.
> > It seems like a good idea to add a similar one to rtl just in case it is 
> > not caught at the
> > gimple level.
> >
> > Note the loop case in csel-neg-1.c is not handled at the gimple level (even 
> > with phiopt turned back on),
> > this is because of casts to avoid signed integer overflow; a patch to fix 
> > this at the gimple level will be
> > submitted seperately.
> >
> > Build and tested for aarch64-linux-gnu.
> >
> >       PR rtl-optimization/58195
> >
> > gcc/ChangeLog:
> >
> >       * simplify-rtx.cc (simplify_context::simplify_ternary_operation): 
> > Handle
> >       `a != 0 ? -a : 0` and `a == 0 ? 0 : -a`.
> >
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.target/aarch64/csel-neg-1.c: New test.
> >
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >   gcc/simplify-rtx.cc                           | 22 +++++++++++++
> >   gcc/testsuite/gcc.target/aarch64/csel-neg-1.c | 31 +++++++++++++++++++
> >   2 files changed, 53 insertions(+)
> >   create mode 100644 gcc/testsuite/gcc.target/aarch64/csel-neg-1.c
> >
> > diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
> > index 4d024ec523b..93a1b707425 100644
> > --- a/gcc/simplify-rtx.cc
> > +++ b/gcc/simplify-rtx.cc
> > @@ -6909,6 +6909,28 @@ simplify_context::simplify_ternary_operation 
> > (rtx_code code, machine_mode mode,
> >                 && rtx_equal_p (XEXP (op0, 1), op1))))
> >       return op2;
> >
> > +      /* Convert a != 0 ? -a : 0 into "-a".  */
> > +      if (GET_CODE (op0) == NE
> > +       && ! side_effects_p (op0)
> > +       && ! HONOR_NANS (mode)
> > +       && ! HONOR_SIGNED_ZEROS (mode)
> > +       && XEXP (op0, 1) == const0_rtx
> > +       && op2 == const0_rtx
> Shouldn't we be using CONST0_RTX (mode) rather than referencing
> const0_rtx directly?

yes it should.

This is what I pushed after a testing for aarch64 again.
Also I added a new testcase for the float case which is now works with
the above change.

Thanks,
Andrew

>
> OK with that change in both clauses.
>
> Jeff

Attachment: v2-0001-simplify-rtx-Handle-a-0-a-0-PR58195.patch
Description: Binary data

Reply via email to