diff options
author | Martin Liska <mliska@suse.cz> | 2018-12-31 14:46:08 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-12-31 13:46:08 +0000 |
commit | b3282dfe1a1601accd3bd012898c2bc807e0d078 (patch) | |
tree | f6a353dcdd9481af9384378d339ef833ae34ac6d /gcc/predict.c | |
parent | 41ee4e75ab27ebf63d1512fc56e673fdee74e8aa (diff) | |
download | gcc-b3282dfe1a1601accd3bd012898c2bc807e0d078.zip gcc-b3282dfe1a1601accd3bd012898c2bc807e0d078.tar.gz gcc-b3282dfe1a1601accd3bd012898c2bc807e0d078.tar.bz2 |
predict.c (set_even_probabilities): Include also unlikely_count in calculation.
).
2018-12-31 Martin Liska <mliska@suse.cz>
* predict.c (set_even_probabilities): Include also
unlikely_count in calculation.
(combine_predictions_for_bb): Consider also HOT and
COLD labels predictions.
* predict.def (PRED_HOT_LABEL): Move it just after
__builtin_expect_with_probability predictor.
(PRED_COLD_LABEL): Likewise.
2018-12-31 Martin Liska <mliska@suse.cz>
* g++.dg/predict-2.C: New test.
* g++.dg/predict-3.C: New test.
* g++.dg/predict-4.C: New test.
* gcc.dg/tree-ssa/attr-hotcold-2.c: Adjust test-case.
From-SVN: r267485
Diffstat (limited to 'gcc/predict.c')
-rw-r--r-- | gcc/predict.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/predict.c b/gcc/predict.c index 5ad252c..81dbb67 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -878,11 +878,18 @@ set_even_probabilities (basic_block bb, profile_probability prob = profile_probability::from_reg_br_prob_base (p); profile_probability remainder = prob.invert (); + remainder -= profile_probability::very_unlikely () + .apply_scale (unlikely_count, 1); + int count = nedges - unlikely_count - 1; + gcc_assert (count >= 0); + profile_probability even = remainder.apply_scale (1, count); if (prediction->ep_edge == e) e->probability = prob; + else if (unlikely_edges != NULL && unlikely_edges->contains (e)) + e->probability = profile_probability::very_unlikely (); else - e->probability = remainder.apply_scale (1, nedges - 1); + e->probability = even; } else e->probability = profile_probability::never (); @@ -1217,10 +1224,12 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) if (preds) for (pred = *preds; pred; pred = pred->ep_next) { - if (pred->ep_probability <= PROB_VERY_UNLIKELY) + if (pred->ep_probability <= PROB_VERY_UNLIKELY + || pred->ep_predictor == PRED_COLD_LABEL) unlikely_edges.add (pred->ep_edge); if (pred->ep_probability >= PROB_VERY_LIKELY - || pred->ep_predictor == PRED_BUILTIN_EXPECT) + || pred->ep_predictor == PRED_BUILTIN_EXPECT + || pred->ep_predictor == PRED_HOT_LABEL) likely_edges.add (pred); } |