diff options
author | Martin Liska <mliska@suse.cz> | 2016-06-02 14:51:57 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2016-06-02 12:51:57 +0000 |
commit | f3c5ecc2b984e186f043ad03cc7a96a6275f4670 (patch) | |
tree | e39cf66c60d50eee2d9159123f798e6d3765277e /gcc | |
parent | a91807c5fc51615156e6858ae530247450c8c0b8 (diff) | |
download | gcc-f3c5ecc2b984e186f043ad03cc7a96a6275f4670.zip gcc-f3c5ecc2b984e186f043ad03cc7a96a6275f4670.tar.gz gcc-f3c5ecc2b984e186f043ad03cc7a96a6275f4670.tar.bz2 |
Fix first match heuristics
* predict.c (combine_predictions_for_bb): Fix first match in
cases where a first predictor contains more than one occurence
in list of predictors. Take the best value in such case.
* gcc.dg/predict-9.c: New test.
From-SVN: r237036
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/predict.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/predict-9.c | 23 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01beb95..d4af6af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-06-02 Martin Liska <mliska@suse.cz> + + * predict.c (combine_predictions_for_bb): Fix first match in + cases where a first predictor contains more than one occurence + in list of predictors. Take the best value in such case. + 2016-06-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com> PR rtl-optimization/71295 diff --git a/gcc/predict.c b/gcc/predict.c index e9dda20..429f44e 100644 --- a/gcc/predict.c +++ b/gcc/predict.c @@ -939,7 +939,7 @@ combine_predictions_for_bb (basic_block bb, bool dry_run) pred2; pred2 = pred2->ep_next) if (pred2 != pred && pred2->ep_predictor == pred->ep_predictor) { - int probability2 = pred->ep_probability; + int probability2 = pred2->ep_probability; if (pred2->ep_edge != first) probability2 = REG_BR_PROB_BASE - probability2; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b0fa91b..fcf6bbd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-06-02 Martin Liska <mliska@suse.cz> + + * gcc.dg/predict-9.c: New test. + 2016-06-02 Jakub Jelinek <jakub@redhat.com> * lib/gcc-dg.exp (cleanup-after-saved-dg-test): Add missing diff --git a/gcc/testsuite/gcc.dg/predict-9.c b/gcc/testsuite/gcc.dg/predict-9.c new file mode 100644 index 0000000..59be16e --- /dev/null +++ b/gcc/testsuite/gcc.dg/predict-9.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-profile_estimate" } */ + +extern int global; +extern int global2; +extern int global3; + +void foo (int base) +{ + int i; + while (global < 10) + { + if(global || global2 || global3) + return; + + for (i = base; i < 10; i++) + if (i > 123) + return; + } +} + +/* { dg-final { scan-tree-dump-times "first match heuristics: 2.0%" 4 "profile_estimate"} } */ +/* { dg-final { scan-tree-dump-times "first match heuristics: 4.5%" 0 "profile_estimate"} } */ |