This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix PR65538
- From: Martin Liška <mliska at suse dot cz>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 24 Mar 2015 22:54:25 +0100
- Subject: Re: [PATCH] Fix PR65538
- Authentication-results: sourceware.org; auth=none
- References: <55116E76 dot 4070405 at suse dot cz> <20150324173805 dot GG19215 at atrey dot karlin dot mff dot cuni dot cz>
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 <mliska@suse.cz>
>> Date: Tue, 24 Mar 2015 13:58:50 +0100
>> Subject: [PATCH] Fix PR65538.
>>
>> gcc/ChangeLog:
>>
>> 2015-03-24 Martin Liska <mliska@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 <mliska@suse.cz>
Date: Tue, 24 Mar 2015 13:58:50 +0100
Subject: [PATCH] Fix PR65538.
gcc/ChangeLog:
2015-03-24 Martin Liska <mliska@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