===================================================================
@@ -0,0 +1,42 @@
+/* Traits for hashing trees.
+ Copyright (C) 2014-2015 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef tree_hash_traits_h
+#define tree_hash_traits_h
+
+/* Hash for trees based on operand_equal_p. */
+struct tree_operand_hash : ggc_ptr_hash <tree_node>
+{
+ static inline hashval_t hash (const_tree);
+ static inline bool equal_keys (const_tree, const_tree);
+};
+
+inline hashval_t
+tree_operand_hash::hash (const_tree t)
+{
+ return iterative_hash_expr (t, 0);
+}
+
+inline bool
+tree_operand_hash::equal_keys (const_tree t1, const_tree t2)
+{
+ return operand_equal_p (t1, t2, 0);
+}
+
+#endif
===================================================================
@@ -50,6 +50,7 @@ Software Foundation; either version 3, o
#include "ubsan.h"
#include "params.h"
#include "tree-ssa-operands.h"
+#include "tree-hash-traits.h"
/* This is used to carry information about basic blocks. It is
@@ -98,20 +99,7 @@ maybe_get_single_definition (tree t)
return NULL_TREE;
}
-/* Traits class for tree hash maps below. */
-
-struct sanopt_tree_map_traits : default_hashmap_traits
-{
- static inline hashval_t hash (const_tree ref)
- {
- return iterative_hash_expr (ref, 0);
- }
-
- static inline bool equal_keys (const_tree ref1, const_tree ref2)
- {
- return operand_equal_p (ref1, ref2, 0);
- }
-};
+typedef simple_hashmap_traits <tree_operand_hash> sanopt_tree_map_traits;
/* Tree triplet for vptr_check_map. */
struct sanopt_tree_triplet
===================================================================
@@ -135,6 +135,7 @@ Software Foundation; either version 3, o
#include "expr.h"
#include "insn-codes.h"
#include "optabs.h"
+#include "tree-hash-traits.h"
/* List of basic blocks in if-conversion-suitable order. */
static basic_block *ifc_bbs;
@@ -1594,27 +1595,9 @@ convert_scalar_cond_reduction (gimple re
return rhs;
}
-/* Helpers for PHI arguments hashtable map. */
+typedef simple_hashmap_traits <tree_operand_hash> phi_args_hash_traits;
-struct phi_args_hash_traits : default_hashmap_traits
-{
- static inline hashval_t hash (tree);
- static inline bool equal_keys (tree, tree);
-};
-
-inline hashval_t
-phi_args_hash_traits::hash (tree value)
-{
- return iterative_hash_expr (value, 0);
-}
-
-inline bool
-phi_args_hash_traits::equal_keys (tree value1, tree value2)
-{
- return operand_equal_p (value1, value2, 0);
-}
-
- /* Produce condition for all occurrences of ARG in PHI node. */
+/* Produce condition for all occurrences of ARG in PHI node. */
static tree
gen_phi_arg_condition (gphi *phi, vec<int> *occur,
===================================================================
@@ -50,6 +50,7 @@ the Free Software Foundation; either ver
#include "domwalk.h"
#include "tree-pass.h"
#include "tree-ssa-propagate.h"
+#include "tree-hash-traits.h"
/* The basic structure describing an equivalency created by traversing
an edge. Traversing the edge effectively means that we can assume
@@ -294,25 +295,11 @@ struct equiv_hash_elt
/* Value to ssa name equivalence hashtable helpers. */
-struct val_ssa_equiv_hash_traits : default_hashmap_traits
+struct val_ssa_equiv_hash_traits : simple_hashmap_traits <tree_operand_hash>
{
- static inline hashval_t hash (tree);
- static inline bool equal_keys (tree, tree);
template<typename T> static inline void remove (T &);
};
-inline hashval_t
-val_ssa_equiv_hash_traits::hash (tree value)
-{
- return iterative_hash_expr (value, 0);
-}
-
-inline bool
-val_ssa_equiv_hash_traits::equal_keys (tree value1, tree value2)
-{
- return operand_equal_p (value1, value2, 0);
-}
-
/* Free an instance of equiv_hash_elt. */
template<typename T>