aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2016-08-09 22:57:39 +0200
committerMartin Liska <marxin@gcc.gnu.org>2016-08-09 20:57:39 +0000
commitab50a2153e0602a0d4384b0de390fb7322676479 (patch)
treedbb4966972e8a87470d386651e906c5035e0aec7 /gcc
parentdcb1e1379ea52c33e5025d6e5842c43888888afa (diff)
downloadgcc-ab50a2153e0602a0d4384b0de390fb7322676479.zip
gcc-ab50a2153e0602a0d4384b0de390fb7322676479.tar.gz
gcc-ab50a2153e0602a0d4384b0de390fb7322676479.tar.bz2
Fix usage of POW2 histogram
* value-prof.c (gimple_divmod_values_to_profile): Do not instrument MOD histogram if a value is not a SSA name. * gcc.dg/tree-prof/val-prof-9.c: New test. From-SVN: r239305
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c18
-rw-r--r--gcc/value-prof.c3
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc14d6f..2b1d5ff 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2016-08-09 Martin Liska <mliska@suse.cz>
+ * value-prof.c (gimple_divmod_values_to_profile): Do not
+ instrument MOD histogram if a value is not a SSA name.
+
+2016-08-09 Martin Liska <mliska@suse.cz>
+
* value-prof.c (dump_histogram_value): Swap pow2 and non-pow2
values.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 927f1e3..55ff081 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2016-08-09 Martin Liska <mliska@suse.cz>
+ * gcc.dg/tree-prof/val-prof-9.c: New test.
+
+2016-08-09 Martin Liska <mliska@suse.cz>
+
* gcc.dg/tree-prof/val-prof-8.c: New test.
2016-08-09 Martin Jambor <mjambor@suse.cz>
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c
new file mode 100644
index 0000000..8fc2301
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c
@@ -0,0 +1,18 @@
+/* { dg-options "-O0 -fdump-tree-optimized" } */
+
+int
+main (int argc, char **argv)
+{
+ unsigned u = (argc - 1);
+ int counter = 0;
+
+ for (unsigned i = 0; i < 100; i++)
+ {
+ counter += u % 16;
+ }
+
+ return counter;
+}
+
+/* autofdo does not do value profiling so far */
+/* { dg-final-use-not-autofdo { scan-tree-dump-times "__gcov_pow2_profiler" 0 "optimized" } } */
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 0527c2c..a4653aa 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -1950,7 +1950,8 @@ gimple_divmod_values_to_profile (gimple *stmt, histogram_values *values)
/* For mod, check whether it is not often a noop (or replaceable by
a few subtractions). */
if (gimple_assign_rhs_code (stmt) == TRUNC_MOD_EXPR
- && TYPE_UNSIGNED (type))
+ && TYPE_UNSIGNED (type)
+ && TREE_CODE (divisor) == SSA_NAME)
{
tree val;
/* Check for a special case where the divisor is power of 2. */