> 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