diff options
author | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-29 14:05:43 +0000 |
---|---|---|
committer | kazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-29 14:05:43 +0000 |
commit | ebfac782ee8b6eba04e02969ce46e3d402ed297e (patch) | |
tree | f850779f7e0847588424ea3a7b14bd3e933cc19d /gcc/tree-phinodes.c | |
parent | 9eb0191ea203f5ceebe503ee90d2aebe8ded254d (diff) | |
download | gcc-ebfac782ee8b6eba04e02969ce46e3d402ed297e.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89844 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-phinodes.c')
-rw-r--r-- | gcc/tree-phinodes.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c index 1cc613cc4af..f45479e1708 100644 --- a/gcc/tree-phinodes.c +++ b/gcc/tree-phinodes.c @@ -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; } |