diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2004-10-29 14:05:43 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2004-10-29 14:05:43 +0000 |
commit | c24a4dcffae67ad72dbf83ee872abe34acaa725e (patch) | |
tree | f850779f7e0847588424ea3a7b14bd3e933cc19d /gcc | |
parent | fe94b6534a05d437259a17ba37e3fa50f649fe84 (diff) | |
download | gcc-c24a4dcffae67ad72dbf83ee872abe34acaa725e.zip gcc-c24a4dcffae67ad72dbf83ee872abe34acaa725e.tar.gz gcc-c24a4dcffae67ad72dbf83ee872abe34acaa725e.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-phinodes.c | 17 | ||||
-rw-r--r-- | gcc/tree.h | 2 |
3 files changed, 15 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b88ed38..fb4b35c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/tree-phinodes.c b/gcc/tree-phinodes.c index 1cc613c..f45479e 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; } @@ -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]; }; |