Commit bbd08a5d by Martin Liska Committed by Martin Liska

Fix IPA memory leaks.

	* ipa-cp.c (ipcp_driver): Release prev_edge_clone.
	* ipa-icf.c (sem_item_optimizer::subdivide_classes_by_sensitive_refs):
	Release symbol_compare_collection.
	* ipa-reference.c: Add TODO that a vector should be released.

From-SVN: r222180
parent c11cdefb
2015-04-17 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sem_item_optimizer::subdivide_classes_by_sensitive_refs):
Release symbol_compare_collection.
* ipa-reference.c: Add TODO that a vector should be released.
2015-04-17 Sivanupandi Pitchumani <Pitchumani.Sivanupandi@atmel.com> 2015-04-17 Sivanupandi Pitchumani <Pitchumani.Sivanupandi@atmel.com>
PR target/65296 PR target/65296
......
...@@ -2712,6 +2712,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa) ...@@ -2712,6 +2712,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool in_wpa)
unsigned unsigned
sem_item_optimizer::subdivide_classes_by_sensitive_refs () sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
{ {
typedef hash_map <symbol_compare_collection *, vec <sem_item *>,
symbol_compare_hashmap_traits> subdivide_hash_map;
unsigned newly_created_classes = 0; unsigned newly_created_classes = 0;
for (hash_table <congruence_class_group_hash>::iterator it = m_classes.begin (); for (hash_table <congruence_class_group_hash>::iterator it = m_classes.begin ();
...@@ -2726,8 +2729,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2726,8 +2729,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
if (c->members.length() > 1) if (c->members.length() > 1)
{ {
hash_map <symbol_compare_collection *, vec <sem_item *>, subdivide_hash_map split_map;
symbol_compare_hashmap_traits> split_map;
for (unsigned j = 0; j < c->members.length (); j++) for (unsigned j = 0; j < c->members.length (); j++)
{ {
...@@ -2735,10 +2737,15 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2735,10 +2737,15 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
symbol_compare_collection *collection = new symbol_compare_collection (source_node->node); symbol_compare_collection *collection = new symbol_compare_collection (source_node->node);
vec <sem_item *> *slot = &split_map.get_or_insert (collection); bool existed;
vec <sem_item *> *slot = &split_map.get_or_insert (collection,
&existed);
gcc_checking_assert (slot); gcc_checking_assert (slot);
slot->safe_push (source_node); slot->safe_push (source_node);
if (existed)
delete collection;
} }
/* If the map contains more than one key, we have to split the map /* If the map contains more than one key, we have to split the map
...@@ -2747,9 +2754,8 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2747,9 +2754,8 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
{ {
bool first_class = true; bool first_class = true;
hash_map <symbol_compare_collection *, vec <sem_item *>, for (subdivide_hash_map::iterator it2 = split_map.begin ();
symbol_compare_hashmap_traits>::iterator it2 = split_map.begin (); it2 != split_map.end (); ++it2)
for (; it2 != split_map.end (); ++it2)
{ {
congruence_class *new_cls; congruence_class *new_cls;
new_cls = new congruence_class (class_id++); new_cls = new congruence_class (class_id++);
...@@ -2772,6 +2778,14 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs () ...@@ -2772,6 +2778,14 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
} }
} }
} }
/* Release memory. */
for (subdivide_hash_map::iterator it2 = split_map.begin ();
it2 != split_map.end (); ++it2)
{
delete (*it2).first;
(*it2).second.release ();
}
} }
} }
......
...@@ -150,6 +150,7 @@ static struct cgraph_node_hook_list *node_removal_hook_holder; ...@@ -150,6 +150,7 @@ static struct cgraph_node_hook_list *node_removal_hook_holder;
Indexed by UID of call graph nodes. */ Indexed by UID of call graph nodes. */
static vec<ipa_reference_vars_info_t> ipa_reference_vars_vector; static vec<ipa_reference_vars_info_t> ipa_reference_vars_vector;
/* TODO: find a place where we should release the vector. */
static vec<ipa_reference_optimization_summary_t> ipa_reference_opt_sum_vector; static vec<ipa_reference_optimization_summary_t> ipa_reference_opt_sum_vector;
/* Return the ipa_reference_vars structure starting from the cgraph NODE. */ /* Return the ipa_reference_vars structure starting from the cgraph NODE. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment