This patch removes the zero_edge heuristic during profile propagation. The zero_edge heuristic does not seem to be effective in improving performance.
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;