diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-06-25 17:15:44 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-06-25 17:15:44 +0000 |
commit | d6a818c59e002f76f237ad305bf4b73a415dcb3c (patch) | |
tree | eb230717d9cde4170f937a1e9235ca357475e5be /gcc | |
parent | 4ef7b52a932fffd5a43c26183515dcafc735c9a2 (diff) | |
download | gcc-d6a818c59e002f76f237ad305bf4b73a415dcb3c.zip gcc-d6a818c59e002f76f237ad305bf4b73a415dcb3c.tar.gz gcc-d6a818c59e002f76f237ad305bf4b73a415dcb3c.tar.bz2 |
tree-hash-traits.h: New file.
gcc/
* 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.
From-SVN: r224967
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/sanopt.c | 16 | ||||
-rw-r--r-- | gcc/tree-hash-traits.h | 42 | ||||
-rw-r--r-- | gcc/tree-if-conv.c | 23 | ||||
-rw-r--r-- | gcc/tree-ssa-uncprop.c | 17 |
5 files changed, 60 insertions, 49 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdfe9d0..9087350 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2015-06-25 Richard Sandiford <richard.sandiford@arm.com> + * 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 <richard.sandiford@arm.com> + * hash-map-traits.h: Include hash-traits.h. (simple_hashmap_traits): New class. * mem-stats.h (hash_map): Change the default traits to diff --git a/gcc/sanopt.c b/gcc/sanopt.c index e1c30e1..f0ca8e0 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 <tree_operand_hash> 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 0000000..eab8c30 --- /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 +<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 diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c index e0ac936..59853c8 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 <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, diff --git a/gcc/tree-ssa-uncprop.c b/gcc/tree-ssa-uncprop.c index 4e7730d..cf03a54 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 <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> |