aboutsummaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/predict.c16
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/predict-3.f9028
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