aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2016-06-02 14:51:57 +0200
committerMartin Liska <marxin@gcc.gnu.org>2016-06-02 12:51:57 +0000
commitf3c5ecc2b984e186f043ad03cc7a96a6275f4670 (patch)
treee39cf66c60d50eee2d9159123f798e6d3765277e /gcc
parenta91807c5fc51615156e6858ae530247450c8c0b8 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/predict.c2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/predict-9.c23
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"} } */