From: Richard Guenther Date: Tue, 21 Aug 2012 11:48:42 +0000 (+0000) Subject: tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free the affine expansion cache. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b6db991c9585c615212f7019484e6d288883ade0;p=gcc.git tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free the affine expansion cache. 2012-08-21 Richard Guenther * tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free the affine expansion cache. * tree-ssa-dom.c (free_expr_hash_elt_contents): New function, split out from ... (free_expr_hash_elt): ... this one. (record_cond): Properly free a not needed hashtable element. (lookup_avail_expr): Likewise. * tree-into-ssa.c (init_ssa_renamer): Specify a free function for the var_infos hashtable. (update_ssa): Likewise. From-SVN: r190560 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 339ad330d84..5aa1ec81734 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2012-08-21 Richard Guenther + + * tree-ssa-loop-im.c (tree_ssa_lim_finalize): Properly free + the affine expansion cache. + * tree-ssa-dom.c (free_expr_hash_elt_contents): New function, + split out from ... + (free_expr_hash_elt): ... this one. + (record_cond): Properly free a not needed hashtable element. + (lookup_avail_expr): Likewise. + * tree-into-ssa.c (init_ssa_renamer): Specify a free function + for the var_infos hashtable. + (update_ssa): Likewise. + 2012-08-21 Richard Guenther * alloc-pool.c (pool_alloc): Fix valgrind annotation. diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 8365ee1074a..d1fb1924192 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -2291,7 +2291,7 @@ init_ssa_renamer (void) /* Allocate memory for the DEF_BLOCKS hash table. */ gcc_assert (var_infos == NULL); var_infos = htab_create (VEC_length (tree, cfun->local_decls), - var_info_hash, var_info_eq, NULL); + var_info_hash, var_info_eq, free); bitmap_obstack_initialize (&update_ssa_obstack); } @@ -3170,7 +3170,7 @@ update_ssa (unsigned update_flags) { /* If we rename bare symbols initialize the mapping to auxiliar info we need to keep track of. */ - var_infos = htab_create (47, var_info_hash, var_info_eq, NULL); + var_infos = htab_create (47, var_info_hash, var_info_eq, free); /* If we have to rename some symbols from scratch, we need to start the process at the root of the CFG. FIXME, it should diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index d3795be6ebe..4a89df25fbb 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -649,19 +649,24 @@ print_expr_hash_elt (FILE * stream, const struct expr_hash_elt *element) } } -/* Delete an expr_hash_elt and reclaim its storage. */ +/* Delete variable sized pieces of the expr_hash_elt ELEMENT. */ static void -free_expr_hash_elt (void *elt) +free_expr_hash_elt_contents (struct expr_hash_elt *element) { - struct expr_hash_elt *element = ((struct expr_hash_elt *)elt); - if (element->expr.kind == EXPR_CALL) free (element->expr.ops.call.args); - - if (element->expr.kind == EXPR_PHI) + else if (element->expr.kind == EXPR_PHI) free (element->expr.ops.phi.args); +} + +/* Delete an expr_hash_elt and reclaim its storage. */ +static void +free_expr_hash_elt (void *elt) +{ + struct expr_hash_elt *element = ((struct expr_hash_elt *)elt); + free_expr_hash_elt_contents (element); free (element); } @@ -1203,7 +1208,7 @@ record_cond (cond_equivalence *p) VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element); } else - free (element); + free_expr_hash_elt (element); } /* Build a cond_equivalence record indicating that the comparison @@ -2404,9 +2409,11 @@ lookup_avail_expr (gimple stmt, bool insert) slot = htab_find_slot_with_hash (avail_exprs, &element, element.hash, (insert ? INSERT : NO_INSERT)); if (slot == NULL) - return NULL_TREE; - - if (*slot == NULL) + { + free_expr_hash_elt_contents (&element); + return NULL_TREE; + } + else if (*slot == NULL) { struct expr_hash_elt *element2 = XNEW (struct expr_hash_elt); *element2 = element; @@ -2422,6 +2429,8 @@ lookup_avail_expr (gimple stmt, bool insert) VEC_safe_push (expr_hash_elt_t, heap, avail_exprs_stack, element2); return NULL_TREE; } + else + free_expr_hash_elt_contents (&element); /* Extract the LHS of the assignment so that it can be used as the current definition of another variable. */ diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 8252084a945..0f61631cc79 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -2634,7 +2634,7 @@ tree_ssa_lim_finalize (void) VEC_free (bitmap, heap, memory_accesses.all_refs_stored_in_loop); if (memory_accesses.ttae_cache) - pointer_map_destroy (memory_accesses.ttae_cache); + free_affine_expand_cache (&memory_accesses.ttae_cache); } /* Moves invariants from loops. Only "expensive" invariants are moved out --