On Wed, Jul 30, 2025 at 1:24 AM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> Andrew Pinski <quic_apin...@quicinc.com> writes:
> > Right now in simplify_subreg, there is code to try to simplify for word_mode
> > with the binary bitwise operators. The unary bitwise operator is not handle,
> > this causes an odd mix match and the new self testing code that was added 
> > with
> > r16-2614-g965564eafb721f was not expecting.
> >
> > The self testing code was for testing the newly added code but since there
> > was already code that handles word_mode, we hit the mismatch but only
> > for targets where word_mode is SImode (or smaller).
> >
> > This adds the code to handle `not` in a similar fashion as the other
> > bitwise operators for word_mode.
> >
> > Bootstrapped and tested on x86_64-linux-gnu.
> >
> >       PR rtl-optimization/121308
> > gcc/ChangeLog:
> >
> >       * simplify-rtx.cc (simplify_context::simplify_subreg): Handle
> >       subreg of `not` with word_mode to make it symmetric with the
> >       other bitwise operators.
> >
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >  gcc/simplify-rtx.cc | 8 ++++++++
> >  1 file changed, 8 insertions(+)
> >
> > diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc
> > index 442da9f40fa..0e12cf9657b 100644
> > --- a/gcc/simplify-rtx.cc
> > +++ b/gcc/simplify-rtx.cc
> > @@ -8344,6 +8344,14 @@ simplify_context::simplify_subreg (machine_mode 
> > outermode, rtx op,
> >       return simplify_gen_binary (GET_CODE (op), outermode, op0, op1);
> >      }
> >
> > +  /* Attempt to simplify WORD_MODE SUBREGs of unary bitwise expression.  */
> > +  if (outermode == word_mode && GET_CODE (op) == NOT)
>
> I think we want the "&& SCALAR_INT_MODE_P (innermode)" too.
>
> OK with that change, and thanks for the fix.

Attached is what I pushed.

Thanks,
Andrew

>
> Richard
>
> > +    {
> > +      rtx op0 = simplify_subreg (outermode, XEXP (op, 0), innermode, byte);
> > +      if (op0)
> > +     return simplify_gen_unary (GET_CODE (op), outermode, op0, outermode);
> > +    }
> > +
> >    scalar_int_mode int_outermode, int_innermode;
> >    if (is_a <scalar_int_mode> (outermode, &int_outermode)
> >        && is_a <scalar_int_mode> (innermode, &int_innermode)

Attachment: v2-0001-simplify-rtx-Add-subreg-not-a-simplification-for-.patch
Description: Binary data

Reply via email to