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