diff options
| author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-09 04:21:49 +0000 |
|---|---|---|
| committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-09 04:21:49 +0000 |
| commit | bd98a41841b4c2f94efb5ba21092c33939611646 (patch) | |
| tree | 06652f7acaf9367a0888955e343219ae2cf9e5d9 | |
| parent | 817ab1a3675b97e7084be72cfbf7d7f65f1ddaf8 (diff) | |
| download | ppe42-gcc-bd98a41841b4c2f94efb5ba21092c33939611646.tar.gz ppe42-gcc-bd98a41841b4c2f94efb5ba21092c33939611646.zip | |
* cfg.c (redirect_edge_succ_nodup): Use find_edge rather than
implementing it inline.
* cfganal.c (find_edge): Search pred->succs or succ->preds,
whichever is shorter.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@90333 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/cfg.c | 9 | ||||
| -rw-r--r-- | gcc/cfganal.c | 15 |
3 files changed, 22 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 20f50a6c80e..6af64c641ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-11-08 Jeff Law <law@redhat.com> + + * cfg.c (redirect_edge_succ_nodup): Use find_edge rather than + implementing it inline. + + * cfganal.c (find_edge): Search pred->succs or succ->preds, + whichever is shorter. + 2004-11-08 Kazu Hirata <kazu@cs.umass.edu> * passes.c (rest_of_handle_jump): Remove dead code. diff --git a/gcc/cfg.c b/gcc/cfg.c index 1901a59051c..b3da1429b1d 100644 --- a/gcc/cfg.c +++ b/gcc/cfg.c @@ -428,14 +428,9 @@ edge redirect_edge_succ_nodup (edge e, basic_block new_succ) { edge s; - edge_iterator ei; - - /* Check whether the edge is already present. */ - FOR_EACH_EDGE (s, ei, e->src->succs) - if (s->dest == new_succ && s != e) - break; - if (s) + s = find_edge (e->src, new_succ); + if (s && s != e) { s->flags |= e->flags; s->probability += e->probability; diff --git a/gcc/cfganal.c b/gcc/cfganal.c index 651f1534552..06c71f678c6 100644 --- a/gcc/cfganal.c +++ b/gcc/cfganal.c @@ -478,9 +478,18 @@ find_edge (basic_block pred, basic_block succ) edge e; edge_iterator ei; - FOR_EACH_EDGE (e, ei, pred->succs) - if (e->dest == succ) - return e; + if (EDGE_COUNT (pred->succs) <= EDGE_COUNT (succ->preds)) + { + FOR_EACH_EDGE (e, ei, pred->succs) + if (e->dest == succ) + return e; + } + else + { + FOR_EACH_EDGE (e, ei, succ->preds) + if (e->src == pred) + return e; + } return NULL; } |

