OSDN Git Service

* tree-phinodes.c (make_phi_node, resize_phi_node): Don't zero
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Oct 2004 14:05:43 +0000 (14:05 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 Oct 2004 14:05:43 +0000 (14:05 +0000)
the whole PHI node.
* tree.h (tree_phi_node): Tell the garbage collector to chase
num_args arguments.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89844 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-phinodes.c
gcc/tree.h

index b88ed38..fb4b35c 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-29  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * tree-phinodes.c (make_phi_node, resize_phi_node): Don't zero
+       the whole PHI node.
+       * tree.h (tree_phi_node): Tell the garbage collector to chase
+       num_args arguments.
+
 2004-10-29  Richard Earnshaw  <rearnsha@arm.com>
 
        * opts.c (decode_options): Lower the crossjump threshold for -Os.
index 1cc613c..f45479e 100644 (file)
@@ -199,7 +199,12 @@ make_phi_node (tree var, int len)
 
     }
 
-  memset (phi, 0, size);
+  /* We do not have to clear a part of the PHI node that stores PHI
+     arguments, which is safe because we tell the garbage collector to
+     scan up to num_args elements in the array of PHI arguments.  In
+     other words, the garbage collector will not follow garbage
+     pointers in the unused portion of the array.  */
+  memset (phi, 0, sizeof (struct tree_phi_node) - sizeof (struct phi_arg_d));
   TREE_SET_CODE (phi, PHI_NODE);
   PHI_ARG_CAPACITY (phi) = len;
   TREE_TYPE (phi) = TREE_TYPE (var);
@@ -234,7 +239,7 @@ resize_phi_node (tree *phi, int len)
 {
   int size, old_size;
   tree new_phi;
-  int i, old_len, bucket = NUM_BUCKETS - 2;
+  int bucket = NUM_BUCKETS - 2;
 
   gcc_assert (len >= PHI_ARG_CAPACITY (*phi));
 
@@ -271,16 +276,8 @@ resize_phi_node (tree *phi, int len)
 
   memcpy (new_phi, *phi, old_size);
 
-  old_len = PHI_ARG_CAPACITY (new_phi);
   PHI_ARG_CAPACITY (new_phi) = len;
 
-  for (i = old_len; i < len; i++)
-    {
-      SET_PHI_ARG_DEF (new_phi, i, NULL_TREE);
-      PHI_ARG_EDGE (new_phi, i) = NULL;
-      PHI_ARG_NONZERO (new_phi, i) = false;
-    }
-
   *phi = new_phi;
 }
 
index 9f74ef9..001c967 100644 (file)
@@ -1405,7 +1405,7 @@ struct tree_phi_node GTY(())
   /* Dataflow information.  */
   struct dataflow_d *df;
 
-  struct phi_arg_d GTY ((length ("((tree)&%h)->phi.capacity"))) a[1];
+  struct phi_arg_d GTY ((length ("((tree)&%h)->phi.num_args"))) a[1];
 };
 \f