aboutsummaryrefslogtreecommitdiff
path: root/gcc/predict.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@gcc.gnu.org>2008-03-18 15:21:06 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2008-03-18 15:21:06 +0000
commit2e28e797125a94c7587b599eba438015fa02e5fe (patch)
treee2ca0569c078a0ce7bcb5fe80388985cdcfbfac8 /gcc/predict.c
parent52f1c7ed4d3ebab5b0b54f567bafbf1c29ccffeb (diff)
downloadgcc-2e28e797125a94c7587b599eba438015fa02e5fe.zip
gcc-2e28e797125a94c7587b599eba438015fa02e5fe.tar.gz
gcc-2e28e797125a94c7587b599eba438015fa02e5fe.tar.bz2
tree-pretty-print.c: Include predict.h.
* tree-pretty-print.c: Include predict.h. (dump_generic_node): Dump predictor. * tree.h (PREDICT_EXPR_OUTCOME, PREDICT_EXPR_PREDICTION): Update. * tree-gimple.c (is_gimple_stmt): Add PREDICT_EXPR. * gimple-low.c (lower_stmt): Likewise. * expr.c (expand_expr_real): Likewise. * predict.c (tree_bb_level_predictions): Use PREDICT_EXPRs and remove them. (build_predict_expr, build_predict_expr): New. * predict.h (predictor_name, build_predict_expr): Update. * c-typeck.c (c_finish_bc_stmt): Add prediction. * gimplify.c (gimplify_expr): Add PREDICT_EXPR. * predict.def (PRED_CONTINUE): Update hitrate. * tree.def (PREDICT_EXPR): Define. * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Mark PREDICT_EXPR; do not handle BIND_EXPR. * tree-inline.c (estimate_num_insns_1): PREDICT_EXPR is free. * tree-cfg.c (verify_gimple_stmt): PREDICT_EXPR is valid. * tree-ssa-operands.c (get_expr_operands): PREDICT_EXPR takes no operands. From-SVN: r133313
Diffstat (limited to 'gcc/predict.c')
-rw-r--r--gcc/predict.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/predict.c b/gcc/predict.c
index cedb3d5..a20b352 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -1293,10 +1293,11 @@ tree_bb_level_predictions (void)
{
block_stmt_iterator bsi = bsi_last (bb);
- for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
+ for (bsi = bsi_start (bb); !bsi_end_p (bsi);)
{
tree stmt = bsi_stmt (bsi);
tree decl;
+ bool next = false;
switch (TREE_CODE (stmt))
{
@@ -1319,9 +1320,17 @@ call_expr:;
predict_paths_leading_to (bb, PRED_COLD_FUNCTION,
NOT_TAKEN);
break;
+ case PREDICT_EXPR:
+ predict_paths_leading_to (bb, PREDICT_EXPR_PREDICTOR (stmt),
+ PREDICT_EXPR_OUTCOME (stmt));
+ bsi_remove (&bsi, true);
+ next = true;
+ break;
default:
break;
}
+ if (!next)
+ bsi_next (&bsi);
}
}
}
@@ -1915,6 +1924,21 @@ gate_estimate_probability (void)
return flag_guess_branch_prob;
}
+/* Build PREDICT_EXPR. */
+tree
+build_predict_expr (enum br_predictor predictor, enum prediction taken)
+{
+ tree t = build1 (PREDICT_EXPR, NULL_TREE, build_int_cst (NULL, predictor));
+ PREDICT_EXPR_OUTCOME (t) = taken;
+ return t;
+}
+
+const char *
+predictor_name (enum br_predictor predictor)
+{
+ return predictor_info[predictor].name;
+}
+
struct tree_opt_pass pass_profile =
{
"profile", /* name */