public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [committed] lra: Ignore debug insns and notes in combine_reload_insn [PR109179]
@ 2023-03-18  0:12 Peter Bergner
  0 siblings, 0 replies; only message in thread
From: Peter Bergner @ 2023-03-18  0:12 UTC (permalink / raw)
  To: GCC Patches; +Cc: Vladimir N Makarov, Jakub Jelinek

We ICE in combine_reload_insn if we've deleted the TO insn operand during
processing, because lra_get_insn_recog_data doesn't expect to see the note
that replaces the deleted insn.  The solution here is to exit early if TO
is a debug insn or note.

This caused a bootstrap issue on powerpc64le-linux.  The fix was approved
by Vlad.  Committed and pushed after bootstrap testing and checking there
were no testsuite regressions when compared to the commit before the
commit that caused the ICE.

Peter


gcc/
	PR rtl-optimization/109179
	* lra-constraints.cc (combine_reload_insn): Enforce TO is not a debug
	insn or note.  Move the tests earlier to guard lra_get_insn_recog_data.

diff --git a/gcc/lra-constraints.cc b/gcc/lra-constraints.cc
index 95b534e1a70..405b8b92f5e 100644
--- a/gcc/lra-constraints.cc
+++ b/gcc/lra-constraints.cc
@@ -5014,14 +5014,19 @@ combine_reload_insn (rtx_insn *from, rtx_insn *to)
   enum reg_class to_class, from_class;
   int n, nop;
   signed char changed_nops[MAX_RECOG_OPERANDS + 1];
-  lra_insn_recog_data_t id = lra_get_insn_recog_data (to);
-  struct lra_static_insn_data *static_id = id->insn_static_data;
   
   /* Check conditions for second memory reload and original insn:  */
   if ((targetm.secondary_memory_needed
        == hook_bool_mode_reg_class_t_reg_class_t_false)
-      || NEXT_INSN (from) != to || CALL_P (to)
-      || id->used_insn_alternative == LRA_UNKNOWN_ALT
+      || NEXT_INSN (from) != to
+      || !NONDEBUG_INSN_P (to)
+      || CALL_P (to))
+    return false;
+
+  lra_insn_recog_data_t id = lra_get_insn_recog_data (to);
+  struct lra_static_insn_data *static_id = id->insn_static_data;
+  
+  if (id->used_insn_alternative == LRA_UNKNOWN_ALT
       || (set = single_set (from)) == NULL_RTX)
     return false;
   from_reg = SET_DEST (set);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-18  0:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-18  0:12 [committed] lra: Ignore debug insns and notes in combine_reload_insn [PR109179] Peter Bergner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).