> 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 <mli...@suse.cz> > >>>>> Honza Hubicka <hubi...@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 <mli...@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);