This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix profile update in switch conversion
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: mliska at suse dot cz, gcc-patches at gcc dot gnu dot org
- Date: Fri, 6 Oct 2017 14:18:56 +0200
- Subject: Fix profile update in switch conversion
- Authentication-results: sourceware.org; auth=none
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;
}