tree-phinodes.c (make_phi_node, [...]): Don't zero the whole PHI node.
authorKazu Hirata <kazu@cs.umass.edu>
Fri, 29 Oct 2004 14:05:43 +0000 (14:05 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 29 Oct 2004 14:05:43 +0000 (14:05 +0000)
* 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.

From-SVN: r89844

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

index b88ed384f1ca8dbe9ca250220d24a7a8ebcc059d..fb4b35c51f28331bbdf3e2d20764c2aa4820a4cb 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 1cc613cc4afc83a0b99837f3835e89a5e490f871..f45479e1708d7fcfdd6d1dc98795c15b3b344673 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 9f74ef9cd987e0b610be13122d3fc76472f047f8..001c967178e48a88c5187a384e843e28b1e0f111 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