]> gcc.gnu.org Git - gcc.git/commitdiff
(sched_analyze_insn): Add use dependencies for registers
authorJim Wilson <wilson@gcc.gnu.org>
Tue, 1 Feb 1994 00:23:18 +0000 (16:23 -0800)
committerJim Wilson <wilson@gcc.gnu.org>
Tue, 1 Feb 1994 00:23:18 +0000 (16:23 -0800)
mentioned in REG_DEAD notes.

From-SVN: r6453

gcc/sched.c

index 57fd68b662db8a5ed7cce278088af6d5a8a56fea..ea10959a0ddfb3288a1eb89da495b669ea68fdc3 100644 (file)
@@ -2024,6 +2024,27 @@ sched_analyze_insn (x, insn)
   else
     sched_analyze_2 (x, insn);
 
+  /* After reload, it is possible for an instruction to have a REG_DEAD note
+     for a register that actually dies a few instructions earlier.  For
+     example, this can happen with SECONDARY_MEMORY_NEEDED reloads.
+     In this case, we must consider the insn to use the register mentioned
+     in the REG_DEAD note.  Otherwise, we may accidentally move this insn
+     after another insn that sets the register, thus getting obviously invalid
+     rtl.  This confuses reorg which believes that REG_DEAD notes are still
+     meaningful.
+
+     ??? We would get better code if we fixed reload to put the REG_DEAD
+     notes in the right places, but that may not be worth the effort.  */
+
+  if (reload_completed)
+    {
+      rtx note;
+
+      for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
+       if (REG_NOTE_KIND (note) == REG_DEAD)
+         sched_analyze_2 (XEXP (note, 0), insn);
+    }
+
   /* Handle function calls and function returns created by the epilogue
      threading code.  */
   if (GET_CODE (insn) == CALL_INSN || GET_CODE (insn) == JUMP_INSN)
This page took 0.071905 seconds and 5 git commands to generate.