Ok for google branches. Many changes in coverage.c (such as get_coverage_counts) and value-prof.c need to be in trunk too.
David On Thu, Jul 25, 2013 at 10:02 AM, Teresa Johnson <tejohn...@google.com> wrote: > This patch ports the remaining -fopt-info messages that had been added > to google/gcc-4_7 using the original -fopt-info framework implemented > on that branch, to google/gcc-4_8 using the new -fopt-info framework > from trunk. > > Specifically, this ports over the messages added/modified by r180269, > r180973 and r195968. Some of these patches/messages were already ported, > but this adds the remainder. I converted from the old OPT_INFO_* levels > to the new MSG_* levels using the following mapping: > OPT_INFO_MIN -> MSG_OPTIMIZED_LOCATIONS > OPT_INFO_MED -> MSG_MISSED_OPTIMIZATION > OPT_INFO_MAX -> MSG_NOTE > The affected messages relate to LIPO module imports, missing/mismatched/ > corrupted profile data, and indirect call promotions performed. > > Additionally, after discussing with Easwaran and Rong, I flipped the > default of the inline-dump-module-id parameter to 1 to enable dumping > module ids in -fopt-info inlining messages for easier inlining > report generation. > > Finally, I had to make a couple enhancements to the new dump infrastructure > to get some of the new messages emitted. This change should be > pushed to trunk as it will help facilitate adding new dump messages > more easily (particularly number 2 below). There were two issues: > 1) The module imports occurred during coverage_init which happens > very early, before entering the pass manager that sets up the dumping. > This was addressed by enabling dumping within coverage_init, and > is modeled on how dumping is enabled after the pass manager > during finish_optimization_passes. > 2) Dumping was only enabled for passes marked with an optinfo_flag > that isn't OPTGROUP_NONE. Currently optgroup flags are only setup for > optimization groups in the categories IPA, LOOP, INLINE and VEC. > What this means is that any dump messages added to a pass that isn't > in one of these groups will silently be suppressed. The OPTGROUP > setting is specified in opt_pass struct, and is also automatically set > to OPTGROUP_IPA for any pass starting with "ipa-". What I did was > to add a new optgroup macro, OPTGROUP_OTHER. This is enabled only > under -fopt-info-optall, which is also the default for -fopt-info. > That way dump messages can be emitted without the requirement that > the pass be part of a group that can be emitted under a specific > optimization group subset. When setting up the dumps, any pass that > has OPTGROUP_NONE after examining the opt_pass struct and the pass > name will use OPTGROUP_OTHER. This doesn't mean that the list of > optgroups shouldn't be expanded, but rather adds a catch-all for > passes that don't currently have or need to be emitted on their own > as part of a new optgroup. > > Bootstrapped and regression tested. Ok for google/4_8? (Attached patch > as a file also since pasting below messed up the whitespace > formatting.) > > Thanks, > Teresa > > 2013-07-25 Teresa Johnson <tejohn...@google.com> > > * c-family/c-opts.c (lipo_max_mem_reached): Use new dump framework. > * profile.c (read_profile_edge_counts): Ditto. > (compute_branch_probabilities): Ditto. > * value-prof.c (check_counter): Ditto. > (check_ic_counter): Ditto. > (find_func_by_funcdef_no): Ditto. > (check_ic_target): Ditto. > (gimple_ic_transform_mult_targ): Ditto. > * mcf.c (find_minimum_cost_flow): Ditto. > * coverage.c (incompatible_cl_args): Ditto. > (read_counts_file): Ditto. > (get_coverage_counts): Ditto. > (coverage_init): Setup new dump framework. > * common.opt (flag_ripa_verbose): Remove. > * params.def (PARAM_INLINE_DUMP_MODULE_ID): Enable by default. > * dumpfile.h (OPTGROUP_OTHER): Add and enable under OPTGROUP_ALL. > * passes.c (register_one_dump_file): Use OPTGROUP_OTHER > when pass not in any opt group. > * doc/invoke.texi: Document optall -fopt-info flag. > > * testsuite/gcc.dg/pr32773.c: Use -fopt-info. > * testsuite/gcc.dg/pr40209.c: Ditto. > * testsuite/gcc.dg/pr26570.c: Ditto. > * testsuite/gcc.dg/tree-prof/lipo/lipo_inline1_0.c: Ditto. > * testsuite/g++.dg/tree-ssa/dom-invalid.C: Ditto. > > Index: coverage.c > =================================================================== > --- coverage.c (revision 200845) > +++ coverage.c (working copy) > @@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see > #include "opts.h" > #include "gcov-io.h" > #include "tree-flow.h" > +#include "tree-pass.h" > #include "cpplib.h" > #include "incpath.h" > #include "diagnostic-core.h" > @@ -411,14 +412,18 @@ incompatible_cl_args (struct gcov_module_info* mod > warning (OPT_Wripa_opt_mismatch, "command line arguments mismatch for %s > " > "and %s", mod_info1->source_filename, > mod_info2->source_filename); > > - if (warn_ripa_opt_mismatch && non_warning_mismatch && flag_ripa_verbose) > + if (warn_ripa_opt_mismatch && non_warning_mismatch && dump_enabled_p ()) > { > - inform (UNKNOWN_LOCATION, "Options for %s", > mod_info1->source_filename); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, UNKNOWN_LOCATION, > + "Options for %s", mod_info1->source_filename); > for (i = 0; i < num_non_warning_opts1; i++) > - inform (UNKNOWN_LOCATION, non_warning_opts1[i]); > - inform (UNKNOWN_LOCATION, "Options for %s", > mod_info2->source_filename); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, UNKNOWN_LOCATION, > + non_warning_opts1[i]); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, UNKNOWN_LOCATION, > + "Options for %s", mod_info2->source_filename); > for (i = 0; i < num_non_warning_opts2; i++) > - inform (UNKNOWN_LOCATION, non_warning_opts2[i]); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, UNKNOWN_LOCATION, > + non_warning_opts2[i]); > } > > has_any_incompatible_cg_opts > @@ -835,30 +840,57 @@ read_counts_file (const char *da_file_name, unsign > char *aux_da_filename = get_da_file_name > (mod_info->da_filename); > gcc_assert (!mod_info->is_primary); > if (pointer_set_insert (modset, (void > *)(size_t)mod_info->ident)) > - inform (input_location, "Not importing %s: already imported", > - mod_info->source_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: already imported", > + mod_info->source_filename); > + } > else if ((module_infos[0]->lang & GCOV_MODULE_LANG_MASK) != > (mod_info->lang & GCOV_MODULE_LANG_MASK)) > - inform (input_location, "Not importing %s: source language" > - " different from primary module's source language", > - mod_info->source_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: source language" > + " different from primary module's > source" > + " language", > + mod_info->source_filename); > + } > else if (module_infos_read == max_group > /* If reordering is specified, delay the cutoff > until after sorting. */ > && !getenv ("LIPO_REORDER_GROUP")) > - inform (input_location, "Not importing %s: maximum group size" > - " reached", mod_info->source_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: maximum group size" > + " reached", mod_info->source_filename); > + } > else if (incompatible_cl_args (module_infos[0], mod_info)) > - inform (input_location, "Not importing %s: command-line" > - " arguments not compatible with primary module", > - mod_info->source_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: command-line" > + " arguments not compatible with primary" > + " module", > + mod_info->source_filename); > + } > else if ((fd = open (aux_da_filename, O_RDONLY)) < 0) > - inform (input_location, "Not importing %s: couldn't open %s", > - mod_info->source_filename, aux_da_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: couldn't open %s", > + mod_info->source_filename, > + aux_da_filename); > + } > else if ((mod_info->lang & GCOV_MODULE_ASM_STMTS) > && flag_ripa_disallow_asm_modules) > - inform (input_location, "Not importing %s: contains assembler" > - " statements", mod_info->source_filename); > + { > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: contains assembler" > + " statements", > mod_info->source_filename); > + } > else if (mod_info->is_primary == false > && MODULE_EXPORTED_FLAG (mod_info) == false) > { > @@ -884,16 +916,17 @@ read_counts_file (const char *da_file_name, unsign > record_module_name (mod_info->ident, > lbasename (mod_info->source_filename)); > > - if (flag_ripa_verbose) > + if (dump_enabled_p ()) > { > - inform (input_location, > - "MODULE Id=%d, Is_Primary=%s," > - " Is_Exported=%s, Include_all=%s, Name=%s (%s)", > - mod_info->ident, mod_info->is_primary?"yes":"no", > - MODULE_EXPORTED_FLAG (mod_info)?"yes":"no", > - MODULE_INCLUDE_ALL_AUX_FLAG (mod_info)?"yes":"no", > - mod_info->source_filename, > - mod_info->da_filename); > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "MODULE Id=%d, Is_Primary=%s," > + " Is_Exported=%s, Include_all=%s, Name=%s > (%s)", > + mod_info->ident, > mod_info->is_primary?"yes":"no", > + MODULE_EXPORTED_FLAG (mod_info)?"yes":"no", > + MODULE_INCLUDE_ALL_AUX_FLAG (mod_info)?"yes" > + :"no", > + mod_info->source_filename, > + mod_info->da_filename); > } > } > gcov_sync (offset, length); > @@ -958,11 +991,13 @@ get_coverage_counts (unsigned counter, unsigned ex > { > static int warned = 0; > > - if (!warned++) > - inform (input_location, (flag_guess_branch_prob > - ? "file %s not found, execution counts estimated" > - : "file %s not found, execution counts assumed to be zero"), > - da_file_name); > + if (!warned++ && dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + (flag_guess_branch_prob > + ? "file %s not found, execution counts estimated" > + : "file %s not found, execution counts assumed to " > + "be zero"), > + da_file_name); > return NULL; > } > > @@ -970,9 +1005,11 @@ get_coverage_counts (unsigned counter, unsigned ex > > if (!entry || !entry->summary.num) > { > - if (!flag_dyn_ipa && 0 /*TODO reenable with opt-info */) > - warning (0, "no coverage for function %qE found", > - DECL_ASSEMBLER_NAME (current_function_decl)); > + if (!flag_dyn_ipa && dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "no coverage for function %s found", > + IDENTIFIER_POINTER > + (DECL_ASSEMBLER_NAME (current_function_decl))); > return NULL; > } > > @@ -987,21 +1024,25 @@ get_coverage_counts (unsigned counter, unsigned ex > warning_at (input_location, OPT_Wcoverage_mismatch, > "the control flow of function %qE does not match " > "its profile data (counter %qs)", id, ctr_names[counter]); > - if (warning_printed) > + if (warning_printed && dump_enabled_p ()) > { > - inform (input_location, "use -Wno-error=coverage-mismatch to > tolerate " > - "the mismatch but performance may drop if the > function is hot"); > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "use -Wno-error=coverage-mismatch to tolerate " > + "the mismatch but performance may drop if the " > + "function is hot"); > > if (!seen_error () > && !warned++) > { > - inform (input_location, "coverage mismatch ignored"); > - inform (input_location, flag_guess_branch_prob > - ? G_("execution counts estimated") > - : G_("execution counts assumed to be zero")); > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "coverage mismatch ignored"); > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + flag_guess_branch_prob > + ? G_("execution counts estimated") > + : G_("execution counts assumed to be zero")); > if (!flag_guess_branch_prob) > - inform (input_location, > - "this can result in poorly optimized code"); > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "this can result in poorly optimized code"); > } > } > > @@ -1009,7 +1050,8 @@ get_coverage_counts (unsigned counter, unsigned ex > } > else if (entry->lineno_checksum != lineno_checksum) > { > - warning (0, "Source location for function %qE have changed," > + warning (OPT_Wripa_opt_mismatch, > + "Source location for function %qE have changed," > " the profile data may be out of date", > DECL_ASSEMBLER_NAME (current_function_decl)); > } > @@ -2522,6 +2564,11 @@ coverage_init (const char *filename, const char* s > int src_name_prefix_len = 0; > int len = strlen (filename); > > + /* Since coverage_init is invoked very early, before the pass > + manager, we need to set up the dumping explicitly. This is > + similar to the handling in finish_optimization_passes. */ > + dump_start (pass_profile.pass.static_pass_number, NULL); > + > has_asm_statement = false; > da_file_name = get_da_file_name (filename); > da_base_file_name = XNEWVEC (char, strlen (filename) + 1); > @@ -2586,6 +2633,8 @@ coverage_init (const char *filename, const char* s > gcov_write_unsigned (bbg_file_stamp); > } > } > + > + dump_finish (pass_profile.pass.static_pass_number); > } > > /* Return True if any type of profiling is enabled which requires linking > Index: common.opt > =================================================================== > --- common.opt (revision 200845) > +++ common.opt (working copy) > @@ -1172,10 +1172,6 @@ fripa-inc-path-sub= > Common Joined RejectNegative Var(lipo_inc_path_pattern) > Substitute substring in include paths with a new string to allow > reuse profile data > > -fripa-verbose > -Common Report Var(flag_ripa_verbose) > -Enable verbose informational messages for LIPO compilation > - > fearly-inlining > Common Report Var(flag_early_inlining) Init(1) Optimization > Perform early inlining > Index: testsuite/gcc.dg/pr32773.c > =================================================================== > --- testsuite/gcc.dg/pr32773.c (revision 200845) > +++ testsuite/gcc.dg/pr32773.c (working copy) > @@ -1,6 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-O -fprofile-use" } */ > -/* { dg-options "-O -m4 -fprofile-use" { target sh-*-* } } */ > +/* { dg-options "-O -fprofile-use -fopt-info" } */ > +/* { dg-options "-O -m4 -fprofile-use -fopt-info" { target sh-*-* } } */ > > void foo (int *p) > { > Index: testsuite/gcc.dg/pr40209.c > =================================================================== > --- testsuite/gcc.dg/pr40209.c (revision 200845) > +++ testsuite/gcc.dg/pr40209.c (working copy) > @@ -1,5 +1,5 @@ > /* { dg-do compile } */ > -/* { dg-options "-O2 -fprofile-use" } */ > +/* { dg-options "-O2 -fprofile-use -fopt-info" } */ > > void process(const char *s); > > Index: testsuite/gcc.dg/pr26570.c > =================================================================== > --- testsuite/gcc.dg/pr26570.c (revision 200845) > +++ testsuite/gcc.dg/pr26570.c (working copy) > @@ -1,5 +1,5 @@ > /* { dg-do compile } */ > -/* { dg-options "-O2 -fprofile-generate -fprofile-use" } */ > +/* { dg-options "-O2 -fprofile-generate -fprofile-use -fopt-info" } */ > > unsigned test (unsigned a, unsigned b) > { > Index: testsuite/gcc.dg/tree-prof/lipo/lipo_inline1_0.c > =================================================================== > --- testsuite/gcc.dg/tree-prof/lipo/lipo_inline1_0.c (revision 200845) > +++ testsuite/gcc.dg/tree-prof/lipo/lipo_inline1_0.c (working copy) > @@ -1,4 +1,4 @@ > -/* { dg-options "-O2 -fdump-tree-optimized-details-blocks > -fdump-ipa-inline-details -fripa-verbose" } */ > +/* { dg-options "-O2 -fdump-tree-optimized-details-blocks > -fdump-ipa-inline-details -fopt-info" } */ > > extern int foo (void); > extern int goo (void); > Index: testsuite/g++.dg/tree-ssa/dom-invalid.C > =================================================================== > --- testsuite/g++.dg/tree-ssa/dom-invalid.C (revision 200845) > +++ testsuite/g++.dg/tree-ssa/dom-invalid.C (working copy) > @@ -1,7 +1,7 @@ > // PR tree-optimization/39557 > // invalid post-dom info leads to infinite loop > // { dg-do run } > -// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fno-rtti" } > +// { dg-options "-Wall -fno-exceptions -O2 -fprofile-use -fopt-info > -fno-rtti" } > > struct C > { > Index: passes.c > =================================================================== > --- passes.c (revision 200845) > +++ passes.c (working copy) > @@ -539,6 +539,11 @@ register_one_dump_file (struct opt_pass *pass) > flag_name = concat (prefix, name, num, NULL); > glob_name = concat (prefix, name, NULL); > optgroup_flags |= pass->optinfo_flags; > + /* For any passes that do not have an optgroup set, and which are not > + IPA passes setup above, set the optgroup to OPTGROUP_OTHER so that > + any dump messages are emitted properly under -fopt-info(-optall). */ > + if (optgroup_flags == OPTGROUP_NONE) > + optgroup_flags = OPTGROUP_OTHER; > id = dump_register (dot_name, flag_name, glob_name, flags, optgroup_flags); > set_pass_for_id (id, pass); > full_name = concat (prefix, pass->name, num, NULL); > Index: params.def > =================================================================== > --- params.def (revision 200847) > +++ params.def (working copy) > @@ -996,8 +996,8 @@ DEFPARAM (PARAM_LIPO_WEAK_INCLUSION, > in inline message. */ > DEFPARAM (PARAM_INLINE_DUMP_MODULE_ID, > "inline-dump-module-id", > - "Default is 0. If the value is 1, dumping is enabled.", > - 0, 0, 1) > + "Default is 1. If the value is 0, dumping is disabled.", > + 1, 0, 1) > > /* In LIPO profile-gen, use this parameter to enable cgraph dumping. */ > DEFPARAM (PARAM_LIPO_DUMP_CGRAPH, > Index: c-family/c-opts.c > =================================================================== > --- c-family/c-opts.c (revision 200845) > +++ c-family/c-opts.c (working copy) > @@ -45,6 +45,7 @@ along with GCC; see the file COPYING3. If not see > #include "function.h" > #include "params.h" > #include "l-ipo.h" > +#include "dumpfile.h" > > #ifndef DOLLARS_IN_IDENTIFIERS > # define DOLLARS_IN_IDENTIFIERS true > @@ -1057,12 +1058,16 @@ lipo_max_mem_reached (unsigned int i) > by the optimizer. */ > && ((ggc_total_allocated () >> 10) * 1.25 > > (size_t) PARAM_VALUE (PARAM_MAX_LIPO_MEMORY))) { > - i++; > - do { > - inform (input_location, "Not importing %s: maximum memory " > - "consumption reached", in_fnames[i]); > - i++; > - } while (i < num_in_fnames); > + if (dump_enabled_p ()) > + { > + i++; > + do { > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, input_location, > + "Not importing %s: maximum memory " > + "consumption reached", in_fnames[i]); > + i++; > + } while (i < num_in_fnames); > + } > return true; > } > return false; > Index: profile.c > =================================================================== > --- profile.c (revision 200845) > +++ profile.c (working copy) > @@ -545,8 +545,8 @@ read_profile_edge_counts (gcov_type *exec_counts) > if (flag_profile_correction) > { > static bool informed = 0; > - if (!informed) > - inform (input_location, > + if (dump_enabled_p () && !informed) > + dump_printf_loc (MSG_NOTE, input_location, > "corrupted profile info: edge count > exceeds maximal count"); > informed = 1; > } > @@ -805,10 +805,11 @@ compute_branch_probabilities (unsigned cfg_checksu > { > /* Inconsistency detected. Make it flow-consistent. */ > static int informed = 0; > - if (informed == 0) > + if (dump_enabled_p () && informed == 0) > { > informed = 1; > - inform (input_location, "correcting inconsistent profile data"); > + dump_printf_loc (MSG_NOTE, input_location, > + "correcting inconsistent profile data"); > } > correct_negative_edge_counts (); > /* Set bb counts to the sum of the outgoing edge counts */ > Index: dumpfile.h > =================================================================== > --- dumpfile.h (revision 200845) > +++ dumpfile.h (working copy) > @@ -97,8 +97,9 @@ enum tree_dump_index > #define OPTGROUP_LOOP (1 << 2) /* Loop optimization passes */ > #define OPTGROUP_INLINE (1 << 3) /* Inlining passes */ > #define OPTGROUP_VEC (1 << 4) /* Vectorization passes */ > +#define OPTGROUP_OTHER (1 << 5) /* All other passes */ > #define OPTGROUP_ALL (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE \ > - | OPTGROUP_VEC) > + | OPTGROUP_VEC | OPTGROUP_OTHER) > > /* Define a tree dump switch. */ > struct dump_file_info > Index: value-prof.c > =================================================================== > --- value-prof.c (revision 200845) > +++ value-prof.c (working copy) > @@ -504,9 +504,11 @@ check_counter (gimple stmt, const char * name, > : DECL_SOURCE_LOCATION (current_function_decl); > if (flag_profile_correction) > { > - inform (locus, "correcting inconsistent value profile: " > - "%s profiler overall count (%d) does not match BB count " > - "(%d)", name, (int)*all, (int)bb_count); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "correcting inconsistent value profile: %s " > + "profiler overall count (%d) does not match BB " > + "count (%d)", name, (int)*all, (int)bb_count); > *all = bb_count; > if (*count > *all) > *count = *all; > @@ -540,35 +542,35 @@ check_ic_counter (gimple stmt, gcov_type *count1, > gcov_type all) > { > location_t locus; > + locus = (stmt != NULL) > + ? gimple_location (stmt) > + : DECL_SOURCE_LOCATION (current_function_decl); > if (*count1 > all && flag_profile_correction) > { > - locus = (stmt != NULL) > - ? gimple_location (stmt) > - : DECL_SOURCE_LOCATION (current_function_decl); > - inform (locus, "Correcting inconsistent value profile: " > - "ic (topn) profiler top target count (%ld) exceeds " > - "BB count (%ld)", (long)*count1, (long)all); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Correcting inconsistent value profile: " > + "ic (topn) profiler top target count (%ld) exceeds " > + "BB count (%ld)", (long)*count1, (long)all); > *count1 = all; > } > if (*count2 > all && flag_profile_correction) > { > - locus = (stmt != NULL) > - ? gimple_location (stmt) > - : DECL_SOURCE_LOCATION (current_function_decl); > - inform (locus, "Correcting inconsistent value profile: " > - "ic (topn) profiler second target count (%ld) exceeds " > - "BB count (%ld)", (long)*count2, (long)all); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Correcting inconsistent value profile: " > + "ic (topn) profiler second target count > (%ld) exceeds " > + "BB count (%ld)", (long)*count2, (long)all); > *count2 = all; > } > > if (*count2 > *count1) > { > - locus = (stmt != NULL) > - ? gimple_location (stmt) > - : DECL_SOURCE_LOCATION (current_function_decl); > - inform (locus, "Corrupted topn ic value profile: " > - "first target count (%ld) is less than the second " > - "target count (%ld)", (long)*count1, (long)*count2); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Corrupted topn ic value profile: " > + "first target count (%ld) is less than the second " > + "target count (%ld)", (long)*count1, (long)*count2); > return true; > } > > @@ -580,12 +582,12 @@ check_ic_counter (gimple stmt, gcov_type *count1, > *count2 = all - *count1; > else > { > - locus = (stmt != NULL) > - ? gimple_location (stmt) > - : DECL_SOURCE_LOCATION (current_function_decl); > - inform (locus, "Corrupted topn ic value profile: top two targets's" > - " total count (%ld) exceeds bb count (%ld)", > - (long)(*count1 + *count2), (long)all); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Corrupted topn ic value profile: top two " > + "targets's total count (%ld) exceeds bb count " > + "(%ld)", > + (long)(*count1 + *count2), (long)all); > return true; > } > } > @@ -1196,9 +1198,11 @@ find_func_by_funcdef_no (int func_id) > int max_id = get_last_funcdef_no (); > if (func_id >= max_id || cgraph_node_map[func_id] == NULL) > { > - if (flag_profile_correction) > - inform (DECL_SOURCE_LOCATION (current_function_decl), > - "Inconsistent profile: indirect call target (%d) does > not exist", func_id); > + if (flag_profile_correction && dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, > + DECL_SOURCE_LOCATION (current_function_decl), > + "Inconsistent profile: indirect call target (%d) " > + "does not exist", func_id); > else > error ("Inconsistent profile: indirect call target (%d) does > not exist", func_id); > > @@ -1331,8 +1335,10 @@ check_ic_target (gimple call_stmt, struct cgraph_n > return true; > > locus = gimple_location (call_stmt); > - inform (locus, "Skipping target %s with mismatching types for icall ", > - cgraph_node_name (target)); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Skipping target %s with mismatching types for icall ", > + cgraph_node_name (target)); > return false; > } > > @@ -1600,19 +1606,23 @@ gimple_ic_transform_mult_targ (gimple stmt, histog > if (direct_call1 == NULL > || !check_ic_target (stmt, direct_call1)) > { > - if (flag_ripa_verbose && !flag_auto_profile) > + if (dump_enabled_p () && !flag_auto_profile) > { > if (!direct_call1) > - inform (locus, "Can not find indirect call target decl " > - "(%d:%d)[cnt:%u] in current module", > - EXTRACT_MODULE_ID_FROM_GLOBAL_ID (val1), > - EXTRACT_FUNC_ID_FROM_GLOBAL_ID (val1), (unsigned) > count1); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Can not find indirect call target decl " > + "(%d:%d)[cnt:%u] in current module", > + EXTRACT_MODULE_ID_FROM_GLOBAL_ID (val1), > + EXTRACT_FUNC_ID_FROM_GLOBAL_ID (val1), > + (unsigned) count1); > else > - inform (locus, > - "Can not find promote indirect call target decl > -- type mismatch " > - "(%d:%d)[cnt:%u] in current module", > - EXTRACT_MODULE_ID_FROM_GLOBAL_ID (val1), > - EXTRACT_FUNC_ID_FROM_GLOBAL_ID (val1), (unsigned) > count1); > + dump_printf_loc (MSG_MISSED_OPTIMIZATION, locus, > + "Can not find promote indirect call target decl > " > + "-- type mismatch (%d:%d)[cnt:%u] in current " > + "module", > + EXTRACT_MODULE_ID_FROM_GLOBAL_ID (val1), > + EXTRACT_FUNC_ID_FROM_GLOBAL_ID (val1), > + (unsigned) count1); > } > return false; > } > @@ -1626,10 +1636,12 @@ gimple_ic_transform_mult_targ (gimple stmt, histog > return false; > > modify1 = gimple_ic (stmt, direct_call1, prob1, count1, all); > - if (flag_ripa_verbose) > - inform (locus, "Promote indirect call to target (call count:%u) %s", > - (unsigned) count1, > - lang_hooks.decl_printable_name (direct_call1->symbol.decl, 3)); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus, > + "Promote indirect call to target (call count:%u) %s", > + (unsigned) count1, > + lang_hooks.decl_printable_name > (direct_call1->symbol.decl, > + 3)); > > if (always_inline && count1 >= always_inline) > { > @@ -1667,10 +1679,12 @@ gimple_ic_transform_mult_targ (gimple stmt, histog > modify2 = gimple_ic (stmt, direct_call2, > prob2, count2, all - count1); > > - if (flag_ripa_verbose) > - inform (locus, "Promote indirect call to target (call count:%u) %s", > - (unsigned) count2, > - lang_hooks.decl_printable_name (direct_call2->symbol.decl, > 3)); > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus, > + "Promote indirect call to target (call count:%u) > %s", > + (unsigned) count2, > + lang_hooks.decl_printable_name ( > + direct_call2->symbol.decl, 3)); > > if (always_inline && count2 >= always_inline) > { > Index: doc/invoke.texi > =================================================================== > --- doc/invoke.texi (revision 200845) > +++ doc/invoke.texi (working copy) > @@ -6285,6 +6285,9 @@ Enable dumps from all loop optimizations. > Enable dumps from all inlining optimizations. > @item vec > Enable dumps from all vectorization optimizations. > +@item optall > +Enable dumps from all optimizations. This is a superset of > +the optimization groups listed above. > @end table > > For example, > Index: mcf.c > =================================================================== > --- mcf.c (revision 200845) > +++ mcf.c (working copy) > @@ -1437,10 +1437,12 @@ find_minimum_cost_flow (fixup_graph_type *fixup_gr > if (iteration > MAX_ITER (fixup_graph->num_vertices, > fixup_graph->num_edges)) > { > - inform (DECL_SOURCE_LOCATION (current_function_decl), > - "Exiting profile correction early to avoid excessive " > - "compile time"); > - break; > + if (dump_enabled_p ()) > + dump_printf_loc (MSG_NOTE, > + DECL_SOURCE_LOCATION (current_function_decl), > + "Exiting profile correction early to avoid " > + "excessive compile time"); > + break; > } > } > > > -- > Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413