> Hi Honza,
> 
> The change here cause the following failures:
> 
> >FAIL: gcc.dg/tree-prof/switch-case-1.c scan-rtl-dump-times expand ";; basic 
> >block[^\\n]*count 2000" 1
> >FAIL: gcc.dg/tree-prof/switch-case-2.c scan-rtl-dump-times expand ";; basic 
> >block[^\\n]*count 2000" 1
> 
> 
> I checked that, after the change, there are two matches in the dump file.
> 
> 
> >;; basic block 8, loop depth 0, count 2000 (adjusted), freq 2000, maybe hot
> >;; basic block 23, loop depth 0, count 2000, freq 2000, maybe hot
> 
> 
> And without the change, there is only one match.
> 
> >;; basic block 23, loop depth 0, count 2000, freq 2000, maybe hot

I have also noticed that yesterday.  The problem was hidden previously because 
there was
edges with no counts.  There are some mismatches in profile constructed and I 
hoped that
perhaps Martin will know how to fix these right away?
Otherwise I will take a look tomorrow ;)

Honza
> 
> Regards,
> Renlin
> 
> 
> On 06/10/17 13:18, Jan Hubicka wrote:
> >Hi,
> >this patch fixes missing profile updat that triggers during 
> >profiledbootstrap.
> >
> >Honza
> >
> >     * tree-switch-conversion.c (do_jump_if_equal, emit_cmp_and_jump_insns):
> >     Update edge counts.
> >
> >Index: tree-switch-conversion.c
> >===================================================================
> >--- tree-switch-conversion.c (revision 253444)
> >+++ tree-switch-conversion.c (working copy)
> >@@ -2248,10 +2248,12 @@ do_jump_if_equal (basic_block bb, tree o
> >    edge false_edge = split_block (bb, cond);
> >    false_edge->flags = EDGE_FALSE_VALUE;
> >    false_edge->probability = prob.invert ();
> >+  false_edge->count = bb->count.apply_probability (false_edge->probability);
> >
> >    edge true_edge = make_edge (bb, label_bb, EDGE_TRUE_VALUE);
> >    fix_phi_operands_for_edge (true_edge, phi_mapping);
> >    true_edge->probability = prob;
> >+  true_edge->count = bb->count.apply_probability (true_edge->probability);
> >
> >    return false_edge->dest;
> >  }
> >@@ -2291,10 +2293,12 @@ emit_cmp_and_jump_insns (basic_block bb,
> >    edge false_edge = split_block (bb, cond);
> >    false_edge->flags = EDGE_FALSE_VALUE;
> >    false_edge->probability = prob.invert ();
> >+  false_edge->count = bb->count.apply_probability (false_edge->probability);
> >
> >    edge true_edge = make_edge (bb, label_bb, EDGE_TRUE_VALUE);
> >    fix_phi_operands_for_edge (true_edge, phi_mapping);
> >    true_edge->probability = prob;
> >+  true_edge->count = bb->count.apply_probability (true_edge->probability);
> >
> >    return false_edge->dest;
> >  }
> >

Reply via email to