aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@cygnus.com>1999-07-09 19:12:30 +0000
committerJim Wilson <wilson@gcc.gnu.org>1999-07-09 12:12:30 -0700
commit570621d5ba905e7ed5248c62317437ac7a3f2206 (patch)
tree7d01a74ffac5e34fc5f2ce22bb3c32e2dcf79980 /gcc
parentc3c7ea1f569fe100675cd5ce0eca1d5f2f8f6c34 (diff)
downloadgcc-570621d5ba905e7ed5248c62317437ac7a3f2206.zip
gcc-570621d5ba905e7ed5248c62317437ac7a3f2206.tar.gz
gcc-570621d5ba905e7ed5248c62317437ac7a3f2206.tar.bz2
Fix -g -O3 -funroll-all-loops irix6 bootstrap failure reported by Kaveh Ghazi.
* unroll.c (unroll_loops): Don't delete named CODE_LABELs. From-SVN: r28048
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/unroll.c13
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d54b8f6..d2b3583 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/unroll.c b/gcc/unroll.c
index 9ac883a..d6dbcf0 100644
--- a/gcc/unroll.c
+++ b/gcc/unroll.c
@@ -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);