OSDN Git Service

* loop.c (add_label_notes): Increment the label usage count when
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Jan 2001 00:58:27 +0000 (00:58 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 2 Jan 2001 00:58:27 +0000 (00:58 +0000)
        a note is added to an insn which refers to a CODE_LABEL.
        * gcse.c (add_label_notes): Likewise.

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

gcc/ChangeLog
gcc/gcse.c
gcc/loop.c

index 5e3821c..f25661a 100644 (file)
@@ -1,3 +1,9 @@
+2001-01-01  John David Anglin  <dave@hiauly1.hia.nrc.ca>
+
+        * loop.c (add_label_notes): Increment the label usage count when
+        a note is added to an insn which refers to a CODE_LABEL.
+        * gcse.c (add_label_notes): Likewise.
+
 2001-01-01  Andreas Jaeger  <aj@suse.de>
 
        * loop.c (scan_loop): Use xmalloc to allocate movables.
index 73f49f3..f423c5e 100644 (file)
@@ -1,6 +1,6 @@
 /* Global common subexpression elimination/Partial redundancy elimination
    and global constant/copy propagation for GNU compiler.
-   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -4839,8 +4839,9 @@ one_pre_gcse_pass (pass)
 }
 \f
 /* If X contains any LABEL_REF's, add REG_LABEL notes for them to INSN.
-   We have to add REG_LABEL notes, because the following loop optimization
-   pass requires them.  */
+   If notes are added to an insn which references a CODE_LABEL, the
+   LABEL_NUSES count is incremented.  We have to add REG_LABEL notes,
+   because the following loop optimization pass requires them.  */
 
 /* ??? This is very similar to the loop.c add_label_notes function.  We
    could probably share code here.  */
@@ -4868,6 +4869,8 @@ add_label_notes (x, insn)
 
       REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
                                            REG_NOTES (insn));
+      if (LABEL_P (XEXP (x, 0)))
+        LABEL_NUSES (XEXP (x, 0))++;
       return;
     }
 
index 8faacaf..a504ed6 100644 (file)
@@ -1594,7 +1594,8 @@ rtx_equal_for_loop_p (x, y, movables, regs)
 }
 \f
 /* If X contains any LABEL_REF's, add REG_LABEL notes for them to all
-  insns in INSNS which use the reference.  */
+   insns in INSNS which use the reference.  LABEL_NUSES for CODE_LABEL
+   references is incremented once for each added note. */
 
 static void
 add_label_notes (x, insns)
@@ -1615,8 +1616,12 @@ add_label_notes (x, insns)
          mark_jump_label for additional information).  */
       for (insn = insns; insn; insn = NEXT_INSN (insn))
        if (reg_mentioned_p (XEXP (x, 0), insn))
-         REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
-                                               REG_NOTES (insn));
+         {
+           REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
+                                                 REG_NOTES (insn));
+           if (LABEL_P (XEXP (x, 0)))
+             LABEL_NUSES (XEXP (x, 0))++;
+         }
     }
 
   fmt = GET_RTX_FORMAT (code);