[patch] cgrahunit.c: Use VEC instead of VARRAY.

Kazu Hirata kazu@codesourcery.com
Sun Apr 16 12:42:00 GMT 2006


Hi,

Attached is a patch to use VEC instead of VARRAY.

Tested on x86_64-pc-linux-gnu.  Will commit this patch in 24 hours or
so as preapproved.

Kazu Hirata

2006-04-16  Kazu Hirata  <kazu@codesourcery.com>

	* cgraph.h (cgraph_edge_p): New.
	Update the prototype of cgraph_function_versioning.
	* cgraphunit.c (cgraph_copy_node_for_versioning,
	cgraph_function_versioning): Use VEC instead of VARRAY.
	* ipa-cp.c (ipcp_insert_stage): Likewise.

Index: cgraph.h
===================================================================
--- cgraph.h	(revision 112970)
+++ cgraph.h	(working copy)
@@ -189,6 +189,11 @@ struct cgraph_edge GTY((chain_next ("%h.
   int loop_nest;
 };
 
+typedef struct cgraph_edge *cgraph_edge_p;
+
+DEF_VEC_P(cgraph_edge_p);
+DEF_VEC_ALLOC_P(cgraph_edge_p,heap);
+
 /* The cgraph_varpool data structure.
    Each static variable decl has assigned cgraph_varpool_node.  */
 
@@ -307,7 +312,8 @@ void cgraph_build_static_cdtor (char whi
 void cgraph_reset_static_var_maps (void);
 void init_cgraph (void);
 struct cgraph_node *cgraph_function_versioning (struct cgraph_node *,
-                                                varray_type, varray_type);
+                                                VEC(cgraph_edge_p,heap)*,
+						varray_type);
 void cgraph_analyze_function (struct cgraph_node *);
 struct cgraph_node *save_inline_function_body (struct cgraph_node *);
 
Index: cgraphunit.c
===================================================================
--- cgraphunit.c	(revision 112970)
+++ cgraphunit.c	(working copy)
@@ -1575,7 +1575,8 @@ update_call_expr (struct cgraph_node *ne
 
 static struct cgraph_node *
 cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
-				 tree new_decl, varray_type redirect_callers)
+				 tree new_decl,
+				 VEC(cgraph_edge_p,heap) *redirect_callers)
  {
    struct cgraph_node *new_version;
    struct cgraph_edge *e, *new_e;
@@ -1614,14 +1615,12 @@ cgraph_copy_node_for_versioning (struct 
        if (!next_callee)
 	 break;
      }
-   if (redirect_callers)
-     for (i = 0; i < VARRAY_ACTIVE_SIZE (redirect_callers); i++)
-       {
-         e = VARRAY_GENERIC_PTR (redirect_callers, i);
-	 /* Redirect calls to the old version node
-	    to point to it's new version.  */
-         cgraph_redirect_edge_callee (e, new_version);
-       }
+   for (i = 0; VEC_iterate (cgraph_edge_p, redirect_callers, i, e); i++)
+     {
+       /* Redirect calls to the old version node to point to its new
+	  version.  */
+       cgraph_redirect_edge_callee (e, new_version);
+     }
 
    return new_version;
  }
@@ -1641,7 +1640,7 @@ cgraph_copy_node_for_versioning (struct 
 
 struct cgraph_node *
 cgraph_function_versioning (struct cgraph_node *old_version_node,
-			    varray_type redirect_callers,
+			    VEC(cgraph_edge_p,heap) *redirect_callers,
 			    varray_type tree_map)
 {
   tree old_decl = old_version_node->decl;
Index: ipa-cp.c
===================================================================
--- ipa-cp.c	(revision 112970)
+++ ipa-cp.c	(working copy)
@@ -1005,7 +1005,8 @@ ipcp_insert_stage (void)
   struct cgraph_node *node, *node1 = NULL;
   int i, const_param;
   union parameter_info *cvalue;
-  varray_type redirect_callers, replace_trees;
+  VEC(cgraph_edge_p,heap) *redirect_callers;
+  varray_type replace_trees;
   struct cgraph_edge *cs;
   int node_callers, count;
   tree parm_tree;
@@ -1045,15 +1046,14 @@ ipcp_insert_stage (void)
       node_callers = 0;
       for (cs = node->callers; cs != NULL; cs = cs->next_caller)
 	node_callers++;
-      VARRAY_GENERIC_PTR_INIT (redirect_callers, node_callers,
-			       "redirect_callers");
+      redirect_callers = VEC_alloc (cgraph_edge_p, heap, node_callers);
       for (cs = node->callers; cs != NULL; cs = cs->next_caller)
-	VARRAY_PUSH_GENERIC_PTR (redirect_callers, cs);
+	VEC_quick_push (cgraph_edge_p, redirect_callers, cs);
       /* Redirecting all the callers of the node to the
          new versioned node.  */
       node1 =
 	cgraph_function_versioning (node, redirect_callers, replace_trees);
-      VARRAY_CLEAR (redirect_callers);
+      VEC_free (cgraph_edge_p, heap, redirect_callers);
       VARRAY_CLEAR (replace_trees);
       if (node1 == NULL)
 	continue;



More information about the Gcc-patches mailing list