On Wed, Mar 16, 2016 at 02:25:27PM -0700, Richard Henderson wrote:
>         PR target/70048
>         * config/aarch64/aarch64.c (virt_or_elim_regno_p): New.
>         (aarch64_classify_address): Use it.
>         (aarch64_legitimize_address): Force all subexpressions of PLUS
>         into registers.  Simplify as (sfp+const)+reg or (reg+reg)+const.
> 
> 
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index cf1239d..12e498d 100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -3847,6 +3847,18 @@ aarch64_mode_valid_for_sched_fusion_p (machine_mode 
> mode)
>            && GET_MODE_SIZE (mode) == 8);
>  }
>  
> +/* Return true if REGNO is a virtual pointer register, or an eliminable
> +   "soft" frame register.  Like REGNO_PTR_FRAME_P except that we don't
> +   include stack_pointer or hard_frame_pointer.  */

In that case, do we want to write this as:

  return REGNO_PTR_FRAME_P (regno)
         && regno != STACK_POINTER_REGNUM
         && regno != HARD_FRAME_POINTER_REGNUM;

for clarity?

> +static bool
> +virt_or_elim_regno_p (unsigned regno)

Most functions in here get the "aarch64" in their name even if they are
static.

> +{
> +  return ((regno >= FIRST_VIRTUAL_REGISTER
> +        && regno <= LAST_VIRTUAL_POINTER_REGISTER)
> +       || regno == FRAME_POINTER_REGNUM
> +       || regno == ARG_POINTER_REGNUM);
> +}

Otherwise, this looks OK to me. Thanks for the fix.

James

Reply via email to