summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-sccvn.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-11 13:36:53 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2008-01-11 13:36:53 +0000
commit12661815bc81f7685cbcaf1d5e6eee9fe2119533 (patch)
tree0c2eb0c12ff7e6f1df85bd4a8935956adc003fb3 /gcc/tree-ssa-sccvn.c
parent90ca50da0b1342f908384cd92fcebd32727a6859 (diff)
downloadgcc-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.c42
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