aboutsummaryrefslogtreecommitdiff
path: root/gcc/passes.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2020-07-09 11:58:11 +0200
committerMartin Liska <mliska@suse.cz>2020-07-10 10:10:50 +0200
commit02947a87c4b3c8306210b3d5ae34839271b82c24 (patch)
treea01932ac9edec6c254e7e3bdefcca9dadad378a6 /gcc/passes.c
parent08a94a95d10f311d2a83e6f4c076babd8afd6a3e (diff)
downloadgcc-02947a87c4b3c8306210b3d5ae34839271b82c24.zip
gcc-02947a87c4b3c8306210b3d5ae34839271b82c24.tar.gz
gcc-02947a87c4b3c8306210b3d5ae34839271b82c24.tar.bz2
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.
Diffstat (limited to 'gcc/passes.c')
-rw-r--r--gcc/passes.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/gcc/passes.c b/gcc/passes.c
index 07b2613..a5da9a4 100644
--- a/gcc/passes.c
+++ b/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. */