Not for instrumented FDO (not as I know of). But for AutoFDO, this could be a potential risk because some callee is marked unlikely executed simply because they are inlined and eliminated in the O2 binary. But in ipa-inline it will not get inlined because the edge is not hot from cgraph_maybe_hot_edge_p (because callee is UNLIKELY_EXECUTED), while the edge->count is actually hot.
Dehao On Mon, Oct 14, 2013 at 9:13 AM, Xinliang David Li <davi...@google.com> wrote: > Looks like there is some inconsistency between edge hotness and callee > frequency? > > David > > On Mon, Oct 14, 2013 at 9:08 AM, Dehao Chen <de...@google.com> wrote: >> This patch forces to use profile info to check if an edge is hot when >> profile is available. >> >> Bootstrapped and passed regression tests. >> >> OK for trunk? >> >> Thanks, >> Dehao >> >> gcc/ChangeLog: >> 2013-10-14 Dehao Chen <de...@google.com> >> * predict.c(cgraph_maybe_hot_edge_p): Decide edge's hotness from profile. >> >> Index: gcc/predict.c >> =================================================================== >> --- gcc/predict.c (revision 203568) >> +++ gcc/predict.c (working copy) >> @@ -185,10 +185,8 @@ maybe_hot_bb_p (struct function *fun, const_basic_ >> bool >> cgraph_maybe_hot_edge_p (struct cgraph_edge *edge) >> { >> - if (profile_info && flag_branch_probabilities >> - && !maybe_hot_count_p (NULL, >> - edge->count)) >> - return false; >> + if (profile_info && flag_branch_probabilities) >> + return maybe_hot_count_p (NULL, edge->count); >> if (edge->caller->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED >> || (edge->callee >> && edge->callee->frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED))