From 32dedf8f97073ff511964dcb9e0554c19d219d1d Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 9 Oct 2008 08:14:45 +0000 Subject: [PATCH] * tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block as used. * gimple-low.c (lower_function_body, lower_gimple_return, lower_builtin_setjmp): Set gimple_block on the newly created stmts. * tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Only set goto_block on edges if goto_locus is known. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141002 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/gimple-low.c | 6 ++++++ gcc/tree-cfg.c | 9 ++++++--- gcc/tree-ssa-live.c | 6 ++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b034886458..c6053c4cc4e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-10-09 Jakub Jelinek + + * tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block + as used. + * gimple-low.c (lower_function_body, lower_gimple_return, + lower_builtin_setjmp): Set gimple_block on the newly created stmts. + * tree-cfg.c (make_cond_expr_edges, make_goto_expr_edges): Only set + goto_block on edges if goto_locus is known. + 2008-10-08 Jakub Jelinek * graphite.c (gloog): Don't call find_unreachable_blocks diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c index 99f8754473b..197ba352b45 100644 --- a/gcc/gimple-low.c +++ b/gcc/gimple-low.c @@ -133,6 +133,7 @@ lower_function_body (void) { x = gimple_build_return (NULL); gimple_set_location (x, cfun->function_end_locus); + gimple_set_block (x, DECL_INITIAL (current_function_decl)); gsi_insert_after (&i, x, GSI_CONTINUE_LINKING); } @@ -659,6 +660,7 @@ lower_gimple_return (gimple_stmt_iterator *gsi, struct lower_data *data) found: t = gimple_build_goto (tmp_rs.label); gimple_set_location (t, gimple_location (stmt)); + gimple_set_block (t, gimple_block (stmt)); gsi_insert_before (gsi, t, GSI_SAME_STMT); gsi_remove (gsi, false); } @@ -736,6 +738,7 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi) t = implicit_built_in_decls[BUILT_IN_SETJMP_SETUP]; g = gimple_build_call (t, 2, gimple_call_arg (stmt, 0), arg); gimple_set_location (g, gimple_location (stmt)); + gimple_set_block (g, gimple_block (stmt)); gsi_insert_before (gsi, g, GSI_SAME_STMT); /* Build 'DEST = 0' and insert. */ @@ -744,6 +747,7 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi) g = gimple_build_assign (dest, fold_convert (TREE_TYPE (dest), integer_zero_node)); gimple_set_location (g, gimple_location (stmt)); + gimple_set_block (g, gimple_block (stmt)); gsi_insert_before (gsi, g, GSI_SAME_STMT); } @@ -760,6 +764,7 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi) t = implicit_built_in_decls[BUILT_IN_SETJMP_RECEIVER]; g = gimple_build_call (t, 1, arg); gimple_set_location (g, gimple_location (stmt)); + gimple_set_block (g, gimple_block (stmt)); gsi_insert_before (gsi, g, GSI_SAME_STMT); /* Build 'DEST = 1' and insert. */ @@ -768,6 +773,7 @@ lower_builtin_setjmp (gimple_stmt_iterator *gsi) g = gimple_build_assign (dest, fold_convert (TREE_TYPE (dest), integer_one_node)); gimple_set_location (g, gimple_location (stmt)); + gimple_set_block (g, gimple_block (stmt)); gsi_insert_before (gsi, g, GSI_SAME_STMT); } diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 505ee700057..28ee8ef40c4 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -658,12 +658,14 @@ make_cond_expr_edges (basic_block bb) e = make_edge (bb, then_bb, EDGE_TRUE_VALUE); e->goto_locus = gimple_location (then_stmt); - e->goto_block = gimple_block (then_stmt); + if (e->goto_locus) + e->goto_block = gimple_block (then_stmt); e = make_edge (bb, else_bb, EDGE_FALSE_VALUE); if (e) { e->goto_locus = gimple_location (else_stmt); - e->goto_block = gimple_block (else_stmt); + if (e->goto_locus) + e->goto_block = gimple_block (else_stmt); } /* We do not need the labels anymore. */ @@ -853,7 +855,8 @@ make_goto_expr_edges (basic_block bb) tree dest = gimple_goto_dest (goto_t); edge e = make_edge (bb, label_to_block (dest), EDGE_FALLTHRU); e->goto_locus = gimple_location (goto_t); - e->goto_block = gimple_block (goto_t); + if (e->goto_locus) + e->goto_block = gimple_block (goto_t); gsi_remove (&last, true); return; } diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index 859c0c7427d..47315184f9a 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -600,6 +600,8 @@ remove_unused_locals (void) { gimple_stmt_iterator gsi; size_t i; + edge_iterator ei; + edge e; /* Walk the statements. */ for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) @@ -634,6 +636,10 @@ remove_unused_locals (void) mark_all_vars_used (&arg, NULL); } } + + FOR_EACH_EDGE (e, ei, bb->succs) + if (e->goto_locus) + TREE_USED (e->goto_block) = true; } /* Remove unmarked local vars from local_decls. */ -- 2.11.0