This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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 ();
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]