From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5993 invoked by alias); 17 Jul 2014 14:49:46 -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 5927 invoked by uid 89); 17 Jul 2014 14:49:46 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.7 required=5.0 tests=AWL,BAYES_50 autolearn=ham version=3.3.2 X-HELO: mx2.suse.de Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Thu, 17 Jul 2014 14:49:44 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id E61D6AC37 for ; Thu, 17 Jul 2014 14:49:40 +0000 (UTC) Message-ID: <53C7E284.7050303@suse.cz> Date: Thu, 17 Jul 2014 14:54:00 -0000 From: =?windows-1252?Q?Martin_Li=9Aka?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: Re: [PATCH 2/5] Existing call graph infrastructure enhancement References: <47303faf697c5f537d471e88d3c946c5a1d04f6e.1402913001.git.mliska@suse.cz> <53A09E46.5080507@redhat.com> <53B14EC0.1080509@suse.cz> <53B1B258.9040607@redhat.com> In-Reply-To: <53B1B258.9040607@redhat.com> Content-Type: multipart/mixed; boundary="------------070609080405070001060602" X-IsSubscribed: yes X-SW-Source: 2014-07/txt/msg01225.txt.bz2 This is a multi-part message in MIME format. --------------070609080405070001060602 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Content-length: 2247 On 06/30/2014 08:54 PM, Jeff Law wrote: > On 06/30/14 05:49, Martin Liška wrote: >> >> On 06/17/2014 10:00 PM, Jeff Law wrote: >>> On 06/13/14 04:26, mliska wrote: >>>> Hi, >>>> this small patch prepares remaining needed infrastructure for >>>> the new pass. >>>> >>>> Changelog: >>>> >>>> 2014-06-13 Martin Liska >>>> Honza Hubicka >>>> >>>> * ipa-utils.h (polymorphic_type_binfo_p): Function marked external >>>> instead of static. >>>> * ipa-devirt.c (polymorphic_type_binfo_p): Likewise. >>>> * ipa-prop.h (count_formal_params): Likewise. >>>> * ipa-prop.c (count_formal_params): Likewise. >>>> * ipa-utils.c (ipa_merge_profiles): Be more tolerant if we merge >>>> profiles for semantically equivalent functions. >>>> * passes.c (do_per_function): If we load body of a function >>>> during WPA, >>>> this condition should behave same. >>>> * varpool.c (ctor_for_folding): More tolerant assert for variable >>>> aliases created during WPA. >>> Presumably we don't have any useful way to merge the cases where we >>> have provides for SRC & DST in ipa_merge_profiles or even to guess >>> which is more useful when presented with both? Does it make sense to >>> log this into a debugging file when we drop one? >> Hello, >> this merge function was written by Honza, what do you think Honza >> about this note? >> >>> I think this patch is fine. If adding logging makes sense, then feel >>> free to do so and consider that trivial change pre-approved. >> I made a small change to this patch, where I moved >> 'gsi_next_nonvirtual_phi' from the pass to gimple-iterator.h. >> >> Ready for trunk with this change? > Yes. I think with the exception of patch #3/5 everything looks good. I'll try to get another pass over #3 this week. What I looked at last week was pretty good; I'm pretty confident this will be wrapped up shortly. > > If #1/#2 make sense to install independent of #3, go ahead. #4/#5 are obviously dependent on #3. > > Jeff Hello, thank you for approval, this final version removes few hunks that are not needed any more. Changes are just cosmetic and I will commit the patch at the beginning of next week. Thanks, Martin --------------070609080405070001060602 Content-Type: text/x-patch; name="ipa-icf-part-2.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ipa-icf-part-2.patch" Content-length: 3064 diff --git a/gcc/gimple-iterator.h b/gcc/gimple-iterator.h index 909d58b..47168b9 100644 --- a/gcc/gimple-iterator.h +++ b/gcc/gimple-iterator.h @@ -281,6 +281,30 @@ gsi_last_nondebug_bb (basic_block bb) return i; } +/* Iterates I statement iterator to the next non-virtual statement. */ + +static inline void +gsi_next_nonvirtual_phi (gimple_stmt_iterator *i) +{ + gimple phi; + + if (gsi_end_p (*i)) + return; + + phi = gsi_stmt (*i); + gcc_assert (phi != NULL); + + while (virtual_operand_p (gimple_phi_result (phi))) + { + gsi_next (i); + + if (gsi_end_p (*i)) + return; + + phi = gsi_stmt (*i); + } +} + /* Return the basic block associated with this iterator. */ static inline basic_block diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 40f696b..aecba07 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -211,7 +211,7 @@ ipa_populate_param_decls (struct cgraph_node *node, /* Return how many formal parameters FNDECL has. */ -static inline int +int count_formal_params (tree fndecl) { tree parm; diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 8886e93..bc6249e 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -529,6 +529,7 @@ void ipa_free_all_edge_args (void); void ipa_free_all_structures_after_ipa_cp (void); void ipa_free_all_structures_after_iinln (void); void ipa_register_cgraph_hooks (void); +int count_formal_params (tree fndecl); /* This function ensures the array of node param infos is big enough to accommodate a structure for all nodes and reallocates it if not. */ diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c index c191210..d58b170 100644 --- a/gcc/ipa-utils.c +++ b/gcc/ipa-utils.c @@ -660,13 +660,8 @@ ipa_merge_profiles (struct cgraph_node *dst, if (dst->tp_first_run > src->tp_first_run && src->tp_first_run) dst->tp_first_run = src->tp_first_run; - if (src->profile_id) - { - if (!dst->profile_id) - dst->profile_id = src->profile_id; - else - gcc_assert (src->profile_id == dst->profile_id); - } + if (src->profile_id && !dst->profile_id) + dst->profile_id = src->profile_id; if (!dst->count) return; diff --git a/gcc/passes.c b/gcc/passes.c index 61b4c12..bae302b 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1478,7 +1478,7 @@ do_per_function (void (*callback) (function *, void *data), void *data) { struct cgraph_node *node; FOR_EACH_DEFINED_FUNCTION (node) - if (node->analyzed && gimple_has_body_p (node->decl) + if (node->analyzed && (gimple_has_body_p (node->decl) && !in_lto_p) && (!node->clone_of || node->decl != node->clone_of->decl)) callback (DECL_STRUCT_FUNCTION (node->decl), data); } diff --git a/gcc/varpool.c b/gcc/varpool.c index 04ce714..5662985 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -397,6 +397,7 @@ ctor_for_folding (tree decl) if (decl != real_decl) { gcc_assert (!DECL_INITIAL (decl) + || (node->alias && varpool_alias_target (node) == real_node) || DECL_INITIAL (decl) == error_mark_node); if (node->weakref) { --------------070609080405070001060602--