On Fri, Nov 8, 2013 at 6:23 AM, Dehao Chen <de...@google.com> wrote: > AutoFDO sometimes has 0 profile in the loop's entry block because the > debug info are lost and unrecoverable.
Is that a separate problem to track and fix? Also is it better to do a round of loop profiling smoothing after auto profile annotation to eliminate the insanity? David > > E.g. > > if (a) > if (b) > for () {} > > This patch checks if the scale factor is 0, then use the normal scale. > > Bootstrapped and passed regression test and performance test. > > OK for google-4_8? > > Thanks, > Dehao > > Index: gcc/cfgloopmanip.c > =================================================================== > --- gcc/cfgloopmanip.c (revision 204568) > +++ gcc/cfgloopmanip.c (working copy) > @@ -1262,6 +1262,8 @@ duplicate_loop_to_header_edge (struct loop *loop, > } > for (i = 0; i < ndupl; i++) > gcc_assert (scale_step[i] >= 0 && scale_step[i] <= REG_BR_PROB_BASE); > + if (flag_auto_profile && scale_main == 0) > + scale_main = REG_BR_PROB_BASE; > gcc_assert (scale_main >= 0 && scale_main <= REG_BR_PROB_BASE > && scale_act >= 0 && scale_act <= REG_BR_PROB_BASE); > }