+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
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 "
fprintf (f, " (auto FDO)");
else if (m_quality == profile_guessed)
fprintf (f, " (guessed)");
+ else if (m_quality == profile_precise)
+ fprintf (f, " (precise)");
}
}
}
}
+ 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)
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 ();
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++)
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. */