Commit 88a40e67 by Daniel Berlin Committed by Daniel Berlin

re PR tree-optimization/18519 (ICE: Segmentation fault with optimization)

2004-11-16  Daniel Berlin  <dberlin@dberlin.org>

	Fix PR tree-optimization/18519

	* tree-optimize (execute_todo): Add case for TODO_cleanup_cfg.
	* tree-pass.h: Add TODO_cleanup_cfg.
	* tree-ssa-ccp.c (pass_ccp): Use TODO_cleanup_cfg.
	(ccp_finalize): Remove call to cleanup_cfg.
	* tree-ssa-dce.c (pass_dce): Use TODO_cleanup_cfg and TODO_dump_func.
	(pass_cd_dce): Ditto.
	(perform_tree_ssa_dce): Remove call to cleanup_cfg,
	dump_function_to_file.
	* tree-ssa-loop-ch.c (copy_loop_headers): Remove call
	to cleanup_cfg.
	(pass_ch): Add TODO_cleanup_cfg.
	* tree-ssa-loop.c (tree_ssa_loop_done): Remove call to
	cleanup_cfg.
	(pass_loop_done): Add TODO_cleanup_cfg.
	* tree-ssa-phiopt.c (pass_phiopt): Ditto.
	(tree_ssa_phiopt): Remove call to cleanup_cfg.

From-SVN: r90783
parent 8a45d448
2004-11-16 Daniel Berlin <dberlin@dberlin.org>
Fix PR tree-optimization/18519
* tree-optimize (execute_todo): Add case for TODO_cleanup_cfg.
* tree-pass.h: Add TODO_cleanup_cfg.
* tree-ssa-ccp.c (pass_ccp): Use TODO_cleanup_cfg.
(ccp_finalize): Remove call to cleanup_cfg.
* tree-ssa-dce.c (pass_dce): Use TODO_cleanup_cfg and TODO_dump_func.
(pass_cd_dce): Ditto.
(perform_tree_ssa_dce): Remove call to cleanup_cfg,
dump_function_to_file.
* tree-ssa-loop-ch.c (copy_loop_headers): Remove call
to cleanup_cfg.
(pass_ch): Add TODO_cleanup_cfg.
* tree-ssa-loop.c (tree_ssa_loop_done): Remove call to
cleanup_cfg.
(pass_loop_done): Add TODO_cleanup_cfg.
* tree-ssa-phiopt.c (pass_phiopt): Ditto.
(tree_ssa_phiopt): Remove call to cleanup_cfg.
2004-11-16 Devang Patel <dpatel@apple.com> 2004-11-16 Devang Patel <dpatel@apple.com>
* optabs.c (vector_compare_rtx): Fix COMPARISON_CLASS_P use. * optabs.c (vector_compare_rtx): Fix COMPARISON_CLASS_P use.
......
...@@ -426,6 +426,9 @@ execute_todo (int properties, unsigned int flags) ...@@ -426,6 +426,9 @@ execute_todo (int properties, unsigned int flags)
bitmap_clear (vars_to_rename); bitmap_clear (vars_to_rename);
} }
if (flags & TODO_cleanup_cfg)
cleanup_tree_cfg ();
if ((flags & TODO_dump_func) && dump_file) if ((flags & TODO_dump_func) && dump_file)
{ {
if (properties & PROP_trees) if (properties & PROP_trees)
......
...@@ -107,6 +107,7 @@ struct dump_file_info ...@@ -107,6 +107,7 @@ struct dump_file_info
#define TODO_verify_flow (1 << 4) #define TODO_verify_flow (1 << 4)
#define TODO_verify_stmts (1 << 5) #define TODO_verify_stmts (1 << 5)
#define TODO_fix_def_def_chains (1 << 6) /* rewrite def-def chains */ #define TODO_fix_def_def_chains (1 << 6) /* rewrite def-def chains */
#define TODO_cleanup_cfg (1 << 7) /* cleanup the cfg. */
#define TODO_verify_all \ #define TODO_verify_all \
(TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts) (TODO_verify_ssa | TODO_verify_flow | TODO_verify_stmts)
......
...@@ -629,9 +629,6 @@ ccp_finalize (void) ...@@ -629,9 +629,6 @@ ccp_finalize (void)
/* Perform substitutions based on the known constant values. */ /* Perform substitutions based on the known constant values. */
substitute_and_fold (); substitute_and_fold ();
/* Now cleanup any unreachable code. */
cleanup_tree_cfg ();
free (value_vector); free (value_vector);
} }
...@@ -1229,7 +1226,7 @@ struct tree_opt_pass pass_ccp = ...@@ -1229,7 +1226,7 @@ struct tree_opt_pass pass_ccp =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_dump_func | TODO_rename_vars TODO_cleanup_cfg | TODO_dump_func | TODO_rename_vars
| TODO_ggc_collect | TODO_verify_ssa | TODO_ggc_collect | TODO_verify_ssa
| TODO_verify_stmts, /* todo_flags_finish */ | TODO_verify_stmts, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
......
...@@ -951,14 +951,9 @@ perform_tree_ssa_dce (bool aggressive) ...@@ -951,14 +951,9 @@ perform_tree_ssa_dce (bool aggressive)
if (aggressive) if (aggressive)
free_dominance_info (CDI_POST_DOMINATORS); free_dominance_info (CDI_POST_DOMINATORS);
cleanup_tree_cfg ();
/* Debugging dumps. */ /* Debugging dumps. */
if (dump_file) if (dump_file)
{
dump_function_to_file (current_function_decl, dump_file, dump_flags);
print_stats (); print_stats ();
}
tree_dce_done (aggressive); tree_dce_done (aggressive);
...@@ -997,7 +992,7 @@ struct tree_opt_pass pass_dce = ...@@ -997,7 +992,7 @@ struct tree_opt_pass pass_dce =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_fix_def_def_chains |TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */ TODO_dump_func | TODO_fix_def_def_chains | TODO_cleanup_cfg | TODO_ggc_collect | TODO_verify_ssa, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
...@@ -1014,7 +1009,7 @@ struct tree_opt_pass pass_cd_dce = ...@@ -1014,7 +1009,7 @@ struct tree_opt_pass pass_cd_dce =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_fix_def_def_chains | TODO_ggc_collect | TODO_verify_ssa | TODO_verify_flow, TODO_dump_func | TODO_fix_def_def_chains | TODO_cleanup_cfg | TODO_ggc_collect | TODO_verify_ssa | TODO_verify_flow,
/* todo_flags_finish */ /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
......
...@@ -214,11 +214,6 @@ copy_loop_headers (void) ...@@ -214,11 +214,6 @@ copy_loop_headers (void)
#endif #endif
loop_optimizer_finalize (loops, NULL); loop_optimizer_finalize (loops, NULL);
/* Run cleanup_tree_cfg here regardless of whether we have done anything, so
that we cleanup the blocks created in order to get the loops into a
canonical shape. */
cleanup_tree_cfg ();
} }
static bool static bool
...@@ -240,7 +235,7 @@ struct tree_opt_pass pass_ch = ...@@ -240,7 +235,7 @@ struct tree_opt_pass pass_ch =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
(TODO_dump_func TODO_cleanup_cfg | TODO_dump_func
| TODO_verify_ssa), /* todo_flags_finish */ | TODO_verify_ssa, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
...@@ -411,7 +411,6 @@ tree_ssa_loop_done (void) ...@@ -411,7 +411,6 @@ tree_ssa_loop_done (void)
loop_optimizer_finalize (current_loops, loop_optimizer_finalize (current_loops,
(dump_flags & TDF_DETAILS ? dump_file : NULL)); (dump_flags & TDF_DETAILS ? dump_file : NULL));
current_loops = NULL; current_loops = NULL;
cleanup_tree_cfg ();
} }
struct tree_opt_pass pass_loop_done = struct tree_opt_pass pass_loop_done =
...@@ -427,7 +426,7 @@ struct tree_opt_pass pass_loop_done = ...@@ -427,7 +426,7 @@ struct tree_opt_pass pass_loop_done =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_dump_func, /* todo_flags_finish */ TODO_cleanup_cfg | TODO_dump_func, /* todo_flags_finish */
0 /* letter */ 0 /* letter */
}; };
...@@ -137,11 +137,6 @@ tree_ssa_phiopt (void) ...@@ -137,11 +137,6 @@ tree_ssa_phiopt (void)
} }
} }
} }
/* If we removed any PHIs, then we have unreachable blocks and blocks
which need to be merged in the CFG. */
if (removed_phis)
cleanup_tree_cfg ();
} }
/* Return TRUE if block BB has no executable statements, otherwise return /* Return TRUE if block BB has no executable statements, otherwise return
...@@ -668,7 +663,7 @@ struct tree_opt_pass pass_phiopt = ...@@ -668,7 +663,7 @@ struct tree_opt_pass pass_phiopt =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_dump_func | TODO_ggc_collect /* todo_flags_finish */ TODO_cleanup_cfg | TODO_dump_func | TODO_ggc_collect /* todo_flags_finish */
| TODO_verify_ssa | TODO_rename_vars | TODO_verify_ssa | TODO_rename_vars
| TODO_verify_flow, | TODO_verify_flow,
0 /* letter */ 0 /* letter */
......
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