aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2004-11-08 21:21:49 -0700
committerJeff Law <law@gcc.gnu.org>2004-11-08 21:21:49 -0700
commitdf95526be1b070f6dab3167f362056f4c2c43cfd (patch)
tree06652f7acaf9367a0888955e343219ae2cf9e5d9
parent68e4debe62c4404b0b5fdebf592c2b36bf52949d (diff)
downloadgcc-df95526be1b070f6dab3167f362056f4c2c43cfd.zip
gcc-df95526be1b070f6dab3167f362056f4c2c43cfd.tar.gz
gcc-df95526be1b070f6dab3167f362056f4c2c43cfd.tar.bz2
cfg.c (redirect_edge_succ_nodup): Use find_edge rather than implementing it inline.
* 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. From-SVN: r90333
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cfg.c9
-rw-r--r--gcc/cfganal.c15
3 files changed, 22 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 20f50a6..6af64c6 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 1901a59..b3da142 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 651f153..06c71f6 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;
}