> 2020-12-10 Jakub Jelinek <ja...@redhat.com> > > PR rtl-optimization/98212 > * dojump.c (do_compare_rtx_and_jump): Change computation of > first_prob for and_them and don't invert prob around it. > > * gcc.dg/predict-8.c: Adjust expected probability. > > --- gcc/dojump.c.jj 2020-12-09 15:11:17.042888002 +0100 > +++ gcc/dojump.c 2020-12-09 20:05:59.535234206 +0100 > @@ -1148,9 +1148,8 @@ do_compare_rtx_and_jump (rtx op0, rtx op > if (and_them) > { > rtx_code_label *dest_label; > - prob = prob.invert (); > - profile_probability first_prob = prob.split (cprob).invert (); > - prob = prob.invert (); > + profile_probability first_prob > + = prob.split (cprob.invert ()).invert (); > /* If we only jump if true, just bypass the second jump. */ > if (! if_false_label) > {
The computation looks plausible, but you need to fix the comment too, it is rather confusing as it seems to depict an OR-ELSE rather than an AND-THEN. -- Eric Botcazou