diff options
author | amacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-21 18:57:12 +0000 |
---|---|---|
committer | amacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-21 18:57:12 +0000 |
commit | e8312c489e44dfe3b1fcdea8292c92072df0a492 (patch) | |
tree | 824571bce3b15f52f4589cf91533e54ce74461f9 /gcc/flow.c | |
parent | 61001c970e91b2b6b834d87ddd3b3d9a62299d6f (diff) | |
download | gcc-e8312c489e44dfe3b1fcdea8292c92072df0a492.tar.gz |
Tue Sep 21 14:55:11 EDT 1999 Andrew MacLeod <amacleod@cygnus.com>
* flow.c (split_edge): Handle insertion on a fallthrough edge which
has the EXIT_BLOCK as a dest.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29556 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/gcc/flow.c b/gcc/flow.c index d47612b5d6b..bfdff14b828 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -1153,7 +1153,7 @@ split_edge (edge_in) basic_block old_pred, bb, old_succ; edge edge_out; rtx bb_note; - int i; + int i, j; /* Abnormal edges cannot be split. */ if ((edge_in->flags & EDGE_ABNORMAL) != 0) @@ -1263,7 +1263,11 @@ split_edge (edge_in) /* Place the new block just in front of the successor. */ VARRAY_GROW (basic_block_info, ++n_basic_blocks); - for (i = n_basic_blocks - 1; i > old_succ->index; --i) + if (old_succ == EXIT_BLOCK_PTR) + j = n_basic_blocks - 1; + else + j = old_succ->index; + for (i = n_basic_blocks - 1; i > j; --i) { basic_block tmp = BASIC_BLOCK (i - 1); BASIC_BLOCK (i) = tmp; @@ -1273,7 +1277,10 @@ split_edge (edge_in) bb->index = i; /* Create the basic block note. */ - bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, old_succ->head); + if (old_succ != EXIT_BLOCK_PTR) + bb_note = emit_note_before (NOTE_INSN_BASIC_BLOCK, old_succ->head); + else + bb_note = emit_note_after (NOTE_INSN_BASIC_BLOCK, get_last_insn ()); NOTE_BASIC_BLOCK (bb_note) = bb; bb->head = bb->end = bb_note; |