aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-06-21 12:05:00 -0700
committerJason Thorpe <thorpej@gcc.gnu.org>2002-06-21 19:05:00 +0000
commit31a782981f03d3a5184e12920c1cd3176d904ab4 (patch)
tree98be2ed2c2355e3096a24b83a1f3587c21e93b38 /gcc/cfgrtl.c
parentb62cc13a208075e7853d29438eb68cd1456c017d (diff)
downloadgcc-31a782981f03d3a5184e12920c1cd3176d904ab4.zip
gcc-31a782981f03d3a5184e12920c1cd3176d904ab4.tar.gz
gcc-31a782981f03d3a5184e12920c1cd3176d904ab4.tar.bz2
bb-reorder.c (make_reorder_chain_1): Search harder for the vax casesi fallthru edge.
2002-06-21 Richard Henderson <rth@redhat.com> * bb-reorder.c (make_reorder_chain_1): Search harder for the vax casesi fallthru edge. * cfglayout.c (cleanup_unconditional_jumps): Use redirect_edge_succ_nodup. Do not delete ADDR_VEC insns as dead. * cfgrtl.c (force_nonfallthru_and_redirect): Place redirection block after ADDR_VEC. From-SVN: r54885
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r--gcc/cfgrtl.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 7ca747a..25a5c9f 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -963,9 +963,21 @@ force_nonfallthru_and_redirect (e, target)
if (e->src->succ->succ_next)
{
/* Create the new structures. */
+
+ /* Position the new block correctly relative to loop notes. */
note = last_loop_beg_note (e->src->end);
- jump_block
- = create_basic_block (NEXT_INSN (note), NULL, e->src);
+ note = NEXT_INSN (note);
+
+ /* ... and ADDR_VECs. */
+ if (note != NULL
+ && GET_CODE (note) == CODE_LABEL
+ && NEXT_INSN (note)
+ && GET_CODE (NEXT_INSN (note)) == JUMP_INSN
+ && (GET_CODE (PATTERN (NEXT_INSN (note))) == ADDR_DIFF_VEC
+ || GET_CODE (PATTERN (NEXT_INSN (note))) == ADDR_VEC))
+ note = NEXT_INSN (NEXT_INSN (note));
+
+ jump_block = create_basic_block (note, NULL, e->src);
jump_block->count = e->count;
jump_block->frequency = EDGE_FREQUENCY (e);
jump_block->loop_depth = target->loop_depth;