passes.c (execute_function_todo): Move TODO_verify_stmts and TODO_verify_ssa under the TODO_verify_il umbrella.
2014-04-30 Richard Biener <rguenther@suse.de> * passes.c (execute_function_todo): Move TODO_verify_stmts and TODO_verify_ssa under the TODO_verify_il umbrella. * tree-ssa.h (verify_ssa): Adjust prototype. * tree-ssa.c (verify_ssa): Add parameter to tell whether we should verify SSA operands. * tree-cfg.h (verify_gimple_in_cfg): Adjust prototype. * tree-cfg.c (verify_gimple_in_cfg): Add parameter to tell whether we should verify whether not throwing stmts have EH info. * graphite-scop-detection.c (create_sese_edges): Adjust. * tree-ssa-loop-manip.c (verify_loop_closed_ssa): Likewise. * tree-eh.c (lower_try_finally_switch): Do not add the default case label twice. From-SVN: r209928
This commit is contained in:
parent
f8ed5150c3
commit
e9ff9caf26
|
@ -1,3 +1,18 @@
|
|||
2014-04-30 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* passes.c (execute_function_todo): Move TODO_verify_stmts
|
||||
and TODO_verify_ssa under the TODO_verify_il umbrella.
|
||||
* tree-ssa.h (verify_ssa): Adjust prototype.
|
||||
* tree-ssa.c (verify_ssa): Add parameter to tell whether
|
||||
we should verify SSA operands.
|
||||
* tree-cfg.h (verify_gimple_in_cfg): Adjust prototype.
|
||||
* tree-cfg.c (verify_gimple_in_cfg): Add parameter to tell
|
||||
whether we should verify whether not throwing stmts have EH info.
|
||||
* graphite-scop-detection.c (create_sese_edges): Adjust.
|
||||
* tree-ssa-loop-manip.c (verify_loop_closed_ssa): Likewise.
|
||||
* tree-eh.c (lower_try_finally_switch): Do not add the
|
||||
default case label twice.
|
||||
|
||||
2014-04-30 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
* gcc.c (sanitize_spec_function): Handle SANITIZE_FLOAT_DIVIDE.
|
||||
|
|
|
@ -1056,7 +1056,7 @@ create_sese_edges (vec<sd_region> regions)
|
|||
|
||||
#ifdef ENABLE_CHECKING
|
||||
verify_loop_structure ();
|
||||
verify_ssa (false);
|
||||
verify_ssa (false, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
30
gcc/passes.c
30
gcc/passes.c
|
@ -1716,6 +1716,7 @@ pass_manager::dump_profile_report () const
|
|||
static void
|
||||
execute_function_todo (function *fn, void *data)
|
||||
{
|
||||
bool from_ipa_pass = (cfun == NULL);
|
||||
unsigned int flags = (size_t)data;
|
||||
flags &= ~fn->last_verified;
|
||||
if (!flags)
|
||||
|
@ -1767,26 +1768,29 @@ execute_function_todo (function *fn, void *data)
|
|||
dom_state pre_verify_state = dom_info_state (fn, CDI_DOMINATORS);
|
||||
dom_state pre_verify_pstate = dom_info_state (fn, CDI_POST_DOMINATORS);
|
||||
|
||||
if (flags & TODO_verify_ssa)
|
||||
if (flags & TODO_verify_il)
|
||||
{
|
||||
verify_gimple_in_cfg (cfun);
|
||||
verify_ssa (true);
|
||||
if (cfun->curr_properties & PROP_trees)
|
||||
{
|
||||
if (cfun->curr_properties & PROP_cfg)
|
||||
/* IPA passes leave stmts to be fixed up, so make sure to
|
||||
not verify stmts really throw. */
|
||||
verify_gimple_in_cfg (cfun, !from_ipa_pass);
|
||||
else
|
||||
verify_gimple_in_seq (gimple_body (cfun->decl));
|
||||
}
|
||||
if (cfun->curr_properties & PROP_ssa)
|
||||
/* IPA passes leave stmts to be fixed up, so make sure to
|
||||
not verify SSA operands whose verifier will choke on that. */
|
||||
verify_ssa (true, !from_ipa_pass);
|
||||
}
|
||||
else if (flags & TODO_verify_stmts)
|
||||
verify_gimple_in_cfg (cfun);
|
||||
if (flags & TODO_verify_flow)
|
||||
verify_flow_info ();
|
||||
if (flags & TODO_verify_il)
|
||||
{
|
||||
if (current_loops
|
||||
&& loops_state_satisfies_p (LOOP_CLOSED_SSA))
|
||||
{
|
||||
if (!(flags & (TODO_verify_stmts|TODO_verify_ssa)))
|
||||
verify_gimple_in_cfg (cfun);
|
||||
if (!(flags & TODO_verify_ssa))
|
||||
verify_ssa (true);
|
||||
verify_loop_closed_ssa (false);
|
||||
}
|
||||
verify_loop_closed_ssa (false);
|
||||
}
|
||||
if (flags & TODO_verify_rtl_sharing)
|
||||
verify_rtl_sharing ();
|
||||
|
@ -1803,7 +1807,7 @@ execute_function_todo (function *fn, void *data)
|
|||
|
||||
/* For IPA passes make sure to release dominator info, it can be
|
||||
computed by non-verifying TODOs. */
|
||||
if (!cfun)
|
||||
if (from_ipa_pass)
|
||||
{
|
||||
free_dominance_info (fn, CDI_DOMINATORS);
|
||||
free_dominance_info (fn, CDI_POST_DOMINATORS);
|
||||
|
|
|
@ -4785,7 +4785,7 @@ collect_subblocks (pointer_set_t *blocks, tree block)
|
|||
/* Verify the GIMPLE statements in the CFG of FN. */
|
||||
|
||||
DEBUG_FUNCTION void
|
||||
verify_gimple_in_cfg (struct function *fn)
|
||||
verify_gimple_in_cfg (struct function *fn, bool verify_nothrow)
|
||||
{
|
||||
basic_block bb;
|
||||
bool err = false;
|
||||
|
@ -4921,16 +4921,17 @@ verify_gimple_in_cfg (struct function *fn)
|
|||
that they cannot throw, that we update other data structures
|
||||
to match. */
|
||||
lp_nr = lookup_stmt_eh_lp (stmt);
|
||||
if (lp_nr != 0)
|
||||
if (lp_nr > 0)
|
||||
{
|
||||
if (!stmt_could_throw_p (stmt))
|
||||
{
|
||||
error ("statement marked for throw, but doesn%'t");
|
||||
err2 |= true;
|
||||
if (verify_nothrow)
|
||||
{
|
||||
error ("statement marked for throw, but doesn%'t");
|
||||
err2 |= true;
|
||||
}
|
||||
}
|
||||
else if (lp_nr > 0
|
||||
&& !gsi_one_before_end_p (gsi)
|
||||
&& stmt_can_throw_internal (stmt))
|
||||
else if (!gsi_one_before_end_p (gsi))
|
||||
{
|
||||
error ("statement marked for throw in middle of block");
|
||||
err2 |= true;
|
||||
|
|
|
@ -58,7 +58,7 @@ extern gimple first_stmt (basic_block);
|
|||
extern gimple last_stmt (basic_block);
|
||||
extern gimple last_and_only_stmt (basic_block);
|
||||
extern void verify_gimple_in_seq (gimple_seq);
|
||||
extern void verify_gimple_in_cfg (struct function *);
|
||||
extern void verify_gimple_in_cfg (struct function *, bool);
|
||||
extern tree gimple_block_label (basic_block);
|
||||
extern void add_phi_args_after_copy_bb (basic_block);
|
||||
extern void add_phi_args_after_copy (basic_block *, unsigned, edge);
|
||||
|
|
|
@ -1550,6 +1550,8 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
|
|||
/* Make sure that the last case is the default label, as one is required.
|
||||
Then sort the labels, which is also required in GIMPLE. */
|
||||
CASE_LOW (last_case) = NULL;
|
||||
tree tem = case_label_vec.pop ();
|
||||
gcc_assert (tem == last_case);
|
||||
sort_case_labels (case_label_vec);
|
||||
|
||||
/* Build the switch statement, setting last_case to be the default
|
||||
|
|
|
@ -598,7 +598,7 @@ verify_loop_closed_ssa (bool verify_ssa_p)
|
|||
return;
|
||||
|
||||
if (verify_ssa_p)
|
||||
verify_ssa (false);
|
||||
verify_ssa (false, true);
|
||||
|
||||
timevar_push (TV_VERIFY_LOOP_CLOSED);
|
||||
|
||||
|
|
|
@ -959,7 +959,7 @@ error:
|
|||
TODO: verify the variable annotations. */
|
||||
|
||||
DEBUG_FUNCTION void
|
||||
verify_ssa (bool check_modified_stmt)
|
||||
verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
|
||||
{
|
||||
size_t i;
|
||||
basic_block bb;
|
||||
|
@ -1042,7 +1042,7 @@ verify_ssa (bool check_modified_stmt)
|
|||
goto err;
|
||||
}
|
||||
|
||||
if (verify_ssa_operands (cfun, stmt))
|
||||
if (check_ssa_operands && verify_ssa_operands (cfun, stmt))
|
||||
{
|
||||
print_gimple_stmt (stderr, stmt, 0, TDF_VOPS);
|
||||
goto err;
|
||||
|
|
|
@ -45,7 +45,7 @@ extern void insert_debug_temp_for_var_def (gimple_stmt_iterator *, tree);
|
|||
extern void insert_debug_temps_for_defs (gimple_stmt_iterator *);
|
||||
extern void reset_debug_uses (gimple);
|
||||
extern void release_defs_bitset (bitmap toremove);
|
||||
extern void verify_ssa (bool);
|
||||
extern void verify_ssa (bool, bool);
|
||||
extern void init_tree_ssa (struct function *);
|
||||
extern void delete_tree_ssa (void);
|
||||
extern bool tree_ssa_useless_type_conversion (tree);
|
||||
|
|
Loading…
Reference in New Issue