From: Jan Hubicka Date: Mon, 3 Jul 2017 12:43:19 +0000 (+0200) Subject: * tree-cfg.c (gimple_find_sub_bbs): Fix profile updating. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e1a921ddaac5e50426fc2b0edfee3b17a4607fe6;p=gcc.git * tree-cfg.c (gimple_find_sub_bbs): Fix profile updating. From-SVN: r249908 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d0826ae6c9..dd4c44bf03b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2017-07-02 Jan Hubicka + + * tree-cfg.c (gimple_find_sub_bbs): Fix profile updating. + 2017-07-02 Jan Hubicka * tree-cfgcleanup.c (want_merge_blocks_p): New function. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index e0cee12a69e..248373194f5 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -1051,6 +1051,7 @@ gimple_find_sub_bbs (gimple_seq seq, gimple_stmt_iterator *gsi) struct omp_region *cur_region = NULL; profile_count cnt = profile_count::zero (); int freq = 0; + bool all = true; int cur_omp_region_idx = 0; int mer = make_edges_bb (bb, &cur_region, &cur_omp_region_idx); @@ -1061,12 +1062,16 @@ gimple_find_sub_bbs (gimple_seq seq, gimple_stmt_iterator *gsi) edge_iterator ei; FOR_EACH_EDGE (e, ei, bb->preds) { - cnt += e->count; + if (e->count.initialized_p ()) + cnt += e->count; + else + all = false; freq += EDGE_FREQUENCY (e); } - bb->count = cnt; - bb->frequency = freq; tree_guess_outgoing_edge_probabilities (bb); + if (all || profile_status_for_fn (cfun) == PROFILE_READ) + bb->count = cnt; + bb->frequency = freq; FOR_EACH_EDGE (e, ei, bb->succs) e->count = bb->count.apply_probability (e->probability);