[PATCH] Fix PR ipa/58862 (profiled bootstrap failure)
Jan Hubicka
hubicka@ucw.cz
Tue Oct 29 21:21:00 GMT 2013
> This patch fixes a profiledbootstrap failure that occurred after I
> added some profile fixup. The initial profile insanity occurred
> upstream of my change, but my change caused the insanity to spread to
> the edge probability, resulting in a verify failure. The patch below
> ensures this doesn't occur.
>
> Bootstrapped and tested on x86-64-unknown-linux-gnu. A
> profiledbootstrap build also now succeeds. Ok for trunk?
OK.
Honza
>
> Thanks,
> Teresa
>
> 2013-10-29 Teresa Johnson <tejohnson@google.com>
>
> PR ipa/58862
> * tree-ssa-tail-merge.c (replace_block_by): Tolerate profile
> insanities when updating probabilities.
>
> Index: tree-ssa-tail-merge.c
> ===================================================================
> --- tree-ssa-tail-merge.c (revision 204166)
> +++ tree-ssa-tail-merge.c (working copy)
> @@ -1467,7 +1467,7 @@ static void
> replace_block_by (basic_block bb1, basic_block bb2)
> {
> edge pred_edge;
> - edge e1;
> + edge e1, e2;
> edge_iterator ei;
> unsigned int i;
> gimple bb2_phi;
> @@ -1502,16 +1502,22 @@ replace_block_by (basic_block bb1, basic_block bb2
> bb2->count += bb1->count;
>
> /* Merge the outgoing edge counts from bb1 onto bb2. */
> + gcov_type out_sum = 0;
> FOR_EACH_EDGE (e1, ei, bb1->succs)
> {
> - edge e2;
> e2 = find_edge (bb2, e1->dest);
> gcc_assert (e2);
> e2->count += e1->count;
> - /* Recompute the probability from the new merged edge count (bb2->count
> - was updated above). */
> - e2->probability = GCOV_COMPUTE_SCALE (e2->count, bb2->count);
> + out_sum += e2->count;
> }
> + /* Recompute the edge probabilities from the new merged edge count.
> + Use the sum of the new merged edge counts computed above instead
> + of bb2's merged count, in case there are profile count insanities
> + making the bb count inconsistent with the edge weights. */
> + FOR_EACH_EDGE (e2, ei, bb2->succs)
> + {
> + e2->probability = GCOV_COMPUTE_SCALE (e2->count, out_sum);
> + }
>
> /* Do updates that use bb1, before deleting bb1. */
> release_last_vdef (bb1);
>
>
> --
> Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413
More information about the Gcc-patches
mailing list