Yvan Roux <yvan.r...@linaro.org> writes:
> @@ -5786,7 +5796,11 @@ get_index_scale (const struct address_info *info)
>        && info->index_term == &XEXP (index, 0))
>      return INTVAL (XEXP (index, 1));
>  
> -  if (GET_CODE (index) == ASHIFT
> +  if ((GET_CODE (index) == ASHIFT
> +       || GET_CODE (index) == ASHIFTRT
> +       || GET_CODE (index) == LSHIFTRT
> +       || GET_CODE (index) == ROTATE
> +       || GET_CODE (index) == ROTATERT)
>        && CONST_INT_P (XEXP (index, 1))
>        && info->index_term == &XEXP (index, 0))
>      return (HOST_WIDE_INT) 1 << INTVAL (XEXP (index, 1));

This bit doesn't look right.  The scale is only 1 << N for (ashift ... N).
I think we have to stick to returning zero for the other codes.

The other two (snipped) rtlanal.c hunks like fine to me FWIW.  Maybe now
would be a good time to add an "is this a shift code?" predicate though,
if we don't have one already.

Thanks,
Richard

Reply via email to