Fix usage of POW2 histogram
authorMartin Liska <mliska@suse.cz>
Tue, 9 Aug 2016 20:57:39 +0000 (22:57 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 9 Aug 2016 20:57:39 +0000 (20:57 +0000)
* 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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c [new file with mode: 0644]
gcc/value-prof.c

index dc14d6f10e709a50a30fc487092e78bade490b6e..2b1d5ffb00ecb0541a910a9e0b2d751072a5107f 100644 (file)
@@ -1,3 +1,8 @@
+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
index 927f1e31a3218bb417e17f32275c3da4b423be37..55ff0819c0d8f9f17ac10e3f9e7d44b8ed0dbe09 100644 (file)
@@ -1,3 +1,7 @@
+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.
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 (file)
index 0000000..8fc2301
--- /dev/null
@@ -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" } } */
index 0527c2cc73851b5cb8acd33ad7fd91de7c0bc172..a4653aa8ee98c173a8329b884b950e6e935d2382 100644 (file)
@@ -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.  */