diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2016-06-03 19:00:19 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2016-06-03 17:00:19 +0000 |
commit | 641762ae264c86492d869d55559644e87ed36d46 (patch) | |
tree | 77e01c3bfeb741c9d3244647bd9b356c05368d43 /gcc | |
parent | 0d2f700f7be6780985b2cfd6bfca44523e058cbc (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/profile.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-niter.c | 8 |
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); } |