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:
parent
8c048a52a4
commit
a3716585f6
2 changed files with 22 additions and 3 deletions
|
@ -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).
|
||||
|
|
20
gcc/cfgrtl.c
20
gcc/cfgrtl.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue