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] Fix profile count updates during tail merging


> This patch fixes a profile count insanity introduced by ssa tail
> merging. When replacing bb1 with bb2, which has the same successors,
> the bb counts were being merged, but the successor edge weights
> were not.
> 
> Bootstrapped and tested on x86_64-unknown-linux-gnu. Ok for trunk?
> 
> Thanks,
> Teresa
> 
> 2013-10-15  Teresa Johnson  <tejohnson@google.com>
> 
>         * tree-ssa-tail-merge.c (replace_block_by): Update edge
>         weights during merging.
> 
> Index: tree-ssa-tail-merge.c
> ===================================================================
> --- tree-ssa-tail-merge.c       (revision 203389)
> +++ tree-ssa-tail-merge.c       (working copy)
> @@ -1462,6 +1462,8 @@ static void
>  replace_block_by (basic_block bb1, basic_block bb2)
>  {
>    edge pred_edge;
> +  edge e1;
> +  edge_iterator ei;
>    unsigned int i;
>    gimple bb2_phi;
> 
> @@ -1488,6 +1490,15 @@ replace_block_by (basic_block bb1, basic_block bb2
>                    pred_edge, UNKNOWN_LOCATION);
>      }
> 
> +  /* Merge the outgoing edge counts from bb1 onto bb2.  */
> +  FOR_EACH_EDGE (e1, ei, bb1->succs)
> +    {
> +      edge e2;
> +      e2 = find_edge (bb2, e1->dest);
> +      gcc_assert (e2);
> +      e2->count += e1->count;

Don't you need to redistribute the counts via edge probabilities?

Honza
> +    }
> +
>    bb2->frequency += bb1->frequency;
>    if (bb2->frequency > BB_FREQ_MAX)
>      bb2->frequency = BB_FREQ_MAX;
> 
> 
> -- 
> Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413


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