]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-sccvn.c (struct vn_binary_op_s): Move hashcode near opcode.
authorRichard Guenther <rguenther@suse.de>
Fri, 11 Jan 2008 13:36:53 +0000 (13:36 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 11 Jan 2008 13:36:53 +0000 (13:36 +0000)
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.

From-SVN: r131462

gcc/ChangeLog
gcc/tree-ssa-sccvn.c

index 0e5dbd6cf5b5abd6dc6569972435b1bff23824e3..7d9f5e74cfdc0bc74f9d9feb74a01193096ab051 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2008-01-10  Raksit Ashok  <raksit@google.com>
 
        PR rtl-optimization/27971
index e1d4af11fee7c90c6784a63fd52043326b1d8450..7f566dba8e1c417c71d401f1dd8d7a175e3eb1f8 100644 (file)
@@ -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