Commit d6a818c5 by Richard Sandiford Committed by Richard Sandiford

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
parent 4ef7b52a
2015-06-25 Richard Sandiford <richard.sandiford@arm.com> 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. * hash-map-traits.h: Include hash-traits.h.
(simple_hashmap_traits): New class. (simple_hashmap_traits): New class.
* mem-stats.h (hash_map): Change the default traits to * mem-stats.h (hash_map): Change the default traits to
......
...@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -48,6 +48,7 @@ along with GCC; see the file COPYING3. If not see
#include "ubsan.h" #include "ubsan.h"
#include "params.h" #include "params.h"
#include "tree-ssa-operands.h" #include "tree-ssa-operands.h"
#include "tree-hash-traits.h"
/* This is used to carry information about basic blocks. It is /* This is used to carry information about basic blocks. It is
...@@ -96,20 +97,7 @@ maybe_get_single_definition (tree t) ...@@ -96,20 +97,7 @@ maybe_get_single_definition (tree t)
return NULL_TREE; return NULL_TREE;
} }
/* Traits class for tree hash maps below. */ typedef simple_hashmap_traits <tree_operand_hash> sanopt_tree_map_traits;
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);
}
};
/* Tree triplet for vptr_check_map. */ /* Tree triplet for vptr_check_map. */
struct sanopt_tree_triplet struct sanopt_tree_triplet
......
/* 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
...@@ -133,6 +133,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -133,6 +133,7 @@ along with GCC; see the file COPYING3. If not see
#include "expr.h" #include "expr.h"
#include "insn-codes.h" #include "insn-codes.h"
#include "optabs.h" #include "optabs.h"
#include "tree-hash-traits.h"
/* List of basic blocks in if-conversion-suitable order. */ /* List of basic blocks in if-conversion-suitable order. */
static basic_block *ifc_bbs; static basic_block *ifc_bbs;
...@@ -1588,27 +1589,9 @@ convert_scalar_cond_reduction (gimple reduc, gimple_stmt_iterator *gsi, ...@@ -1588,27 +1589,9 @@ convert_scalar_cond_reduction (gimple reduc, gimple_stmt_iterator *gsi,
return rhs; 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 /* Produce condition for all occurrences of ARG in PHI node. */
{
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. */
static tree static tree
gen_phi_arg_condition (gphi *phi, vec<int> *occur, gen_phi_arg_condition (gphi *phi, vec<int> *occur,
......
...@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see
#include "domwalk.h" #include "domwalk.h"
#include "tree-pass.h" #include "tree-pass.h"
#include "tree-ssa-propagate.h" #include "tree-ssa-propagate.h"
#include "tree-hash-traits.h"
/* The basic structure describing an equivalency created by traversing /* The basic structure describing an equivalency created by traversing
an edge. Traversing the edge effectively means that we can assume an edge. Traversing the edge effectively means that we can assume
...@@ -291,25 +292,11 @@ struct equiv_hash_elt ...@@ -291,25 +292,11 @@ struct equiv_hash_elt
/* Value to ssa name equivalence hashtable helpers. */ /* 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 &); 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. */ /* Free an instance of equiv_hash_elt. */
template<typename T> template<typename T>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment