Add -fdump-profile-report.
When using -fprofile-report, -fdump-profile-report can be used to print the report to a foo.c.000i.profile-report file instead of stderr. I see it handy for comparison purpose. gcc/ChangeLog: * dumpfile.c [profile-report]: Add new profile dump. * dumpfile.h (enum tree_dump_index): Ad TDI_profile_report. * passes.c (pass_manager::dump_profile_report): Change stderr to dump_file.
This commit is contained in:
parent
08a94a95d1
commit
02947a87c4
3 changed files with 30 additions and 21 deletions
|
@ -103,8 +103,9 @@ static struct dump_file_info dump_files[TDI_end] =
|
|||
DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 0),
|
||||
DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 0),
|
||||
DUMP_FILE_INFO (".lto-stream-out", "ipa-lto-stream-out", DK_ipa, 0),
|
||||
DUMP_FILE_INFO (".profile-report", "profile-report", DK_ipa, 0),
|
||||
#define FIRST_AUTO_NUMBERED_DUMP 1
|
||||
#define FIRST_ME_AUTO_NUMBERED_DUMP 4
|
||||
#define FIRST_ME_AUTO_NUMBERED_DUMP 5
|
||||
|
||||
DUMP_FILE_INFO (NULL, "lang-all", DK_lang, 0),
|
||||
DUMP_FILE_INFO (NULL, "tree-all", DK_tree, 0),
|
||||
|
|
|
@ -48,6 +48,7 @@ enum tree_dump_index
|
|||
TDI_gimple, /* dump each function after gimplifying it */
|
||||
TDI_nested, /* dump each function after unnesting it */
|
||||
TDI_lto_stream_out, /* dump information about lto streaming */
|
||||
TDI_profile_report, /* dump information about profile quality */
|
||||
|
||||
TDI_lang_all, /* enable all the language dumps. */
|
||||
TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */
|
||||
|
|
47
gcc/passes.c
47
gcc/passes.c
|
@ -1850,10 +1850,15 @@ pass_manager::dump_profile_report () const
|
|||
|
||||
if (!profile_record)
|
||||
return;
|
||||
fprintf (stderr, "\nProfile consistency report:\n\n");
|
||||
fprintf (stderr, " |mismatch |mismatch | |\n");
|
||||
fprintf (stderr, "Pass name |IN |IN |OUT |OUT |overall |\n");
|
||||
fprintf (stderr, " |freq |count |freq |count |size |time |\n");
|
||||
|
||||
FILE *dump_file = dump_begin (TDI_profile_report, NULL);
|
||||
if (dump_file == NULL)
|
||||
dump_file = stderr;
|
||||
|
||||
fprintf (dump_file, "Profile consistency report:\n\n");
|
||||
fprintf (dump_file, " |mismatch |mismatch | |\n");
|
||||
fprintf (dump_file, "Pass name |IN |IN |OUT |OUT |overall |\n");
|
||||
fprintf (dump_file, " |freq |count |freq |count |size |time |\n");
|
||||
|
||||
for (int i = 1; i < passes_by_id_size; i++)
|
||||
if (profile_record[i].run)
|
||||
|
@ -1876,47 +1881,47 @@ pass_manager::dump_profile_report () const
|
|||
|| rel_time_change || rel_size_change)
|
||||
{
|
||||
last_reported = i;
|
||||
fprintf (stderr, "%-33s", passes_by_id[i]->name);
|
||||
fprintf (dump_file, "%-33s", passes_by_id[i]->name);
|
||||
if (profile_record[i].num_mismatched_freq_in != last_freq_in)
|
||||
fprintf (stderr, "| %+5i",
|
||||
fprintf (dump_file, "| %+5i",
|
||||
profile_record[i].num_mismatched_freq_in
|
||||
- last_freq_in);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
if (profile_record[i].num_mismatched_count_in != last_count_in)
|
||||
fprintf (stderr, "| %+5i",
|
||||
fprintf (dump_file, "| %+5i",
|
||||
profile_record[i].num_mismatched_count_in
|
||||
- last_count_in);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
if (profile_record[i].num_mismatched_freq_out != last_freq_out)
|
||||
fprintf (stderr, "| %+5i",
|
||||
fprintf (dump_file, "| %+5i",
|
||||
profile_record[i].num_mismatched_freq_out
|
||||
- last_freq_out);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
if (profile_record[i].num_mismatched_count_out != last_count_out)
|
||||
fprintf (stderr, "| %+5i",
|
||||
fprintf (dump_file, "| %+5i",
|
||||
profile_record[i].num_mismatched_count_out
|
||||
- last_count_out);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
|
||||
/* Size/time units change across gimple and RTL. */
|
||||
if (i == pass_expand_1->static_pass_number)
|
||||
fprintf (stderr, "|----------|----------");
|
||||
fprintf (dump_file, "|----------|----------");
|
||||
else
|
||||
{
|
||||
if (rel_size_change)
|
||||
fprintf (stderr, "| %+8.1f%%", rel_size_change);
|
||||
fprintf (dump_file, "| %+8.1f%%", rel_size_change);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
if (rel_time_change)
|
||||
fprintf (stderr, "| %+8.1f%%", rel_time_change);
|
||||
fprintf (dump_file, "| %+8.1f%%", rel_time_change);
|
||||
else
|
||||
fprintf (stderr, "| ");
|
||||
fprintf (dump_file, "| ");
|
||||
}
|
||||
fprintf (stderr, "|\n");
|
||||
fprintf (dump_file, "|\n");
|
||||
last_freq_in = profile_record[i].num_mismatched_freq_in;
|
||||
last_freq_out = profile_record[i].num_mismatched_freq_out;
|
||||
last_count_in = profile_record[i].num_mismatched_count_in;
|
||||
|
@ -1925,12 +1930,14 @@ pass_manager::dump_profile_report () const
|
|||
else if (last_reported != i)
|
||||
{
|
||||
last_reported = i;
|
||||
fprintf (stderr, "%-20s ------------| | | | | | |\n",
|
||||
fprintf (dump_file, "%-20s ------------| | | | | | |\n",
|
||||
passes_by_id[i]->name);
|
||||
}
|
||||
last_time = profile_record[i].time;
|
||||
last_size = profile_record[i].size;
|
||||
}
|
||||
|
||||
dump_end (TDI_profile_report, dump_file);
|
||||
}
|
||||
|
||||
/* Perform all TODO actions that ought to be done on each function. */
|
||||
|
|
Loading…
Add table
Reference in a new issue