bb-reorder.c (make_reorder_chain_1): Handle case where jump edge goes to the same block as the fallthru edge.

* bb-reorder.c (make_reorder_chain_1): Handle case where
        jump edge goes to the same block as the fallthru edge.

From-SVN: r39228
This commit is contained in:
John David Anglin 2001-01-24 05:57:46 +00:00 committed by Jeff Law
parent 0024a8041f
commit b0cc7919bf
2 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2001-01-23 John David Anglin <dave@hiauly1.hia.nrc.ca>
* bb-reorder.c (make_reorder_chain_1): Handle case where
jump edge goes to the same block as the fallthru edge.
2001-01-23 Jim Wilson <wilson@redhat.com> 2001-01-23 Jim Wilson <wilson@redhat.com>
* dwarf2out.c (dwarf2out_line): Make last_file_num be unsigned. * dwarf2out.c (dwarf2out_line): Make last_file_num be unsigned.

View File

@ -397,14 +397,25 @@ make_reorder_chain_1 (bb, prev)
/* Find the normal taken edge and the normal fallthru edge. /* Find the normal taken edge and the normal fallthru edge.
Note that there may in fact be other edges due to Note that there may in fact be other edges due to
asynchronous_exceptions. */ asynchronous_exceptions.
Note, conditional jumps with other side effects may not
be fully optimized. In this case it is possible for
the conditional jump to branch to the same location as
the fallthru path.
We should probably work to improve optimization of that
case; however, it seems silly not to also deal with such
problems here if they happen to occur. */
e_taken = e_fall = NULL; e_taken = e_fall = NULL;
for (e = bb->succ; e ; e = e->succ_next) for (e = bb->succ; e ; e = e->succ_next)
if (e->flags & EDGE_FALLTHRU) {
e_fall = e; if (e->flags & EDGE_FALLTHRU)
else if (! (e->flags & EDGE_EH)) e_fall = e;
e_taken = e; if (! (e->flags & EDGE_EH))
e_taken = e;
}
next = (taken ? e_taken : e_fall)->dest; next = (taken ? e_taken : e_fall)->dest;
} }