aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>2000-01-13 05:41:44 +0000
committerJeff Law <law@gcc.gnu.org>2000-01-12 22:41:44 -0700
commit08520ad8d610dd05a635283ddf07ae95e4798a13 (patch)
tree3e1c2be8dccc28121be86f99fe0e7b0ec499deae
parent499bf451e340a680eddec460999eb2857b56d9a2 (diff)
downloadgcc-08520ad8d610dd05a635283ddf07ae95e4798a13.zip
gcc-08520ad8d610dd05a635283ddf07ae95e4798a13.tar.gz
gcc-08520ad8d610dd05a635283ddf07ae95e4798a13.tar.bz2
flow.c (split_edge): If we have to insert a new jump, make sure to associate it with a basic block.
* 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
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/flow.c12
2 files changed, 15 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 51e6e67..8e33b56 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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".
diff --git a/gcc/flow.c b/gcc/flow.c
index 10bcdcf..93677cf 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -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