This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Ensure count_scale is no larger than REG_BR_PROB_BASE


> I've updated the patch. Shall I move the check inside cgraph_clone_node?

Thanks,
I think it is OK as it is. I belive individual users should know what do to
in such cases themselves.
You may want to also check what ipa-cp is doing.

Patch is OK (with Changelog)
Honza
> 
> 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 <hubicka@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 <hubicka@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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]