tree.c (free_node): New function.
* tree.c (free_node): New function. (type_hash_canon): Use it. * tree.h (free_node): Declare. * lto.c (unify_scc): Use free_node. From-SVN: r230833
This commit is contained in:
parent
d7dc0f8037
commit
deb3dae698
@ -1,3 +1,9 @@
|
||||
2015-11-24 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* tree.c (free_node): New function.
|
||||
(type_hash_canon): Use it.
|
||||
* tree.h (free_node): Declare.
|
||||
|
||||
2015-11-24 David Edelsohn <dje.gcc@gmail.com>
|
||||
Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2015-11-24 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* lto.c (unify_scc): Use free_node.
|
||||
|
||||
2015-11-21 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* lto.c (iterative_hash_canonical_type): Always recurse for pointers.
|
||||
|
@ -1623,13 +1623,9 @@ unify_scc (struct data_in *data_in, unsigned from,
|
||||
data_in->location_cache.revert_location_cache ();
|
||||
for (unsigned i = 0; i < len; ++i)
|
||||
{
|
||||
enum tree_code code;
|
||||
if (TYPE_P (scc->entries[i]))
|
||||
num_merged_types++;
|
||||
code = TREE_CODE (scc->entries[i]);
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
|
||||
vec_free (CONSTRUCTOR_ELTS (scc->entries[i]));
|
||||
ggc_free (scc->entries[i]);
|
||||
free_node (scc->entries[i]);
|
||||
}
|
||||
|
||||
break;
|
||||
|
28
gcc/tree.c
28
gcc/tree.c
@ -1103,6 +1103,27 @@ make_node_stat (enum tree_code code MEM_STAT_DECL)
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
/* Free tree node. */
|
||||
|
||||
void
|
||||
free_node (tree node)
|
||||
{
|
||||
enum tree_code code = TREE_CODE (node);
|
||||
if (GATHER_STATISTICS)
|
||||
{
|
||||
tree_code_counts[(int) TREE_CODE (node)]--;
|
||||
tree_node_counts[(int) t_kind]--;
|
||||
tree_node_sizes[(int) t_kind] -= tree_code_size (TREE_CODE (node));
|
||||
}
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_CONSTRUCTOR))
|
||||
vec_free (CONSTRUCTOR_ELTS (node));
|
||||
else if (code == BLOCK)
|
||||
vec_free (BLOCK_NONLOCALIZED_VARS (node));
|
||||
else if (code == TREE_BINFO)
|
||||
vec_free (BINFO_BASE_ACCESSES (node));
|
||||
ggc_free (node);
|
||||
}
|
||||
|
||||
/* Return a new node with the same contents as NODE except that its
|
||||
TREE_CHAIN, if it has one, is zero and it has a fresh uid. */
|
||||
@ -7100,12 +7121,7 @@ type_hash_canon (unsigned int hashcode, tree type)
|
||||
{
|
||||
tree t1 = ((type_hash *) *loc)->type;
|
||||
gcc_assert (TYPE_MAIN_VARIANT (t1) == t1);
|
||||
if (GATHER_STATISTICS)
|
||||
{
|
||||
tree_code_counts[(int) TREE_CODE (type)]--;
|
||||
tree_node_counts[(int) t_kind]--;
|
||||
tree_node_sizes[(int) t_kind] -= sizeof (struct tree_type_non_common);
|
||||
}
|
||||
free_node (type);
|
||||
return t1;
|
||||
}
|
||||
else
|
||||
|
@ -3763,6 +3763,10 @@ extern int allocate_decl_uid (void);
|
||||
extern tree make_node_stat (enum tree_code MEM_STAT_DECL);
|
||||
#define make_node(t) make_node_stat (t MEM_STAT_INFO)
|
||||
|
||||
/* Free tree node. */
|
||||
|
||||
extern void free_node (tree);
|
||||
|
||||
/* Make a copy of a node, with all the same contents. */
|
||||
|
||||
extern tree copy_node_stat (tree MEM_STAT_DECL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user