Patch updated...

There is no performance change with/without the patch. I think this
was used to workaround the debug info accuracy issue. But after debug
info is more improved now, the heuristic is not needed any more.

Thanks,
Dehao

Index: gcc/auto-profile.c
===================================================================
--- gcc/auto-profile.c (revision 205232)
+++ gcc/auto-profile.c (working copy)
@@ -1122,29 +1122,16 @@ afdo_propagate_multi_edge (bool is_succ)

   FOR_EACH_BB (bb)
     {
-      edge e, unknown_edge = NULL, zero_edge = NULL;
+      edge e, unknown_edge = NULL;
       edge_iterator ei;
       int num_unknown_edge = 0;
       gcov_type total_known_count = 0;

-      if (is_succ)
- {
-  FOR_EACH_EDGE (e, ei, bb->succs)
-    if ((e->flags & EDGE_ANNOTATED) == 0)
-      num_unknown_edge ++, unknown_edge = e;
-    else if (e->count == 0)
-      zero_edge = e;
-    else
-      total_known_count += e->count;
- }
-      else
- {
-  FOR_EACH_EDGE (e, ei, bb->preds)
-    if ((e->flags & EDGE_ANNOTATED) == 0)
-      num_unknown_edge ++, unknown_edge = e;
-    else
-      total_known_count += e->count;
- }
+      FOR_EACH_EDGE (e, ei, is_succ ? bb->succs : bb->preds)
+ if ((e->flags & EDGE_ANNOTATED) == 0)
+  num_unknown_edge ++, unknown_edge = e;
+ else
+  total_known_count += e->count;

       if (num_unknown_edge == 0)
  {
@@ -1153,12 +1140,6 @@ afdo_propagate_multi_edge (bool is_succ)
       bb->count = total_known_count;
       changed = true;
     }
-  else if (zero_edge != NULL && total_known_count < bb->count
-   && bb->loop_father && bb->loop_father->header == bb)
-    {
-      zero_edge->count = bb->count - total_known_count;
-      changed = true;
-    }
   if ((bb->flags & BB_ANNOTATED) == 0)
     {
       bb->flags |= BB_ANNOTATED;

On Fri, Nov 22, 2013 at 1:17 PM, Xinliang David Li <davi...@google.com> wrote:
> On Fri, Nov 22, 2013 at 12:27 PM, Dehao Chen <de...@google.com> wrote:
>> This patch removes the zero_edge heuristic during profile propagation.
>> The zero_edge heuristic does not seem to be effective in improving
>> performance.
>
> "not effective" here means degrading performance?
>
> David
>
>>
>> Tested:
>> Bootstrapped and passed regression test and performance test.
>>
>> OK for google-4_8?
>>
>> Thanks,
>> Dehao
>>
>> Index: gcc/auto-profile.c
>> ===================================================================
>> --- gcc/auto-profile.c (revision 205232)
>> +++ gcc/auto-profile.c (working copy)
>> @@ -1122,7 +1122,7 @@ afdo_propagate_multi_edge (bool is_succ)
>>
>>    FOR_EACH_BB (bb)
>>      {
>> -      edge e, unknown_edge = NULL, zero_edge = NULL;
>> +      edge e, unknown_edge = NULL;
>>        edge_iterator ei;
>>        int num_unknown_edge = 0;
>>        gcov_type total_known_count = 0;
>> @@ -1132,8 +1132,6 @@ afdo_propagate_multi_edge (bool is_succ)
>>    FOR_EACH_EDGE (e, ei, bb->succs)
>>      if ((e->flags & EDGE_ANNOTATED) == 0)
>>        num_unknown_edge ++, unknown_edge = e;
>> -    else if (e->count == 0)
>> -      zero_edge = e;
>>      else
>>        total_known_count += e->count;
>>   }
>> @@ -1153,12 +1151,6 @@ afdo_propagate_multi_edge (bool is_succ)
>>        bb->count = total_known_count;
>>        changed = true;
>>      }
>> -  else if (zero_edge != NULL && total_known_count < bb->count
>> -   && bb->loop_father && bb->loop_father->header == bb)
>> -    {
>> -      zero_edge->count = bb->count - total_known_count;
>> -      changed = true;
>> -    }
>>    if ((bb->flags & BB_ANNOTATED) == 0)
>>      {
>>        bb->flags |= BB_ANNOTATED;

Reply via email to