> - /* Proportion second loop's bb counts except those dominated by false > - branch to avoid drop 1s down. */ > - basic_block bbi_copy = get_bb_copy (false_edge->dest); > - bbs2 = get_loop_body (loop2); > - for (j = 0; j < loop2->num_nodes; j++) > - if (bbs2[j] == loop2->latch > - || !dominated_by_p (CDI_DOMINATORS, bbs2[j], bbi_copy)) > - bbs2[j]->count = bbs2[j]->count.apply_probability ( > - true_edge->probability.invert ()); > - free (bbs2); > + if (true_edge->probability.initialized_p ()) > + { > + edge exit_to_latch1 = single_pred_edge (loop1->latch); > + exit_to_latch1->probability > + = exit_to_latch1->probability.apply_scale ( > + true_edge->probability.to_reg_br_prob_base (), > + REG_BR_PROB_BASE); This should be exit_to_latch1->probability *= true_edge->probability; whici will do the right thing to undefined probabilities and will not cause unnecesary roundoff errors and precision info loss.
Can you please update that in the patch (and drop the initialized_p check)? Honza