https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120119

Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ramana at gcc dot gnu.org

--- Comment #9 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #8)
> Cannot rename chain v30 (8) at insn 54 (mark_read)
> Creating chain v29 (13) at insn 54
> Cannot rename chain v29 (13) at insn 30 (mark_read)
> Widening register in chain v29 (13) at insn 30
> Cannot rename chain v30 (8) at insn 30 (mark_read)
> Failing basic block due to unhandled overlap
> Closing chain v29 (13) at insn 30 (terminate_dead, superset)
> Failing basic block due to unhandled overlap
> Failing basic block due to unhandled overlap
> Closing chain v28 (6) at insn 30 (terminate_write, superset)
> Creating chain v28 (14) at insn 30
> failed
> 
> ```
> diff --git a/gcc/config/aarch64/cortex-a57-fma-steering.cc
> b/gcc/config/aarch64/cortex-a57-fma-steering.cc
> index fd6da66d855..2dc0fffed62 100644
> --- a/gcc/config/aarch64/cortex-a57-fma-steering.cc
> +++ b/gcc/config/aarch64/cortex-a57-fma-steering.cc
> @@ -948,6 +948,9 @@ func_fma_steering::analyze ()
> 
>           /* Search the chain where this instruction is (one of) the root. 
> */
>           dest_op_info = insn_rr[INSN_UID (insn)].op_info;
> +         /* Register rename could fail. */
> +         if (!dest_op_info)
> +           continue;
>           dest_regno = REGNO (SET_DEST (PATTERN (insn)));
>           for (i = 0; i < dest_op_info->n_chains; i++)
>             {
> 
> ```
> 
> Fixes the issue.

Looks reasonable from memory. Perhaps worth landing this after testing ? 

regards
Ramana

Reply via email to