Hi. Following changes were consulted with Martin Jambor to properly release memory in IPA. It fixes leaks which popped up in tramp3d with -O2.
Bootstrap and regression tests have been running. Ready after it finishes? Thanks, Martin
>From 85b63f738030dd7a901c228ba76e24f820d31c5d Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Mon, 9 Nov 2015 12:38:27 +0100 Subject: [PATCH 2/2] Fix memory leaks in IPA. gcc/ChangeLog: 2015-11-09 Martin Liska <mli...@suse.cz> * ipa-inline-analysis.c (estimate_function_body_sizes): Call body_info release function. * ipa-prop.c (ipa_release_body_info): New function. (ipa_analyze_node): Call the function. (ipa_node_params::~ipa_node_params): Release known_csts. * ipa-prop.h (ipa_release_body_info): Declare. --- gcc/ipa-inline-analysis.c | 2 +- gcc/ipa-prop.c | 20 +++++++++++++++----- gcc/ipa-prop.h | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index c07b0da..8c8b8e3 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -2853,7 +2853,7 @@ estimate_function_body_sizes (struct cgraph_node *node, bool early) inline_summaries->get (node)->self_time = time; inline_summaries->get (node)->self_size = size; nonconstant_names.release (); - fbi.bb_infos.release (); + ipa_release_body_info (&fbi); if (opt_for_fn (node->decl, optimize)) { if (!early) diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index d15f0eb..f379ea7 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -2258,6 +2258,19 @@ analysis_dom_walker::before_dom_children (basic_block bb) ipa_compute_jump_functions_for_bb (m_fbi, bb); } +/* Release body info FBI. */ + +void +ipa_release_body_info (struct ipa_func_body_info *fbi) +{ + int i; + struct ipa_bb_info *bi; + + FOR_EACH_VEC_ELT (fbi->bb_infos, i, bi) + free_ipa_bb_info (bi); + fbi->bb_infos.release (); +} + /* Initialize the array describing properties of formal parameters of NODE, analyze their uses and compute jump functions associated with actual arguments of calls from within NODE. */ @@ -2313,11 +2326,7 @@ ipa_analyze_node (struct cgraph_node *node) analysis_dom_walker (&fbi).walk (ENTRY_BLOCK_PTR_FOR_FN (cfun)); - int i; - struct ipa_bb_info *bi; - FOR_EACH_VEC_ELT (fbi.bb_infos, i, bi) - free_ipa_bb_info (bi); - fbi.bb_infos.release (); + ipa_release_body_info (&fbi); free_dominance_info (CDI_DOMINATORS); pop_cfun (); } @@ -3306,6 +3315,7 @@ ipa_node_params::~ipa_node_params () free (lattices); /* Lattice values and their sources are deallocated with their alocation pool. */ + known_csts.release (); known_contexts.release (); lattices = NULL; diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index b69ee8a..2fe824d 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -775,7 +775,7 @@ bool ipa_modify_expr (tree *, bool, ipa_parm_adjustment_vec); ipa_parm_adjustment *ipa_get_adjustment_candidate (tree **, bool *, ipa_parm_adjustment_vec, bool); - +void ipa_release_body_info (struct ipa_func_body_info *); /* From tree-sra.c: */ tree build_ref_for_offset (location_t, tree, HOST_WIDE_INT, bool, tree, -- 2.6.2