aboutsummaryrefslogtreecommitdiff
path: root/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2001-01-07 02:26:51 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2001-01-07 02:26:51 +0000
commitf759eb8bf0d98603f2e6930126e517ed995a64a8 (patch)
tree17de3bb34420626f8eab111aee34a18e3a1f275f /gcc/sched-rgn.c
parent0e2e89fd2e117555f71be7a28e41f5f7663c3395 (diff)
downloadgcc-f759eb8bf0d98603f2e6930126e517ed995a64a8.zip
gcc-f759eb8bf0d98603f2e6930126e517ed995a64a8.tar.gz
gcc-f759eb8bf0d98603f2e6930126e517ed995a64a8.tar.bz2
reload.c (subst_reloads): Take INSN argument.
* reload.c (subst_reloads): Take INSN argument. When replacing a LABEL_REF in a JUMP_INSN, add a REG_LABEL note. * reload.h (subst_reloads): Adjust prototype. * reload1.c (reload_as_needed): Pass INSN to subst_reloads. * jump.c (mark_all_labels): Canonicalize any REG_LABEL notes present in JUMP_INSNs and copy them to JUMP_LABEL. * flow.c (find_label_refs, find_basic_blocks_1): Skip JUMP_INSNs and insns with REG_LABELs that are followed by JUMP_INSNs with the same REG_LABEL. * sched-rgn.c (is_cfg_nonregular): Likewise. * rtlanal.c (computed_jump_p): Make it false if a REG_LABEL note is available. * unroll.c (unroll_loop): Look for REG_LABEL notes in JUMP_INSNs too. * rtl.texi (REG_LABEL): Document usage in JUMP_INSNs. From-SVN: r38755
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r--gcc/sched-rgn.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index db4cc87..c1c215a 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -1,6 +1,6 @@
/* Instruction scheduling pass.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000 Free Software Foundation, Inc.
+ 1999, 2000, 2001 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by,
and currently maintained by, Jim Wilson (wilson@cygnus.com)
@@ -349,13 +349,16 @@ is_cfg_nonregular ()
for (insn = BLOCK_HEAD (b);; insn = NEXT_INSN (insn))
{
code = GET_CODE (insn);
- if (GET_RTX_CLASS (code) == 'i')
+ if (GET_RTX_CLASS (code) == 'i' && code != JUMP_INSN)
{
- rtx note;
-
- for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
- if (REG_NOTE_KIND (note) == REG_LABEL)
- return 1;
+ rtx note = find_reg_note (REG_NOTES (insn), REG_LABEL, NULL_RTX);
+
+ if (note
+ && ! (GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
+ && find_reg_note (REG_NOTES (NEXT_INSN (insn)),
+ REG_LABEL,
+ XEXP (note, 0))))
+ return 1;
}
if (insn == BLOCK_END (b))