loop.c (add_label_notes): Increment the label usage count when a note is added to an insn which refers to...

* 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.

From-SVN: r38603
This commit is contained in:
John David Anglin 2001-01-02 00:58:27 +00:00 committed by Jeff Law
parent 5be1aac912
commit 5b1ef59457
3 changed files with 20 additions and 6 deletions

View 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> 2001-01-01 Andreas Jaeger <aj@suse.de>
* loop.c (scan_loop): Use xmalloc to allocate movables. * loop.c (scan_loop): Use xmalloc to allocate movables.

View File

@ -1,6 +1,6 @@
/* Global common subexpression elimination/Partial redundancy elimination /* Global common subexpression elimination/Partial redundancy elimination
and global constant/copy propagation for GNU compiler. 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. This file is part of GNU CC.
@ -4839,8 +4839,9 @@ one_pre_gcse_pass (pass)
} }
/* If X contains any LABEL_REF's, add REG_LABEL notes for them to INSN. /* 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 If notes are added to an insn which references a CODE_LABEL, the
pass requires them. */ 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 /* ??? This is very similar to the loop.c add_label_notes function. We
could probably share code here. */ 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) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
REG_NOTES (insn)); REG_NOTES (insn));
if (LABEL_P (XEXP (x, 0)))
LABEL_NUSES (XEXP (x, 0))++;
return; return;
} }

View File

@ -1594,7 +1594,8 @@ rtx_equal_for_loop_p (x, y, movables, regs)
} }
/* If X contains any LABEL_REF's, add REG_LABEL notes for them to all /* 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 static void
add_label_notes (x, insns) add_label_notes (x, insns)
@ -1615,8 +1616,12 @@ add_label_notes (x, insns)
mark_jump_label for additional information). */ mark_jump_label for additional information). */
for (insn = insns; insn; insn = NEXT_INSN (insn)) for (insn = insns; insn; insn = NEXT_INSN (insn))
if (reg_mentioned_p (XEXP (x, 0), 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); fmt = GET_RTX_FORMAT (code);