This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [GOOGLE] Remove zero_edge propagation algorithm
- From: Xinliang David Li <davidxl at google dot com>
- To: Dehao Chen <dehao at google dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Diego Novillo <dnovillo at google dot com>
- Date: Fri, 22 Nov 2013 14:38:57 -0800
- Subject: Re: [GOOGLE] Remove zero_edge propagation algorithm
- Authentication-results: sourceware.org; auth=none
- References: <CAO2gOZVa2ap_KcsuJezPGfEi5Fx=o8Ph0OJJqBB5FJku3zookw at mail dot gmail dot com> <CAAkRFZKy1Bu-z-NsNYqoz3L09ubT4g=yeDfrOyt8rF5CEBBQyg at mail dot gmail dot com> <CAO2gOZXAey_NDZYqPPwZUxbd=wz6j6nYt2susoXCoY=J9m7DHw at mail dot gmail dot com>
ok thanks.
David
On Fri, Nov 22, 2013 at 1:59 PM, Dehao Chen <dehao@google.com> wrote:
> 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 <davidxl@google.com> wrote:
>> On Fri, Nov 22, 2013 at 12:27 PM, Dehao Chen <dehao@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;