Commit 93c18375 by Martin Liska Committed by Martin Liska

Rework cold and hot label attributes in predict.c.

2017-06-21  Martin Liska  <mliska@suse.cz>

	* gimplify.c (gimplify_label_expr): Insert GIMPLE_PREDICT
	statements on cold and hot labels.
	* predict.c (tree_estimate_probability_bb): Remove the
	prediction from this place.
2017-06-21  Martin Liska  <mliska@suse.cz>

	* gcc.dg/tree-ssa/attr-hotcold-2.c: Update scanned patterns.

From-SVN: r249451
parent e59a1c22
2017-06-21 Martin Liska <mliska@suse.cz> 2017-06-21 Martin Liska <mliska@suse.cz>
* gimplify.c (gimplify_label_expr): Insert GIMPLE_PREDICT
statements on cold and hot labels.
* predict.c (tree_estimate_probability_bb): Remove the
prediction from this place.
2017-06-21 Martin Liska <mliska@suse.cz>
PR tree-optimization/79489 PR tree-optimization/79489
* gimplify.c (maybe_add_early_return_predict_stmt): New * gimplify.c (maybe_add_early_return_predict_stmt): New
function. function.
......
...@@ -2357,10 +2357,18 @@ gimplify_label_expr (tree *expr_p, gimple_seq *pre_p) ...@@ -2357,10 +2357,18 @@ gimplify_label_expr (tree *expr_p, gimple_seq *pre_p)
gcc_assert (decl_function_context (LABEL_EXPR_LABEL (*expr_p)) gcc_assert (decl_function_context (LABEL_EXPR_LABEL (*expr_p))
== current_function_decl); == current_function_decl);
glabel *label_stmt = gimple_build_label (LABEL_EXPR_LABEL (*expr_p)); tree label = LABEL_EXPR_LABEL (*expr_p);
glabel *label_stmt = gimple_build_label (label);
gimple_set_location (label_stmt, EXPR_LOCATION (*expr_p)); gimple_set_location (label_stmt, EXPR_LOCATION (*expr_p));
gimplify_seq_add_stmt (pre_p, label_stmt); gimplify_seq_add_stmt (pre_p, label_stmt);
if (lookup_attribute ("cold", DECL_ATTRIBUTES (label)))
gimple_seq_add_stmt (pre_p, gimple_build_predict (PRED_COLD_LABEL,
NOT_TAKEN));
else if (lookup_attribute ("hot", DECL_ATTRIBUTES (label)))
gimple_seq_add_stmt (pre_p, gimple_build_predict (PRED_HOT_LABEL,
TAKEN));
return GS_ALL_DONE; return GS_ALL_DONE;
} }
......
...@@ -2742,29 +2742,6 @@ tree_estimate_probability_bb (basic_block bb, bool local_only) ...@@ -2742,29 +2742,6 @@ tree_estimate_probability_bb (basic_block bb, bool local_only)
FOR_EACH_EDGE (e, ei, bb->succs) FOR_EACH_EDGE (e, ei, bb->succs)
{ {
/* Predict edges to user labels with attributes. */
if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
{
gimple_stmt_iterator gi;
for (gi = gsi_start_bb (e->dest); !gsi_end_p (gi); gsi_next (&gi))
{
glabel *label_stmt = dyn_cast <glabel *> (gsi_stmt (gi));
tree decl;
if (!label_stmt)
break;
decl = gimple_label_label (label_stmt);
if (DECL_ARTIFICIAL (decl))
continue;
/* Finally, we have a user-defined label. */
if (lookup_attribute ("cold", DECL_ATTRIBUTES (decl)))
predict_edge_def (e, PRED_COLD_LABEL, NOT_TAKEN);
else if (lookup_attribute ("hot", DECL_ATTRIBUTES (decl)))
predict_edge_def (e, PRED_HOT_LABEL, TAKEN);
}
}
/* Look for block we are guarding (ie we dominate it, /* Look for block we are guarding (ie we dominate it,
but it doesn't postdominate us). */ but it doesn't postdominate us). */
if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) && e->dest != bb if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun) && e->dest != bb
......
2017-06-21 Martin Liska <mliska@suse.cz>
* gcc.dg/tree-ssa/attr-hotcold-2.c: Update scanned patterns.
2017-06-21 Pierre-Marie de Rodat <derodat@adacore.com> 2017-06-21 Pierre-Marie de Rodat <derodat@adacore.com>
* gnat.dg/debug11_pkg.adb, gnat.dg/debug11_pkg.ads, * gnat.dg/debug11_pkg.adb, gnat.dg/debug11_pkg.ads,
......
...@@ -20,9 +20,9 @@ void f(int x, int y) ...@@ -20,9 +20,9 @@ void f(int x, int y)
/* { dg-final { scan-tree-dump-times "hot label heuristics" 1 "profile_estimate" } } */ /* { dg-final { scan-tree-dump-times "hot label heuristics" 1 "profile_estimate" } } */
/* { dg-final { scan-tree-dump-times "cold label heuristics" 1 "profile_estimate" } } */ /* { dg-final { scan-tree-dump-times "cold label heuristics" 1 "profile_estimate" } } */
/* { dg-final { scan-tree-dump-times "block 4, loop depth 0, freq \[1-4\]\[^0-9\]" 3 "profile_estimate" } } */ /* { dg-final { scan-tree-dump "A \\\[0\\\..*\\\]" "profile_estimate" } } */
/* Note: we're attempting to match some number > 6000, i.e. > 60%. /* Note: we're attempting to match some number > 6000, i.e. > 60%.
The exact number ought to be tweekable without having to juggle The exact number ought to be tweekable without having to juggle
the testcase around too much. */ the testcase around too much. */
/* { dg-final { scan-tree-dump-times "block 5, loop depth 0, freq \[6-9\]\[0-9\]\[0-9\]\[0-9\]" 3 "profile_estimate" } } */ /* { dg-final { scan-tree-dump "B \\\[\[6-9\]\[0-9\]\\\..*\\\]" "profile_estimate" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment