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> 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. * basic-block.h (basic_block_def): Kill rbi.
(reorder_block_def): Kill; Remove next field (replaced by aux); (reorder_block_def): Kill; Remove next field (replaced by aux);
move other fields to ... move other fields to ...
......
...@@ -120,32 +120,61 @@ static struct tree_opt_pass pass_cleanup_cfg_post_optimizing = ...@@ -120,32 +120,61 @@ static struct tree_opt_pass pass_cleanup_cfg_post_optimizing =
static void static void
execute_free_datastructures (void) execute_free_datastructures (void)
{ {
tree *chain;
/* ??? This isn't the right place for this. Worse, it got computed /* ??? This isn't the right place for this. Worse, it got computed
more or less at random in various passes. */ more or less at random in various passes. */
free_dominance_info (CDI_DOMINATORS); free_dominance_info (CDI_DOMINATORS);
free_dominance_info (CDI_POST_DOMINATORS);
/* Emit gotos for implicit jumps. */
disband_implicit_edges ();
/* Remove the ssa structures. Do it here since this includes statement /* Remove the ssa structures. Do it here since this includes statement
annotations that need to be intact during disband_implicit_edges. */ annotations that need to be intact during disband_implicit_edges. */
delete_tree_ssa (); 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. */ /* Emit gotos for implicit jumps. */
chain = &DECL_SAVED_TREE (current_function_decl); disband_implicit_edges ();
*chain = alloc_stmt_list ();
/* 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. */ /* And get rid of annotations we no longer need. */
delete_tree_cfg_annotations (); delete_tree_cfg_annotations ();
} }
static struct tree_opt_pass pass_free_datastructures = static struct tree_opt_pass pass_free_cfg_annotations =
{ {
NULL, /* name */ NULL, /* name */
NULL, /* gate */ NULL, /* gate */
execute_free_datastructures, /* execute */ execute_free_cfg_annotations, /* execute */
NULL, /* sub */ NULL, /* sub */
NULL, /* next */ NULL, /* next */
0, /* static_pass_number */ 0, /* static_pass_number */
...@@ -157,7 +186,6 @@ static struct tree_opt_pass pass_free_datastructures = ...@@ -157,7 +186,6 @@ static struct tree_opt_pass pass_free_datastructures =
0, /* todo_flags_finish */ 0, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
/* Pass: fixup_cfg - IPA passes or compilation of earlier functions might've /* Pass: fixup_cfg - IPA passes or compilation of earlier functions might've
changed some properties - such as marked functions nothrow. Remove now changed some properties - such as marked functions nothrow. Remove now
redundant edges and basic blocks. */ redundant edges and basic blocks. */
...@@ -387,6 +415,7 @@ init_tree_optimization_passes (void) ...@@ -387,6 +415,7 @@ init_tree_optimization_passes (void)
NEXT_PASS (pass_warn_function_noreturn); NEXT_PASS (pass_warn_function_noreturn);
NEXT_PASS (pass_mudflap_2); NEXT_PASS (pass_mudflap_2);
NEXT_PASS (pass_free_datastructures); NEXT_PASS (pass_free_datastructures);
NEXT_PASS (pass_free_cfg_annotations);
NEXT_PASS (pass_expand); NEXT_PASS (pass_expand);
NEXT_PASS (pass_rest_of_compilation); NEXT_PASS (pass_rest_of_compilation);
*p = NULL; *p = NULL;
......
...@@ -998,8 +998,7 @@ build_ssa_operands (tree stmt) ...@@ -998,8 +998,7 @@ build_ssa_operands (tree stmt)
/* Free any operands vectors in OPS. */ /* Free any operands vectors in OPS. */
#if 0 void
static void
free_ssa_operands (stmt_operands_p ops) free_ssa_operands (stmt_operands_p ops)
{ {
ops->def_ops = NULL; ops->def_ops = NULL;
...@@ -1007,14 +1006,7 @@ free_ssa_operands (stmt_operands_p ops) ...@@ -1007,14 +1006,7 @@ free_ssa_operands (stmt_operands_p ops)
ops->maydef_ops = NULL; ops->maydef_ops = NULL;
ops->mustdef_ops = NULL; ops->mustdef_ops = NULL;
ops->vuse_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 /* Get the operands of statement STMT. Note that repeated calls to
......
...@@ -153,6 +153,7 @@ typedef struct stmt_operands_d *stmt_operands_p; ...@@ -153,6 +153,7 @@ typedef struct stmt_operands_d *stmt_operands_p;
extern void init_ssa_operands (void); extern void init_ssa_operands (void);
extern void fini_ssa_operands (void); extern void fini_ssa_operands (void);
extern void free_ssa_operands (stmt_operands_p);
extern void update_stmt_operands (tree); extern void update_stmt_operands (tree);
extern bool verify_imm_links (FILE *f, tree var); extern bool verify_imm_links (FILE *f, tree var);
......
...@@ -819,12 +819,18 @@ delete_tree_ssa (void) ...@@ -819,12 +819,18 @@ delete_tree_ssa (void)
/* Remove annotations from every tree in the function. */ /* Remove annotations from every tree in the function. */
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) {
{ for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
tree stmt = bsi_stmt (bsi); {
ggc_free (stmt->common.ann); tree stmt = bsi_stmt (bsi);
stmt->common.ann = NULL; 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. */ /* Remove annotations from every referenced variable. */
for (i = 0; i < num_referenced_vars; i++) 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