> 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 <tejohn...@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 | tejohn...@google.com | 408-460-2413