This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/81318] [8 regression] ICE in to_reg_br_prob_base, at profile-count.h:189
- From: "marxin at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 14 Aug 2017 08:27:43 +0000
- Subject: [Bug middle-end/81318] [8 regression] ICE in to_reg_br_prob_base, at profile-count.h:189
- Auto-submitted: auto-generated
- References: <bug-81318-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81318
--- Comment #24 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Jan Hubicka from comment #23)
> determine_unlikely_bbs is intended to propagate known to be cold bbs
> (profile_count::zero) rather than guessed_zero so it seems to do the job
> correctly here, because we decide to trust the cold attribute (I am still
> undecided if we don't want to invent unlikely attribute for that).
>
> I will take a look why this leads to ICE on propagating frequencies.
Ok, so assuming we want to have profile_count::zero, then we assign the same to
all edges reaching the BB. And for outgoing edges we:
FOR_EACH_EDGE (e, ei, bb->succs)
if (!(e->count == profile_count::zero ())
&& unlikely_executed_edge_p (e))
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Edge %i->%i is locally unlikely\n",
bb->index, e->dest->index);
e->count = profile_count::zero ();
}
which fails because the edges is neither EH or FAKE edge.
So we should probably test when setting probabilities to:
diff --git a/gcc/predict.c b/gcc/predict.c
index 198fa919d74..a10e9991667 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -1291,7 +1291,8 @@ combine_predictions_for_bb (basic_block bb, bool dry_run)
}
clear_bb_predictions (bb);
- if (!bb->count.initialized_p () && !dry_run)
+ if (!first->probability.initialized_p ()
+ && !second->probability.initialized_p() && !dry_run)
{
first->probability
= profile_probability::from_reg_br_prob_base (combined_probability);
What do you think Honza?