[patch] tree-*.[ch]: VECify referenced vars. (Take 2)

Kazu Hirata kazu@cs.umass.edu
Sun May 8 15:09:00 GMT 2005


Hi,

Attached is a patch to VECify referenced_vars.

I made this patch as small as possible and avoided changes like

-      for (i = 0; i < num_referenced_vars; i++)
+      for (i = 0; VEC_iterate (tree, referenced_vars, i, q); i++)
 	{
-	  q = referenced_var (i);

because

o These changes are not strictly necessary to move away from VARRAY.

o They clutter the patch.

o If I use VEC_iterate, which does not use num_referenced_vars, there
  are other places that use num_referenced_vars, so the resulting code
  is inconsistent.

o If we want to remove num_referenced and replace all of its uses with
  VEC_length, we can always do so later.

Tested on i686-pc-linux-gnu.  Committed.

Kazu Hirata

2005-05-08  Kazu Hirata  <kazu@cs.umass.edu>

	* tree-dfa.c (referenced_vars, add_referenced_var): Use VEC
	instead of VARRAY.
	* tree-flow.h (num_referenced_var, referenced_var): Likewise.
	* tree-into-ssa.c (mark_def_site_blocks): Likewise.
	* tree-ssa.c (init_tree_ssa, delete_tree_ssa): Likewise.
	* tree-tailcall.c (suitable_for_tail_opt_p): Likewise.

Index: tree-dfa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-dfa.c,v
retrieving revision 2.53
diff -u -d -p -r2.53 tree-dfa.c
--- tree-dfa.c	3 May 2005 12:19:37 -0000	2.53
+++ tree-dfa.c	8 May 2005 05:12:23 -0000
@@ -84,7 +84,7 @@ static void add_referenced_var (tree, st
 /* Global declarations.  */
 
 /* Array of all variables referenced in the function.  */
-varray_type referenced_vars;
+VEC(tree,gc) *referenced_vars;
 
 
 /*---------------------------------------------------------------------------
@@ -558,7 +558,7 @@ add_referenced_var (tree var, struct wal
       if (slot)
 	*slot = (void *) var;
       v_ann->uid = num_referenced_vars;
-      VARRAY_PUSH_TREE (referenced_vars, var);
+      VEC_safe_push (tree, gc, referenced_vars, var);
 
       /* Global variables are always call-clobbered.  */
       if (is_global_var (var))
Index: tree-flow.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-flow.h,v
retrieving revision 2.102
diff -u -d -p -r2.102 tree-flow.h
--- tree-flow.h	6 May 2005 21:11:29 -0000	2.102
+++ tree-flow.h	8 May 2005 05:12:23 -0000
@@ -406,10 +406,10 @@ static inline void set_phi_nodes (basic_
 			      Global declarations
 ---------------------------------------------------------------------------*/
 /* Array of all variables referenced in the function.  */
-extern GTY(()) varray_type referenced_vars;
+extern GTY(()) VEC(tree,gc) *referenced_vars;
 
-#define num_referenced_vars VARRAY_ACTIVE_SIZE (referenced_vars)
-#define referenced_var(i) VARRAY_TREE (referenced_vars, i)
+#define num_referenced_vars VEC_length (tree, referenced_vars)
+#define referenced_var(i) VEC_index (tree, referenced_vars, i)
 
 /* Array of all SSA_NAMEs used in the function.  */
 extern GTY(()) VEC(tree,gc) *ssa_names;
Index: tree-into-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-into-ssa.c,v
retrieving revision 2.53
diff -u -d -p -r2.53 tree-into-ssa.c
--- tree-into-ssa.c	3 May 2005 12:19:39 -0000	2.53
+++ tree-into-ssa.c	8 May 2005 05:12:23 -0000
@@ -1668,7 +1668,7 @@ mark_def_site_blocks (sbitmap interestin
   struct mark_def_sites_global_data mark_def_sites_global_data;
 
   /* Allocate memory for the DEF_BLOCKS hash table.  */
-  def_blocks = htab_create (VARRAY_ACTIVE_SIZE (referenced_vars),
+  def_blocks = htab_create (VEC_length (tree, referenced_vars),
 			    def_blocks_hash, def_blocks_eq, def_blocks_free);
 
   for (i = 0; i < num_referenced_vars; i++)
Index: tree-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa.c,v
retrieving revision 2.93
diff -u -d -p -r2.93 tree-ssa.c
--- tree-ssa.c	3 May 2005 12:19:48 -0000	2.93
+++ tree-ssa.c	8 May 2005 05:12:25 -0000
@@ -786,7 +786,7 @@ err:
 void
 init_tree_ssa (void)
 {
-  VARRAY_TREE_INIT (referenced_vars, 20, "referenced_vars");
+  referenced_vars = VEC_alloc (tree, gc, 20);
   call_clobbered_vars = BITMAP_ALLOC (NULL);
   addressable_vars = BITMAP_ALLOC (NULL);
   init_ssanames ();
@@ -827,16 +827,13 @@ delete_tree_ssa (void)
       }
 
   /* Remove annotations from every referenced variable.  */
-  if (referenced_vars)
+  for (i = 0; i < num_referenced_vars; i++)
     {
-      for (i = 0; i < num_referenced_vars; i++)
-	{
-	  tree var = referenced_var (i);
-	  ggc_free (var->common.ann);
-	  var->common.ann = NULL;
-	}
-      referenced_vars = NULL;
+      tree var = referenced_var (i);
+      ggc_free (var->common.ann);
+      var->common.ann = NULL;
     }
+  VEC_free (tree, gc, referenced_vars);
 
   fini_ssanames ();
   fini_phinodes ();
Index: tree-tailcall.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-tailcall.c,v
retrieving revision 2.41
diff -u -d -p -r2.41 tree-tailcall.c
--- tree-tailcall.c	3 May 2005 12:19:50 -0000	2.41
+++ tree-tailcall.c	8 May 2005 05:12:25 -0000
@@ -139,9 +139,9 @@ suitable_for_tail_opt_p (void)
 
   /* No local variable nor structure field should be call-clobbered.  We
      ignore any kind of memory tag, as these are not real variables.  */
-  for (i = 0; i < (int) VARRAY_ACTIVE_SIZE (referenced_vars); i++)
+  for (i = 0; i < (int) num_referenced_vars; i++)
     {
-      tree var = VARRAY_TREE (referenced_vars, i);
+      tree var = VEC_index (tree, referenced_vars, i);
 
       if (!(TREE_STATIC (var) || DECL_EXTERNAL (var))
 	  && (var_ann (var)->mem_tag_kind == NOT_A_TAG



More information about the Gcc-patches mailing list