From patchwork Tue Jun 23 14:44:44 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 487664 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1445B140082 for ; Wed, 24 Jun 2015 00:44:56 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=TIQDQax6; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; q=dns; s=default; b=EPf k+oh8nl6womRntEnYL+umyfW1+fWKa+SFSo61rSMCPUEWfi0FwyHqDBXV5li1jCJ SZE6abfuWSGA+lYg7CfZGwCS+sTydFssSLAKRunYQbVZUG5RQTgGRK4J+rsjIxwH jjoZmuSDcqMffr99/P3iQKeN0Qi9cA+TwGKySxEI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type:content-transfer-encoding; s=default; bh=WWij7vMxK FHL3LlHAsozbHL+Ebw=; b=TIQDQax66tLD6g0R6iMl2mjIAIwjACUgT+T0GRLz9 7FbC93YLzn4tbKIfYAR+kDFKDBZ4MJH0cz/q9yEFGc6Kyo8QbG4Jd+/LV7CUElYD sYOiZM4s0NLh+77J3cBvk4SBzmIYyRunrfKkL9gnHkZTyeReNefgacCacwCQ5nx7 eE= Received: (qmail 9219 invoked by alias); 23 Jun 2015 14:44:49 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 9207 invoked by uid 89); 23 Jun 2015 14:44:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL, BAYES_00, KAM_ASCII_DIVIDERS, SPF_PASS autolearn=no version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (146.101.78.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 23 Jun 2015 14:44:47 +0000 Received: from cam-owa1.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.140]) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-1-cVc_tPjBQral0sA0uOMOOQ-1 Received: from localhost ([10.1.2.79]) by cam-owa1.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Tue, 23 Jun 2015 15:44:44 +0100 From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [02/12] Move tree operand hashers to a new header file References: <87egl2bicm.fsf@e105548-lin.cambridge.arm.com> Date: Tue, 23 Jun 2015 15:44:44 +0100 In-Reply-To: <87egl2bicm.fsf@e105548-lin.cambridge.arm.com> (Richard Sandiford's message of "Tue, 23 Jun 2015 15:38:17 +0100") Message-ID: <871th2bi1v.fsf@e105548-lin.cambridge.arm.com> User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-MC-Unique: cVc_tPjBQral0sA0uOMOOQ-1 There were three tree operand hashers, so move them to their own header file. The typedefs in this and subsequent patches are temporary and get removed in patch 12. 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. Index: gcc/tree-hash-traits.h =================================================================== --- /dev/null 2015-06-02 17:27:28.541944012 +0100 +++ gcc/tree-hash-traits.h 2015-06-23 15:44:07.966809173 +0100 @@ -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 Index: gcc/sanopt.c =================================================================== --- gcc/sanopt.c 2015-06-23 15:44:07.970809082 +0100 +++ gcc/sanopt.c 2015-06-23 15:44:07.962809243 +0100 @@ -50,6 +50,7 @@ Software Foundation; either version 3, o #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 @@ -98,20 +99,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 Index: gcc/tree-if-conv.c =================================================================== --- gcc/tree-if-conv.c 2015-06-23 15:44:07.970809082 +0100 +++ gcc/tree-if-conv.c 2015-06-23 15:44:07.966809173 +0100 @@ -135,6 +135,7 @@ Software Foundation; either version 3, o #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; @@ -1594,27 +1595,9 @@ convert_scalar_cond_reduction (gimple re 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, Index: gcc/tree-ssa-uncprop.c =================================================================== --- gcc/tree-ssa-uncprop.c 2015-06-23 15:44:07.970809082 +0100 +++ gcc/tree-ssa-uncprop.c 2015-06-23 15:44:07.966809173 +0100 @@ -50,6 +50,7 @@ the Free Software Foundation; either ver #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 @@ -294,25 +295,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