Another small follow-up changes instrumentation of MOD exprs to not instrument divisors different from SSA_NAME.
Patch survives: make check -k -j10 RUNTESTFLAGS="tree-prof.exp" Ready for trunk? Thanks, Martin
>From 00aecc0dd74c4546a1882bdbbb0f66fbf39a5408 Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Mon, 8 Aug 2016 19:18:11 +0200 Subject: [PATCH 2/2] Fix usage of POW2 histogram gcc/ChangeLog: 2016-08-08 Martin Liska <mli...@suse.cz> * value-prof.c (gimple_divmod_values_to_profile): Do not instrument MOD histogram if a value is not a SSA name. gcc/testsuite/ChangeLog: 2016-08-08 Martin Liska <mli...@suse.cz> * gcc.dg/tree-prof/val-prof-9.c: New test. --- gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c | 18 ++++++++++++++++++ gcc/value-prof.c | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tree-prof/val-prof-9.c 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. */ -- 2.9.2