diff options
author | Martin Liska <mliska@suse.cz> | 2019-01-02 15:03:53 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-01-02 14:03:53 +0000 |
commit | 0588e288242a3b66b67e79d11e03828a0a728953 (patch) | |
tree | d67d1c0eeb856534cb535a7bfb83d07e55cd4343 /gcc/predict.c | |
parent | 17067056c18e35885105518a5b5051b5f7b51856 (diff) | |
download | gcc-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.c | 16 |
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 (); |