flow.c (split_edge): If we have to insert a new jump, make sure to associate it with...
authorJeffrey A Law <law@cygnus.com>
Thu, 13 Jan 2000 05:41:44 +0000 (05:41 +0000)
committerJeff Law <law@gcc.gnu.org>
Thu, 13 Jan 2000 05:41:44 +0000 (22:41 -0700)
* flow.c (split_edge): If we have to insert a new jump, make
sure to associate it with a basic block.

* flow.c (commit_one_edge_insertion): A block with one successor
can end in a JUMP_INSN that is not a simplejump.

From-SVN: r31380

gcc/ChangeLog
gcc/flow.c

index 51e6e679285c9e5c0470566394a808b10b085390..8e33b5635113ee3069d641d684b8e4f85be2e4fd 100644 (file)
@@ -1,3 +1,11 @@
+Wed Jan 12 22:34:00 2000  Jeffrey A Law  (law@cygnus.com)
+
+       * flow.c (split_edge): If we have to insert a new jump, make
+       sure to associate it with a basic block.
+
+       * flow.c (commit_one_edge_insertion): A block with one successor
+       can end in a JUMP_INSN that is not a simplejump.
+
 2000-01-12  Robert Lipe  <robertl@sco.com>
 
        * i386/sco5.h (INIT_SECTION_ASM_OP_COFF): Rename section to "ctor".
index 10bcdcf1fb8f17263fe4a3d8d9e03296b464a3bc..93677cfe341b1c9656a50f7574c210dc28b722f3 100644 (file)
@@ -1387,6 +1387,7 @@ split_edge (edge_in)
          pos = emit_jump_insn_after (gen_jump (old_succ->head),
                                      jump_block->end);
          jump_block->end = pos;
+         set_block_for_insn (pos, jump_block);
          emit_barrier_after (pos);
 
          /* ... let jump know that label is in use, ...  */
@@ -1580,13 +1581,14 @@ commit_one_edge_insertion (e)
           && e->src != ENTRY_BLOCK_PTR)
     {
       bb = e->src;
+      /* It is possible to have a non-simple jump here.  Consider a target
+        where some forms of unconditional jumps clobber a register.  This
+        happens on the fr30 for example. 
+
+        We know this block has a single successor, so we can just emit
+        the queued insns before the jump.  */
       if (GET_CODE (bb->end) == JUMP_INSN)
        {
-         /* ??? Is it possible to wind up with non-simple jumps?  Perhaps
-            a jump with delay slots already filled?  */
-         if (! simplejump_p (bb->end))
-           abort ();
-
          before = bb->end;
        }
       else