diff options
author | Richard Henderson <rth@redhat.com> | 2002-06-21 12:05:00 -0700 |
---|---|---|
committer | Jason Thorpe <thorpej@gcc.gnu.org> | 2002-06-21 19:05:00 +0000 |
commit | 31a782981f03d3a5184e12920c1cd3176d904ab4 (patch) | |
tree | 98be2ed2c2355e3096a24b83a1f3587c21e93b38 /gcc/cfgrtl.c | |
parent | b62cc13a208075e7853d29438eb68cd1456c017d (diff) | |
download | gcc-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.c | 16 |
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; |