summaryrefslogtreecommitdiff
path: root/gcc/tree-optimize.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2007-02-04 14:27:23 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2007-02-04 13:27:23 +0000
commit1084e689538f05f1ccf59403f6358e41fd56c5d6 (patch)
tree61cbec31f848f75cb6f387628ddf79e4de1f3de6 /gcc/tree-optimize.c
parentfacbf9482df37925486b53a299b35d3f4c504c30 (diff)
downloadgcc-1084e689538f05f1ccf59403f6358e41fd56c5d6.tar.gz
tree-optimize.c (has_abnormal_outgoing_edge_p): Move to tree-inline.
* tree-optimize.c (has_abnormal_outgoing_edge_p): Move to tree-inline. (execute_fixup_cfg): Break out the abnormal goto code. * tree-inline.c (has_abnormal_outgoing_edge_p): Move here from tree-optimize.c. (make_nonlocal_label_edges): Move here from execute_fixup_cfg. (optimize_inline_calls): Call make_nonlocal_label_edges. Co-Authored-By: Eric Botcazou <ebotcazou@libertysurf.fr> From-SVN: r121572
Diffstat (limited to 'gcc/tree-optimize.c')
-rw-r--r--gcc/tree-optimize.c67
1 files changed, 2 insertions, 65 deletions
diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c
index 06adb457b41..e122f48e540 100644
--- a/gcc/tree-optimize.c
+++ b/gcc/tree-optimize.c
@@ -267,25 +267,9 @@ struct tree_opt_pass pass_free_cfg_annotations =
0 /* letter */
};
-/* Return true if BB has at least one abnormal outgoing edge. */
-
-static inline bool
-has_abnormal_outgoing_edge_p (basic_block bb)
-{
- edge e;
- edge_iterator ei;
-
- FOR_EACH_EDGE (e, ei, bb->succs)
- if (e->flags & EDGE_ABNORMAL)
- return true;
-
- return false;
-}
-
/* Pass: fixup_cfg. IPA passes, compilation of earlier functions or inlining
- might have changed some properties, such as marked functions nothrow or
- added calls that can potentially go to non-local labels. Remove redundant
- edges and basic blocks, and create new ones if necessary.
+ might have changed some properties, such as marked functions nothrow.
+ Remove redundant edges and basic blocks, and create new ones if necessary.
This pass can't be executed as stand alone pass from pass manager, because
in between inlining and this fixup the verify_flow_info would fail. */
@@ -327,53 +311,6 @@ execute_fixup_cfg (void)
todo |= TODO_cleanup_cfg;
}
- if (current_function_has_nonlocal_label)
- {
- FOR_EACH_BB (bb)
- {
- for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
- {
- tree stmt = bsi_stmt (bsi);
- if (tree_can_make_abnormal_goto (stmt))
- {
- if (stmt == bsi_stmt (bsi_last (bb)))
- {
- if (!has_abnormal_outgoing_edge_p (bb))
- make_abnormal_goto_edges (bb, true);
- }
- else
- {
- edge e = split_block (bb, stmt);
- bb = e->src;
- make_abnormal_goto_edges (bb, true);
- }
- break;
- }
-
- /* Update PHIs on nonlocal goto receivers we (possibly)
- just created new edges into. */
- if (TREE_CODE (stmt) == LABEL_EXPR
- && gimple_in_ssa_p (cfun))
- {
- tree target = LABEL_EXPR_LABEL (stmt);
- if (DECL_NONLOCAL (target))
- {
- tree phi;
-
- for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
- {
- todo |= TODO_update_ssa | TODO_cleanup_cfg;
- gcc_assert (SSA_NAME_OCCURS_IN_ABNORMAL_PHI
- (PHI_RESULT (phi)));
- mark_sym_for_renaming
- (SSA_NAME_VAR (PHI_RESULT (phi)));
- }
- }
- }
- }
- }
- }
-
/* Dump a textual representation of the flowgraph. */
if (dump_file)
dump_tree_cfg (dump_file, dump_flags);