I've updated the patch. Shall I move the check inside cgraph_clone_node? Thanks, Dehao
Index: gcc/ipa-inline-transform.c =================================================================== --- gcc/ipa-inline-transform.c (revision 210535) +++ gcc/ipa-inline-transform.c (working copy) @@ -183,8 +183,9 @@ clone_inlined_nodes (struct cgraph_edge *e, bool d if (freq_scale == -1) freq_scale = e->frequency; n = cgraph_clone_node (e->callee, e->callee->decl, - e->count, freq_scale, update_original, - vNULL, true, inlining_into, NULL); + MIN (e->count, e->callee->count), freq_scale, + update_original, vNULL, true, inlining_into, + NULL); cgraph_redirect_edge_callee (e, n); } } Index: gcc/tree-inline.c =================================================================== --- gcc/tree-inline.c (revision 210535) +++ gcc/tree-inline.c (working copy) @@ -4355,7 +4355,7 @@ expand_call_inline (basic_block bb, gimple stmt, c function in any way before this point, as this CALL_EXPR may be a self-referential call; if we're calling ourselves, we need to duplicate our body before altering anything. */ - copy_body (id, bb->count, + copy_body (id, cg_edge->callee->count, GCOV_COMPUTE_SCALE (cg_edge->frequency, CGRAPH_FREQ_BASE), bb, return_block, NULL); On Fri, May 16, 2014 at 6:41 PM, Jan Hubicka <hubi...@ucw.cz> wrote: >> Do you mean adjusting bb->count? Because in >> expand_call_inline(tree-inline.c), it will use bb->count to pass into >> copy_body to calculate count_scale. > > What about taking here callee->count instead? For inline nodes without > any capping hack, bb->count == edge->count = callee->count. > > When profile ends up being obviously inconsistent, I would say that > inliner can cap callee->count during producing the clone... > > Honza >> >> Thanks, >> Dehao >> >> On Fri, May 16, 2014 at 5:22 PM, Jan Hubicka <hubi...@ucw.cz> wrote: >> >> In AutoFDO, a basic block's count can be much larger than it's actual >> >> count because debug info might be incorrect. In this case, a call edge >> >> count (calculated from BB count) could be much larger than callee's >> >> header count, making the count_scale incorrectly large. >> > >> > In this case I still think we should handle this when producing the clone: >> > we do not want to have clone's count much larger as well, so i think >> > inliner >> > and ipa-cp needs to deal with capping here instead.... >> > >> > Honza >> >> >> >> Dehao >> >> > >> >> > >> >> > Honza