On 03/24/2015 06:38 PM, Jan Hubicka wrote: >> Hi. >> >> In following patch, I've added missing delete call for all item summaries >> that are >> allocated within a function_summary container in case the container does not >> use >> GGC memory allocation. >> >> Can boostrap on ppc64le and no regression is seen on x86_64-linux-pc. >> >> Ready for trunk? >> Thanks, >> Martin > >> >From c9912b88e8a381e6be7dc1e4be4f7b8859d72e2f Mon Sep 17 00:00:00 2001 >> From: mliska <mli...@suse.cz> >> Date: Tue, 24 Mar 2015 13:58:50 +0100 >> Subject: [PATCH] Fix PR65538. >> >> gcc/ChangeLog: >> >> 2015-03-24 Martin Liska <mli...@suse.cz> >> >> PR tree-optimization/65538 >> * symbol-summary.h (function_summary::~function_summary): >> Relese memory for allocated summaries in case non-GGC template >> instance. >> --- >> gcc/symbol-summary.h | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h >> index 8d7e42c..35615ba 100644 >> --- a/gcc/symbol-summary.h >> +++ b/gcc/symbol-summary.h >> @@ -81,6 +81,12 @@ public: >> m_symtab_insertion_hook = NULL; >> m_symtab_removal_hook = NULL; >> m_symtab_duplication_hook = NULL; >> + >> + /* Release all summaries in case we use non-GGC memory. */ >> + typedef typename hash_map <int, T *, summary_hashmap_traits>::iterator >> map_iterator; >> + if (!m_ggc) >> + for (map_iterator it = m_map.begin (); it != m_map.end (); ++it) >> + delete (*it).second; > > I think you sould also do the walk with GGC memory and call ggc_free. > During WPA we almost never call ggc_collect so it is better to keep things > explicitly freed. > OK with that change. > > Honza >
There's updated version of patch, I've been testing. I'm going to install the patch after it finishes. Thanks, Martin
>From 8ae68cd2c69287c26543b22fa7afe2ff5cdcda8c Mon Sep 17 00:00:00 2001 From: mliska <mli...@suse.cz> Date: Tue, 24 Mar 2015 13:58:50 +0100 Subject: [PATCH] Fix PR65538. gcc/ChangeLog: 2015-03-24 Martin Liska <mli...@suse.cz> PR tree-optimization/65538 * symbol-summary.h (function_summary::~function_summary): Relese memory for allocated summaries in case non-GGC template instance. --- gcc/symbol-summary.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h index 8d7e42c..9a87891 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -81,6 +81,12 @@ public: m_symtab_insertion_hook = NULL; m_symtab_removal_hook = NULL; m_symtab_duplication_hook = NULL; + + /* Release all summaries in case we use non-GGC memory. */ + typedef typename hash_map <int, T *, summary_hashmap_traits>::iterator map_iterator; + if (!m_ggc) + for (map_iterator it = m_map.begin (); it != m_map.end (); ++it) + release ((*it).second); } /* Traverses all summarys with a function F called with @@ -106,6 +112,15 @@ public: return m_ggc ? new (ggc_alloc <T> ()) T() : new T () ; } + /* Release an item that is stored within map. */ + void release (T *item) + { + if (m_ggc) + ggc_free (item); + else + delete item; + } + /* Getter for summary callgraph node pointer. */ T* get (cgraph_node *node) { -- 2.1.4