Commit c24a4dcf by Kazu Hirata Committed by Kazu Hirata

tree-phinodes.c (make_phi_node, [...]): Don't zero the whole PHI node.

	* 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
parent fe94b653
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> 2004-10-29 Richard Earnshaw <rearnsha@arm.com>
* opts.c (decode_options): Lower the crossjump threshold for -Os. * opts.c (decode_options): Lower the crossjump threshold for -Os.
......
...@@ -199,7 +199,12 @@ make_phi_node (tree var, int len) ...@@ -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); TREE_SET_CODE (phi, PHI_NODE);
PHI_ARG_CAPACITY (phi) = len; PHI_ARG_CAPACITY (phi) = len;
TREE_TYPE (phi) = TREE_TYPE (var); TREE_TYPE (phi) = TREE_TYPE (var);
...@@ -234,7 +239,7 @@ resize_phi_node (tree *phi, int len) ...@@ -234,7 +239,7 @@ resize_phi_node (tree *phi, int len)
{ {
int size, old_size; int size, old_size;
tree new_phi; tree new_phi;
int i, old_len, bucket = NUM_BUCKETS - 2; int bucket = NUM_BUCKETS - 2;
gcc_assert (len >= PHI_ARG_CAPACITY (*phi)); gcc_assert (len >= PHI_ARG_CAPACITY (*phi));
...@@ -271,16 +276,8 @@ resize_phi_node (tree *phi, int len) ...@@ -271,16 +276,8 @@ resize_phi_node (tree *phi, int len)
memcpy (new_phi, *phi, old_size); memcpy (new_phi, *phi, old_size);
old_len = PHI_ARG_CAPACITY (new_phi);
PHI_ARG_CAPACITY (new_phi) = len; 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; *phi = new_phi;
} }
......
...@@ -1405,7 +1405,7 @@ struct tree_phi_node GTY(()) ...@@ -1405,7 +1405,7 @@ struct tree_phi_node GTY(())
/* Dataflow information. */ /* Dataflow information. */
struct dataflow_d *df; 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];
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment