From 5565b20a6bbc49fe30a6474f339d3184113bc075 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 9 Oct 2008 11:05:47 +0000 Subject: [PATCH] 4.3.2-6 --- gcc43-pr29609-2.patch | 105 ++++++++++++++++++++++++++++++++++++++++++ gcc43-pr29609-3.patch | 13 ++++++ gcc43.spec | 2 +- 3 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 gcc43-pr29609-2.patch diff --git a/gcc43-pr29609-2.patch b/gcc43-pr29609-2.patch new file mode 100644 index 0000000..e057605 --- /dev/null +++ b/gcc43-pr29609-2.patch @@ -0,0 +1,105 @@ +2008-10-09 Jakub Jelinek + + * 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; + } diff --git a/gcc43-pr29609-3.patch b/gcc43-pr29609-3.patch index bc2717a..72791cd 100644 --- a/gcc43-pr29609-3.patch +++ b/gcc43-pr29609-3.patch @@ -1,3 +1,16 @@ +2008-10-09 Jakub Jelinek + + * 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 diff --git a/gcc43.spec b/gcc43.spec index 51811c3..07f84d0 100644 --- a/gcc43.spec +++ b/gcc43.spec @@ -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}