diff options
author | Indu Bhagat <indu.bhagat@oracle.com> | 2018-11-30 23:54:30 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2018-11-30 16:54:30 -0700 |
commit | 732779d073130387365b25f83f1c5266382e3db7 (patch) | |
tree | bcacefdd7dad2b72eb700dc648e60fa0ca518648 /gcc | |
parent | 4df6a9063433b4f47a2f49535b448408a9dd6b94 (diff) | |
download | gcc-732779d073130387365b25f83f1c5266382e3db7.zip gcc-732779d073130387365b25f83f1c5266382e3db7.tar.gz gcc-732779d073130387365b25f83f1c5266382e3db7.tar.bz2 |
coverage.c (get_coverage_counts): Use from_function_decl for precise function location.
* coverage.c (get_coverage_counts): Use from_function_decl for precise
function location.
* profile-count.c (profile_count::dump): Add handling for precise
profile quality.
* profile.c (compute_branch_probabilities): Rely on exec_counts instead
of profile_info to set profile_status of function.
(branch_prob): Do not set profile_status of function based on
profile_info. Done above based on exec_counts.
From-SVN: r266702
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/coverage.c | 2 | ||||
-rw-r--r-- | gcc/profile-count.c | 2 | ||||
-rw-r--r-- | gcc/profile.c | 14 |
4 files changed, 25 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a759eeb..6ce31bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2018-11-30 Indu Bhagat <indu.bhagat@oracle.com> + + * coverage.c (get_coverage_counts): Use from_function_decl for precise + function location. + * profile-count.c (profile_count::dump): Add handling for precise + profile quality. + * profile.c (compute_branch_probabilities): Rely on exec_counts instead + of profile_info to set profile_status of function. + (branch_prob): Do not set profile_status of function based on + profile_info. Done above based on exec_counts. + 2018-11-30 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/88274 diff --git a/gcc/coverage.c b/gcc/coverage.c index f0cbc1e..9dc1cae 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -358,7 +358,7 @@ get_coverage_counts (unsigned counter, unsigned cfg_checksum, if (warning_printed && dump_enabled_p ()) { dump_user_location_t loc - = dump_user_location_t::from_location_t (input_location); + = dump_user_location_t::from_function_decl (current_function_decl); dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, "use -Wno-error=coverage-mismatch to tolerate " "the mismatch but performance may drop if the " diff --git a/gcc/profile-count.c b/gcc/profile-count.c index f4ab244..90f4feb 100644 --- a/gcc/profile-count.c +++ b/gcc/profile-count.c @@ -83,6 +83,8 @@ profile_count::dump (FILE *f) const fprintf (f, " (auto FDO)"); else if (m_quality == profile_guessed) fprintf (f, " (guessed)"); + else if (m_quality == profile_precise) + fprintf (f, " (precise)"); } } diff --git a/gcc/profile.c b/gcc/profile.c index be6d3b8..ded0958 100644 --- a/gcc/profile.c +++ b/gcc/profile.c @@ -698,6 +698,9 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum) } } + if (exec_counts) + profile_status_for_fn (cfun) = PROFILE_READ; + /* If we have real data, use them! */ if (bb_gcov_count (ENTRY_BLOCK_PTR_FOR_FN (cfun)) || !flag_guess_branch_prob) @@ -705,7 +708,7 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum) bb->count = profile_count::from_gcov_type (bb_gcov_count (bb)); /* If function was not trained, preserve local estimates including statically determined zero counts. */ - else + else if (profile_status_for_fn (cfun) == PROFILE_READ) FOR_ALL_BB_FN (bb, cfun) if (!(bb->count == profile_count::zero ())) bb->count = bb->count.global0 (); @@ -718,6 +721,11 @@ compute_branch_probabilities (unsigned cfg_checksum, unsigned lineno_checksum) if (dump_file) { + fprintf (dump_file, " Profile feedback for function"); + fprintf (dump_file, ((profile_status_for_fn (cfun) == PROFILE_READ) + ? " is available \n" + : " is not available \n")); + fprintf (dump_file, "%d branches\n", num_branches); if (num_branches) for (i = 0; i < 10; i++) @@ -1317,12 +1325,12 @@ branch_prob (void) values.release (); free_edge_list (el); coverage_end_function (lineno_checksum, cfg_checksum); - if (flag_branch_probabilities && profile_info) + if (flag_branch_probabilities + && (profile_status_for_fn (cfun) == PROFILE_READ)) { struct loop *loop; if (dump_file && (dump_flags & TDF_DETAILS)) report_predictor_hitrates (); - profile_status_for_fn (cfun) = PROFILE_READ; /* At this moment we have precise loop iteration count estimates. Record them to loop structure before the profile gets out of date. */ |