diff options
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r-- | gcc/sched-rgn.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 3bb9356693e..492094e3624 100644 --- a/gcc/sched-rgn.c +++ b/gcc/sched-rgn.c @@ -507,7 +507,8 @@ find_single_block_region (bool ebbs_p) e = find_fallthru_edge (bb->succs); if (! e) break; - if (e->probability <= probability_cutoff) + if (e->probability.initialized_p () + && e->probability.to_reg_br_prob_base () <= probability_cutoff) break; } @@ -1441,7 +1442,11 @@ compute_dom_prob_ps (int bb) FOR_EACH_EDGE (out_edge, out_ei, in_edge->src->succs) bitmap_set_bit (pot_split[bb], EDGE_TO_BIT (out_edge)); - prob[bb] += combine_probabilities (prob[pred_bb], in_edge->probability); + prob[bb] += combine_probabilities + (prob[pred_bb], + in_edge->probability.initialized_p () + ? in_edge->probability.to_reg_br_prob_base () + : 0); // The rounding divide in combine_probabilities can result in an extra // probability increment propagating along 50-50 edges. Eventually when // the edges re-merge, the accumulated probability can go slightly above @@ -3171,8 +3176,10 @@ schedule_region (int rgn) sched_rgn_n_insns += sched_n_insns; realloc_bb_state_array (saved_last_basic_block); f = find_fallthru_edge (last_bb->succs); - if (f && f->probability * 100 / REG_BR_PROB_BASE >= - PARAM_VALUE (PARAM_SCHED_STATE_EDGE_PROB_CUTOFF)) + if (f + && (!f->probability.initialized_p () + || f->probability.to_reg_br_prob_base () * 100 / REG_BR_PROB_BASE >= + PARAM_VALUE (PARAM_SCHED_STATE_EDGE_PROB_CUTOFF))) { memcpy (bb_state[f->dest->index], curr_state, dfa_state_size); |