aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ch.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-ssa-loop-ch.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-ssa-loop-ch.c')
-rw-r--r--gcc/tree-ssa-loop-ch.c63
1 files changed, 1 insertions, 62 deletions
diff --git a/gcc/tree-ssa-loop-ch.c b/gcc/tree-ssa-loop-ch.c
index ddb2438..f10ec75 100644
--- a/gcc/tree-ssa-loop-ch.c
+++ b/gcc/tree-ssa-loop-ch.c
@@ -99,54 +99,6 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
return true;
}
-/* Marks variables defined in basic block BB for rewriting. */
-
-static void
-mark_defs_for_rewrite (basic_block bb)
-{
- tree stmt, var;
- block_stmt_iterator bsi;
- stmt_ann_t ann;
- def_optype defs;
- v_may_def_optype v_may_defs;
- v_must_def_optype v_must_defs;
- unsigned i;
-
- for (stmt = phi_nodes (bb); stmt; stmt = TREE_CHAIN (stmt))
- {
- var = PHI_RESULT (stmt);
- bitmap_set_bit (vars_to_rename, SSA_NAME_VERSION (var));
- }
-
- for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
- {
- stmt = bsi_stmt (bsi);
- get_stmt_operands (stmt);
- ann = stmt_ann (stmt);
-
- defs = DEF_OPS (ann);
- for (i = 0; i < NUM_DEFS (defs); i++)
- {
- var = DEF_OP (defs, i);
- bitmap_set_bit (vars_to_rename, SSA_NAME_VERSION (var));
- }
-
- v_may_defs = V_MAY_DEF_OPS (ann);
- for (i = 0; i < NUM_V_MAY_DEFS (v_may_defs); i++)
- {
- var = V_MAY_DEF_RESULT (v_may_defs, i);
- bitmap_set_bit (vars_to_rename, SSA_NAME_VERSION (var));
- }
-
- v_must_defs = V_MUST_DEF_OPS (ann);
- for (i = 0; i < NUM_V_MUST_DEFS (v_must_defs); i++)
- {
- var = V_MUST_DEF_OP (v_must_defs, i);
- bitmap_set_bit (vars_to_rename, SSA_NAME_VERSION (var));
- }
- }
-}
-
/* Duplicates destinations of edges in BBS_TO_DUPLICATE. */
static void
@@ -166,18 +118,6 @@ duplicate_blocks (varray_type bbs_to_duplicate)
preheader_edge = VARRAY_GENERIC_PTR_NOGC (bbs_to_duplicate, i);
header = preheader_edge->dest;
- /* It is sufficient to rewrite the definitions, since the uses of
- the operands defined outside of the duplicated basic block are
- still valid (every basic block that dominates the original block
- also dominates the duplicate). */
- mark_defs_for_rewrite (header);
- }
-
- for (i = 0; i < VARRAY_ACTIVE_SIZE (bbs_to_duplicate); i++)
- {
- preheader_edge = VARRAY_GENERIC_PTR_NOGC (bbs_to_duplicate, i);
- header = preheader_edge->dest;
-
if (!header->aux)
abort ();
header->aux = NULL;
@@ -210,8 +150,7 @@ duplicate_blocks (varray_type bbs_to_duplicate)
calculate_dominance_info (CDI_DOMINATORS);
- rewrite_ssa_into_ssa (vars_to_rename);
- bitmap_clear (vars_to_rename);
+ rewrite_ssa_into_ssa ();
}
/* Checks whether LOOP is a do-while style loop. */