aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>2004-08-04 22:37:38 +0200
committerJeff Law <law@gcc.gnu.org>2004-08-04 14:37:38 -0600
commitb0382c67cb60bf717f7ed330da1c36ca379381d8 (patch)
tree23b173bffe56f19ee8231be3aae5255ddc05cbc8 /gcc/tree-cfg.c
parent63c5b4952ee1141038f756fc5a44511296ad7f8e (diff)
downloadgcc-b0382c67cb60bf717f7ed330da1c36ca379381d8.zip
gcc-b0382c67cb60bf717f7ed330da1c36ca379381d8.tar.gz
gcc-b0382c67cb60bf717f7ed330da1c36ca379381d8.tar.bz2
tree-cfg.c (tree_duplicate_bb): Mark duplicated definitions.
* tree-cfg.c (tree_duplicate_bb): Mark duplicated definitions. * tree-flow.h (rewrite_ssa_into_ssa): Declaration changed. * tree-into-ssa.c (rewrite_ssa_into_ssa): Use new interface to manipulate the duplicated ssa names. * tree-ssanames.c (ssa_names_to_rewrite): New variable. (marked_for_rewrite_p, any_marked_for_rewrite_p, mark_for_rewrite, unmark_all_for_rewrite, marked_ssa_names, release_ssa_name_force): New functions. (release_ssa_name): Do not release ssa names that may have multiple definitions. * tree.h (release_ssa_name_force, mark_for_rewrite, unmark_all_for_rewrite, marked_for_rewrite_p, any_marked_for_rewrite_p, marked_ssa_names): Declare. * tree-ssa-loop-ch.c (mark_defs_for_rewrite): Remove. (duplicate_blocks): Remove call to mark_defs_for_rewrite. Update call to rewrite_ssa_into_ssa. Co-Authored-By: Jeff Law <law@redhat.com> From-SVN: r85572
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index c9d2424..5765316 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -4297,8 +4297,19 @@ tree_duplicate_bb (basic_block bb)
{
basic_block new_bb;
block_stmt_iterator bsi, bsi_tgt;
+ tree phi;
+ def_optype defs;
+ v_may_def_optype v_may_defs;
+ v_must_def_optype v_must_defs;
+ unsigned j;
new_bb = create_empty_bb (EXIT_BLOCK_PTR->prev_bb);
+
+ for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+ {
+ mark_for_rewrite (PHI_RESULT (phi));
+ }
+
bsi_tgt = bsi_start (new_bb);
for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
@@ -4308,6 +4319,21 @@ tree_duplicate_bb (basic_block bb)
if (TREE_CODE (stmt) == LABEL_EXPR)
continue;
+ /* Record the definitions. */
+ get_stmt_operands (stmt);
+
+ defs = STMT_DEF_OPS (stmt);
+ for (j = 0; j < NUM_DEFS (defs); j++)
+ mark_for_rewrite (DEF_OP (defs, j));
+
+ v_may_defs = STMT_V_MAY_DEF_OPS (stmt);
+ for (j = 0; j < NUM_V_MAY_DEFS (v_may_defs); j++)
+ mark_for_rewrite (V_MAY_DEF_RESULT (v_may_defs, j));
+
+ v_must_defs = STMT_V_MUST_DEF_OPS (stmt);
+ for (j = 0; j < NUM_V_MUST_DEFS (v_must_defs); j++)
+ mark_for_rewrite (V_MUST_DEF_OP (v_must_defs, j));
+
copy = unshare_expr (stmt);
/* Copy also the virtual operands. */