diff options
author | Richard Biener <rguenther@suse.de> | 2014-04-30 08:06:49 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-04-30 08:06:49 +0000 |
commit | e9ff9caf265a47e747c12de69bcf5bd6db32843e (patch) | |
tree | 89764a65392e04dc94709cea493bd321464376f5 /gcc | |
parent | f8ed5150c3a1f821fb0cf266fc0fca76027fbef9 (diff) | |
download | gcc-e9ff9caf265a47e747c12de69bcf5bd6db32843e.zip gcc-e9ff9caf265a47e747c12de69bcf5bd6db32843e.tar.gz gcc-e9ff9caf265a47e747c12de69bcf5bd6db32843e.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/graphite-scop-detection.c | 2 | ||||
-rw-r--r-- | gcc/passes.c | 30 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 15 | ||||
-rw-r--r-- | gcc/tree-cfg.h | 2 | ||||
-rw-r--r-- | gcc/tree-eh.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-manip.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 4 | ||||
-rw-r--r-- | gcc/tree-ssa.h | 2 |
9 files changed, 48 insertions, 26 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1bec6e1..5b771ea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 635e21a..5d1c96e 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -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 } diff --git a/gcc/passes.c b/gcc/passes.c index 7559a3b..dbff587 100644 --- a/gcc/passes.c +++ b/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); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index a5f09ea..1918679 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -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; diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h index a115df5..751d0a2 100644 --- a/gcc/tree-cfg.h +++ b/gcc/tree-cfg.h @@ -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); diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index 960c04a..7b65319 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -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 diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c index 9dcbc53..6de2e4e 100644 --- a/gcc/tree-ssa-loop-manip.c +++ b/gcc/tree-ssa-loop-manip.c @@ -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); diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 1ea639d..8101ac7 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -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; diff --git a/gcc/tree-ssa.h b/gcc/tree-ssa.h index 1b1a986..c866206 100644 --- a/gcc/tree-ssa.h +++ b/gcc/tree-ssa.h @@ -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); |