> 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...)
Indeed, it was always my longer term plan - it is also why REG_BR_PROB
do not track counts, only probabilities. And indeed, we should avoid using
them when CFG is around.
The patch seems like nice memory use reduction. I am always happy when
unnecesary pointers disappear ;)
Honza