From: Jan Hubicka Date: Mon, 6 Jun 2005 12:31:35 +0000 (+0200) Subject: predict.c (tree_predict_edge): Don't drop useless predictions; check that it is not... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a00d11f077e0577ef4c8f6d08f2c8d52d8ec15ca;p=gcc.git predict.c (tree_predict_edge): Don't drop useless predictions; check that it is not called too late in the game. * predict.c (tree_predict_edge): Don't drop useless predictions; check that it is not called too late in the game. (gate_estimate_probability): New gate. (pass_profile): Gate. * tree-mudflap.c (mf_build_check_statement_for): Do not drop predictions; update CFG instead. * cfgrtl.c (rtl_verify_flow_info): Check that predcitions are consumed. From-SVN: r100662 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5014a66681a..84678e289cb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-06-06 Jan Hubicka + + * predict.c (tree_predict_edge): Don't drop useless predictions; + check that it is not called too late in the game. + (gate_estimate_probability): New gate. + (pass_profile): Gate. + * tree-mudflap.c (mf_build_check_statement_for): Do not drop + predictions; update CFG instead. + * cfgrtl.c (rtl_verify_flow_info): Check that predcitions are consumed. + 2005-06-06 Jie Zhang * config.gcc (bfin*-uclinux*): New. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 2571d4d65dc..f414def06bd 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2136,6 +2136,12 @@ rtl_verify_flow_info (void) edge e; edge_iterator ei; + if (bb->predictions) + { + error ("bb prediction set for block %i, but it is not used in RTL land", bb->index); + err = 1; + } + FOR_EACH_EDGE (e, ei, bb->succs) if (e->flags & EDGE_FALLTHRU) break; diff --git a/gcc/predict.c b/gcc/predict.c index 22468ace111..61cc5402e74 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -231,8 +231,9 @@ rtl_predict_edge (edge e, enum br_predictor predictor, int probability) void tree_predict_edge (edge e, enum br_predictor predictor, int probability) { + gcc_assert (profile_status != PROFILE_GUESSED); if ((e->src != ENTRY_BLOCK_PTR && EDGE_COUNT (e->src->succs) > 1) - && flag_guess_branch_prob) + && flag_guess_branch_prob && optimize) { struct edge_prediction *i = ggc_alloc (sizeof (struct edge_prediction)); @@ -1926,11 +1927,16 @@ choose_function_section (void) UNLIKELY_EXECUTED_TEXT_SECTION_NAME); } +static bool +gate_estimate_probability (void) +{ + return flag_guess_branch_prob; +} struct tree_opt_pass pass_profile = { "profile", /* name */ - NULL, /* gate */ + gate_estimate_probability, /* gate */ tree_estimate_probability, /* execute */ NULL, /* sub */ NULL, /* next */ diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index f7ab16e3233..a6d87cc42ae 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -528,14 +528,11 @@ mf_build_check_statement_for (tree base, tree limit, make_edge (cond_bb, then_bb, EDGE_TRUE_VALUE); make_single_succ_edge (then_bb, join_bb, EDGE_FALLTHRU); - /* We expect that the conditional jump we will construct will not - be taken very often as it basically is an exception condition. */ - predict_edge_def (single_pred_edge (then_bb), PRED_MUDFLAP, NOT_TAKEN); - /* Mark the pseudo-fallthrough edge from cond_bb to join_bb. */ e = find_edge (cond_bb, join_bb); e->flags = EDGE_FALSE_VALUE; - predict_edge_def (e, PRED_MUDFLAP, TAKEN); + e->count = cond_bb->count; + e->probability = REG_BR_PROB_BASE; /* Update dominance info. Note that bb_join's data was updated by split_block. */