diff options
author | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-11 13:36:53 +0000 |
---|---|---|
committer | rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-01-11 13:36:53 +0000 |
commit | 12661815bc81f7685cbcaf1d5e6eee9fe2119533 (patch) | |
tree | 0c2eb0c12ff7e6f1df85bd4a8935956adc003fb3 /gcc/tree-ssa-sccvn.c | |
parent | 90ca50da0b1342f908384cd92fcebd32727a6859 (diff) | |
download | gcc-12661815bc81f7685cbcaf1d5e6eee9fe2119533.tar.gz |
2008-01-11 Richard Guenther <rguenther@suse.de>
* tree-ssa-sccvn.c (struct vn_binary_op_s): Move hashcode near opcode.
(struct vn_unary_op_s): Likewise.
(vn_reference_insert): Free old reference on hash collision.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131462 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index e1d4af11fee..7f566dba8e1 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -125,10 +125,10 @@ typedef struct vn_tables_s typedef struct vn_binary_op_s { enum tree_code opcode; + hashval_t hashcode; tree type; tree op0; tree op1; - hashval_t hashcode; tree result; } *vn_binary_op_t; typedef const struct vn_binary_op_s *const_vn_binary_op_t; @@ -140,9 +140,9 @@ typedef const struct vn_binary_op_s *const_vn_binary_op_t; typedef struct vn_unary_op_s { enum tree_code opcode; + hashval_t hashcode; tree type; tree op0; - hashval_t hashcode; tree result; } *vn_unary_op_t; typedef const struct vn_unary_op_s *const_vn_unary_op_t; @@ -280,6 +280,24 @@ VN_INFO_GET (tree name) } +/* Free a phi operation structure VP. */ + +static void +free_phi (void *vp) +{ + vn_phi_t phi = vp; + VEC_free (tree, heap, phi->phiargs); +} + +/* Free a reference operation structure VP. */ + +static void +free_reference (void *vp) +{ + vn_reference_t vr = vp; + VEC_free (vn_reference_op_s, heap, vr->operands); +} + /* Compare two reference operands P1 and P2 for equality. return true if they are equal, and false otherwise. */ @@ -691,6 +709,9 @@ vn_reference_insert (tree op, tree result, VEC (tree, gc) *vuses) the other lookup functions, you cannot gcc_assert (!*slot) here. */ + /* But free the old slot in case of a collision. */ + if (*slot) + free_reference (*slot); *slot = vr1; } @@ -1927,23 +1948,6 @@ DFS (tree name) return true; } -static void -free_phi (void *vp) -{ - vn_phi_t phi = vp; - VEC_free (tree, heap, phi->phiargs); -} - - -/* Free a reference operation structure VP. */ - -static void -free_reference (void *vp) -{ - vn_reference_t vr = vp; - VEC_free (vn_reference_op_s, heap, vr->operands); -} - /* Allocate a value number table. */ static void |