]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
unroll.c (unroll_loops): Don't delete named CODE_LABEL or NOTE_INSN_DELETED_LABEL...
authorJim Wilson <wilson@cygnus.com>
Thu, 8 Jul 1999 23:44:55 +0000 (17:44 -0600)
committerJeff Law <law@gcc.gnu.org>
Thu, 8 Jul 1999 23:44:55 +0000 (17:44 -0600)

* unroll.c (unroll_loops): Don't delete named CODE_LABEL or
NOTE_INSN_DELETED_LABEL note.
Reverted previous unroll patch.  Use this version instead.

From-SVN: r28034

gcc/unroll.c

index 9ac883a1d49e4da434e44347a15302bab5478cfe..d6dbcf0fbc1d151382bbb30773d1bb03d661cec8 100644 (file)
@@ -1262,11 +1262,16 @@ unroll_loop (loop_end, insn_count, loop_start, end_insert_before,
   insn = NEXT_INSN (copy_start);
   while (insn != safety_label)
     {
-      /* ??? We can't delete a NOTE_INSN_DELETED_LABEL unless we fix the
-        DECL_RTL field of the associated LABEL_DECL to point to (one of)
-        the new copies of the label.  Otherwise, we hit an abort in
-        dwarfout.c/dwarf2out.c.  */
+      /* ??? Don't delete named code labels.  They will be deleted when the
+        jump that references them is deleted.  Otherwise, we end up deleting
+        them twice, which causes them to completely disappear instead of turn
+        into NOTE_INSN_DELETED_LABEL notes.  This in turn causes aborts in
+        dwarfout.c/dwarf2out.c.  We could perhaps fix the dwarf*out.c files
+        to handle deleted labels instead.  Or perhaps fix DECL_RTL of the
+        associated LABEL_DECL to point to one of the new label instances.  */
+      /* ??? Likewise, we can't delete a NOTE_INSN_DELETED_LABEL note.  */
       if (insn != start_label
+         && ! (GET_CODE (insn) == CODE_LABEL && LABEL_NAME (insn))
          && ! (GET_CODE (insn) == NOTE
                && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))
        insn = delete_insn (insn);