As discussed offline, will commit this patch first, and think of other smoothing algorithm to prevent profile insanity.
Dehao On Fri, Nov 8, 2013 at 9:32 AM, Xinliang David Li <davi...@google.com> wrote: > 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); >> }