]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
flow.c (split_edge): Handle insertion on a fallthrough edge which has the EXIT_BLOCK...
authorAndrew MacLeod <amacleod@cygnus.com>
Tue, 21 Sep 1999 18:57:12 +0000 (18:57 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Tue, 21 Sep 1999 18:57:12 +0000 (18:57 +0000)
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.

From-SVN: r29556

gcc/ChangeLog
gcc/flow.c

index 2dc37e854468fac77ee6e6f7e4c6c2447120f6b7..2e17840217fb9c69e32b925ea1a79a78033ab83f 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 Tue Sep 21 14:51:23 EDT 1999  Andrew MacLeod  <amacleod@cygnus.com>
 
        * flow.c (remove_edge): New function to remove an edge from the 
index d47612b5d6b6159ae578c7b76f450ac1f3136aae..bfdff14b828f777d7b94358dd27e04231c12ab96 100644 (file)
@@ -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;