From: Andrew MacLeod Date: Tue, 21 Sep 1999 18:57:12 +0000 (+0000) Subject: flow.c (split_edge): Handle insertion on a fallthrough edge which has the EXIT_BLOCK... X-Git-Tag: prereleases/libstdc++-2.92~10463 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=abb14ef57e7850450042f1195b04266524e3132b;p=thirdparty%2Fgcc.git flow.c (split_edge): Handle insertion on a fallthrough edge which has the EXIT_BLOCK as a dest. Tue Sep 21 14:55:11 EDT 1999 Andrew MacLeod * flow.c (split_edge): Handle insertion on a fallthrough edge which has the EXIT_BLOCK as a dest. From-SVN: r29556 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2dc37e854468..2e17840217fb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Tue Sep 21 14:55:11 EDT 1999 Andrew MacLeod + + * flow.c (split_edge): Handle insertion on a fallthrough edge which + has the EXIT_BLOCK as a dest. + Tue Sep 21 14:51:23 EDT 1999 Andrew MacLeod * flow.c (remove_edge): New function to remove an edge from the diff --git a/gcc/flow.c b/gcc/flow.c index d47612b5d6b6..bfdff14b828f 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;