afdo_propagate_multi_edge can do everything afdo_propagate_single_edge
does. So we refactor the code to keep only one afdo_propagate_edge
function.

Bootstrapped and passed all unittests and performance tests.

OK for googlge branch?

Thanks,
Dehao

Index: gcc/auto-profile.c
===================================================================
--- gcc/auto-profile.c (revision 205354)
+++ gcc/auto-profile.c (working copy)
@@ -1069,44 +1069,6 @@ afdo_find_equiv_class (void)
     }
 }

-/* If a baisk block only has one in/out edge, then the bb count and he
-   edge count should be the same.
-   IS_SUCC is true if the out edge of the basic block is examined.
-   Return TRUE if any basic block/edge count is changed.  */
-
-static bool
-afdo_propagate_single_edge (bool is_succ)
-{
-  basic_block bb;
-  bool changed = false;
-
-  FOR_EACH_BB (bb)
-    if (is_succ ? single_succ_p (bb) : single_pred_p (bb))
-      {
- edge e = is_succ ? single_succ_edge (bb) : single_pred_edge (bb);
- if (((e->flags & EDGE_ANNOTATED) == 0)
-    && ((bb->flags & BB_ANNOTATED) != 0))
-  {
-    e->count = bb->count;
-    e->flags |= EDGE_ANNOTATED;
-    changed = true;
-  }
- else if (((e->flags & EDGE_ANNOTATED) != 0)
-    && ((bb->flags & BB_ANNOTATED) == 0))
-  {
-    bb->count = e->count;
-    bb->flags |= BB_ANNOTATED;
-    changed = true;
-  }
- else if (bb->count != e->count)
-  {
-    e->count = bb->count = MAX (bb->count, e->count);
-    changed = true;
-  }
-      }
-  return changed;
-}
-
 /* If a basic block's count is known, and only one of its in/out edges' count
    is unknown, its count can be calculated.
    Meanwhile, if all of the in/out edges' counts are known, then the basic
@@ -1115,7 +1077,7 @@ afdo_find_equiv_class (void)
    Return TRUE if any basic block/edge count is changed.  */

 static bool
-afdo_propagate_multi_edge (bool is_succ)
+afdo_propagate_edge (bool is_succ)
 {
   basic_block bb;
   bool changed = false;
@@ -1281,14 +1243,10 @@ afdo_propagate (void)
     {
       changed = false;

-      if (afdo_propagate_single_edge (true))
+      if (afdo_propagate_edge (true))
  changed = true;
-      if (afdo_propagate_single_edge (false))
+      if (afdo_propagate_edge (false))
  changed = true;
-      if (afdo_propagate_multi_edge (true))
- changed = true;
-      if (afdo_propagate_multi_edge (false))
- changed = true;
       afdo_propagate_circuit ();
     }
 }

Reply via email to