This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 2/5] Existing call graph infrastructure enhancement
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Martin Liška <mliska at suse dot cz>
- Cc: gcc-patches at gcc dot gnu dot org, Jan Hubicka <hubicka at ucw dot cz>
- Date: Mon, 25 Aug 2014 18:12:25 +0200
- Subject: Re: [PATCH 2/5] Existing call graph infrastructure enhancement
- Authentication-results: sourceware.org; auth=none
- References: <c5c2463c07186b4ba35b10f3063ecdd8f8d46d63 dot 1402913001 dot git dot mliska at suse dot cz> <47303faf697c5f537d471e88d3c946c5a1d04f6e dot 1402913001 dot git dot mliska at suse dot cz> <53A09E46 dot 5080507 at redhat dot com> <53B14EC0 dot 1080509 at suse dot cz> <53B1B258 dot 9040607 at redhat dot com> <53C7E284 dot 7050303 at suse dot cz> <53FB0826 dot 6080105 at suse dot cz>
> Hello,
> after fixing an issue with callgraph thunk creation, I would like to enhance callgraph API a bit. My problem was that I was trying to expand_thunk after a body of the original function was removed. As a result, I created a call without arguments. The change was suggested by Honza.
>
> Thank you,
> Martin
>
> On 07/17/2014 03:49 PM, Martin Liška wrote:
> >
> >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 <mliska@suse.cz>
> >>>>> Honza Hubicka <hubicka@ucw.cz>
> >>>>>
> >>>>> * 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
> >
>
> 2014-08-25 Martin Liska <mliska@suse.cz>
>
> * cgraph.h (release_body): new argument keep_arguments added.
> * cgraph.c (release_body): Likewise.
OK,
thanks!
Honza
> diff --git a/gcc/cgraph.c b/gcc/cgraph.c
> index cb49cdc..ad32fb8 100644
> --- a/gcc/cgraph.c
> +++ b/gcc/cgraph.c
> @@ -1716,13 +1716,15 @@ release_function_body (tree decl)
> are free'd in final.c via free_after_compilation(). */
>
> void
> -cgraph_node::release_body (void)
> +cgraph_node::release_body (bool keep_arguments)
> {
> ipa_transforms_to_apply.release ();
> if (!used_as_abstract_origin && cgraph_state != CGRAPH_STATE_PARSING)
> {
> DECL_RESULT (decl) = NULL;
> - DECL_ARGUMENTS (decl) = NULL;
> +
> + if (!keep_arguments)
> + DECL_ARGUMENTS (decl) = NULL;
> }
> /* If the node is abstract and needed, then do not clear DECL_INITIAL
> of its associated function function declaration because it's
> diff --git a/gcc/cgraph.h b/gcc/cgraph.h
> index 2594ae5..5edcf74 100644
> --- a/gcc/cgraph.h
> +++ b/gcc/cgraph.h
> @@ -890,7 +890,7 @@ public:
> Use this only for functions that are released before being translated to
> target code (i.e. RTL). Functions that are compiled to RTL and beyond
> are free'd in final.c via free_after_compilation(). */
> - void release_body (void);
> + void release_body (bool keep_arguments = false);
>
> /* cgraph_node is no longer nested function; update cgraph accordingly. */
> void unnest (void);