Andrew Pinski <[email protected]> writes:
> While debugging PR 123285, I found it hard to read the final rtl of early ra 
> pass
> to understand what psedu-register was assigned to what hard register. This is 
> because
> the pass does not set ORIGINAL_REGNO like the other RAs do. So this does that
> and also copies the other register attributes.
>
> Bootstrappd and tested on aarch64-linux-gnu.
> Note this depends on 
> https://gcc.gnu.org/pipermail/gcc-patches/2026-January/706660.html.
>
>       PR target/123829
>
> gcc/ChangeLog:
>
>       * config/aarch64/aarch64-early-ra.cc (early_ra::replace_regs): Set
>       ORIGINAL_REGNO on the new reg and copy reg attributes from the old one.
>
> Signed-off-by: Andrew Pinski <[email protected]>
> ---
>  gcc/config/aarch64/aarch64-early-ra.cc | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/gcc/config/aarch64/aarch64-early-ra.cc 
> b/gcc/config/aarch64/aarch64-early-ra.cc
> index 8d9aeb02f39..e2adde4ed94 100644
> --- a/gcc/config/aarch64/aarch64-early-ra.cc
> +++ b/gcc/config/aarch64/aarch64-early-ra.cc
> @@ -3238,6 +3238,18 @@ early_ra::replace_regs (rtx_insn *insn, df_ref refs)
>         return true;
>       }
>        rtx new_rtx = gen_rtx_REG (GET_MODE (DF_REF_REG (ref)), new_regno);
> +      rtx old_reg = DF_REF_REG (ref);
> +      /* Copy from the old reg if needed including from a SUBREG. */
> +      if (SUBREG_P (old_reg))
> +     old_reg = SUBREG_REG (old_reg);
> +      if (REG_P (old_reg))
> +     {
> +       ORIGINAL_REGNO (new_rtx) = REGNO (old_reg);
> +       REG_USERVAR_P (new_rtx) = REG_USERVAR_P (old_reg);
> +       REG_POINTER (new_rtx) = REG_POINTER (old_reg);
> +       REG_ATTRS (new_rtx) = REG_ATTRS (old_reg);
> +     }
> +

When is REG_P (old_reg) false?  Also, I think it'd be worth splitting
the equivalent code out of ira_create_new_reg into a subroutine and
calling it from here.

Thanks,
Richard

>        // If inside a debug insn, then generate the subreg manually as it 
> might
>        // be an invalid one for outside of a debug insn.
>        if (DEBUG_INSN_P (insn)

Reply via email to