Hello Richard, Not directly related to your patch but...
On Sun, Sep 22, 2013 at 12:54 PM, Richard Sandiford wrote: > @@ -588,14 +589,17 @@ cond_exec_process_if_block (ce_if_block_ > goto fail; > #endif > > - true_prob_val = find_reg_note (BB_END (test_bb), REG_BR_PROB, NULL_RTX); > - if (true_prob_val) > + note = find_reg_note (BB_END (test_bb), REG_BR_PROB, NULL_RTX); > + if (note) > { > - true_prob_val = XEXP (true_prob_val, 0); > - false_prob_val = GEN_INT (REG_BR_PROB_BASE - INTVAL (true_prob_val)); > + true_prob_val = XINT (note, 0); > + false_prob_val = REG_BR_PROB_BASE - true_prob_val; > } > else > - false_prob_val = NULL_RTX; > + { > + true_prob_val = -1; > + false_prob_val = -1; > + } > > /* If we have && or || tests, do them here. These tests are in the > adjacent > blocks after the first block containing the test. */ You can just take true_prob_val and false_prob_val from the edge probabilities of BRANCH_EDGE and FALLTHRU_EDGE. Looking at REG_BR_PROB notes in places where the CFG is available is IMHO always a bug. Other places where this happens are at least these: loop-doloop.c:doloop_modify() cfgrtl.c:force_nonfallthru_and_redirect() cfgrtl.c:fixup_reorder_chain() (Long-term I'd like to see REG_BR_PROB notes become redundant, by extending the life of the CFG all the way to final...) Ciao! Steven