Patchwork [c] VECify types_used_by_cur_var_decl

login
register
mail settings
Submitter Nathan Froyd
Date June 17, 2010, 6:48 p.m.
Message ID <20100617184833.GO27105@codesourcery.com>
Download mbox | patch
Permalink /patch/56078/
State New
Headers show

Comments

Nathan Froyd - June 17, 2010, 6:48 p.m.
As $SUBJECT suggests.  Need C FE approval and middle-end approval.

Tested on x86_64-unknown-linux-gnu.  OK?

-Nathan

gcc/
	* function.h (types_used_by_cur_var_decl): Change type to a VEC.
	* function.c (types_used_by_cur_var_decl): Likewise.
	(used_types_insert): Adjust for new type of
	types_used_by_cur_var_decl.

gcc/c-family/
	* c-common.c (record_types_used_by_current_var_decl): Adjust for
	new type of types_used_by_cur_var_decl.
Joseph S. Myers - June 17, 2010, 7:46 p.m.
On Thu, 17 Jun 2010, Nathan Froyd wrote:

> gcc/c-family/
> 	* c-common.c (record_types_used_by_current_var_decl): Adjust for
> 	new type of types_used_by_cur_var_decl.

The C changes are OK.
Richard Guenther - June 18, 2010, 9:31 a.m.
On Thu, Jun 17, 2010 at 9:46 PM, Joseph S. Myers
<joseph@codesourcery.com> wrote:
> On Thu, 17 Jun 2010, Nathan Froyd wrote:
>
>> gcc/c-family/
>>       * c-common.c (record_types_used_by_current_var_decl): Adjust for
>>       new type of types_used_by_cur_var_decl.
>
> The C changes are OK.

The middle-end changes as well.

Richard.

Patch

--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -9384,17 +9384,10 @@  record_types_used_by_current_var_decl (tree decl)
 {
   gcc_assert (decl && DECL_P (decl) && TREE_STATIC (decl));
 
-  if (types_used_by_cur_var_decl)
+  while (!VEC_empty (tree, types_used_by_cur_var_decl))
     {
-      tree node;
-      for (node = types_used_by_cur_var_decl;
-	   node;
-	   node = TREE_CHAIN (node))
-      {
-	tree type = TREE_PURPOSE (node);
-	types_used_by_var_decl_insert (type, decl);
-      }
-      types_used_by_cur_var_decl = NULL;
+      tree type = VEC_pop (tree, types_used_by_cur_var_decl);
+      types_used_by_var_decl_insert (type, decl);
     }
 }
 
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -132,7 +132,7 @@  static GTY((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
 
 
 htab_t types_used_by_vars_hash = NULL;
-tree types_used_by_cur_var_decl = NULL;
+VEC(tree,gc) *types_used_by_cur_var_decl;
 
 /* Forward declarations.  */
 
@@ -5562,9 +5562,7 @@  used_types_insert (tree t)
 	/* So this might be a type referenced by a global variable.
 	   Record that type so that we can later decide to emit its debug
 	   information.  */
-	types_used_by_cur_var_decl =
-	  tree_cons (t, NULL, types_used_by_cur_var_decl);
-
+        VEC_safe_push (tree, gc, types_used_by_cur_var_decl, t);
     }
 }
 
--- a/gcc/function.h
+++ b/gcc/function.h
@@ -645,9 +645,9 @@  hashval_t types_used_by_vars_do_hash (const void*);
 int types_used_by_vars_eq (const void *, const void *);
 void types_used_by_var_decl_insert (tree type, tree var_decl);
 
-/* During parsing of a global variable, this linked list points to
-   the list of types referenced by the global variable.  */
-extern GTY(()) tree types_used_by_cur_var_decl;
+/* During parsing of a global variable, this vector contains the types
+   referenced by the global variable.  */
+extern GTY(()) VEC(tree,gc) *types_used_by_cur_var_decl;
 
 
 /* cfun shouldn't be set directly; use one of these functions instead.  */