cfgrtl.c (force_nonfallthru_and_redirect): Allow abnormal edge to be forced into nonfallthru.

* cfgrtl.c (force_nonfallthru_and_redirect):  Allow abnormal edge
	to be forced into nonfallthru.

From-SVN: r59816
This commit is contained in:
Jan Hubicka 2002-12-04 15:21:58 +01:00 committed by Jan Hubicka
parent 8c048a52a4
commit a3716585f6
2 changed files with 22 additions and 3 deletions

View File

@ -1,3 +1,8 @@
Wed Dec 4 15:20:54 CET 2002 Jan Hubicka <jh@suse.cz>
* cfgrtl.c (force_nonfallthru_and_redirect): Allow abnormal edge
to be forced into nonfallthru.
2002-12-03 Jason Thorpe <thorpej@wasabisystems.com>
* config/t-netbsd (USER_H): Set to $(EXTRA_HEADERS).

View File

@ -933,12 +933,23 @@ force_nonfallthru_and_redirect (e, target)
edge e;
basic_block target;
{
basic_block jump_block, new_bb = NULL;
basic_block jump_block, new_bb = NULL, src = e->src;
rtx note;
edge new_edge;
int abnormal_edge_flags = 0;
if (e->flags & EDGE_ABNORMAL)
abort ();
{
/* Irritating special case - fallthru edge to the same block as abnormal
edge.
We can't redirect abnormal edge, but we still can split the fallthru
one and create separate abnormal edge to original destination.
This allows bb-reorder to make such edge non-fallthru. */
if (e->dest != target)
abort ();
abnormal_edge_flags = e->flags & ~(EDGE_FALLTHRU | EDGE_CAN_FALLTHRU);
e->flags &= EDGE_FALLTHRU | EDGE_CAN_FALLTHRU;
}
else if (!(e->flags & EDGE_FALLTHRU))
abort ();
else if (e->src == ENTRY_BLOCK_PTR)
@ -962,7 +973,7 @@ force_nonfallthru_and_redirect (e, target)
make_single_succ_edge (ENTRY_BLOCK_PTR, bb, EDGE_FALLTHRU);
}
if (e->src->succ->succ_next)
if (e->src->succ->succ_next || abnormal_edge_flags)
{
/* Create the new structures. */
@ -1029,6 +1040,9 @@ force_nonfallthru_and_redirect (e, target)
emit_barrier_after (jump_block->end);
redirect_edge_succ_nodup (e, target);
if (abnormal_edge_flags)
make_edge (src, target, abnormal_edge_flags);
return new_bb;
}