https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103680
--- Comment #10 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
I am testing:
diff --git a/gcc/cfg.cc b/gcc/cfg.cc
index 897ef534ff5..defdf679f7b 100644
--- a/gcc/cfg.cc
+++ b/gcc/cfg.cc
@@ -922,7 +922,6 @@ update_bb_profile_for_threading (basic_block bb,
fprintf (dump_file, "bb %i count became negative after threading",
bb->index);
}
- bb->count -= count;
/* Compute the probability of TAKEN_EDGE being reached via threaded edge.
Watch for overflows. */
@@ -934,8 +933,8 @@ update_bb_profile_for_threading (basic_block bb,
{
if (dump_file)
{
- fprintf (dump_file, "Jump threading proved probability of edge "
- "%i->%i too small (it is ",
+ fprintf (dump_file, "Jump threading proved that the probability of
edge "
+ "%i->%i was originally estimated too small (it is ",
taken_edge->src->index, taken_edge->dest->index);
taken_edge->probability.dump (dump_file);
fprintf (dump_file, " should be ");
@@ -945,6 +944,8 @@ update_bb_profile_for_threading (basic_block bb,
prob = taken_edge->probability.apply_scale (6, 8);
}
+ bb->count -= count;
+
/* Now rescale the probabilities. */
taken_edge->probability -= prob;
prob = prob.invert ();
This fixes the trivial testcase in comment #9