From patchwork Wed Nov 16 12:58:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 82499 Delivered-To: patch@linaro.org Received: by 10.140.97.165 with SMTP id m34csp137349qge; Wed, 16 Nov 2016 04:59:24 -0800 (PST) X-Received: by 10.99.120.13 with SMTP id t13mr7819704pgc.17.1479301164833; Wed, 16 Nov 2016 04:59:24 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id 15si31814467pgh.231.2016.11.16.04.59.24 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 16 Nov 2016 04:59:24 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-441630-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-441630-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-441630-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=GaVWZKO+X/r5s/hop gOz7NMD+J2t0vzDUyXGGjQHYfpxfwXoWn3lMNykfLxLBgwFIaSQ/s1lARa0ndLVs c2wOifAB31/miJj/3W5HkUdiRoyXotEGroUDnHpV3O8Bq/XV+iJlY5Ilh127dmBP Au946cXIkjnISZQLGnkOr7wvuE= 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 :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=6rsZ3Iv7UycUJKdQAZiVIqh LJ0Y=; b=YFvG27WFg/jCcZT46Hlm2UnP53OZqPkalWkaK66JcOa6RZBR26cHeqV KBk/eWkRnFp5xltEDozDJ5+zI1e6SBTx8EbVaqeOhmcz+F41NQRqGsDjKDcOe4mN i9Tz+zviYCpq4U/a8U71keu6dLS9gO2+Dvm5bl9DNfS+QHILws00= Received: (qmail 43958 invoked by alias); 16 Nov 2016 12:59:09 -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 43931 invoked by uid 89); 16 Nov 2016 12:59:07 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00, SPF_PASS autolearn=ham version=3.3.2 spammy=Hubicka X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 16 Nov 2016 12:58:57 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id A6A48AC1A; Wed, 16 Nov 2016 12:58:51 +0000 (UTC) Subject: Re: [PATCH] Add sem_item::m_hash_set (PR ipa/78309) (v2) To: Jan Hubicka References: <20161115164603.GB79037@kam.mff.cuni.cz> Cc: GCC Patches , Markus Trippelsdorf From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: <9bf3b48e-593a-e406-ce11-6841b7aa0522@suse.cz> Date: Wed, 16 Nov 2016 13:58:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <20161115164603.GB79037@kam.mff.cuni.cz> X-IsSubscribed: yes On 11/15/2016 05:46 PM, Jan Hubicka wrote: > Yep, zero is definitly valid hash value:0 > > Patch is OK. We may consider backporting it to release branches. > Honza Thanks, sending v2 as I found an error in the previous version. Changes from last version: - comments for ctors are just in header file, not duplicated in ipa-icf.c - hash argument has been removed from ctors - ctors GNU coding style has been fixed and unified Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. Ready to be installed? Martin >From 5be0ca49cfa67ca848002d6fe008ef4c2885bd40 Mon Sep 17 00:00:00 2001 From: marxin Date: Fri, 11 Nov 2016 16:15:20 +0100 Subject: [PATCH] Add sem_item::m_hash_set (PR ipa/78309) gcc/ChangeLog: 2016-11-16 Martin Liska PR ipa/78309 * ipa-icf.c (void sem_item::set_hash): Update m_hash_set. (sem_function::get_hash): Use the new field. (sem_function::parse): Remove an argument from ctor. (sem_variable::parse): Likewise. (sem_variable::get_hash): Use the new field. (sem_item_optimizer::read_section): Use new ctor and set hash. * ipa-icf.h: _hash is removed from sem_item::sem_item, sem_variable::sem_variable, sem_function::sem_function. --- gcc/ipa-icf.c | 64 ++++++++++++++++++++++++----------------------------------- gcc/ipa-icf.h | 17 ++++++++-------- 2 files changed, 35 insertions(+), 46 deletions(-) diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 1ab67f3..212e406 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -131,27 +131,20 @@ symbol_compare_collection::symbol_compare_collection (symtab_node *node) /* Constructor for key value pair, where _ITEM is key and _INDEX is a target. */ -sem_usage_pair::sem_usage_pair (sem_item *_item, unsigned int _index): - item (_item), index (_index) +sem_usage_pair::sem_usage_pair (sem_item *_item, unsigned int _index) +: item (_item), index (_index) { } -/* Semantic item constructor for a node of _TYPE, where STACK is used - for bitmap memory allocation. */ - -sem_item::sem_item (sem_item_type _type, - bitmap_obstack *stack): type (_type), m_hash (0) +sem_item::sem_item (sem_item_type _type, bitmap_obstack *stack) +: type (_type), m_hash (-1), m_hash_set (false) { setup (stack); } -/* Semantic item constructor for a node of _TYPE, where STACK is used - for bitmap memory allocation. The item is based on symtab node _NODE - with computed _HASH. */ - sem_item::sem_item (sem_item_type _type, symtab_node *_node, - hashval_t _hash, bitmap_obstack *stack): type(_type), - node (_node), m_hash (_hash) + bitmap_obstack *stack) +: type (_type), node (_node), m_hash (-1), m_hash_set (false) { decl = node->decl; setup (stack); @@ -230,23 +223,20 @@ sem_item::target_supports_symbol_aliases_p (void) void sem_item::set_hash (hashval_t hash) { m_hash = hash; + m_hash_set = true; } /* Semantic function constructor that uses STACK as bitmap memory stack. */ -sem_function::sem_function (bitmap_obstack *stack): sem_item (FUNC, stack), - m_checker (NULL), m_compared_func (NULL) +sem_function::sem_function (bitmap_obstack *stack) +: sem_item (FUNC, stack), m_checker (NULL), m_compared_func (NULL) { bb_sizes.create (0); bb_sorted.create (0); } -/* Constructor based on callgraph node _NODE with computed hash _HASH. - Bitmap STACK is used for memory allocation. */ -sem_function::sem_function (cgraph_node *node, hashval_t hash, - bitmap_obstack *stack): - sem_item (FUNC, node, hash, stack), - m_checker (NULL), m_compared_func (NULL) +sem_function::sem_function (cgraph_node *node, bitmap_obstack *stack) +: sem_item (FUNC, node, stack), m_checker (NULL), m_compared_func (NULL) { bb_sizes.create (0); bb_sorted.create (0); @@ -279,7 +269,7 @@ sem_function::get_bb_hash (const sem_bb *basic_block) hashval_t sem_function::get_hash (void) { - if (!m_hash) + if (!m_hash_set) { inchash::hash hstate; hstate.add_int (177454); /* Random number for function type. */ @@ -1704,7 +1694,7 @@ sem_function::parse (cgraph_node *node, bitmap_obstack *stack) || DECL_STATIC_DESTRUCTOR (node->decl)) return NULL; - sem_function *f = new sem_function (node, 0, stack); + sem_function *f = new sem_function (node, stack); f->init (); @@ -1807,19 +1797,12 @@ sem_function::bb_dict_test (vec *bb_dict, int source, int target) return (*bb_dict)[source] == target; } - -/* Semantic variable constructor that uses STACK as bitmap memory stack. */ - sem_variable::sem_variable (bitmap_obstack *stack): sem_item (VAR, stack) { } -/* Constructor based on varpool node _NODE with computed hash _HASH. - Bitmap STACK is used for memory allocation. */ - -sem_variable::sem_variable (varpool_node *node, hashval_t _hash, - bitmap_obstack *stack): sem_item(VAR, - node, _hash, stack) +sem_variable::sem_variable (varpool_node *node, bitmap_obstack *stack) +: sem_item (VAR, node, stack) { gcc_checking_assert (node); gcc_checking_assert (get_node ()); @@ -2104,7 +2087,7 @@ sem_variable::parse (varpool_node *node, bitmap_obstack *stack) || node->alias) return NULL; - sem_variable *v = new sem_variable (node, 0, stack); + sem_variable *v = new sem_variable (node, stack); v->init (); @@ -2116,7 +2099,7 @@ sem_variable::parse (varpool_node *node, bitmap_obstack *stack) hashval_t sem_variable::get_hash (void) { - if (m_hash) + if (m_hash_set) return m_hash; /* All WPA streamed in symbols should have their hashes computed at compile @@ -2296,8 +2279,9 @@ sem_variable::dump_to_file (FILE *file) unsigned int sem_item_optimizer::class_id = 0; -sem_item_optimizer::sem_item_optimizer (): worklist (0), m_classes (0), - m_classes_count (0), m_cgraph_node_hooks (NULL), m_varpool_node_hooks (NULL) +sem_item_optimizer::sem_item_optimizer () +: worklist (0), m_classes (0), m_classes_count (0), m_cgraph_node_hooks (NULL), + m_varpool_node_hooks (NULL) { m_items.create (0); bitmap_obstack_initialize (&m_bmstack); @@ -2417,13 +2401,17 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data, { cgraph_node *cnode = dyn_cast (node); - m_items.safe_push (new sem_function (cnode, hash, &m_bmstack)); + sem_function *fn = new sem_function (cnode, &m_bmstack); + fn->set_hash (hash); + m_items.safe_push (fn); } else { varpool_node *vnode = dyn_cast (node); - m_items.safe_push (new sem_variable (vnode, hash, &m_bmstack)); + sem_variable *var = new sem_variable (vnode, &m_bmstack); + var->set_hash (hash); + m_items.safe_push (var); } } diff --git a/gcc/ipa-icf.h b/gcc/ipa-icf.h index d8de655..e02381c 100644 --- a/gcc/ipa-icf.h +++ b/gcc/ipa-icf.h @@ -151,10 +151,8 @@ public: sem_item (sem_item_type _type, bitmap_obstack *stack); /* Semantic item constructor for a node of _TYPE, where STACK is used - for bitmap memory allocation. The item is based on symtab node _NODE - with computed _HASH. */ - sem_item (sem_item_type _type, symtab_node *_node, hashval_t _hash, - bitmap_obstack *stack); + for bitmap memory allocation. The item is based on symtab node _NODE. */ + sem_item (sem_item_type _type, symtab_node *_node, bitmap_obstack *stack); virtual ~sem_item (); @@ -274,6 +272,9 @@ protected: /* Hash of item. */ hashval_t m_hash; + /* Indicated whether a hash value has been set or not. */ + bool m_hash_set; + private: /* Initialize internal data structures. Bitmap STACK is used for bitmap memory allocation process. */ @@ -286,9 +287,9 @@ public: /* Semantic function constructor that uses STACK as bitmap memory stack. */ sem_function (bitmap_obstack *stack); - /* Constructor based on callgraph node _NODE with computed hash _HASH. + /* Constructor based on callgraph node _NODE. Bitmap STACK is used for memory allocation. */ - sem_function (cgraph_node *_node, hashval_t _hash, bitmap_obstack *stack); + sem_function (cgraph_node *_node, bitmap_obstack *stack); ~sem_function (); @@ -394,10 +395,10 @@ public: /* Semantic variable constructor that uses STACK as bitmap memory stack. */ sem_variable (bitmap_obstack *stack); - /* Constructor based on callgraph node _NODE with computed hash _HASH. + /* Constructor based on callgraph node _NODE. Bitmap STACK is used for memory allocation. */ - sem_variable (varpool_node *_node, hashval_t _hash, bitmap_obstack *stack); + sem_variable (varpool_node *_node, bitmap_obstack *stack); inline virtual void init_wpa (void) {} -- 2.10.1