diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-08-04 20:37:38 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-08-04 20:37:38 +0000 |
commit | deb78f9eeb94962225a93b18c8e0527622601c7e (patch) | |
tree | 23b173bffe56f19ee8231be3aae5255ddc05cbc8 /gcc/tree-into-ssa.c | |
parent | 3c5c992fb35721740819b519e532b3f3e244e323 (diff) | |
download | gcc-deb78f9eeb94962225a93b18c8e0527622601c7e.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85572 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-into-ssa.c')
-rw-r--r-- | gcc/tree-into-ssa.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 4d5992e2d56..edeeab5f1bf 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1740,11 +1740,11 @@ rewrite_into_ssa (bool all) timevar_pop (TV_TREE_SSA_OTHER); } -/* The ssa names in NAMES_TO_RENAME may have more than one definition; +/* The marked ssa names may have more than one definition; add phi nodes and rewrite them to fix this. */ void -rewrite_ssa_into_ssa (bitmap names_to_rename) +rewrite_ssa_into_ssa (void) { bitmap *dfs; basic_block bb; @@ -1753,9 +1753,11 @@ rewrite_ssa_into_ssa (bitmap names_to_rename) unsigned i; sbitmap snames_to_rename; tree name; + bitmap to_rename; - if (bitmap_first_set_bit (names_to_rename) < 0) + if (!any_marked_for_rewrite_p ()) return; + to_rename = marked_ssa_names (); timevar_push (TV_TREE_SSA_OTHER); @@ -1800,7 +1802,7 @@ rewrite_ssa_into_ssa (bitmap names_to_rename) snames_to_rename = sbitmap_alloc (num_ssa_names); sbitmap_zero (snames_to_rename); - EXECUTE_IF_SET_IN_BITMAP (names_to_rename, 0, i, + EXECUTE_IF_SET_IN_BITMAP (to_rename, 0, i, SET_BIT (snames_to_rename, i)); mark_def_sites_global_data.kills = sbitmap_alloc (num_ssa_names); @@ -1826,7 +1828,7 @@ rewrite_ssa_into_ssa (bitmap names_to_rename) set_current_def (ssa_name (i), NULL_TREE); /* Insert PHI nodes at dominance frontiers of definition blocks. */ - insert_phi_nodes (dfs, names_to_rename); + insert_phi_nodes (dfs, to_rename); /* Rewrite all the basic blocks in the program. */ timevar_push (TV_TREE_SSA_REWRITE_BLOCKS); @@ -1855,8 +1857,9 @@ rewrite_ssa_into_ssa (bitmap names_to_rename) /* Finalize the dominator walker. */ fini_walk_dominator_tree (&walk_data); - EXECUTE_IF_SET_IN_BITMAP (names_to_rename, 0, i, - release_ssa_name (ssa_name (i))); + unmark_all_for_rewrite (); + + EXECUTE_IF_SET_IN_BITMAP (to_rename, 0, i, release_ssa_name (ssa_name (i))); sbitmap_free (snames_to_rename); @@ -1886,6 +1889,7 @@ rewrite_ssa_into_ssa (bitmap names_to_rename) SSA_NAME_AUX (name) = NULL; } + BITMAP_XFREE (to_rename); timevar_pop (TV_TREE_SSA_OTHER); } |