mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-24 22:11:56 +08:00
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
This commit is contained in:
parent
bb522e2eea
commit
c220ecd21b
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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 () {}
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
105
gcc/value-prof.c
105
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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user