ok thanks. David
On Fri, Nov 22, 2013 at 1:59 PM, Dehao Chen <de...@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 <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;