From 8c3196e11dc5d2b2b14eb43b3a7c2eef3a508d0b Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 3 Jul 2017 12:43:19 +0000 Subject: [PATCH] * tree-cfg.c (gimple_find_sub_bbs): Fix profile updating. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@249908 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 ++++ gcc/tree-cfg.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d0826ae6c9..dd4c44bf03b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 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. (cleanup_tree_cfg_bb): Use it. * profile-count.h (profile_count::of_for_merging, profile_count::merge): 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); -- 2.11.4.GIT