[PATCH] decide edge's hotness when there is profile info
Steven Bosscher
stevenb.gcc@gmail.com
Fri Nov 8 22:28:00 GMT 2013
On Fri, Nov 8, 2013 at 10:58 PM, Teresa Johnson wrote:
> +static void
> +drop_profile (struct cgraph_node *node, bool hot)
> +{
> + struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
> +
> + if (dump_file)
> + fprintf (dump_file,
> + "Dropping 0 profile for %s/%i. %s based on calls.\n",
> + cgraph_node_name (node), node->order,
> + hot ? "Function is hot" : "Function is normal");
> + /* We only expect to miss profiles for functions that are reached
> + via non-zero call edges in cases where the function may have
> + been linked from another module or library (COMDATs and extern
> + templates). See the comments below for handle_missing_profiles. */
> + if (!DECL_COMDAT (node->decl) && !DECL_EXTERNAL (node->decl))
> + warning (0,
> + "Missing counts for called function %s/%i",
> + cgraph_node_name (node), node->order);
Maybe OPT_Wdisabled_optimization?
> +
> + profile_status_for_function (fn)
> + = (flag_guess_branch_prob ? PROFILE_GUESSED : PROFILE_ABSENT);
> + node->frequency
> + = hot ? NODE_FREQUENCY_HOT : NODE_FREQUENCY_NORMAL;
In GCC code style the = goes at the end of the line:
profile_status_for_function (fn)
(flag_guess_branch_prob ? PROFILE_GUESSED : PROFILE_ABSENT);
node->frequency =
hot ? NODE_FREQUENCY_HOT : NODE_FREQUENCY_NORMAL;
> @@ -2774,6 +2875,9 @@ counts_to_freqs (void)
> gcov_type count_max, true_count_max = 0;
> basic_block bb;
>
> + if (!ENTRY_BLOCK_PTR->count)
> + return 0;
> +
Deserves a one-line comment ;-)
> +void
> +freqs_to_counts (struct cgraph_node *node, gcov_type count)
> +{
> + basic_block bb;
> + edge_iterator ei;
> + edge e;
> + struct function *fn = DECL_STRUCT_FUNCTION (node->decl);
> +
> + FOR_ALL_BB_FN(bb, fn)
> + {
> + bb->count = apply_scale (count,
> + GCOV_COMPUTE_SCALE (bb->frequency, BB_FREQ_MAX));
> + FOR_EACH_EDGE (e, ei, bb->succs)
> + e->count = apply_probability (e->src->count, e->probability);
> + }
Indent +2:
FOR_ALL_BB_FN (bb, fn)
{
...
}
Ciao!
Steven
More information about the Gcc-patches
mailing list