This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch] tree-into-ssa.c: Clean up update_ssa.
- From: Kazu Hirata <kazu at cs dot umass dot edu>
- To: gcc-patches at gcc dot gnu dot org
- Cc: dnovillo at redhat dot com
- Date: Tue, 17 May 2005 10:12:42 -0400 (EDT)
- Subject: [patch] tree-into-ssa.c: Clean up update_ssa.
Hi,
Attached is a patch to clean up update_ssa by shortening the live
range of DFS.
For some reason, the live range of DFS in update_ssa is quite long,
which causes us to have
dfs = NULL; // to supress an "uninitialized" warning?
and an "if" statement
if (insert_phi_p)
{
FOR_EACH_BB (bb)
BITMAP_FREE (dfs[bb->index]);
free (dfs);
}
If we just allocate and free DFS in the "if" statement where we
actually insert PHI nodes, we don't have to worry about DFS elsewhere.
Tested on i686-pc-linux-gnu. OK to apply?
Kazu Hirata
2005-05-16 Kazu Hirata <kazu@cs.umass.edu>
* tree-into-ssa.c (update_ssa): Clean up by shortening the
live range of DFS.
Index: tree-into-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-into-ssa.c,v
retrieving revision 2.54
diff -u -d -p -r2.54 tree-into-ssa.c
--- tree-into-ssa.c 8 May 2005 15:07:22 -0000 2.54
+++ tree-into-ssa.c 16 May 2005 19:12:44 -0000
@@ -2611,7 +2611,7 @@ switch_virtuals_to_full_rewrite (void)
void
update_ssa (unsigned update_flags)
{
- bitmap *dfs, blocks;
+ bitmap blocks;
basic_block bb, start_bb;
bitmap_iterator bi;
unsigned i;
@@ -2646,13 +2646,8 @@ update_ssa (unsigned update_flags)
if (insert_phi_p)
{
- /* If the caller requested PHI nodes to be added, compute
- dominance frontiers and initialize live-in information data
- structures (DEF_BLOCKS). */
- dfs = (bitmap *) xmalloc (last_basic_block * sizeof (bitmap *));
- FOR_EACH_BB (bb)
- dfs[bb->index] = BITMAP_ALLOC (NULL);
- compute_dominance_frontiers (dfs);
+ /* If the caller requested PHI nodes to be added, initialize
+ live-in information data structures (DEF_BLOCKS). */
/* For each SSA name N, the DEF_BLOCKS table describes where the
name is defined, which blocks have PHI nodes for N, and which
@@ -2663,7 +2658,6 @@ update_ssa (unsigned update_flags)
}
else
{
- dfs = NULL;
def_blocks = NULL;
}
@@ -2738,6 +2732,15 @@ update_ssa (unsigned update_flags)
and for symbols in SYMS_TO_RENAME. */
if (insert_phi_p)
{
+ bitmap *dfs;
+
+ /* If the caller requested PHI nodes to be added, compute
+ dominance frontiers. */
+ dfs = xmalloc (last_basic_block * sizeof (bitmap *));
+ FOR_EACH_BB (bb)
+ dfs[bb->index] = BITMAP_ALLOC (NULL);
+ compute_dominance_frontiers (dfs);
+
if (sbitmap_first_set_bit (old_ssa_names) >= 0)
{
/* insert_update_phi_nodes_for will call add_new_name_mapping
@@ -2757,6 +2760,10 @@ update_ssa (unsigned update_flags)
insert_updated_phi_nodes_for (referenced_var (i), dfs, blocks,
update_flags);
+ FOR_EACH_BB (bb)
+ BITMAP_FREE (dfs[bb->index]);
+ free (dfs);
+
/* Insertion of PHI nodes may have added blocks to the region.
We need to re-compute START_BB to include the newly added
blocks. */
@@ -2813,13 +2820,6 @@ update_ssa (unsigned update_flags)
/* Free allocated memory. */
done:
- if (insert_phi_p)
- {
- FOR_EACH_BB (bb)
- BITMAP_FREE (dfs[bb->index]);
- free (dfs);
- }
-
BITMAP_FREE (blocks);
delete_update_ssa ();