Thanks. I'll work on a trunk patch to send next week. Teresa On Fri, Jul 26, 2013 at 10:05 AM, Xinliang David Li <davi...@google.com> wrote: > 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
-- Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413