On Nov 6, 2019, Alexandre Oliva <ol...@adacore.com> wrote: > (CALLEE_FROM_CGRAPH_P): New. > (dump_final_callee_vcg, dump_final_node_vcg): New.
I goofed in the testing of this last-minute change. It only works with optimization disabled. With any optimization enabled, pass_remove_cgraph_callee_edges runs first thing in pass_all_optimizations{,_g} without a subsequent pass_rebuild_cgraph_edges. This release takes place long before we'd even know which calls make to expand, and thus to the callgraph-info expected output. It has just occurred to me that I could retain the logic but make it conditional on !optimize, but that would be error prone (AFAICT there's no reason why we don't release callees early without optimization) and probably not worth it. drop attempt to reuse cgraph callees for -fcallgraph-info The information in cgraph callees is released long before we get to the point in which -fcallgraph-info edges are dumped, or even expanded. It doesn't make sense to retain it longer: the edges created for -fcallgraph-info are much smaller, and they don't even coexist, so not even peak use grows. Regstrapped on x86_64-linux-gnu. Ok to install? for gcc/ChangeLog * function.h (CALLEE_FROM_CGRAPH_P): Remove. * function.c (record_final_call): Record even calls that might have been in the cgraph. * toplev.c (dump_final_node_vcg): Skip iteration over cgraph callees. --- gcc/function.c | 3 --- gcc/function.h | 5 +---- gcc/toplev.c | 8 -------- 3 files changed, 1 insertion(+), 15 deletions(-) diff --git a/gcc/function.c b/gcc/function.c index 1fe956b..2534c92 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6406,9 +6406,6 @@ rest_of_handle_thread_prologue_and_epilogue (void) void record_final_call (tree callee, location_t location) { - if (!callee || CALLEE_FROM_CGRAPH_P (callee)) - return; - struct callinfo_callee datum = { location, callee }; vec_safe_push (cfun->su->callees, datum); } diff --git a/gcc/function.h b/gcc/function.h index 14794c4..beb5c7d 100644 --- a/gcc/function.h +++ b/gcc/function.h @@ -192,15 +192,12 @@ public: poly_int64 length; }; -/* Describe emitted builtin calls for -fcallgraph-info. Those that - are not builtin are taken from cgraph edges. */ +/* Describe emitted calls for -fcallgraph-info. */ struct GTY(()) callinfo_callee { location_t location; tree decl; }; -#define CALLEE_FROM_CGRAPH_P(T) \ - (!fndecl_built_in_p (T) && !DECL_IS_BUILTIN (T)) /* Describe dynamic allocation for -fcallgraph-info=da. */ struct GTY(()) callinfo_dalloc diff --git a/gcc/toplev.c b/gcc/toplev.c index d4583ba..3b9f9ee 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1093,14 +1093,6 @@ dump_final_node_vcg (FILE *f) dump_final_callee_vcg (f, c->location, c->decl); vec_free (cfun->su->callees); cfun->su->callees = NULL; - - cgraph_node *cnode = cgraph_node::get (current_function_decl); - for (cgraph_edge *e = cnode->callees; e; e = e->next_callee) - if (CALLEE_FROM_CGRAPH_P (e->callee->decl)) - dump_final_callee_vcg (f, gimple_location (e->call_stmt), - e->callee->decl); - for (cgraph_edge *e = cnode->indirect_calls; e; e = e->next_callee) - dump_final_callee_vcg (f, gimple_location (e->call_stmt), NULL); } /* Output stack usage and callgraph info, as requested. */ -- Alexandre Oliva, freedom fighter he/him https://FSFLA.org/blogs/lxo Free Software Evangelist Stallman was right, but he's left :( GNU Toolchain Engineer FSMatrix: It was he who freed the first of us FSF & FSFLA board member The Savior shall return (true);