flow.c (init_propagate_block_info): Watch out for conditional branch to next instruction, and thus one outgoing edge.

* flow.c (init_propagate_block_info): Watch out for conditional
        branch to next instruction, and thus one outgoing edge.

From-SVN: r33775
This commit is contained in:
Richard Henderson 2000-05-08 15:04:39 -07:00 committed by Richard Henderson
parent bdcabcd457
commit 4fb9b83058
2 changed files with 25 additions and 7 deletions

View File

@ -1,3 +1,8 @@
2000-05-08 Richard Henderson <rth@cygnus.com>
* flow.c (init_propagate_block_info): Watch out for conditional
branch to next instruction, and thus one outgoing edge.
2000-05-08 Nick Clifton <nickc@cygnus.com> 2000-05-08 Nick Clifton <nickc@cygnus.com>
* config/i386/i386.h (ELIMINABLE_REGS): Fix comment. * config/i386/i386.h (ELIMINABLE_REGS): Fix comment.

View File

@ -3573,8 +3573,11 @@ init_propagate_block_info (bb, live, local_set, flags)
int i; int i;
/* Identify the successor blocks. */ /* Identify the successor blocks. */
bb_false = bb->succ->succ_next->dest;
bb_true = bb->succ->dest; bb_true = bb->succ->dest;
if (bb->succ->succ_next != NULL)
{
bb_false = bb->succ->succ_next->dest;
if (bb->succ->flags & EDGE_FALLTHRU) if (bb->succ->flags & EDGE_FALLTHRU)
{ {
basic_block t = bb_false; basic_block t = bb_false;
@ -3583,6 +3586,16 @@ init_propagate_block_info (bb, live, local_set, flags)
} }
else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU)) else if (! (bb->succ->succ_next->flags & EDGE_FALLTHRU))
abort (); abort ();
}
else
{
/* This can happen with a conditional jump to the next insn. */
if (JUMP_LABEL (bb->end) != bb_true->head)
abort ();
/* Simplest way to do nothing. */
bb_false = bb_true;
}
/* Extract the condition from the branch. */ /* Extract the condition from the branch. */
cond_true = XEXP (SET_SRC (PATTERN (bb->end)), 0); cond_true = XEXP (SET_SRC (PATTERN (bb->end)), 0);