summaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authoramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-21 18:57:12 +0000
committeramacleod <amacleod@138bc75d-0d04-0410-961f-82ee72b054a4>1999-09-21 18:57:12 +0000
commite8312c489e44dfe3b1fcdea8292c92072df0a492 (patch)
tree824571bce3b15f52f4589cf91533e54ce74461f9 /gcc/flow.c
parent61001c970e91b2b6b834d87ddd3b3d9a62299d6f (diff)
downloadgcc-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.c13
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;