Commit 6844185d by Jan Hubicka Committed by Jan Hubicka

tree-optimize.c (exercute_free_datastructures): Do not disband implicit edges...


	* tree-optimize.c (exercute_free_datastructures):
	Do not disband implicit edges; do not attempt to build insn list;
	do not free cfg annotations.
	(execute_free_cfg_annotations); Disband implicit edges here;
	free cfg annotations here too.
	(pass_free_cfg_annotations); New pass.
	(init_tree_optimization_passes); Add pass_free_cfg_annotations.
	* tree-ssa-operands.c (free_ssa_operands); Recover; export.
	* tree-ssa-operands.h (free_ssa_operands); declare.
	* tree-ssa.c (delete_tree_ssa); Free SSA operand; mark stmt modified;
	kill PHI nodes.
	* tree-ssanames.c (release_defs): Kill addresses_taken.

From-SVN: r101360
parent 370369e1
2005-06-28 Jan Hubicka <jh@suse.cz>
* tree-optimize.c (exercute_free_datastructures):
Do not disband implicit edges; do not attempt to build insn list;
do not free cfg annotations.
(execute_free_cfg_annotations); Disband implicit edges here;
free cfg annotations here too.
(pass_free_cfg_annotations); New pass.
(init_tree_optimization_passes); Add pass_free_cfg_annotations.
* tree-ssa-operands.c (free_ssa_operands); Recover; export.
* tree-ssa-operands.h (free_ssa_operands); declare.
* tree-ssa.c (delete_tree_ssa); Free SSA operand; mark stmt modified;
kill PHI nodes.
* tree-ssanames.c (release_defs): Kill addresses_taken.
* basic-block.h (basic_block_def): Kill rbi.
(reorder_block_def): Kill; Remove next field (replaced by aux);
move other fields to ...
......
......@@ -120,32 +120,61 @@ static struct tree_opt_pass pass_cleanup_cfg_post_optimizing =
static void
execute_free_datastructures (void)
{
tree *chain;
/* ??? This isn't the right place for this. Worse, it got computed
more or less at random in various passes. */
free_dominance_info (CDI_DOMINATORS);
/* Emit gotos for implicit jumps. */
disband_implicit_edges ();
free_dominance_info (CDI_POST_DOMINATORS);
/* Remove the ssa structures. Do it here since this includes statement
annotations that need to be intact during disband_implicit_edges. */
delete_tree_ssa ();
}
static struct tree_opt_pass pass_free_datastructures =
{
NULL, /* name */
NULL, /* gate */
execute_free_datastructures, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
PROP_cfg, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
0, /* todo_flags_finish */
0 /* letter */
};
/* Pass: free cfg annotations. */
static void
execute_free_cfg_annotations (void)
{
basic_block bb;
block_stmt_iterator bsi;
/* Re-chain the statements from the blocks. */
chain = &DECL_SAVED_TREE (current_function_decl);
*chain = alloc_stmt_list ();
/* Emit gotos for implicit jumps. */
disband_implicit_edges ();
/* Remove annotations from every tree in the function. */
FOR_EACH_BB (bb)
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
tree stmt = bsi_stmt (bsi);
ggc_free (stmt->common.ann);
stmt->common.ann = NULL;
}
/* And get rid of annotations we no longer need. */
delete_tree_cfg_annotations ();
}
static struct tree_opt_pass pass_free_datastructures =
static struct tree_opt_pass pass_free_cfg_annotations =
{
NULL, /* name */
NULL, /* gate */
execute_free_datastructures, /* execute */
execute_free_cfg_annotations, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
......@@ -157,7 +186,6 @@ static struct tree_opt_pass pass_free_datastructures =
0, /* todo_flags_finish */
0 /* letter */
};
/* Pass: fixup_cfg - IPA passes or compilation of earlier functions might've
changed some properties - such as marked functions nothrow. Remove now
redundant edges and basic blocks. */
......@@ -387,6 +415,7 @@ init_tree_optimization_passes (void)
NEXT_PASS (pass_warn_function_noreturn);
NEXT_PASS (pass_mudflap_2);
NEXT_PASS (pass_free_datastructures);
NEXT_PASS (pass_free_cfg_annotations);
NEXT_PASS (pass_expand);
NEXT_PASS (pass_rest_of_compilation);
*p = NULL;
......
......@@ -998,8 +998,7 @@ build_ssa_operands (tree stmt)
/* Free any operands vectors in OPS. */
#if 0
static void
void
free_ssa_operands (stmt_operands_p ops)
{
ops->def_ops = NULL;
......@@ -1007,14 +1006,7 @@ free_ssa_operands (stmt_operands_p ops)
ops->maydef_ops = NULL;
ops->mustdef_ops = NULL;
ops->vuse_ops = NULL;
while (ops->memory.next != NULL)
{
operand_memory_p tmp = ops->memory.next;
ops->memory.next = tmp->next;
ggc_free (tmp);
}
}
#endif
/* Get the operands of statement STMT. Note that repeated calls to
......
......@@ -153,6 +153,7 @@ typedef struct stmt_operands_d *stmt_operands_p;
extern void init_ssa_operands (void);
extern void fini_ssa_operands (void);
extern void free_ssa_operands (stmt_operands_p);
extern void update_stmt_operands (tree);
extern bool verify_imm_links (FILE *f, tree var);
......
......@@ -819,12 +819,18 @@ delete_tree_ssa (void)
/* Remove annotations from every tree in the function. */
FOR_EACH_BB (bb)
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
tree stmt = bsi_stmt (bsi);
ggc_free (stmt->common.ann);
stmt->common.ann = NULL;
}
{
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
tree stmt = bsi_stmt (bsi);
stmt_ann_t ann = get_stmt_ann (stmt);
free_ssa_operands (&ann->operands);
ann->addresses_taken = 0;
mark_stmt_modified (stmt);
}
set_phi_nodes (bb, NULL);
}
/* Remove annotations from every referenced variable. */
for (i = 0; i < num_referenced_vars; i++)
......
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