From: Andi Kleen Date: Fri, 1 Aug 2014 02:52:41 +0000 (+0000) Subject: Convert tree-ssa-sccvn to inchash X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4e44a6e8bda25afc8a097222fe3e5c4ef66a0e8a;p=gcc.git Convert tree-ssa-sccvn to inchash gcc/: 2014-07-31 Andi Kleen * tree-ssa-sccvn.c (vn_reference_op_compute_hash): Convert to inchash. (vn_reference_compute_hash): Dito. (vn_nary_op_compute_hash): Dito. (vn_phi_compute_hash): Dito. * tree-ssa-sccvn.h (vn_hash_constant_with_type): Dito. From-SVN: r213399 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f68593cfd6..331cd45f40c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-07-31 Andi Kleen + + * tree-ssa-sccvn.c (vn_reference_op_compute_hash): Convert to + inchash. + (vn_reference_compute_hash): Dito. + (vn_nary_op_compute_hash): Dito. + (vn_phi_compute_hash): Dito. + * tree-ssa-sccvn.h (vn_hash_constant_with_type): Dito. + 2014-07-31 Andi Kleen * tree-ssa-dom.c (iterative_hash_exprs_commutative): diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 93314fc70e8..ec0bf6b402d 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -594,17 +594,16 @@ value_id_constant_p (unsigned int v) /* Compute the hash for a reference operand VRO1. */ -static hashval_t -vn_reference_op_compute_hash (const vn_reference_op_t vro1, hashval_t result) +static void +vn_reference_op_compute_hash (const vn_reference_op_t vro1, inchash::hash &hstate) { - result = iterative_hash_hashval_t (vro1->opcode, result); + hstate.add_int (vro1->opcode); if (vro1->op0) - result = iterative_hash_expr (vro1->op0, result); + inchash::add_expr (vro1->op0, hstate); if (vro1->op1) - result = iterative_hash_expr (vro1->op1, result); + inchash::add_expr (vro1->op1, hstate); if (vro1->op2) - result = iterative_hash_expr (vro1->op2, result); - return result; + inchash::add_expr (vro1->op2, hstate); } /* Compute a hash for the reference operation VR1 and return it. */ @@ -612,7 +611,8 @@ vn_reference_op_compute_hash (const vn_reference_op_t vro1, hashval_t result) hashval_t vn_reference_compute_hash (const vn_reference_t vr1) { - hashval_t result = 0; + inchash::hash hstate; + hashval_t result; int i; vn_reference_op_t vro; HOST_WIDE_INT off = -1; @@ -634,7 +634,7 @@ vn_reference_compute_hash (const vn_reference_t vr1) { if (off != -1 && off != 0) - result = iterative_hash_hashval_t (off, result); + hstate.add_int (off); off = -1; if (deref && vro->opcode == ADDR_EXPR) @@ -642,14 +642,16 @@ vn_reference_compute_hash (const vn_reference_t vr1) if (vro->op0) { tree op = TREE_OPERAND (vro->op0, 0); - result = iterative_hash_hashval_t (TREE_CODE (op), result); - result = iterative_hash_expr (op, result); + hstate.add_int (TREE_CODE (op)); + inchash::add_expr (op, hstate); } } else - result = vn_reference_op_compute_hash (vro, result); + vn_reference_op_compute_hash (vro, hstate); } } + result = hstate.end (); + /* ??? We would ICE later if we hash instead of adding that in. */ if (vr1->vuse) result += SSA_NAME_VERSION (vr1->vuse); @@ -2236,7 +2238,7 @@ vn_reference_insert_pieces (tree vuse, alias_set_type set, tree type, hashval_t vn_nary_op_compute_hash (const vn_nary_op_t vno1) { - hashval_t hash; + inchash::hash hstate; unsigned i; for (i = 0; i < vno1->length; ++i) @@ -2252,11 +2254,11 @@ vn_nary_op_compute_hash (const vn_nary_op_t vno1) vno1->op[1] = temp; } - hash = iterative_hash_hashval_t (vno1->opcode, 0); + hstate.add_int (vno1->opcode); for (i = 0; i < vno1->length; ++i) - hash = iterative_hash_expr (vno1->op[i], hash); + inchash::add_expr (vno1->op[i], hstate); - return hash; + return hstate.end (); } /* Compare nary operations VNO1 and VNO2 and return true if they are @@ -2536,26 +2538,24 @@ vn_nary_op_insert_stmt (gimple stmt, tree result) static inline hashval_t vn_phi_compute_hash (vn_phi_t vp1) { - hashval_t result; + inchash::hash hstate (vp1->block->index); int i; tree phi1op; tree type; - result = vp1->block->index; - /* If all PHI arguments are constants we need to distinguish the PHI node via its type. */ type = vp1->type; - result += vn_hash_type (type); + hstate.merge_hash (vn_hash_type (type)); FOR_EACH_VEC_ELT (vp1->phiargs, i, phi1op) { if (phi1op == VN_TOP) continue; - result = iterative_hash_expr (phi1op, result); + inchash::add_expr (phi1op, hstate); } - return result; + return hstate.end (); } /* Compare two phi entries for equality, ignoring VN_TOP arguments. */ diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h index f52783a68cf..84ea278f846 100644 --- a/gcc/tree-ssa-sccvn.h +++ b/gcc/tree-ssa-sccvn.h @@ -140,8 +140,10 @@ vn_hash_type (tree type) static inline hashval_t vn_hash_constant_with_type (tree constant) { - return (iterative_hash_expr (constant, 0) - + vn_hash_type (TREE_TYPE (constant))); + inchash::hash hstate; + inchash::add_expr (constant, hstate); + hstate.merge_hash (vn_hash_type (TREE_TYPE (constant))); + return hstate.end (); } /* Compare the constants C1 and C2 with distinguishing type incompatible