Martin Jambor writes: > Hi, > > On Mon, Sep 30 2019, Andrea Corallo wrote: >> Hi all, >> I'd like to submit this patch. >> It release the ipa cp transformation summary after functions being expanded. >> This is to fix the compiler when used with libgccjit on subsequent >> compilations (every new compilation should have a clean transformation >> summary). > > if this is a general problem then I think we should instead add another > hook to class ipa_opt_pass_d to free transformation summary, call it for > all IPA passes at the appropriate time and implement it for IPA-CP. That > way it will work for all IPA passes which might have a transformation > summary. > > Martin > > >> >> Bootstrap on arm64 and X86-64. >> >> Bests >> Andrea >> >> gcc/ChangeLog >> 2019-??-?? Andrea Corallo <andrea.cora...@arm.com> >> >> * cgraphunit.c (expand_all_functions): Release ipcp_transformation_sum >> when finished. >> * ipa-prop.c (ipcp_free_transformation_sum): New function. >> * ipa-prop.h (ipcp_free_transformation_sum): Add declaration.
Hi, actually looking around in order to implement the suggestions I realized that already some code was put in place in toplev::finalize calling then ipa_cp_c_finalize exactly for this purpose. I've updated the patch accordingly. Bootstraped on aarch64. Is it okay for trunk? Bests Andrea gcc/ChangeLog 2019-??-?? Andrea Corallo <andrea.cora...@arm.com> * ipa-cp.c (ipa_cp_c_finalize): Release ipcp_transformation_sum. * ipa-prop.c (ipcp_free_transformation_sum): New function. * ipa-prop.h (ipcp_free_transformation_sum): Add declaration.
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index b4fb74e..2b40220 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -5305,4 +5305,5 @@ ipa_cp_c_finalize (void) max_count = profile_count::uninitialized (); overall_size = 0; max_new_size = 0; + ipcp_free_transformation_sum (); } diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 30948fb..0ff8085 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -561,6 +561,7 @@ struct GTY(()) ipcp_transformation void ipa_set_node_agg_value_chain (struct cgraph_node *node, struct ipa_agg_replacement_value *aggvals); void ipcp_transformation_initialize (void); +void ipcp_free_transformation_sum (void); /* ipa_edge_args stores information related to a callsite and particularly its arguments. It can be accessed by the IPA_EDGE_REF macro. */ diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 2f2b070..158dbe7 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -3758,6 +3758,18 @@ ipcp_transformation_initialize (void) ipcp_transformation_sum = ipcp_transformation_t::create_ggc (symtab); } +/* Release the IPA CP transformation summary. */ + +void +ipcp_free_transformation_sum (void) +{ + if (!ipcp_transformation_sum) + return; + + ipcp_transformation_sum->release (); + ipcp_transformation_sum = NULL; +} + /* Set the aggregate replacements of NODE to be AGGVALS. */ void