This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH v3] Do not simplify "(and (reg) (const bit))" to if_then_else.
On Mon, 2016-12-05 at 04:00 -0600, Segher Boessenkool wrote:
> On Mon, Dec 05, 2016 at 10:22:13AM +0100, Dominik Vogt wrote:
> >
> > On Sat, Dec 03, 2016 at 07:19:13PM -0600, Segher Boessenkool wrote:
> > >
> > > [ I did not see this patch before, sorry. ]
> > >
> > > This causes the second half of PR78638.
> > >
> > > On Thu, Dec 01, 2016 at 04:30:08PM +0100, Dominik Vogt wrote:
> > > >
> > > > --- a/gcc/combine.c
> > > > +++ b/gcc/combine.c
> > > > @@ -5600,6 +5600,18 @@ combine_simplify_rtx (rtx x,
> > > > machine_mode op0_mode, int in_dest,
> > > > && OBJECT_P (SUBREG_REG (XEXP (x,
> > > > 0)))))))
> > > > {
> > > > rtx cond, true_rtx, false_rtx;
> > > > + unsigned HOST_WIDE_INT nz;
> > > > +
> > > > + /* If the operation is an AND wrapped in a SIGN_EXTEND
> > > > or ZERO_EXTEND with
> > > > + either operand being just a constant single bit
> > > > value, do nothing since
> > > > + IF_THEN_ELSE is likely to increase the expression's
> > > > complexity. */
> > > > + if (HWI_COMPUTABLE_MODE_P (mode)
> > > > + && pow2p_hwi (nz = nonzero_bits (x, mode))
> > > > + && ! ((code == SIGN_EXTEND || code == ZERO_EXTEND)
> > > > + && GET_CODE (XEXP (x, 0)) == AND
> > > > + && CONST_INT_P (XEXP (XEXP (x, 0), 0))
> > > > + && UINTVAL (XEXP (XEXP (x, 0), 0)) == nz))
> > > > + return x;
> > > The code does not match the comment: the "!" should not be
> > > there. How
> > > did it fix anything on s390 *with* that "!"? That does not make
> > > much
> > > sense.
> > Sorry for breaking this. With the constant changes in the
> > patterns this is supposed to fix it seems I've lost track of the
> > status quo. I'll check what went wrong with the patch; in the
> > mean time Andreas will revert this, or if it's urgent, feel free
> > to do that yourself.
> I have tested that removing that ! cures all regressions. I do not
> know if it still fixes what this patch intended to fix, of course.
I haven't been following this, but it seems some of these changes also
triggered bleh on SH:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78633
Cheers,
Oleg