diff options
author | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-03-18 15:21:06 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-03-18 15:21:06 +0000 |
commit | 2e28e797125a94c7587b599eba438015fa02e5fe (patch) | |
tree | e2ca0569c078a0ce7bcb5fe80388985cdcfbfac8 /gcc/predict.c | |
parent | 52f1c7ed4d3ebab5b0b54f567bafbf1c29ccffeb (diff) | |
download | gcc-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.c | 26 |
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 */ |