This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/5] Existing call graph infrastructure enhancement

   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,

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:
     this small patch prepares remaining needed infrastructure for
the new pass.


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?
    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.


   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.


Attachment: ipa-icf-release-body.changelog
Description: Text document

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().  */
-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);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]