> > 2015-04-13 Martin Liska <mli...@suse.cz> > > * 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. > --- > gcc/ipa-cp.c | 1 + > gcc/ipa-icf.c | 26 ++++++++++++++++++++------ > gcc/ipa-reference.c | 1 + > 3 files changed, 22 insertions(+), 6 deletions(-) > > diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index bfe4821..3824029 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -4493,6 +4493,7 @@ ipcp_driver (void) > /* Free all IPCP structures. */ > free_toporder_info (&topo); > next_edge_clone.release (); > + prev_edge_clone.release (); > symtab->remove_edge_removal_hook (edge_removal_hook_holder); > symtab->remove_edge_duplication_hook (edge_duplication_hook_holder); > ipa_free_all_structures_after_ipa_cp ();
I already fixed this one on mainline. > diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c > index b902373..a72ac2e 100644 > --- a/gcc/ipa-icf.c > +++ b/gcc/ipa-icf.c > @@ -2712,6 +2712,9 @@ sem_item_optimizer::subdivide_classes_by_equality (bool > in_wpa) > unsigned > 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; > > for (hash_table <congruence_class_group_hash>::iterator it = > m_classes.begin (); > @@ -2726,8 +2729,7 @@ sem_item_optimizer::subdivide_classes_by_sensitive_refs > () > > if (c->members.length() > 1) > { > - hash_map <symbol_compare_collection *, vec <sem_item *>, > - symbol_compare_hashmap_traits> split_map; > + subdivide_hash_map split_map; > > for (unsigned j = 0; j < c->members.length (); j++) > { > @@ -2735,10 +2737,15 @@ > sem_item_optimizer::subdivide_classes_by_sensitive_refs () > > 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); > > slot->safe_push (source_node); > + > + if (existed) > + delete collection; > } > > /* 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 > () > { > bool first_class = true; > > - hash_map <symbol_compare_collection *, vec <sem_item *>, > - symbol_compare_hashmap_traits>::iterator it2 = > split_map.begin (); > - for (; it2 != split_map.end (); ++it2) > + for (subdivide_hash_map::iterator it2 = split_map.begin (); > + it2 != split_map.end (); ++it2) > { > congruence_class *new_cls; > new_cls = new congruence_class (class_id++); > @@ -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 (); > + } > } > } > This is OK. > diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c > index 219a9b3..a420cb2 100644 > --- a/gcc/ipa-reference.c > +++ b/gcc/ipa-reference.c > @@ -150,6 +150,7 @@ static struct cgraph_node_hook_list > *node_removal_hook_holder; > Indexed by UID of call graph nodes. */ > 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; > > /* Return the ipa_reference_vars structure starting from the cgraph NODE. */ Hmm, I guess this only makes sense for jitting, because the vector is used thorough whole late complation (and should be turned into the summary template) OK Honza > -- > 2.1.4 >