aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2016-06-03 19:00:19 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2016-06-03 17:00:19 +0000
commit641762ae264c86492d869d55559644e87ed36d46 (patch)
tree77e01c3bfeb741c9d3244647bd9b356c05368d43 /gcc
parent0d2f700f7be6780985b2cfd6bfca44523e058cbc (diff)
downloadgcc-641762ae264c86492d869d55559644e87ed36d46.zip
gcc-641762ae264c86492d869d55559644e87ed36d46.tar.gz
gcc-641762ae264c86492d869d55559644e87ed36d46.tar.bz2
tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Avoid use of profile unless profile status is PROFILE_READ.
* tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Avoid use of profile unless profile status is PROFILE_READ. * profile.c (compute_branch_probabilities): Set profile status only after reporting predictor hitrates. From-SVN: r237076
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/profile.c11
-rw-r--r--gcc/tree-ssa-loop-niter.c8
3 files changed, 19 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d52fa3d..068b874 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-06-03 Jan Hubicka <hubicka@ucw.cz>
+
+ * tree-ssa-loop-niter.c (estimate_numbers_of_iterations_loop): Avoid
+ use of profile unless profile status is PROFILE_READ.
+ * profile.c (compute_branch_probabilities): Set profile status
+ only after reporting predictor hitrates.
+
2016-06-03 Joseph Myers <joseph@codesourcery.com>
PR target/71276
diff --git a/gcc/profile.c b/gcc/profile.c
index 007379b..9925bb5 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -826,8 +826,6 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum)
}
}
counts_to_freqs ();
- profile_status_for_fn (cfun) = PROFILE_READ;
- compute_function_frequency ();
if (dump_file)
{
@@ -1329,8 +1327,13 @@ branch_prob (void)
values.release ();
free_edge_list (el);
coverage_end_function (lineno_checksum, cfg_checksum);
- if (dump_file && (dump_flags & TDF_DETAILS))
- report_predictor_hitrates ();
+ if (flag_branch_probabilities && profile_info)
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ report_predictor_hitrates ();
+ profile_status_for_fn (cfun) = PROFILE_READ;
+ compute_function_frequency ();
+ }
}
/* Union find algorithm implementation for the basic blocks using
diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c
index e70e0a7..7804036 100644
--- a/gcc/tree-ssa-loop-niter.c
+++ b/gcc/tree-ssa-loop-niter.c
@@ -3757,10 +3757,12 @@ estimate_numbers_of_iterations_loop (struct loop *loop)
maybe_lower_iteration_bound (loop);
/* If we have a measured profile, use it to estimate the number of
- iterations. */
- if (loop->header->count != 0)
+ iterations. Explicitly check for profile status so we do not report
+ wrong prediction hitrates for guessed loop iterations heuristics. */
+ if (loop->header->count != 0
+ && profile_status_for_fn (cfun) >= PROFILE_READ)
{
- gcov_type nit = expected_loop_iterations_unbounded (loop) + 1;
+ gcov_type nit = expected_loop_iterations_unbounded (loop);
bound = gcov_type_to_wide_int (nit);
record_niter_bound (loop, bound, true, false);
}