aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIndu Bhagat <indu.bhagat@oracle.com>2018-11-30 23:54:30 +0000
committerJeff Law <law@gcc.gnu.org>2018-11-30 16:54:30 -0700
commit732779d073130387365b25f83f1c5266382e3db7 (patch)
treebcacefdd7dad2b72eb700dc648e60fa0ca518648 /gcc
parent4df6a9063433b4f47a2f49535b448408a9dd6b94 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/coverage.c2
-rw-r--r--gcc/profile-count.c2
-rw-r--r--gcc/profile.c14
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. */