ping
On Fri, May 05, 2017 at 05:02:46PM +0100, Wilco Dijkstra wrote:
> Richard Earnshaw (lists) wrote:
>
> > --- a/gcc/config/arm/aarch-common.c
> > +++ b/gcc/config/arm/aarch-common.c
> > @@ -254,12 +254,7 @@ arm_no_early_alu_shift_dep (rtx producer, rtx consumer)
> > return 0;
> >
> > if ((early_op = arm_find_shift_sub_rtx (op)))
> > - {
> > - if (REG_P (early_op))
> > - early_op = op;
> > -
> > - return !reg_overlap_mentioned_p (value, early_op);
> > - }
> > + return !reg_overlap_mentioned_p (value, early_op);
> >
> > return 0;
> > }
>
> > This function is used by several aarch32 pipeline description models.
> > What testing have you given it there. Are the changes appropriate for
> > those cores as well?
>
> arm_find_shift_sub_rtx can only ever return NULL_RTX or a shift rtx, so the
> check for REG_P is dead code. Bootstrap passes on ARM too of course.
This took me a bit of head-scratching to get right...
arm_find_shift_sub_rtx calls arm_find_sub_rtx_with_code, looking for
ASHIFT, with find_any_shift set to TRUE. There, we're going to run
through the subRTX of pattern, if the code of the subrtx is one of the
shift-like patterns, we return X, otherwise we return NULL_RTX.
Thus
> > - if (REG_P (early_op))
> > - early_op = op;
is not needed, and the code can be reduced to:
if ((early_op = arm_find_shift_sub_rtx (op)))
return !reg_overlap_mentioned_p (value, early_op);
return 0;
So, this looks fine to me from an AArch64 perspective - but you'll need an
ARM OK too as this is shared code.
Cheers,
James