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)
v2-0001-simplify-rtx-Add-subreg-not-a-simplification-for-.patch
Description: Binary data