On Mon, Feb 2, 2026 at 9:58 AM Richard Biener <[email protected]> wrote: > > The following replaces the last host double computation by using > int64_t instead to avoid overflow of 32bit (but capped to > REG_BR_PROB_BASE) values. > > Bootstrapped and tested on x86_64-unknown-linux-gnu. > > OK?
Ok. > > Thanks, > Richard. > > PR middle-end/45273 > * predict.cc (combine_predictions_for_insn): Use int64_t > math instead of double. > --- > gcc/predict.cc | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/gcc/predict.cc b/gcc/predict.cc > index de8f9c2211f..2859f64964b 100644 > --- a/gcc/predict.cc > +++ b/gcc/predict.cc > @@ -1046,13 +1046,14 @@ combine_predictions_for_insn (rtx_insn *insn, > basic_block bb) > + (REG_BR_PROB_BASE - combined_probability) > * (REG_BR_PROB_BASE - probability)); > > - /* Use FP math to avoid overflows of 32bit integers. */ > + /* Use int64_t math to avoid overflows of 32bit integers. */ > if (d == 0) > /* If one probability is 0% and one 100%, avoid division by zero. > */ > combined_probability = REG_BR_PROB_BASE / 2; > else > - combined_probability = (((double) combined_probability) * > probability > - * REG_BR_PROB_BASE / d + 0.5); > + combined_probability = ((((int64_t) combined_probability) > + * probability > + * REG_BR_PROB_BASE + (d / 2)) / d); > } > > /* Decide which heuristic to use. In case we didn't match anything, > @@ -1399,14 +1400,14 @@ combine_predictions_for_bb (basic_block bb, bool > dry_run) > + (REG_BR_PROB_BASE - combined_probability) > * (REG_BR_PROB_BASE - probability)); > > - /* Use FP math to avoid overflows of 32bit integers. */ > + /* Use int64_t math to avoid overflows of 32bit integers. */ > if (d == 0) > /* If one probability is 0% and one 100%, avoid division by zero. > */ > combined_probability = REG_BR_PROB_BASE / 2; > else > - combined_probability = (((double) combined_probability) > - * probability > - * REG_BR_PROB_BASE / d + 0.5); > + combined_probability = ((((int64_t) combined_probability) > + * probability > + * REG_BR_PROB_BASE + (d / 2)) / d); > } > } > > -- > 2.51.0
