From c220ecd21b11575cdfb53d64f3c7e850fede78a9 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Fri, 9 Aug 2019 09:47:35 +0200 Subject: [PATCH] Port value profiling to -fopt-info infrastructure. 2019-08-09 Martin Liska * 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 * 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 --- gcc/ChangeLog | 10 ++ gcc/testsuite/ChangeLog | 17 +++ .../g++.dg/tree-prof/indir-call-prof.C | 2 +- gcc/testsuite/g++.dg/tree-prof/morefunc.C | 2 +- gcc/testsuite/g++.dg/tree-prof/reorder.C | 2 +- .../gcc.dg/tree-prof/ic-misattribution-1.c | 2 +- .../gcc.dg/tree-prof/indir-call-prof.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/stringop-1.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/stringop-2.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-1.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-2.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-3.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-4.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-5.c | 2 +- gcc/testsuite/gcc.dg/tree-prof/val-prof-7.c | 2 +- gcc/value-prof.c | 105 +++++++++--------- 16 files changed, 91 insertions(+), 67 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25d09566a40..b8d54e1380a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-08-09 Martin Liska + + * 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 * doc/extend.texi: Add const qualifier to ld intrinsics. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a31e2613dff..e64565e0467 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,20 @@ +2019-08-09 Martin Liska + + * 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 * 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 3134c3c0643..be896c02774 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 a9bdc167f45..621d09aec5b 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 6b3bad1f54d..000fb651a69 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 3979b17b156..126236eba8e 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 53063c3e7fa..3ca78936e1c 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 d75b2548dbc..51e1080b9f4 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 c1f757388fd..0264bb37c9c 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 492c4c1c4b2..8495c4caf89 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 b3bbadfeb40..4f758af71ca 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 60953d09b15..5897d750d80 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 50ae2de792a..b13601ede69 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 80eb3205a4f..982bcb13435 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 18b2b2590ac..5ddb1a88c29 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 759458868a8..9d9785b179d 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); -- 2.30.2