[patch] tree-*.[ch]: VECify referenced vars.

Kazu Hirata kazu@cs.umass.edu
Fri May 6 14:44:00 GMT 2005


Hi,

Attached is a patch to VECify referenced_vars.

I'm wondering if it's worth making changes like so.

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

Since my patch updates num_referenced_vars and referenced_vars like
so.

-#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)

we don't have to change the code that uses the construct
"i < num_referenced_vars", which works just as well.  But then Nathan
seems to prefer VEC_iterate.  Personally, I am OK with either one.

Tested on i686-pc-linux-gnu.  Thoughts?

Kazu Hirata

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

	* tree-dfa.c (referenced_vars, dump_referenced_vars,
	add_referenced_var): Use VEC instead of VARRAY.
	* tree-flow.h (num_referenced_var, referenced_var): Likewise.
	* tree-into-ssa.c (insert_phi_nodes, mark_def_site_blocks):
	Likewise.
	* tree-sra.c (find_candidates_for_sra): Likewsie.
	* tree-ssa-alias.c (init_alias_info,
	setup_pointers_and_addressables, dump_alias_info,
	dump_points_to_info, add_type_alias): Likewise.
	* tree-ssa.c (verify_flow_insensitive_alias_info,
	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	4 May 2005 06:13:02 -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;
 
 
 /*---------------------------------------------------------------------------
@@ -233,13 +233,13 @@ void
 dump_referenced_vars (FILE *file)
 {
   size_t i;
+  tree var;
 
   fprintf (file, "\nReferenced variables in %s: %u\n\n",
 	   get_name (current_function_decl), (unsigned) num_referenced_vars);
 
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       fprintf (file, "Variable: ");
       dump_variable (file, var);
       fprintf (file, "\n");
@@ -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.101
diff -u -d -p -r2.101 tree-flow.h
--- tree-flow.h	3 May 2005 20:18:31 -0000	2.101
+++ tree-flow.h	4 May 2005 06:13:03 -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	4 May 2005 06:13:05 -0000
@@ -863,14 +863,14 @@ static void
 insert_phi_nodes (bitmap *dfs)
 {
   unsigned i;
+  tree var;
 
   timevar_push (TV_TREE_INSERT_PHI_NODES);
 
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
       struct def_blocks_d *def_map;
       bitmap idf;
-      tree var = referenced_var (i);
 
       def_map = find_def_blocks_for (var);
       if (def_map == NULL)
@@ -1666,13 +1666,14 @@ mark_def_site_blocks (sbitmap interestin
   size_t i;
   struct dom_walk_data walk_data;
   struct mark_def_sites_global_data mark_def_sites_global_data;
+  tree var;
 
   /* Allocate memory for the DEF_BLOCKS hash table.  */
-  def_blocks = htab_create (VARRAY_ACTIVE_SIZE (referenced_vars),
+  def_blocks = htab_create (num_referenced_vars,
 			    def_blocks_hash, def_blocks_eq, def_blocks_free);
 
-  for (i = 0; i < num_referenced_vars; i++)
-    set_current_def (referenced_var (i), NULL_TREE);
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
+    set_current_def (var, NULL_TREE);
 
   /* Setup callbacks for the generic dominator tree walker to find and
      mark definition sites.  */
Index: tree-sra.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-sra.c,v
retrieving revision 2.59
diff -u -d -p -r2.59 tree-sra.c
--- tree-sra.c	3 May 2005 12:19:41 -0000	2.59
+++ tree-sra.c	4 May 2005 06:13:06 -0000
@@ -943,10 +943,10 @@ find_candidates_for_sra (void)
 {
   size_t i;
   bool any_set = false;
+  tree var;
 
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       if (decl_can_be_decomposed_p (var))
         {
           bitmap_set_bit (sra_candidates, var_ann (var)->uid);
Index: tree-ssa-alias.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree-ssa-alias.c,v
retrieving revision 2.91
diff -u -d -p -r2.91 tree-ssa-alias.c
--- tree-ssa-alias.c	28 Apr 2005 07:58:29 -0000	2.91
+++ tree-ssa-alias.c	4 May 2005 06:13:08 -0000
@@ -505,6 +505,7 @@ init_alias_info (void)
   if (aliases_computed_p)
     {
       unsigned i;
+      tree var;
   
       /* Similarly, clear the set of addressable variables.  In this
 	 case, we can just clear the set because addressability is
@@ -512,9 +513,8 @@ init_alias_info (void)
       bitmap_clear (addressable_vars);
 
       /* Clear flow-insensitive alias information from each symbol.  */
-      for (i = 0; i < num_referenced_vars; i++)
+      for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
 	{
-	  tree var = referenced_var (i);
 	  var_ann_t ann = var_ann (var);
 
 	  ann->is_alias_tag = 0;
@@ -1366,13 +1366,12 @@ static void
 setup_pointers_and_addressables (struct alias_info *ai)
 {
   size_t i, n_vars, num_addressable_vars, num_pointers;
+  tree var;
 
   /* Size up the arrays ADDRESSABLE_VARS and POINTERS.  */
   num_addressable_vars = num_pointers = 0;
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
-
       if (may_be_aliased (var))
 	num_addressable_vars++;
 
@@ -2412,30 +2411,28 @@ dump_alias_info (FILE *file)
   size_t i;
   const char *funcname
     = lang_hooks.decl_printable_name (current_function_decl, 2);
+  tree var;
 
   fprintf (file, "\nFlow-insensitive alias information for %s\n\n", funcname);
 
   fprintf (file, "Aliased symbols\n\n");
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       if (may_be_aliased (var))
 	dump_variable (file, var);
     }
 
   fprintf (file, "\nDereferenced pointers\n\n");
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       var_ann_t ann = var_ann (var);
       if (ann->type_mem_tag)
 	dump_variable (file, var);
     }
 
   fprintf (file, "\nType memory tags\n\n");
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       var_ann_t ann = var_ann (var);
       if (ann->mem_tag_kind == TYPE_TAG)
 	dump_variable (file, var);
@@ -2460,9 +2457,8 @@ dump_alias_info (FILE *file)
     }
 
   fprintf (file, "\nName memory tags\n\n");
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       var_ann_t ann = var_ann (var);
       if (ann->mem_tag_kind == NAME_TAG)
 	dump_variable (file, var);
@@ -2575,15 +2571,15 @@ dump_points_to_info (FILE *file)
   ssa_op_iter iter;
   const char *fname =
     lang_hooks.decl_printable_name (current_function_decl, 2);
+  tree var;
 
   fprintf (file, "\n\nPointed-to sets for pointers in %s\n\n", fname);
 
   /* First dump points-to information for the default definitions of
      pointer variables.  This is necessary because default definitions are
      not part of the code.  */
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = referenced_var (i);
       if (POINTER_TYPE_P (TREE_TYPE (var)))
 	{
 	  var_ann_t ann = var_ann (var);
@@ -2717,10 +2713,8 @@ add_type_alias (tree ptr, tree var)
 	 whether there is another pointer Q with the same alias set as
 	 PTR.  This could be sped up by having type tags associated
 	 with types.  */
-      for (i = 0; i < num_referenced_vars; i++)
+      for (i = 0; VEC_iterate (tree, referenced_vars, i, q); i++)
 	{
-	  q = referenced_var (i);
-
 	  if (POINTER_TYPE_P (TREE_TYPE (q))
 	      && tag_set == get_alias_set (TREE_TYPE (TREE_TYPE (q))))
 	    {
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	4 May 2005 06:13:09 -0000
@@ -377,13 +377,12 @@ verify_flow_insensitive_alias_info (void
   tree var;
   bitmap visited = BITMAP_ALLOC (NULL);
 
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
       size_t j;
       var_ann_t ann;
       varray_type may_aliases;
 
-      var = referenced_var (i);
       ann = var_ann (var);
       may_aliases = ann->may_aliases;
 
@@ -402,11 +401,10 @@ verify_flow_insensitive_alias_info (void
 	}
     }
 
-  for (i = 0; i < num_referenced_vars; i++)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
       var_ann_t ann;
 
-      var = referenced_var (i);
       ann = var_ann (var);
 
       if (ann->mem_tag_kind == NOT_A_TAG
@@ -786,7 +784,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 ();
@@ -804,6 +802,7 @@ delete_tree_ssa (void)
   size_t i;
   basic_block bb;
   block_stmt_iterator bsi;
+  tree var;
 
   /* Release any ssa_names still in use.  */
   for (i = 0; i < num_ssa_names; i++)
@@ -827,16 +826,12 @@ delete_tree_ssa (void)
       }
 
   /* Remove annotations from every referenced variable.  */
-  if (referenced_vars)
+  for (i = 0; VEC_iterate (tree, referenced_vars, i, var); 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;
+      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	4 May 2005 06:13:09 -0000
@@ -132,17 +132,16 @@ static void find_tail_calls (basic_block
 static bool
 suitable_for_tail_opt_p (void)
 {
-  int i;
+  unsigned int i;
+  tree var;
 
   if (current_function_stdarg)
     return false;
 
   /* 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; VEC_iterate (tree, referenced_vars, i, var); i++)
     {
-      tree var = VARRAY_TREE (referenced_vars, i);
-
       if (!(TREE_STATIC (var) || DECL_EXTERNAL (var))
 	  && (var_ann (var)->mem_tag_kind == NOT_A_TAG
 	      || var_ann (var)->mem_tag_kind == STRUCT_FIELD)



More information about the Gcc-patches mailing list