diff options
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cfgcleanup.c | 11 |
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 289bec3..e508636 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-12-17 Richard Henderson <rth@redhat.com> + + * cfgcleanup.c (outgoing_edges_match): Check for insn match with + a single outgoing edge too. + Mon Dec 17 18:27:52 CET 2001 Jan Hubicka <jh@suse.cz> * cfgrtl.c (redirect_edge_and_branch): Do simplify abnormal diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index d13e3a0..b23def8 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -956,11 +956,14 @@ outgoing_edges_match (mode, bb1, bb2) edge fallthru1 = 0, fallthru2 = 0; edge e1, e2; - /* If BB1 has only one successor, we must be looking at an unconditional - jump. Which, by the assumption above, means that we only need to check - that BB2 has one successor. */ + /* If BB1 has only one successor, we may be looking at either an + unconditional jump, or a fake edge to exit. */ if (bb1->succ && !bb1->succ->succ_next) - return (bb2->succ && !bb2->succ->succ_next); + { + if (! bb2->succ || bb2->succ->succ_next) + return false; + return insns_match_p (mode, bb1->end, bb2->end); + } /* Match conditional jumps - this may get tricky when fallthru and branch edges are crossed. */ |
