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
This commit is contained in:
parent
c6150df67f
commit
c7dd803e61
@ -1,18 +1,35 @@
|
||||
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>
|
||||
|
||||
* 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 <aesok@post.ru>
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2011-02-14 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc.dg/pr46494.c: New test.
|
||||
|
||||
2011-02-14 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* gcc.dg/attr-weak-hidden-1.c: Make definition of foo strong.
|
||||
|
9
gcc/testsuite/gcc.dg/pr46494.c
Normal file
9
gcc/testsuite/gcc.dg/pr46494.c
Normal file
@ -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 ();
|
||||
}
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
@ -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 */
|
||||
}
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user