tree-flow.h (struct gimple_df): Make free_ssanames a VEC.

* tree-flow.h (struct gimple_df): Make free_ssanames a VEC.
	* tree-ssanames.c (fini_ssanames): VEC_free it.
	(make_ssa_name_fn): Update for VECness of free_ssanames.
	(release_ssa_name, release_dead_ssa_names): Likewise.
	* tree.h (struct tree_ssa_name): Include tree_typed instead of
	tree_common.
	* tree.c (initialize_tree_contains_struct): Mark TS_SSA_NAME as
	TS_TYPED instead of TS_COMMON.

From-SVN: r172393
This commit is contained in:
Nathan Froyd 2011-04-13 20:32:30 +00:00 committed by Nathan Froyd
parent 4da3b811f9
commit 4b1a46942e
5 changed files with 22 additions and 23 deletions

View File

@ -1,3 +1,14 @@
2011-04-13 Nathan Froyd <froydnj@codesourcery.com>
* tree-flow.h (struct gimple_df): Make free_ssanames a VEC.
* tree-ssanames.c (fini_ssanames): VEC_free it.
(make_ssa_name_fn): Update for VECness of free_ssanames.
(release_ssa_name, release_dead_ssa_names): Likewise.
* tree.h (struct tree_ssa_name): Include tree_typed instead of
tree_common.
* tree.c (initialize_tree_contains_struct): Mark TS_SSA_NAME as
TS_TYPED instead of TS_COMMON.
2011-04-13 Nathan Froyd <froydnj@codesourcery.com>
* postreload-gcse.c (gcse_after_reload_main): Add calls to

View File

@ -61,7 +61,7 @@ struct GTY(()) gimple_df {
struct pointer_map_t * GTY((skip(""))) decls_to_pointers;
/* Free list of SSA_NAMEs. */
tree free_ssanames;
VEC(tree,gc) *free_ssanames;
/* Hashtable holding definition for symbol. If this field is not NULL, it
means that the first reference to this variable in the function is a

View File

@ -96,7 +96,7 @@ void
fini_ssanames (void)
{
VEC_free (tree, gc, SSANAMES (cfun));
FREE_SSANAMES (cfun) = NULL;
VEC_free (tree, gc, FREE_SSANAMES (cfun));
}
/* Dump some simple statistics regarding the re-use of SSA_NAME nodes. */
@ -124,10 +124,9 @@ make_ssa_name_fn (struct function *fn, tree var, gimple stmt)
gcc_assert (DECL_P (var));
/* If our free list has an element, then use it. */
if (FREE_SSANAMES (fn))
if (!VEC_empty (tree, FREE_SSANAMES (fn)))
{
t = FREE_SSANAMES (fn);
FREE_SSANAMES (fn) = TREE_CHAIN (FREE_SSANAMES (fn));
t = VEC_pop (tree, FREE_SSANAMES (fn));
#ifdef GATHER_STATISTICS
ssa_name_nodes_reused++;
#endif
@ -234,9 +233,8 @@ release_ssa_name (tree var)
/* Note this SSA_NAME is now in the first list. */
SSA_NAME_IN_FREE_LIST (var) = 1;
/* And finally link it into the free list. */
TREE_CHAIN (var) = FREE_SSANAMES (cfun);
FREE_SSANAMES (cfun) = var;
/* And finally put it on the free list. */
VEC_safe_push (tree, gc, FREE_SSANAMES (cfun), var);
}
}
@ -334,8 +332,8 @@ replace_ssa_name_symbol (tree ssa_name, tree sym)
static unsigned int
release_dead_ssa_names (void)
{
tree t, next;
int n = 0;
tree t;
int n = VEC_length (tree, FREE_SSANAMES (cfun));
referenced_var_iterator rvi;
/* Current defs point to various dead SSA names that in turn point to
@ -343,17 +341,7 @@ release_dead_ssa_names (void)
FOR_EACH_REFERENCED_VAR (cfun, t, rvi)
set_current_def (t, NULL);
/* Now release the freelist. */
for (t = FREE_SSANAMES (cfun); t; t = next)
{
next = TREE_CHAIN (t);
/* Dangling pointers might make GGC to still see dead SSA names, so it is
important to unlink the list and avoid GGC from seeing all subsequent
SSA names. In longer run we want to have all dangling pointers here
removed (since they usually go through dead statements that consume
considerable amounts of memory). */
TREE_CHAIN (t) = NULL_TREE;
n++;
}
VEC_free (tree, gc, FREE_SSANAMES (cfun));
FREE_SSANAMES (cfun) = NULL;
statistics_counter_event (cfun, "SSA names released", n);

View File

@ -377,6 +377,7 @@ initialize_tree_contains_struct (void)
case TS_VECTOR:
case TS_STRING:
case TS_COMPLEX:
case TS_SSA_NAME:
MARK_TS_TYPED (code);
break;
@ -386,7 +387,6 @@ initialize_tree_contains_struct (void)
case TS_LIST:
case TS_VEC:
case TS_EXP:
case TS_SSA_NAME:
case TS_BLOCK:
case TS_BINFO:
case TS_STATEMENT_LIST:

View File

@ -1970,7 +1970,7 @@ typedef struct GTY(()) ssa_use_operand_d {
#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses
struct GTY(()) tree_ssa_name {
struct tree_common common;
struct tree_typed typed;
/* _DECL wrapped by this SSA name. */
tree var;