From patchwork Wed Nov 23 15:12:38 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: 83694 Delivered-To: patch@linaro.org Received: by 10.182.1.168 with SMTP id 8csp2765677obn; Wed, 23 Nov 2016 07:13:06 -0800 (PST) X-Received: by 10.98.149.140 with SMTP id c12mr3337500pfk.100.1479913986744; Wed, 23 Nov 2016 07:13:06 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id t27si34231021pfa.146.2016.11.23.07.13.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Nov 2016 07:13:06 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-442393-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-442393-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-442393-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=Uca4XCZ3mXwXdMLLw BjMyeIU62tIUp+YnlNa+7J47iVgIcmQ2TJiHAV6jVfloObtqKFnmT4WGX45PEouc aC1KI0906Lsw6DR1y0h9RHwEhuWHa05s3R77qAwYpQ9byeJLZv9T3wfelE+AGOXr 7ohL4M8HfCv7nbP7rocV1IW4CI= 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=1ZxLXF/VLWtnhboCfRmscRb GpDc=; b=Q8Mi2JCJ7cFplEIeX1494dEfRDeCkc0lC4U7dkRz+/h4SQf0x4er6h3 2L4zV8dXLzgihhwknofhGseqJgSwgSp7yncnPT9fzB+o+1HU0NEpUBzJ6zVAmyhV 9pw9ZWovuDtBjn8SI+bme1slycceUjty0aALLCZ4w8tWueQ3Kqug= Received: (qmail 11674 invoked by alias); 23 Nov 2016 15:12:52 -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 11659 invoked by uid 89); 23 Nov 2016 15:12:52 -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=19517, 1703, 7, 17037, 1951, 7 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, 23 Nov 2016 15:12:42 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id B4E22ABC7; Wed, 23 Nov 2016 15:12:38 +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> <9bf3b48e-593a-e406-ce11-6841b7aa0522@suse.cz> <20161121155039.GE85823@kam.mff.cuni.cz> Cc: GCC Patches , Markus Trippelsdorf From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Message-ID: Date: Wed, 23 Nov 2016 16:12:38 +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: <20161121155039.GE85823@kam.mff.cuni.cz> X-IsSubscribed: yes On 11/21/2016 04:50 PM, Jan Hubicka wrote: > OK, > thanks! > Honza Hi. Patch to trunk is already installed. Equal patch can be installed to gcc-6 branch, however gcc-5 branch needs more hunks to be adjusted. I did so, both patches survive regression tests and the patch for gcc-5 provides equal results for gimp w/ -flto and -O2. Ready to be installed to both branches? Thanks, Martin >From 558a24520f0b41d6835badc79a20f9ce150f95ea 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 8a18c2b..d143141 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. */ @@ -1703,7 +1693,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 (); @@ -1806,19 +1796,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 ()); @@ -2103,7 +2086,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 (); @@ -2115,7 +2098,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 @@ -2282,8 +2265,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); @@ -2403,13 +2387,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.2