From c7dd803e61952604df6992be3c5b68cb1abfd983 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 14 Feb 2011 17:59:10 +0000 Subject: 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 --- gcc/ChangeLog | 43 +++++++++++++++++++++++++++++------------- gcc/fwprop.c | 6 ++++-- gcc/loop-init.c | 12 +++--------- gcc/loop-unroll.c | 2 +- gcc/modulo-sched.c | 8 +++++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/pr46494.c | 9 +++++++++ gcc/tree-ssa-dom.c | 7 ++++--- gcc/tree-ssa-loop-ch.c | 6 ++++-- gcc/tree-ssa-loop.c | 7 +++++-- gcc/tree-ssa-pre.c | 5 ++++- gcc/tree-ssa-reassoc.c | 5 ++++- gcc/tree-ssa-sink.c | 5 +++-- gcc/tree-vrp.c | 5 +++-- 14 files changed, 83 insertions(+), 41 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr46494.c (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 76d3339..c9b7f35 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,18 +1,35 @@ +2011-02-14 Eric Botcazou + + 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 - * config/v850/constraints.md: New file. - * config/v850/v850.md: Include it. - * config/v850/predicates.md (reg_or_0_operand): Use - satisfies_constraint_G. - (special_symbolref_operand): Use satisfies_constraint_K. - * config/v850/v850.h (CONSTANT_ADDRESS_P): Use constraint_satisfied_p. - (GO_IF_LEGITIMATE_ADDRESS): Likewise. - (REG_CLASS_FROM_LETTER, INT_7_BITS, INT_8_BITS): Delete. - (CONST_OK_FOR_P, CONST_OK_FOR_LETTER_P): Delete. - (EXTRA_CONSTRAINT): Delete. - (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_N, CONST_OK_FOR_O): Likewise. + * config/v850/constraints.md: New file. + * config/v850/v850.md: Include it. + * config/v850/predicates.md (reg_or_0_operand): Use + satisfies_constraint_G. + (special_symbolref_operand): Use satisfies_constraint_K. + * config/v850/v850.h (CONSTANT_ADDRESS_P): Use constraint_satisfied_p. + (GO_IF_LEGITIMATE_ADDRESS): Likewise. + (REG_CLASS_FROM_LETTER, INT_7_BITS, INT_8_BITS): Delete. + (CONST_OK_FOR_P, CONST_OK_FOR_LETTER_P): Delete. + (EXTRA_CONSTRAINT): Delete. + (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_N, CONST_OK_FOR_O): Likewise. 2011-02-14 Anatoly Sokolov diff --git a/gcc/fwprop.c b/gcc/fwprop.c index 704e143..b2fd955 100644 --- a/gcc/fwprop.c +++ b/gcc/fwprop.c @@ -1471,8 +1471,10 @@ struct rtl_opt_pass pass_rtl_fwprop = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_df_finish | TODO_verify_rtl_sharing | - TODO_dump_func /* todo_flags_finish */ + TODO_df_finish + | TODO_verify_flow + | TODO_verify_rtl_sharing + | TODO_dump_func /* todo_flags_finish */ } }; diff --git a/gcc/loop-init.c b/gcc/loop-init.c index ce388b6..bd4af30 100644 --- a/gcc/loop-init.c +++ b/gcc/loop-init.c @@ -123,14 +123,6 @@ loop_optimizer_finalize (void) { 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 = 0, /* properties_provided */ 0, /* properties_destroyed */ 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 */ } }; diff --git a/gcc/loop-unroll.c b/gcc/loop-unroll.c index 67d6ea0..6deff41 100644 --- a/gcc/loop-unroll.c +++ b/gcc/loop-unroll.c @@ -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 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, - 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 in INSNS. The first is when a comparison has to be done in parts, and diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 9179de5..2ae267c 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -2897,9 +2897,11 @@ struct rtl_opt_pass pass_sms = 0, /* properties_provided */ 0, /* properties_destroyed */ TODO_dump_func, /* todo_flags_start */ - TODO_df_finish | TODO_verify_rtl_sharing | - TODO_dump_func | - TODO_ggc_collect /* todo_flags_finish */ + TODO_df_finish + | TODO_verify_flow + | TODO_verify_rtl_sharing + | TODO_dump_func + | TODO_ggc_collect /* todo_flags_finish */ } }; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index be7c57e..823ca7d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-02-14 Eric Botcazou + + * gcc.dg/pr46494.c: New test. + 2011-02-14 Richard Guenther * gcc.dg/attr-weak-hidden-1.c: Make definition of foo strong. diff --git a/gcc/testsuite/gcc.dg/pr46494.c b/gcc/testsuite/gcc.dg/pr46494.c new file mode 100644 index 0000000..29f9685 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46494.c @@ -0,0 +1,9 @@ +/* { 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 (); +} diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index bab6ced..fc87c46 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -799,10 +799,11 @@ struct gimple_opt_pass pass_dominator = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_dump_func + TODO_cleanup_cfg | TODO_update_ssa - | TODO_cleanup_cfg - | TODO_verify_ssa /* todo_flags_finish */ + | TODO_verify_ssa + | TODO_verify_flow + | TODO_dump_func /* todo_flags_finish */ } }; diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c index 85c6de8..c58cb5f 100644 --- a/gcc/tree-ssa-loop-ch.c +++ b/gcc/tree-ssa-loop-ch.c @@ -276,7 +276,9 @@ struct gimple_opt_pass pass_ch = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_cleanup_cfg | TODO_dump_func - | TODO_verify_ssa /* todo_flags_finish */ + TODO_cleanup_cfg + | TODO_verify_ssa + | TODO_verify_flow + | TODO_dump_func /* todo_flags_finish */ } }; diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c index 43693ea..a1edb51 100644 --- a/gcc/tree-ssa-loop.c +++ b/gcc/tree-ssa-loop.c @@ -528,7 +528,8 @@ struct gimple_opt_pass pass_complete_unrolli = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_dump_func + TODO_verify_flow + | TODO_dump_func | TODO_ggc_collect /* todo_flags_finish */ } }; @@ -670,6 +671,8 @@ struct gimple_opt_pass pass_tree_loop_done = 0, /* properties_provided */ 0, /* properties_destroyed */ 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 */ } }; diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 00ff8cc..3056723 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4909,7 +4909,10 @@ execute_pre (bool do_fre) clear_expression_ids (); free_scc_vn (); if (!do_fre) - remove_dead_inserted_code (); + { + remove_dead_inserted_code (); + todo |= TODO_verify_flow; + } scev_finalize (); fini_pre (do_fre); diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 197591e..904fef8 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -2282,7 +2282,10 @@ struct gimple_opt_pass pass_reassoc = 0, /* properties_provided */ 0, /* properties_destroyed */ 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 */ } }; diff --git a/gcc/tree-ssa-sink.c b/gcc/tree-ssa-sink.c index bfa1a31..962c295 100644 --- a/gcc/tree-ssa-sink.c +++ b/gcc/tree-ssa-sink.c @@ -604,8 +604,9 @@ struct gimple_opt_pass pass_sink_code = 0, /* properties_destroyed */ 0, /* todo_flags_start */ TODO_update_ssa + | TODO_verify_ssa + | TODO_verify_flow | TODO_dump_func - | TODO_ggc_collect - | TODO_verify_ssa /* todo_flags_finish */ + | TODO_ggc_collect /* todo_flags_finish */ } }; diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 5e891f5..65d249f 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -7766,9 +7766,10 @@ struct gimple_opt_pass pass_vrp = 0, /* properties_destroyed */ 0, /* todo_flags_start */ TODO_cleanup_cfg - | TODO_ggc_collect + | TODO_update_ssa | TODO_verify_ssa + | TODO_verify_flow | TODO_dump_func - | TODO_update_ssa /* todo_flags_finish */ + | TODO_ggc_collect /* todo_flags_finish */ } }; -- cgit v1.1