summaryrefslogtreecommitdiff
path: root/gcc/bb-reorder.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-06-21 12:05:00 -0700
committerJason Thorpe <thorpej@gcc.gnu.org>2002-06-21 19:05:00 +0000
commit31a782981f03d3a5184e12920c1cd3176d904ab4 (patch)
tree98be2ed2c2355e3096a24b83a1f3587c21e93b38 /gcc/bb-reorder.c
parentb62cc13a208075e7853d29438eb68cd1456c017d (diff)
downloadgcc-31a782981f03d3a5184e12920c1cd3176d904ab4.tar.gz
bb-reorder.c (make_reorder_chain_1): Search harder for the vax casesi fallthru edge.
2002-06-21 Richard Henderson <rth@redhat.com> * bb-reorder.c (make_reorder_chain_1): Search harder for the vax casesi fallthru edge. * cfglayout.c (cleanup_unconditional_jumps): Use redirect_edge_succ_nodup. Do not delete ADDR_VEC insns as dead. * cfgrtl.c (force_nonfallthru_and_redirect): Place redirection block after ADDR_VEC. From-SVN: r54885
Diffstat (limited to 'gcc/bb-reorder.c')
-rw-r--r--gcc/bb-reorder.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index 6ae4c76d382..24c41e51ced 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -209,17 +209,21 @@ make_reorder_chain_1 (bb, prev)
/* In the absence of a prediction, disturb things as little as possible
by selecting the old "next" block from the list of successors. If
there had been a fallthru edge, that will be the one. */
+ /* Note that the fallthru block may not be next any time we eliminate
+ forwarder blocks. */
if (! next)
{
for (e = bb->succ; e ; e = e->succ_next)
- if (e->dest == bb->next_bb)
+ if (e->flags & EDGE_FALLTHRU)
{
- if ((e->flags & EDGE_FALLTHRU)
- || (e->dest->succ
- && ! (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))))
- next = e->dest;
+ next = e->dest;
break;
}
+ else if (e->dest == bb->next_bb)
+ {
+ if (! (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH)))
+ next = e->dest;
+ }
}
/* Make sure we didn't select a silly next block. */