OSDN Git Service

Fix -g -O3 -funroll-all-loops irix6 bootstrap failure reported by Kaveh Ghazi.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Jul 1999 19:12:30 +0000 (19:12 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Jul 1999 19:12:30 +0000 (19:12 +0000)
* unroll.c (unroll_loops): Don't delete named CODE_LABELs.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28048 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/unroll.c

index d54b8f6..d2b3583 100644 (file)
@@ -1,3 +1,7 @@
+Fri Jul  9 19:08:55 1999  Jim Wilson  <wilson@cygnus.com>
+
+       * unroll.c (unroll_loops): Don't delete named CODE_LABELs.
+
 Fri Jul  9 18:54:18 1999  Felix Lee  <flee@cygnus.com>
 
        * config/i960/i960.c (ret_label): Change asm label from "LR:" to
index 9ac883a..d6dbcf0 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);