From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6748 invoked by alias); 18 Jan 2017 22:18:38 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 6738 invoked by uid 89); 18 Jan 2017 22:18:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.8 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy=ADDR_EXPR, addr_expr X-HELO: nikam.ms.mff.cuni.cz Received: from nikam.ms.mff.cuni.cz (HELO nikam.ms.mff.cuni.cz) (195.113.20.16) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 18 Jan 2017 22:18:27 +0000 Received: by nikam.ms.mff.cuni.cz (Postfix, from userid 16202) id 4D1DE542B5C; Wed, 18 Jan 2017 23:18:25 +0100 (CET) Date: Wed, 18 Jan 2017 22:32:00 -0000 From: Jan Hubicka To: Martin =?iso-8859-2?Q?Li=B9ka?= Cc: GCC Patches , Jan Hubicka Subject: Re: [PATCH] Fix IPA CP where it forgot to add a reference in cgraph Message-ID: <20170118221825.GC91755@kam.mff.cuni.cz> References: <6421e992-7681-1456-2a73-ba79fd8b00c1@suse.cz> <20161220100634.xmespxfr2nurhilo@virgil.suse.cz> <87b66126-34a7-4935-d078-a14d979b3c9a@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87b66126-34a7-4935-d078-a14d979b3c9a@suse.cz> User-Agent: Mutt/1.5.23 (2014-03-12) X-SW-Source: 2017-01/txt/msg01408.txt.bz2 > > 2016-12-19 Martin Liska > > * cgraphclones.c (cgraph_node::create_virtual_clone): > Create either IPA_REF_LOAD of IPA_REF_READ depending on > whether new_tree is a VAR_DECL or an ADDR_EXPR. > * ipa-cp.c (create_specialized_node): Add reference just for > ADDR_EXPRs. > * symtab.c (symtab_node::maybe_create_reference): Remove guard > as it's guarded in callers. > --- > gcc/cgraphclones.c | 6 +++++- > gcc/ipa-cp.c | 3 ++- > gcc/symtab.c | 2 -- > 3 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c > index 349892dab67..6c8fe156f23 100644 > --- a/gcc/cgraphclones.c > +++ b/gcc/cgraphclones.c > @@ -624,7 +624,11 @@ cgraph_node::create_virtual_clone (vec redirect_callers, > || in_lto_p) > new_node->unique_name = true; > FOR_EACH_VEC_SAFE_ELT (tree_map, i, map) > - new_node->maybe_create_reference (map->new_tree, IPA_REF_ADDR, NULL); > + { > + ipa_ref_use use_type > + = TREE_CODE (map->new_tree) == ADDR_EXPR ? IPA_REF_ADDR : IPA_REF_LOAD; > + new_node->maybe_create_reference (map->new_tree, use_type, NULL); > + } > > if (ipa_transforms_to_apply.exists ()) > new_node->ipa_transforms_to_apply > diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index d3b50524457..fd312b56fde 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -3787,7 +3787,8 @@ create_specialized_node (struct cgraph_node *node, > args_to_skip, "constprop"); > ipa_set_node_agg_value_chain (new_node, aggvals); > for (av = aggvals; av; av = av->next) > - new_node->maybe_create_reference (av->value, IPA_REF_ADDR, NULL); > + if (TREE_CODE (av->value) == ADDR_EXPR) > + new_node->maybe_create_reference (av->value, IPA_REF_ADDR, NULL); > > if (dump_file && (dump_flags & TDF_DETAILS)) > { > diff --git a/gcc/symtab.c b/gcc/symtab.c > index 73168a8db09..562a4a2f6a6 100644 > --- a/gcc/symtab.c > +++ b/gcc/symtab.c > @@ -598,8 +598,6 @@ symtab_node::maybe_create_reference (tree val, enum ipa_ref_use use_type, > gimple *stmt) > { > STRIP_NOPS (val); > - if (TREE_CODE (val) != ADDR_EXPR) > - return NULL; Perhaps maybe_create_reference should drop the use_type argument (it is used with IPA_REF_ADDR only anyway) and should do the parsing itself? I.e. if there is reference do IPA_REF_LOAD and if there is ADDR_EXPR do IPA_REF_ADDR. Why one can not have handled component refs in there? Honza > val = get_base_var (val); > if (val && VAR_OR_FUNCTION_DECL_P (val)) > { > -- > 2.11.0 >