diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdfe9d0a8db..9087350f2cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-06-25 Richard Sandiford + + * tree-hash-traits.h: New file. + (tree_operand_hash): New class. + * sanopt.c: Include tree-hash-traits.h. + (sanopt_tree_map_traits): Use tree_operand_hash. + * tree-if-conv.c: Include tree-hash-traits.h. + (phi_args_hash_traits): Use tree_operand_hash. + * tree-ssa-uncprop.c: Include tree-hash-traits.h. + (val_ssa_equiv_hash_traits): Use tree_operand_hash. + 2015-06-25 Richard Sandiford * hash-map-traits.h: Include hash-traits.h. diff --git a/gcc/sanopt.c b/gcc/sanopt.c index e1c30e1d765..f0ca8e00dd8 100644 --- a/gcc/sanopt.c +++ b/gcc/sanopt.c @@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see #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 @@ -96,20 +97,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 sanopt_tree_map_traits; /* Tree triplet for vptr_check_map. */ struct sanopt_tree_triplet diff --git a/gcc/tree-hash-traits.h b/gcc/tree-hash-traits.h new file mode 100644 index 00000000000..eab8c300d5e --- /dev/null +++ b/gcc/tree-hash-traits.h @@ -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 +. */ + +#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 +{ + 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 diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index e0ac936d72c..59853c8adde 100644 --- a/gcc/tree-if-conv.c +++ b/gcc/tree-if-conv.c @@ -133,6 +133,7 @@ along with GCC; see the file COPYING3. If not see #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; @@ -1588,27 +1589,9 @@ convert_scalar_cond_reduction (gimple reduc, gimple_stmt_iterator *gsi, return rhs; } -/* Helpers for PHI arguments hashtable map. */ +typedef simple_hashmap_traits 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 *occur, diff --git a/gcc/tree-ssa-uncprop.c b/gcc/tree-ssa-uncprop.c index 4e7730d4ba9..cf03a54ae54 100644 --- a/gcc/tree-ssa-uncprop.c +++ b/gcc/tree-ssa-uncprop.c @@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see #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 @@ -291,25 +292,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 { - static inline hashval_t hash (tree); - static inline bool equal_keys (tree, tree); template 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