From 0588e288242a3b66b67e79d11e03828a0a728953 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 2 Jan 2019 15:03:53 +0100 Subject: [PATCH] Calculate prediction remainder at proper place (PR tree-optimization/88650). 2019-01-02 Martin Liska PR tree-optimization/88650 * predict.c (set_even_probabilities): Calculate probability remainer only when really used. 2019-01-02 Martin Liska PR tree-optimization/88650 * gfortran.dg/predict-3.f90: New test. From-SVN: r267513 --- gcc/ChangeLog | 6 ++++++ gcc/predict.c | 16 +++++++------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/predict-3.f90 | 28 +++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/predict-3.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b39771c621b..f79bab55746 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-01-02 Martin Liska + + PR tree-optimization/88650 + * predict.c (set_even_probabilities): Calculate probability + remainer only when really used. + 2019-01-02 Richard Biener PR middle-end/88651 diff --git a/gcc/predict.c b/gcc/predict.c index 745be185a29..0ac8adf286f 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 bd219f56480..269d780e465 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-02 Martin Liska + + PR tree-optimization/88650 + * gfortran.dg/predict-3.f90: New test. + 2019-01-02 Rainer Orth * 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 00000000000..f5437883f9d --- /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 -- 2.30.2