aboutsummaryrefslogtreecommitdiff
path: root/gcc/predict.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-01-02 15:03:53 +0100
committerMartin Liska <marxin@gcc.gnu.org>2019-01-02 14:03:53 +0000
commit0588e288242a3b66b67e79d11e03828a0a728953 (patch)
treed67d1c0eeb856534cb535a7bfb83d07e55cd4343 /gcc/predict.c
parent17067056c18e35885105518a5b5051b5f7b51856 (diff)
downloadgcc-0588e288242a3b66b67e79d11e03828a0a728953.zip
gcc-0588e288242a3b66b67e79d11e03828a0a728953.tar.gz
gcc-0588e288242a3b66b67e79d11e03828a0a728953.tar.bz2
Calculate prediction remainder at proper place (PR tree-optimization/88650).
2019-01-02 Martin Liska <mliska@suse.cz> PR tree-optimization/88650 * predict.c (set_even_probabilities): Calculate probability remainer only when really used. 2019-01-02 Martin Liska <mliska@suse.cz> PR tree-optimization/88650 * gfortran.dg/predict-3.f90: New test. From-SVN: r267513
Diffstat (limited to 'gcc/predict.c')
-rw-r--r--gcc/predict.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/predict.c b/gcc/predict.c
index 745be18..0ac8adf 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -877,19 +877,21 @@ set_even_probabilities (basic_block bb,
int p = prediction->ep_probability;
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 = even;
+ {
+ 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);
+
+ e->probability = remainder.apply_scale (1, count);
+ }
}
else
e->probability = profile_probability::never ();