On Mon, 20 Jun 2022 at 12:52, Richard Biener <richard.guent...@gmail.com> wrote: > > On Thu, Jun 16, 2022 at 5:05 PM Prathamesh Kulkarni via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > Hi, > > I just noticed -fdump-statistics supports asmname sub-option, which > > according to the doc states: > > "If DECL_ASSEMBLER_NAME has been set for a given decl, use that in the dump > > instead of DECL_NAME. Its primary use is ease of use working backward from > > mangled names in the assembly file." > > > > When passed -fdump-statistics-asmname, the dump however still contains the > > original name of functions. The patch modifies statistics.cc to emit asm > > name of function instead. Also for C++, it helps to better disambiguate > > overloaded function names in the stats dump file. > > I have attached stats dump for a simple test-case. > > > > Does it look OK ? > > decl_assembler_name has the side-effect of computing and setting it if it is > not set already - I think that's unwanted. You probably want to use > it only if DECL_ASSEMBLER_NAME_SET_P which then means when it > gets it later the dump will be split. Hi Richard, Sorry for late reply. In the attached patch, I checked for DECL_ASSEMBLER_NAME_SET_P before calling decl_assembler_name. Does that look OK ?
Thanks, Prathamesh > > Richard. > > > > > Thanks, > > Prathamesh
diff --git a/gcc/statistics.cc b/gcc/statistics.cc index 0d596e34189..6c21415bf65 100644 --- a/gcc/statistics.cc +++ b/gcc/statistics.cc @@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see #include "tree-pass.h" #include "context.h" #include "pass_manager.h" +#include "tree.h" static int statistics_dump_nr; static dump_flags_t statistics_dump_flags; @@ -113,6 +114,22 @@ curr_statistics_hash (void) return statistics_hashes[idx]; } +/* Helper function to return asmname or name of FN + depending on whether asmname option is set. */ + +static const char * +get_function_name (struct function *fn) +{ + if ((statistics_dump_flags & TDF_ASMNAME) + && DECL_ASSEMBLER_NAME_SET_P (fn->decl)) + { + tree asmname = decl_assembler_name (fn->decl); + if (asmname) + return IDENTIFIER_POINTER (asmname); + } + return function_name (fn); +} + /* Helper for statistics_fini_pass. Print the counter difference since the last dump for the pass dump files. */ @@ -152,7 +169,7 @@ statistics_fini_pass_2 (statistics_counter **slot, current_pass->static_pass_number, current_pass->name, counter->id, counter->val, - current_function_name (), + get_function_name (cfun), count); else fprintf (statistics_dump_file, @@ -160,7 +177,7 @@ statistics_fini_pass_2 (statistics_counter **slot, current_pass->static_pass_number, current_pass->name, counter->id, - current_function_name (), + get_function_name (cfun), count); counter->prev_dumped_count = counter->count; return 1; @@ -329,7 +346,7 @@ statistics_counter_event (struct function *fn, const char *id, int incr) current_pass ? current_pass->static_pass_number : -1, current_pass ? current_pass->name : "none", id, - function_name (fn), + get_function_name (fn), incr); } @@ -359,5 +376,5 @@ statistics_histogram_event (struct function *fn, const char *id, int val) current_pass->static_pass_number, current_pass->name, id, val, - function_name (fn)); + get_function_name (fn)); }