Commit c7dd803e by Eric Botcazou

re PR tree-optimization/46494 (ICE: verify_flow_info failed when casting-out…

re PR tree-optimization/46494 (ICE: verify_flow_info failed when casting-out attribute noreturn with -fno-tree-ccp -fno-tree-fre -ftree-vrp)

	PR tree-optimization/46494
	* loop-unroll.c (split_edge_and_insert): Adjust comment.
	* loop-init.c (loop_optimizer_finalize): Do not call verify_flow_info.
	(pass_rtl_loop_done): Add TODO_verify_flow.
	* fwprop.c (pass_rtl_fwprop): Likewise.
	* modulo-sched.c (pass_sms): Likewise.
	* tree-ssa-dom.c (pass_dominator): Likewise.
	* tree-ssa-loop-ch.c (pass_ch): Likewise.
	* tree-ssa-loop.c (pass_complete_unrolli): Likewise.
	(pass_tree_loop_done): Likewise.
	* tree-ssa-pre.c (execute_pre): Likewise.
	* tree-ssa-reassoc.c (pass_reassoc): Likewise.
	* tree-ssa-sink.c (pass_sink_code): Likewise.
	* tree-vrp.c (pass_vrp): Likewise.

From-SVN: r170141
parent c6150df6
2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
PR tree-optimization/46494
* loop-unroll.c (split_edge_and_insert): Adjust comment.
* loop-init.c (loop_optimizer_finalize): Do not call verify_flow_info.
(pass_rtl_loop_done): Add TODO_verify_flow.
* fwprop.c (pass_rtl_fwprop): Likewise.
* modulo-sched.c (pass_sms): Likewise.
* tree-ssa-dom.c (pass_dominator): Likewise.
* tree-ssa-loop-ch.c (pass_ch): Likewise.
* tree-ssa-loop.c (pass_complete_unrolli): Likewise.
(pass_tree_loop_done): Likewise.
* tree-ssa-pre.c (execute_pre): Likewise.
* tree-ssa-reassoc.c (pass_reassoc): Likewise.
* tree-ssa-sink.c (pass_sink_code): Likewise.
* tree-vrp.c (pass_vrp): Likewise.
2011-02-14 Nathan Froyd <froydnj@codesourcery.com> 2011-02-14 Nathan Froyd <froydnj@codesourcery.com>
* config/v850/constraints.md: New file. * config/v850/constraints.md: New file.
* config/v850/v850.md: Include it. * config/v850/v850.md: Include it.
* config/v850/predicates.md (reg_or_0_operand): Use * config/v850/predicates.md (reg_or_0_operand): Use
satisfies_constraint_G. satisfies_constraint_G.
(special_symbolref_operand): Use satisfies_constraint_K. (special_symbolref_operand): Use satisfies_constraint_K.
* config/v850/v850.h (CONSTANT_ADDRESS_P): Use constraint_satisfied_p. * config/v850/v850.h (CONSTANT_ADDRESS_P): Use constraint_satisfied_p.
(GO_IF_LEGITIMATE_ADDRESS): Likewise. (GO_IF_LEGITIMATE_ADDRESS): Likewise.
(REG_CLASS_FROM_LETTER, INT_7_BITS, INT_8_BITS): Delete. (REG_CLASS_FROM_LETTER, INT_7_BITS, INT_8_BITS): Delete.
(CONST_OK_FOR_P, CONST_OK_FOR_LETTER_P): Delete. (CONST_OK_FOR_P, CONST_OK_FOR_LETTER_P): Delete.
(EXTRA_CONSTRAINT): Delete. (EXTRA_CONSTRAINT): Delete.
(CONST_OK_FOR_I, CONST_OK_FOR_J): Use insn_const_int_ok_for_constraint. (CONST_OK_FOR_I, CONST_OK_FOR_J): Use insn_const_int_ok_for_constraint.
(CONST_OK_FOR_K, CONST_OK_FOR_L, CONST_OK_FOR_M): Likewise. (CONST_OK_FOR_K, CONST_OK_FOR_L, CONST_OK_FOR_M): Likewise.
(CONST_OK_FOR_N, CONST_OK_FOR_O): Likewise. (CONST_OK_FOR_N, CONST_OK_FOR_O): Likewise.
2011-02-14 Anatoly Sokolov <aesok@post.ru> 2011-02-14 Anatoly Sokolov <aesok@post.ru>
......
...@@ -1471,8 +1471,10 @@ struct rtl_opt_pass pass_rtl_fwprop = ...@@ -1471,8 +1471,10 @@ struct rtl_opt_pass pass_rtl_fwprop =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_df_finish | TODO_verify_rtl_sharing | TODO_df_finish
TODO_dump_func /* todo_flags_finish */ | TODO_verify_flow
| TODO_verify_rtl_sharing
| TODO_dump_func /* todo_flags_finish */
} }
}; };
......
...@@ -123,14 +123,6 @@ loop_optimizer_finalize (void) ...@@ -123,14 +123,6 @@ loop_optimizer_finalize (void)
{ {
bb->loop_father = NULL; bb->loop_father = NULL;
} }
/* Checking. */
#ifdef ENABLE_CHECKING
/* FIXME: no point to verify flow info after bundling on ia64. Use this
hack for achieving this. */
if (!reload_completed)
verify_flow_info ();
#endif
} }
...@@ -235,7 +227,9 @@ struct rtl_opt_pass pass_rtl_loop_done = ...@@ -235,7 +227,9 @@ struct rtl_opt_pass pass_rtl_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_verify_rtl_sharing /* todo_flags_finish */ TODO_verify_flow
| TODO_verify_rtl_sharing
| TODO_dump_func /* todo_flags_finish */
} }
}; };
......
...@@ -900,7 +900,7 @@ split_edge_and_insert (edge e, rtx insns) ...@@ -900,7 +900,7 @@ split_edge_and_insert (edge e, rtx insns)
CFG. For this purpose we used to set the BB_SUPERBLOCK flag on BB CFG. For this purpose we used to set the BB_SUPERBLOCK flag on BB
and call break_superblocks when going out of cfglayout mode. But it and call break_superblocks when going out of cfglayout mode. But it
turns out that this never happens; and that if it does ever happen, turns out that this never happens; and that if it does ever happen,
the verify_flow_info call in loop_optimizer_finalize would fail. the TODO_verify_flow at the end of the RTL loop passes would fail.
There are two reasons why we expected we could have control flow insns There are two reasons why we expected we could have control flow insns
in INSNS. The first is when a comparison has to be done in parts, and in INSNS. The first is when a comparison has to be done in parts, and
......
...@@ -2897,9 +2897,11 @@ struct rtl_opt_pass pass_sms = ...@@ -2897,9 +2897,11 @@ struct rtl_opt_pass pass_sms =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
TODO_dump_func, /* todo_flags_start */ TODO_dump_func, /* todo_flags_start */
TODO_df_finish | TODO_verify_rtl_sharing | TODO_df_finish
TODO_dump_func | | TODO_verify_flow
TODO_ggc_collect /* todo_flags_finish */ | TODO_verify_rtl_sharing
| TODO_dump_func
| TODO_ggc_collect /* todo_flags_finish */
} }
}; };
2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
* gcc.dg/pr46494.c: New test.
2011-02-14 Richard Guenther <rguenther@suse.de> 2011-02-14 Richard Guenther <rguenther@suse.de>
* gcc.dg/attr-weak-hidden-1.c: Make definition of foo strong. * gcc.dg/attr-weak-hidden-1.c: Make definition of foo strong.
......
/* { dg-do compile }
/* { dg-options "-O -fno-tree-ccp -fno-tree-fre -ftree-vrp" } */
extern void foo (void) __attribute__((noreturn));
void g (void)
{
void (*f) (void) = foo;
f ();
}
...@@ -799,10 +799,11 @@ struct gimple_opt_pass pass_dominator = ...@@ -799,10 +799,11 @@ struct gimple_opt_pass pass_dominator =
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_update_ssa | TODO_update_ssa
| TODO_cleanup_cfg | TODO_verify_ssa
| TODO_verify_ssa /* todo_flags_finish */ | TODO_verify_flow
| TODO_dump_func /* todo_flags_finish */
} }
}; };
......
...@@ -276,7 +276,9 @@ struct gimple_opt_pass pass_ch = ...@@ -276,7 +276,9 @@ struct gimple_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_cleanup_cfg | TODO_dump_func TODO_cleanup_cfg
| TODO_verify_ssa /* todo_flags_finish */ | TODO_verify_ssa
| TODO_verify_flow
| TODO_dump_func /* todo_flags_finish */
} }
}; };
...@@ -528,7 +528,8 @@ struct gimple_opt_pass pass_complete_unrolli = ...@@ -528,7 +528,8 @@ struct gimple_opt_pass pass_complete_unrolli =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_dump_func TODO_verify_flow
| TODO_dump_func
| TODO_ggc_collect /* todo_flags_finish */ | TODO_ggc_collect /* todo_flags_finish */
} }
}; };
...@@ -670,6 +671,8 @@ struct gimple_opt_pass pass_tree_loop_done = ...@@ -670,6 +671,8 @@ struct gimple_opt_pass pass_tree_loop_done =
0, /* properties_provided */ 0, /* properties_provided */
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_cleanup_cfg | TODO_dump_func /* todo_flags_finish */ TODO_cleanup_cfg
| TODO_verify_flow
| TODO_dump_func /* todo_flags_finish */
} }
}; };
...@@ -4909,7 +4909,10 @@ execute_pre (bool do_fre) ...@@ -4909,7 +4909,10 @@ execute_pre (bool do_fre)
clear_expression_ids (); clear_expression_ids ();
free_scc_vn (); free_scc_vn ();
if (!do_fre) if (!do_fre)
remove_dead_inserted_code (); {
remove_dead_inserted_code ();
todo |= TODO_verify_flow;
}
scev_finalize (); scev_finalize ();
fini_pre (do_fre); fini_pre (do_fre);
......
...@@ -2282,7 +2282,10 @@ struct gimple_opt_pass pass_reassoc = ...@@ -2282,7 +2282,10 @@ struct gimple_opt_pass pass_reassoc =
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_verify_ssa /* todo_flags_finish */ TODO_verify_ssa
| TODO_verify_flow
| TODO_dump_func
| TODO_ggc_collect /* todo_flags_finish */
} }
}; };
...@@ -604,8 +604,9 @@ struct gimple_opt_pass pass_sink_code = ...@@ -604,8 +604,9 @@ struct gimple_opt_pass pass_sink_code =
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_update_ssa TODO_update_ssa
| TODO_verify_ssa
| TODO_verify_flow
| TODO_dump_func | TODO_dump_func
| TODO_ggc_collect | TODO_ggc_collect /* todo_flags_finish */
| TODO_verify_ssa /* todo_flags_finish */
} }
}; };
...@@ -7766,9 +7766,10 @@ struct gimple_opt_pass pass_vrp = ...@@ -7766,9 +7766,10 @@ struct gimple_opt_pass pass_vrp =
0, /* properties_destroyed */ 0, /* properties_destroyed */
0, /* todo_flags_start */ 0, /* todo_flags_start */
TODO_cleanup_cfg TODO_cleanup_cfg
| TODO_ggc_collect | TODO_update_ssa
| TODO_verify_ssa | TODO_verify_ssa
| TODO_verify_flow
| TODO_dump_func | TODO_dump_func
| TODO_update_ssa /* todo_flags_finish */ | TODO_ggc_collect /* todo_flags_finish */
} }
}; };
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