mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-30 23:35:00 +08:00
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
This commit is contained in:
parent
4ef7b52a93
commit
d6a818c59e
@ -1,3 +1,14 @@
|
||||
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.
|
||||
|
16
gcc/sanopt.c
16
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
|
||||
|
42
gcc/tree-hash-traits.h
Normal file
42
gcc/tree-hash-traits.h
Normal file
@ -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
|
@ -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,
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user