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 | |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/predict.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/predict-3.f90 | 28 |
4 files changed, 48 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b39771c..f79bab5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +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 Richard Biener <rguenther@suse.de> PR middle-end/88651 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 (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd219f5..269d780 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-02 Martin Liska <mliska@suse.cz> + + PR tree-optimization/88650 + * gfortran.dg/predict-3.f90: New test. + 2019-01-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * g++.dg/gcov/pr88263.C: Rename namespace log to logging. diff --git a/gcc/testsuite/gfortran.dg/predict-3.f90 b/gcc/testsuite/gfortran.dg/predict-3.f90 new file mode 100644 index 0000000..f543788 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/predict-3.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-fno-tree-fre -fno-tree-ccp -Og" } + +program simplify_transfer + call pr30881 () +contains + subroutine pr18769 () + type t + end type t + end subroutine pr18769 + subroutine pr30881 () + INTEGER, PARAMETER :: K=1 + I=TRANSFER(.TRUE.,K) + SELECT CASE(I) + CASE(TRANSFER(.TRUE.,K)) + CASE(TRANSFER(.FALSE.,K)) + STOP 2 + CASE DEFAULT + STOP 3 + END SELECT + END subroutine pr30881 + subroutine pr31194 () + end subroutine pr31194 + subroutine pr31216 () + END subroutine pr31216 + subroutine pr31427 () + END subroutine pr31427 +end program simplify_transfer |