]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cfg.c (redirect_edge_succ_nodup): Use find_edge rather than implementing it inline.
authorJeff Law <law@redhat.com>
Tue, 9 Nov 2004 04:21:49 +0000 (21:21 -0700)
committerJeff Law <law@gcc.gnu.org>
Tue, 9 Nov 2004 04:21:49 +0000 (21:21 -0700)
        * 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

gcc/ChangeLog
gcc/cfg.c
gcc/cfganal.c

index 20f50a6c80edac652eac482fcef2f063990900d3..6af64c641ab524fd24445e1ad70282ecadd1414e 100644 (file)
@@ -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.
index 1901a59051c8b90206a489657d6325c9cd2301c3..b3da1429b1dbd748118e34dc5a38582473ed1509 100644 (file)
--- 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;
index 651f15345528179070506803ea625b7ac5287609..06c71f678c6dc816629c52db70e141a9e084283a 100644 (file)
@@ -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;
 }