introduce -fcallgraph-info option

Programming / Compilers / GCC - aoliva [138bc75d-0d04-0410-961f-82ee72b054a4] - 6 November 2019 10:57 EST

This was first submitted many years ago https://gcc.gnu.org/ml/gcc-patches/2010-10/msg02468.html

The command line option -fcallgraph-info is added and makes the compiler generate another output file (xxx.ci) for each compilation unit (or LTO partitoin), which is a valid VCG file (you can launch your favorite VCG viewer on it unmodified) and contains the "final" callgraph of the unit. "final" is a bit of a misnomer as this is actually the callgraph at RTL expansion time, but since most high-level optimizations are done at the Tree level and RTL doesn't usually fiddle with calls, it's final in almost all cases. Moreover, the nodes can be decorated with additional info: -fcallgraph-info=su adds stack usage info and -fcallgraph-info=da dynamic allocation info.


for gcc/ChangeLog From Eric Botcazou , Alexandre Oliva

- common.opt (-fcallgraph-info[=]): New option.
- doc/invoke.texi (Developer options): Document it.
- opts.c (common_handle_option): Handle it.
- builtins.c (expand_builtin_alloca): Record allocation if
-fcallgraph-info=da.
- calls.c (expand_call): If -fcallgraph-info, record the call. (emit_library_call_value_1): Likewise.
- flag-types.h (enum callgraph_info_type): New type.
- explow.c: Include stringpool.h. (set_stack_check_libfunc): Set SET_SYMBOL_REF_DECL on the symbol.
- function.c (allocate_stack_usage_info): New. (allocate_struct_function): Call it for -fcallgraph-info. (prepare_function_start): Call it otherwise. (record_final_call, record_dynamic_alloc): New.
- function.h (struct callinfo_callee): New. (CALLEE_FROM_CGRAPH_P): New. (struct callinfo_dalloc): New. (struct stack_usage): Add callees and dallocs. (record_final_call, record_dynamic_alloc): Declare.
- gimplify.c (gimplify_decl_expr): Record dynamically-allocated object if -fcallgraph-info=da.
- optabs-libfuncs.c (build_libfunc_function): Keep SYMBOL_REF_DECL.
- print-tree.h (print_decl_identifier): Declare. (PRINT_DECL_ORIGIN, PRINT_DECL_NAME, PRINT_DECL_UNIQUE_NAME): New.
- print-tree.c: Include print-tree.h. (print_decl_identifier): New function.
- toplev.c: Include print-tree.h. (callgraph_info_file): New global variable. (callgraph_info_external_printed): Likewise. (output_stack_usage): Rename to... (output_stack_usage_1): ... this. Make it static, add cf parameter. If -fcallgraph-info=su, print stack usage to cf. If -fstack-usage, use print_decl_identifier for pretty-printing. (INDIRECT_CALL_NAME): New. (dump_final_node_vcg_start): New. (dump_final_callee_vcg, dump_final_node_vcg): New. (output_stack_usage): New. (lang_dependent_init): Open and start file if
-fcallgraph-info. Allocated callgraph_info_external_printed. (finalize): If callgraph_info_file is not null, finish it, close it, and release callgraph_info_external_printed.

for gcc/ada/ChangeLog

- gcc-interface/misc.c (callgraph_info_file): Delete.

eaded36f850 introduce -fcallgraph-info option
gcc/ChangeLog | 48 +++++++++++-
gcc/ada/ChangeLog | 5 ++
gcc/ada/gcc-interface/misc.c | 3 -
gcc/builtins.c | 4 +
gcc/calls.c | 6 ++
gcc/common.opt | 8 ++
gcc/doc/invoke.texi | 23 +++++-
gcc/explow.c | 5 ++
gcc/flag-types.h | 16 ++++
gcc/function.c | 59 ++++++++++++--
gcc/function.h | 30 ++++++++
gcc/gimplify.c | 4 +
gcc/optabs-libfuncs.c | 4 -
gcc/opts.c | 26 +++++++
gcc/output.h | 2 +-
gcc/print-tree.c | 76 ++++++++++++++++++
gcc/print-tree.h | 4 +
gcc/toplev.c | 178 ++++++++++++++++++++++++++++++++++---------
18 files changed, 449 insertions(+), 52 deletions(-)

Upstream: gcc.gnu.org


  • Share