This commit is contained in:
Jakub Jelinek 2008-10-09 11:05:47 +00:00
parent a3328a1d29
commit 5565b20a6b
3 changed files with 119 additions and 1 deletions

105
gcc43-pr29609-2.patch Normal file
View File

@ -0,0 +1,105 @@
2008-10-09 Jakub Jelinek <jakub@redhat.com>
* tree-ssa-live.c (remove_unused_locals): Mark all edge's goto_block
as used.
* gimple-low.c (lower_return_expr, lower_builtin_setjmp): Set
TREE_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.
--- gcc/tree-ssa-live.c.jj 2008-10-07 21:25:57.000000000 +0200
+++ gcc/tree-ssa-live.c 2008-10-09 00:25:20.000000000 +0200
@@ -591,6 +591,8 @@ remove_unused_locals (void)
{
block_stmt_iterator bsi;
tree phi, def;
+ edge_iterator ei;
+ edge e;
/* Walk the statements. */
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
@@ -614,6 +616,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 unexpanded_var_list. */
--- gcc/gimple-low.c.jj 2008-10-07 21:25:58.000000000 +0200
+++ gcc/gimple-low.c 2008-10-09 00:42:31.000000000 +0200
@@ -590,6 +590,7 @@ lower_return_expr (tree_stmt_iterator *t
found:
t = build1 (GOTO_EXPR, void_type_node, label);
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
tsi_link_before (tsi, t, TSI_SAME_STMT);
tsi_delink (tsi);
}
@@ -672,6 +673,7 @@ lower_builtin_setjmp (tree_stmt_iterator
t = implicit_built_in_decls[BUILT_IN_SETJMP_SETUP];
t = build_call_expr (t, 2, CALL_EXPR_ARG (stmt, 0), arg);
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
tsi_link_before (tsi, t, TSI_SAME_STMT);
/* Build 'DEST = 0' and insert. */
@@ -680,6 +682,7 @@ lower_builtin_setjmp (tree_stmt_iterator
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
integer_zero_node));
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
tsi_link_before (tsi, t, TSI_SAME_STMT);
}
@@ -696,6 +699,7 @@ lower_builtin_setjmp (tree_stmt_iterator
t = implicit_built_in_decls[BUILT_IN_SETJMP_RECEIVER];
t = build_call_expr (t, 1, arg);
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
tsi_link_before (tsi, t, TSI_SAME_STMT);
/* Build 'DEST = 1' and insert. */
@@ -704,6 +708,7 @@ lower_builtin_setjmp (tree_stmt_iterator
t = build_gimple_modify_stmt (dest, fold_convert (TREE_TYPE (dest),
integer_one_node));
SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt));
+ TREE_BLOCK (t) = TREE_BLOCK (stmt);
tsi_link_before (tsi, t, TSI_SAME_STMT);
}
--- gcc/tree-cfg.c.jj 2008-10-07 21:39:14.000000000 +0200
+++ gcc/tree-cfg.c 2008-10-09 00:00:48.000000000 +0200
@@ -634,7 +634,8 @@ make_cond_expr_edges (basic_block bb)
#else
e->goto_locus = EXPR_LOCUS (COND_EXPR_THEN (entry));
#endif
- e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
+ if (e->goto_locus)
+ e->goto_block = TREE_BLOCK (COND_EXPR_THEN (entry));
e = make_edge (bb, else_bb, EDGE_FALSE_VALUE);
if (e)
{
@@ -643,7 +644,8 @@ make_cond_expr_edges (basic_block bb)
#else
e->goto_locus = EXPR_LOCUS (COND_EXPR_ELSE (entry));
#endif
- e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
+ if (e->goto_locus)
+ e->goto_block = TREE_BLOCK (COND_EXPR_ELSE (entry));
}
/* We do not need the gotos anymore. */
@@ -843,7 +845,8 @@ make_goto_expr_edges (basic_block bb)
#else
e->goto_locus = EXPR_LOCUS (goto_t);
#endif
- e->goto_block = TREE_BLOCK (goto_t);
+ if (e->goto_locus)
+ e->goto_block = TREE_BLOCK (goto_t);
bsi_remove (&last, true);
return;
}

View File

@ -1,3 +1,16 @@
2008-10-09 Jakub Jelinek <jakub@redhat.com>
* rtl.h (locator_eq): New decl.
* cfglayout.c (locator_scope): New function.
(insn_scope): Use it.
(locator_eq): New function.
(fixup_reorder_chain): Search for last insn in src bb
that has locator set or first insn in dest bb. Use
locator_eq instead of == to compare locators.
* cfgrtl.c (cfg_layout_merge_blocks): Likewise.
* cfgcleanup.c (try_forward_edges): Use locator_eq instead of
== to compare locators.
--- gcc/cfglayout.c.jj 2008-10-07 21:35:33.000000000 +0200
+++ gcc/cfglayout.c 2008-10-09 11:18:51.000000000 +0200
@@ -448,13 +448,12 @@ change_scope (rtx orig_insn, tree s1, tr

View File

@ -471,7 +471,7 @@ which are required to run programs compiled with the GNAT.
%patch24 -p0 -b .pr29609~
%patch25 -p0 -b .aes~
%patch26 -p0 -b .pr29609-2~
%patch26 -p0 -b .pr29609-3~
%patch27 -p0 -b .pr29609-3~
tar xzf %{SOURCE4}