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

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
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.

Reply via email to