diff options
author | Richard Biener <rguenther@suse.de> | 2013-01-14 13:06:47 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-01-14 13:06:47 +0000 |
commit | 2724573f24083c08baff5bc6754421ba43f868ab (patch) | |
tree | 08cce6557bd5a1afa5a7349478aa1958b6201cf3 | |
parent | 9a0bbab603878eacaea82fbcb345c0d0736765be (diff) | |
download | gcc-2724573f24083c08baff5bc6754421ba43f868ab.zip gcc-2724573f24083c08baff5bc6754421ba43f868ab.tar.gz gcc-2724573f24083c08baff5bc6754421ba43f868ab.tar.bz2 |
tree-cfgcleanup.c (remove_forwarder_block): Unshare propagated PHI argument.
2013-01-14 Richard Biener <rguenther@suse.de>
* tree-cfgcleanup.c (remove_forwarder_block): Unshare propagated
PHI argument.
* graphite-sese-to-poly.c (insert_out_of_ssa_copy): Properly
unshare reference.
(insert_out_of_ssa_copy_on_edge): Likewise.
(rewrite_close_phi_out_of_ssa): Likewise.
* tree-ssa.c (insert_debug_temp_for_var_def): Properly unshare
debug expressions.
* tree-ssa-pre.c (insert_into_preds_of_block): Properly unshare
propagated constants.
* tree-cfg.c (tree_node_can_be_shared): Handled component-refs
can not be shared.
From-SVN: r195144
-rw-r--r-- | gcc/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/graphite-sese-to-poly.c | 15 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 7 | ||||
-rw-r--r-- | gcc/tree-cfgcleanup.c | 3 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 3 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 4 |
6 files changed, 26 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2d2a925..7b31619 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2013-01-14 Richard Biener <rguenther@suse.de> + + * tree-cfgcleanup.c (remove_forwarder_block): Unshare propagated + PHI argument. + * graphite-sese-to-poly.c (insert_out_of_ssa_copy): Properly + unshare reference. + (insert_out_of_ssa_copy_on_edge): Likewise. + (rewrite_close_phi_out_of_ssa): Likewise. + * tree-ssa.c (insert_debug_temp_for_var_def): Properly unshare + debug expressions. + * tree-ssa-pre.c (insert_into_preds_of_block): Properly unshare + propagated constants. + * tree-cfg.c (tree_node_can_be_shared): Handled component-refs + can not be shared. + 2013-01-14 Georg-Johann Lay <avr@gjlay.de> * config/avr/avr-modes.def: Add GPL copyright notice. diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 87d3886..34057e9 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -2020,7 +2020,7 @@ insert_out_of_ssa_copy (scop_p scop, tree res, tree expr, gimple after_stmt) gimple_seq stmts; gimple_stmt_iterator gsi; tree var = force_gimple_operand (expr, &stmts, true, NULL_TREE); - gimple stmt = gimple_build_assign (res, var); + gimple stmt = gimple_build_assign (unshare_expr (res), var); vec<gimple> x; x.create (3); @@ -2076,7 +2076,7 @@ insert_out_of_ssa_copy_on_edge (scop_p scop, edge e, tree res, tree expr) gimple_stmt_iterator gsi; gimple_seq stmts = NULL; tree var = force_gimple_operand (expr, &stmts, true, NULL_TREE); - gimple stmt = gimple_build_assign (res, var); + gimple stmt = gimple_build_assign (unshare_expr (res), var); basic_block bb; vec<gimple> x; x.create (3); @@ -2232,7 +2232,7 @@ rewrite_close_phi_out_of_ssa (scop_p scop, gimple_stmt_iterator *psi) { tree zero_dim_array = create_zero_dim_array (res, "Close_Phi"); - stmt = gimple_build_assign (res, zero_dim_array); + stmt = gimple_build_assign (res, unshare_expr (zero_dim_array)); if (TREE_CODE (arg) == SSA_NAME) insert_out_of_ssa_copy (scop, zero_dim_array, arg, @@ -2258,10 +2258,8 @@ rewrite_phi_out_of_ssa (scop_p scop, gimple_stmt_iterator *psi) gimple phi = gsi_stmt (*psi); basic_block bb = gimple_bb (phi); tree res = gimple_phi_result (phi); - tree var; tree zero_dim_array = create_zero_dim_array (res, "phi_out_of_ssa"); gimple stmt; - gimple_seq stmts; for (i = 0; i < gimple_phi_num_args (phi); i++) { @@ -2278,13 +2276,10 @@ rewrite_phi_out_of_ssa (scop_p scop, gimple_stmt_iterator *psi) insert_out_of_ssa_copy_on_edge (scop, e, zero_dim_array, arg); } - var = force_gimple_operand (zero_dim_array, &stmts, true, NULL_TREE); - - stmt = gimple_build_assign (res, var); + stmt = gimple_build_assign (res, unshare_expr (zero_dim_array)); remove_phi_node (psi, false); SSA_NAME_DEF_STMT (res) = stmt; - - insert_stmts (scop, stmt, stmts, gsi_after_labels (bb)); + insert_stmts (scop, stmt, NULL, gsi_after_labels (bb)); } /* Rewrite the degenerate phi node at position PSI from the degenerate diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 4cd5865..e0bf7ac 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -4449,13 +4449,6 @@ tree_node_can_be_shared (tree t) if (TREE_CODE (t) == CASE_LABEL_EXPR) return true; - while (((TREE_CODE (t) == ARRAY_REF || TREE_CODE (t) == ARRAY_RANGE_REF) - && is_gimple_min_invariant (TREE_OPERAND (t, 1))) - || TREE_CODE (t) == COMPONENT_REF - || TREE_CODE (t) == REALPART_EXPR - || TREE_CODE (t) == IMAGPART_EXPR) - t = TREE_OPERAND (t, 0); - if (DECL_P (t)) return true; diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c index 98b384e..b26281d 100644 --- a/gcc/tree-cfgcleanup.c +++ b/gcc/tree-cfgcleanup.c @@ -412,7 +412,8 @@ remove_forwarder_block (basic_block bb) { gimple phi = gsi_stmt (gsi); source_location l = gimple_phi_arg_location_from_edge (phi, succ); - add_phi_arg (phi, gimple_phi_arg_def (phi, succ->dest_idx), s, l); + tree def = gimple_phi_arg_def (phi, succ->dest_idx); + add_phi_arg (phi, unshare_expr (def), s, l); } } } diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 186ea90..9ccec21 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3246,7 +3246,8 @@ insert_into_preds_of_block (basic_block block, unsigned int exprnum, gcc_assert (get_expr_type (ae) == type || useless_type_conversion_p (type, get_expr_type (ae))); if (ae->kind == CONSTANT) - add_phi_arg (phi, PRE_EXPR_CONSTANT (ae), pred, UNKNOWN_LOCATION); + add_phi_arg (phi, unshare_expr (PRE_EXPR_CONSTANT (ae)), + pred, UNKNOWN_LOCATION); else add_phi_arg (phi, PRE_EXPR_NAME (ae), pred, UNKNOWN_LOCATION); } diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index f6773fe..f83a9ca 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -427,7 +427,7 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) && (!gimple_assign_single_p (def_stmt) || is_gimple_min_invariant (value))) || is_gimple_reg (value)) - value = unshare_expr (value); + ; else { gimple def_temp; @@ -469,7 +469,7 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) that was unshared when we found it had a single debug use, or a DEBUG_EXPR_DECL, that can be safely shared. */ - SET_USE (use_p, value); + SET_USE (use_p, unshare_expr (value)); /* If we didn't replace uses with a debug decl fold the resulting expression. Otherwise we end up with invalid IL. */ if (TREE_CODE (value) != DEBUG_EXPR_DECL) |