sched.c (update_flow_info): Handle death notes made invalid by instruction splitting.
authorJeff Law <law@gcc.gnu.org>
Mon, 19 Oct 1998 09:44:34 +0000 (03:44 -0600)
committerJeff Law <law@gcc.gnu.org>
Mon, 19 Oct 1998 09:44:34 +0000 (03:44 -0600)

        * sched.c (update_flow_info): Handle death notes made invalid by
        instruction splitting.  Partially reverts Oct 15, 1998 patch.
        * haifa-sched.c (update_flow_info): Likewise.

From-SVN: r23170

gcc/haifa-sched.c

index 806bb396d8864142f219249a4aea64e9e47a9c6b..abc45d333842375990534a854d7545e810cd04e8 100644 (file)
@@ -7987,7 +7987,21 @@ update_flow_info (notes, first, last, orig_insn)
                 register that was not needed by this instantiation of the
                 pattern, so we can safely ignore it.  */
              if (insn == first)
-               {                       
+               {
+                 /* We have accurate death notes after reload now, but this
+                    code is still necessary.  Consider splitting a store into
+                    (subreg:DF (reg:DC) 0).  The death notes will claim the
+                    entire DCmode value is dead.  But after splitting we know
+                    that only part of it is dead.  Ie, the splitting action
+                    actually eliminated the death of one or more hard
+                    registers.  */
+                 if (reload_completed && REG_NOTE_KIND (note) == REG_DEAD)
+                   {
+                     XEXP (note, 1) = REG_NOTES (insn);
+                     REG_NOTES (insn) = note;
+                     break;
+                   }
+                       
                  if (REG_NOTE_KIND (note) != REG_UNUSED)
                    abort ();