aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-08-09 09:47:35 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-08-09 07:47:35 +0000
commitc220ecd21b11575cdfb53d64f3c7e850fede78a9 (patch)
treef09a60d7d4c15d574d31b60d7e31744eb8797de0
parentbb522e2eea23703375e65a044c93e8144ef4664e (diff)
downloadgcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.zip
gcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.tar.gz
gcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.tar.bz2
Port value profiling to -fopt-info infrastructure.
2019-08-09 Martin Liska <mliska@suse.cz> * value-prof.c (gimple_divmod_fixed_value_transform): Use dump_printf_loc. (gimple_mod_pow2_value_transform): Likewise. (gimple_mod_subtract_transform): Likewise. (init_node_map): Likewise. (gimple_ic_transform): Likewise. (gimple_stringops_transform): Likewise. 2019-08-09 Martin Liska <mliska@suse.cz> * g++.dg/tree-prof/indir-call-prof.C: Add -optimize to -fdump-ipa-profile. * g++.dg/tree-prof/morefunc.C: Likewise. * g++.dg/tree-prof/reorder.C: Likewise. * gcc.dg/tree-prof/ic-misattribution-1.c: Likewise. * gcc.dg/tree-prof/indir-call-prof.c: Likewise. * gcc.dg/tree-prof/stringop-1.c: Likewise. * gcc.dg/tree-prof/stringop-2.c: Likewise. * gcc.dg/tree-prof/val-prof-1.c: Likewise. * gcc.dg/tree-prof/val-prof-2.c: Likewise. * gcc.dg/tree-prof/val-prof-3.c: Likewise. * gcc.dg/tree-prof/val-prof-4.c: Likewise. * gcc.dg/tree-prof/val-prof-5.c: Likewise. * gcc.dg/tree-prof/val-prof-7.c: Likewise. From-SVN: r274229
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/testsuite/ChangeLog17
-rw-r--r--gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C2
-rw-r--r--gcc/testsuite/g++.dg/tree-prof/morefunc.C2
-rw-r--r--gcc/testsuite/g++.dg/tree-prof/reorder.C2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/stringop-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/stringop-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c2
-rw-r--r--gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c2
-rw-r--r--gcc/value-prof.c105
16 files changed, 91 insertions, 67 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 25d0956..b8d54e1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2019-08-09 Martin Liska <mliska@suse.cz>
+
+ * value-prof.c (gimple_divmod_fixed_value_transform):
+ Use dump_printf_loc.
+ (gimple_mod_pow2_value_transform): Likewise.
+ (gimple_mod_subtract_transform): Likewise.
+ (init_node_map): Likewise.
+ (gimple_ic_transform): Likewise.
+ (gimple_stringops_transform): Likewise.
+
2019-08-08 Mihailo Stojanovic <mistojanovic@wavecomp.com>
* doc/extend.texi: Add const qualifier to ld intrinsics.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a31e261..e64565e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,20 @@
+2019-08-09 Martin Liska <mliska@suse.cz>
+
+ * g++.dg/tree-prof/indir-call-prof.C: Add -optimize
+ to -fdump-ipa-profile.
+ * g++.dg/tree-prof/morefunc.C: Likewise.
+ * g++.dg/tree-prof/reorder.C: Likewise.
+ * gcc.dg/tree-prof/ic-misattribution-1.c: Likewise.
+ * gcc.dg/tree-prof/indir-call-prof.c: Likewise.
+ * gcc.dg/tree-prof/stringop-1.c: Likewise.
+ * gcc.dg/tree-prof/stringop-2.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-1.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-2.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-3.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-4.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-5.c: Likewise.
+ * gcc.dg/tree-prof/val-prof-7.c: Likewise.
+
2019-08-09 Jakub Jelinek <jakub@redhat.com>
* c-c++-common/gomp/if-4.c: New test.
diff --git a/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C b/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C
index 3134c3c..be896c0 100644
--- a/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C
+++ b/gcc/testsuite/g++.dg/tree-prof/indir-call-prof.C
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile -fdump-ipa-afdo" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized -fdump-ipa-afdo" } */
struct A {
A () {}
diff --git a/gcc/testsuite/g++.dg/tree-prof/morefunc.C b/gcc/testsuite/g++.dg/tree-prof/morefunc.C
index a9bdc16..621d09a 100644
--- a/gcc/testsuite/g++.dg/tree-prof/morefunc.C
+++ b/gcc/testsuite/g++.dg/tree-prof/morefunc.C
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile -fdump-ipa-afdo -Wno-attributes -Wno-coverage-mismatch -Wno-missing-profile" } */
+/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile-optimized -fdump-ipa-afdo -Wno-attributes -Wno-coverage-mismatch -Wno-missing-profile" } */
#include "reorder_class1.h"
#include "reorder_class2.h"
diff --git a/gcc/testsuite/g++.dg/tree-prof/reorder.C b/gcc/testsuite/g++.dg/tree-prof/reorder.C
index 6b3bad1..000fb65 100644
--- a/gcc/testsuite/g++.dg/tree-prof/reorder.C
+++ b/gcc/testsuite/g++.dg/tree-prof/reorder.C
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile -fdump-ipa-afdo -Wno-coverage-mismatch -Wno-attributes" } */
+/* { dg-options "-O2 -fno-devirtualize --param=profile-func-internal-id=0 -fdump-ipa-profile-optimized -fdump-ipa-afdo -Wno-coverage-mismatch -Wno-attributes" } */
#ifdef _PROFILE_USE
#include "reorder_class1.h"
diff --git a/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c b/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
index 3979b17..126236e 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/ic-misattribution-1.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-ipa-profile-optimized" } */
/* { dg-additional-sources "ic-misattribution-1a.c" } */
extern void other_caller (void);
diff --git a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
index 53063c3..3ca7893 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/indir-call-prof.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile -fdump-ipa-afdo" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized -fdump-ipa-afdo" } */
static int a1 (void)
{
diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c
index d75b254..51e1080 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-1.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
int a[1000];
int b[1000];
int size=1;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c
index c1f7573..0264bb3 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/stringop-2.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
int a[1000];
int b[1000];
int size=1;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c
index 492c4c1..8495c4c 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
int a[1000];
int b = 256;
int c = 257;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c
index b3bbadf..4f758af 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
unsigned int a[1000];
unsigned int b = 256;
unsigned int c = 1024;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c
index 60953d0..5897d75 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
unsigned int a[1000];
unsigned int b = 257;
unsigned int c = 1023;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c
index 50ae2de..b13601e 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
unsigned int a[1000];
unsigned int b = 999;
unsigned int c = 1002;
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c
index 80eb320..982bcb1 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile" } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdump-ipa-profile-optimized" } */
int a[1000];
int b=997;
int
diff --git a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c
index 18b2b25..5ddb1a8 100644
--- a/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c
+++ b/gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -fdump-ipa-profile -mtune=core2" } */
+/* { dg-options "-O2 -fdump-ipa-profile-optimized -mtune=core2" } */
/* { dg-skip-if "" { ! { i?86-*-* x86_64-*-* } } } */
char *buffer1;
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 7594588..9d9785b 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -809,12 +809,9 @@ gimple_divmod_fixed_value_transform (gimple_stmt_iterator *si)
}
result = gimple_divmod_fixed_value (stmt, tree_val, prob, count, all);
- if (dump_file)
- {
- fprintf (dump_file, "Transformation done: div/mod by constant ");
- print_generic_expr (dump_file, tree_val, TDF_SLIM);
- fprintf (dump_file, "\n");
- }
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "Transformation done: div/mod by constant %T\n", tree_val);
gimple_assign_set_rhs_from_tree (si, result);
update_stmt (gsi_stmt (*si));
@@ -949,8 +946,9 @@ gimple_mod_pow2_value_transform (gimple_stmt_iterator *si)
if (check_counter (stmt, "pow2", &count, &all, gimple_bb (stmt)->count))
return false;
- if (dump_file)
- fprintf (dump_file, "Transformation done: mod power of 2\n");
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "Transformation done: mod power of 2\n");
if (all > 0)
prob = profile_probability::probability_in_gcov_type (count, all);
@@ -1133,8 +1131,9 @@ gimple_mod_subtract_transform (gimple_stmt_iterator *si)
return false;
gimple_remove_histogram_value (cfun, stmt, histogram);
- if (dump_file)
- fprintf (dump_file, "Transformation done: mod subtract\n");
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "Transformation done: mod subtract\n");
/* Compute probability of taking the optimal path(s). */
if (all > 0)
@@ -1185,37 +1184,40 @@ init_node_map (bool local)
if (n->has_gimple_body_p () || n->thunk.thunk_p)
{
cgraph_node **val;
+ dump_user_location_t loc
+ = dump_user_location_t::from_function_decl (n->decl);
if (local)
{
n->profile_id = coverage_compute_profile_id (n);
while ((val = cgraph_node_map->get (n->profile_id))
|| !n->profile_id)
{
- if (dump_file)
- fprintf (dump_file, "Local profile-id %i conflict"
- " with nodes %s %s\n",
- n->profile_id,
- n->dump_name (),
- (*val)->dump_name ());
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
+ "Local profile-id %i conflict"
+ " with nodes %s %s\n",
+ n->profile_id,
+ n->dump_name (),
+ (*val)->dump_name ());
n->profile_id = (n->profile_id + 1) & 0x7fffffff;
}
}
else if (!n->profile_id)
{
- if (dump_file)
- fprintf (dump_file,
- "Node %s has no profile-id"
- " (profile feedback missing?)\n",
- n->dump_name ());
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
+ "Node %s has no profile-id"
+ " (profile feedback missing?)\n",
+ n->dump_name ());
continue;
}
else if ((val = cgraph_node_map->get (n->profile_id)))
{
- if (dump_file)
- fprintf (dump_file,
- "Node %s has IP profile-id %i conflict. "
- "Giving up.\n",
- n->dump_name (), n->profile_id);
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
+ "Node %s has IP profile-id %i conflict. "
+ "Giving up.\n",
+ n->dump_name (), n->profile_id);
*val = NULL;
continue;
}
@@ -1445,41 +1447,36 @@ gimple_ic_transform (gimple_stmt_iterator *gsi)
{
if (val)
{
- if (dump_file)
- {
- fprintf (dump_file, "Indirect call -> direct call from other module");
- print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM);
- fprintf (dump_file, "=> %i (will resolve only with LTO)\n", (int)val);
- }
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt,
+ "Indirect call -> direct call from other "
+ "module %T=> %i (will resolve only with LTO)",
+ gimple_call_fn (stmt), (int)val);
}
return false;
}
if (!check_ic_target (stmt, direct_call))
{
- if (dump_file)
- {
- fprintf (dump_file, "Indirect call -> direct call ");
- print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM);
- fprintf (dump_file, "=> ");
- print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
- fprintf (dump_file, " transformation skipped because of type mismatch");
- print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
- }
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt,
+ "Indirect call -> direct call %T => %T "
+ "transformation skipped because of type mismatch: %G",
+ gimple_call_fn (stmt), direct_call->decl, stmt);
gimple_remove_histogram_value (cfun, stmt, histogram);
return false;
}
- if (dump_file)
+ if (dump_enabled_p ())
{
- fprintf (dump_file, "Indirect call -> direct call ");
- print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM);
- fprintf (dump_file, "=> ");
- print_generic_expr (dump_file, direct_call->decl, TDF_SLIM);
- fprintf (dump_file, " transformation on insn postponned to ipa-profile");
- print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
- fprintf (dump_file, "hist->count %" PRId64
- " hist->all %" PRId64"\n", count, all);
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "Indirect call -> direct call "
+ "%T => %T transformation on insn postponed "
+ "to ipa-profile: %G", gimple_call_fn (stmt),
+ direct_call->decl, stmt);
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "hist->count %" PRId64
+ " hist->all %" PRId64"\n", count, all);
}
return true;
@@ -1708,10 +1705,10 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi)
TYPE_PRECISION (get_gcov_type ()), false));
}
- if (dump_file)
- fprintf (dump_file,
- "Transformation done: single value %i stringop for %s\n",
- (int)val, built_in_names[(int)fcode]);
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt,
+ "Transformation done: single value %i stringop for %s\n",
+ (int)val, built_in_names[(int)fcode]);
gimple_stringop_fixed_value (stmt, tree_val, prob, count, all);