Can callgraph node count be fixed up properly instead of doing
individual fixups like this?

David

On Fri, Jan 17, 2014 at 2:38 PM, Dehao Chen <de...@google.com> wrote:
> In AutoFDO, sometime edge count might be propagated to be too large
> due to bad debug info. In this cases, we need to make sure the count
> scale is no larger than 100% otherwise it'll make real hot code cold.
>
> Bootstrapped and passed regression test. Performance test on-going.
>
> OK for google-4_8 if performance test is ok?
>
> Thanks,
> Dehao
>
> Index: gcc/tree-inline.c
> ===================================================================
> --- gcc/tree-inline.c (revision 206721)
> +++ gcc/tree-inline.c (working copy)
> @@ -2262,6 +2262,9 @@ copy_cfg_body (copy_body_data * id, gcov_type coun
>    else
>      count_scale = REG_BR_PROB_BASE;
>
> +  if (flag_auto_profile && count_scale > REG_BR_PROB_BASE)
> +    count_scale = REG_BR_PROB_BASE;
> +
>    /* Register specific tree functions.  */
>    gimple_register_cfg_hooks ();
>
> Index: gcc/cgraphclones.c
> ===================================================================
> --- gcc/cgraphclones.c (revision 206721)
> +++ gcc/cgraphclones.c (working copy)
> @@ -216,7 +216,10 @@ cgraph_clone_node (struct cgraph_node *n, tree dec
>       count, we will not update the original callee because it may
>       mistakenly mark some hot function as cold.  */
>    if (flag_auto_profile && count >= n->count)
> -    update_original = false;
> +    {
> +      update_original = false;
> +      new_node->count = n->count;
> +    }
>    if (update_original)
>      {
>        n->count -= count;

Reply via email to