diff options
author | Martin Liska <mliska@suse.cz> | 2019-10-29 14:52:42 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-10-29 13:52:42 +0000 |
commit | 78cd68c0af1ba80b29849712f8defe51fd232ee7 (patch) | |
tree | 610d5431c2e3c5f0a8416e42ba955c1b1ce294b0 | |
parent | 318bd8c60d83ca294b237559908dd9f88ee7c300 (diff) | |
download | gcc-78cd68c0af1ba80b29849712f8defe51fd232ee7.zip gcc-78cd68c0af1ba80b29849712f8defe51fd232ee7.tar.gz gcc-78cd68c0af1ba80b29849712f8defe51fd232ee7.tar.bz2 |
Release function and edge summaries allocated with GGC.
2019-10-29 Martin Liska <mliska@suse.cz>
* ggc.h (ggc_alloc_no_dtor): New function.
* ipa-fnsummary.c (ipa_free_fn_summary): Call
destructor and ggc_free.
(ipa_free_size_summary): Call delete instead
of release.
* ipa-fnsummary.h: Use new function ggc_alloc_no_dtor.
* ipa-prop.c (ipa_check_create_edge_args): Likewise.
(ipa_free_all_edge_args): Call destructor and ggc_free.
(ipa_free_all_node_params): Likewise.
(ipcp_free_transformation_sum): Likewise.
* ipa-prop.h (ipa_check_create_node_params):
Call new ggc_alloc_no_dtor.
* ipa-sra.c (ipa_sra_generate_summary): Likewise.
(ipa_sra_analysis): Call destructor and ggc_free.
Replace release with delete operator.
* symbol-summary.h (release): Remove ..
(V>::~fast_function_summary): and move logic here.
Likewise for other classes.
From-SVN: r277572
-rw-r--r-- | gcc/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/ggc.h | 12 | ||||
-rw-r--r-- | gcc/ipa-fnsummary.c | 6 | ||||
-rw-r--r-- | gcc/ipa-fnsummary.h | 4 | ||||
-rw-r--r-- | gcc/ipa-prop.c | 11 | ||||
-rw-r--r-- | gcc/ipa-prop.h | 4 | ||||
-rw-r--r-- | gcc/ipa-sra.c | 9 | ||||
-rw-r--r-- | gcc/symbol-summary.h | 78 |
8 files changed, 62 insertions, 83 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index caaa5ee..8e729b3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2019-10-29 Martin Liska <mliska@suse.cz> + + * ggc.h (ggc_alloc_no_dtor): New function. + * ipa-fnsummary.c (ipa_free_fn_summary): Call + destructor and ggc_free. + (ipa_free_size_summary): Call delete instead + of release. + * ipa-fnsummary.h: Use new function ggc_alloc_no_dtor. + * ipa-prop.c (ipa_check_create_edge_args): Likewise. + (ipa_free_all_edge_args): Call destructor and ggc_free. + (ipa_free_all_node_params): Likewise. + (ipcp_free_transformation_sum): Likewise. + * ipa-prop.h (ipa_check_create_node_params): + Call new ggc_alloc_no_dtor. + * ipa-sra.c (ipa_sra_generate_summary): Likewise. + (ipa_sra_analysis): Call destructor and ggc_free. + Replace release with delete operator. + * symbol-summary.h (release): Remove .. + (V>::~fast_function_summary): and move logic here. + Likewise for other classes. + 2019-10-29 Richard Biener <rguenther@suse.de> PR tree-optimization/92260 @@ -185,6 +185,18 @@ ggc_alloc (ALONE_CXX_MEM_STAT_INFO) PASS_MEM_STAT)); } +/* GGC allocation function that does not call finalizer for type + that have need_finalization_p equal to true. User is responsible + for calling of the destructor. */ + +template<typename T> +inline T * +ggc_alloc_no_dtor (ALONE_CXX_MEM_STAT_INFO) +{ + return static_cast<T *> (ggc_internal_alloc (sizeof (T), NULL, 0, 1 + PASS_MEM_STAT)); +} + template<typename T> inline T * ggc_cleared_alloc (ALONE_CXX_MEM_STAT_INFO) diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c index 0d38e42..f01709c 100644 --- a/gcc/ipa-fnsummary.c +++ b/gcc/ipa-fnsummary.c @@ -3873,9 +3873,9 @@ ipa_free_fn_summary (void) { if (!ipa_call_summaries) return; - ipa_fn_summaries->release (); + ipa_fn_summaries->~fast_function_summary <ipa_fn_summary *, va_gc> (); + ggc_free (ipa_fn_summaries); ipa_fn_summaries = NULL; - ipa_call_summaries->release (); delete ipa_call_summaries; ipa_call_summaries = NULL; edge_predicate_pool.release (); @@ -3891,7 +3891,7 @@ ipa_free_size_summary (void) { if (!ipa_size_summaries) return; - ipa_size_summaries->release (); + delete ipa_size_summaries; ipa_size_summaries = NULL; } diff --git a/gcc/ipa-fnsummary.h b/gcc/ipa-fnsummary.h index f645730..525d4b7 100644 --- a/gcc/ipa-fnsummary.h +++ b/gcc/ipa-fnsummary.h @@ -194,8 +194,8 @@ public: static ipa_fn_summary_t *create_ggc (symbol_table *symtab) { - class ipa_fn_summary_t *summary = new (ggc_alloc <ipa_fn_summary_t> ()) - ipa_fn_summary_t (symtab); + class ipa_fn_summary_t *summary + = new (ggc_alloc_no_dtor<ipa_fn_summary_t> ()) ipa_fn_summary_t (symtab); summary->disable_insertion_hook (); return summary; } diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 0dd73561..9dfbe1a 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -3719,7 +3719,7 @@ ipa_check_create_edge_args (void) { if (!ipa_edge_args_sum) ipa_edge_args_sum - = (new (ggc_cleared_alloc <ipa_edge_args_sum_t> ()) + = (new (ggc_alloc_no_dtor<ipa_edge_args_sum_t> ()) ipa_edge_args_sum_t (symtab, true)); if (!ipa_bits_hash_table) ipa_bits_hash_table = hash_table<ipa_bit_ggc_hash_traits>::create_ggc (37); @@ -3735,7 +3735,8 @@ ipa_free_all_edge_args (void) if (!ipa_edge_args_sum) return; - ipa_edge_args_sum->release (); + ipa_edge_args_sum->~ipa_edge_args_sum_t (); + ggc_free (ipa_edge_args_sum); ipa_edge_args_sum = NULL; } @@ -3744,7 +3745,8 @@ ipa_free_all_edge_args (void) void ipa_free_all_node_params (void) { - ipa_node_params_sum->release (); + ipa_node_params_sum->~ipa_node_params_t (); + ggc_free (ipa_node_params_sum); ipa_node_params_sum = NULL; } @@ -3770,7 +3772,8 @@ ipcp_free_transformation_sum (void) if (!ipcp_transformation_sum) return; - ipcp_transformation_sum->release (); + ipcp_transformation_sum->~function_summary<ipcp_transformation *> (); + ggc_free (ipcp_transformation_sum); ipcp_transformation_sum = NULL; } diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 6811ed7..07a7eea 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -672,7 +672,7 @@ public: static ipcp_transformation_t *create_ggc (symbol_table *symtab) { ipcp_transformation_t *summary - = new (ggc_cleared_alloc <ipcp_transformation_t> ()) + = new (ggc_alloc_no_dtor <ipcp_transformation_t> ()) ipcp_transformation_t (symtab, true); return summary; } @@ -710,7 +710,7 @@ ipa_check_create_node_params (void) { if (!ipa_node_params_sum) ipa_node_params_sum - = (new (ggc_cleared_alloc <ipa_node_params_t> ()) + = (new (ggc_alloc_no_dtor <ipa_node_params_t> ()) ipa_node_params_t (symtab, true)); } diff --git a/gcc/ipa-sra.c b/gcc/ipa-sra.c index 836db40..038f38b 100644 --- a/gcc/ipa-sra.c +++ b/gcc/ipa-sra.c @@ -2546,7 +2546,7 @@ ipa_sra_generate_summary (void) gcc_checking_assert (!func_sums); gcc_checking_assert (!call_sums); func_sums - = (new (ggc_cleared_alloc <ipa_sra_function_summaries> ()) + = (new (ggc_alloc_no_dtor <ipa_sra_function_summaries> ()) ipa_sra_function_summaries (symtab, true)); call_sums = new ipa_sra_call_summaries (symtab); @@ -2805,7 +2805,7 @@ ipa_sra_read_summary (void) gcc_checking_assert (!func_sums); gcc_checking_assert (!call_sums); func_sums - = (new (ggc_cleared_alloc <ipa_sra_function_summaries> ()) + = (new (ggc_alloc_no_dtor <ipa_sra_function_summaries> ()) ipa_sra_function_summaries (symtab, true)); call_sums = new ipa_sra_call_summaries (symtab); @@ -3989,9 +3989,10 @@ ipa_sra_analysis (void) process_isra_node_results (node, clone_num_suffixes); delete clone_num_suffixes; - func_sums->release (); + func_sums->~ipa_sra_function_summaries (); + ggc_free (func_sums); func_sums = NULL; - call_sums->release (); + delete call_sums; call_sums = NULL; if (dump_file) diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h index a0bacad..6b26b60 100644 --- a/gcc/symbol-summary.h +++ b/gcc/symbol-summary.h @@ -29,7 +29,7 @@ class function_summary_base public: /* Default construction takes SYMTAB as an argument. */ function_summary_base (symbol_table *symtab): m_symtab (symtab), - m_insertion_enabled (true), m_released (false) + m_insertion_enabled (true) {} /* Basic implementation of insert operation. */ @@ -88,8 +88,6 @@ protected: /* Indicates if insertion hook is enabled. */ bool m_insertion_enabled; - /* Indicates if the summary is released. */ - bool m_released; private: /* Return true when the summary uses GGC memory for allocation. */ @@ -134,14 +132,7 @@ public: function_summary (symbol_table *symtab, bool ggc = false); /* Destructor. */ - virtual ~function_summary () - { - release (); - } - - /* Destruction method that can be called for GGC purpose. */ - using function_summary_base<T>::release; - void release (); + virtual ~function_summary (); /* Traverses all summarys with a function F called with ARG as argument. */ @@ -237,20 +228,14 @@ function_summary<T *>::function_summary (symbol_table *symtab, bool ggc): } template <typename T> -void -function_summary<T *>::release () +function_summary<T *>::~function_summary () { - if (this->m_released) - return; - this->unregister_hooks (); /* Release all summaries. */ typedef typename hash_map <map_hash, T *>::iterator map_iterator; for (map_iterator it = m_map.begin (); it != m_map.end (); ++it) this->release ((*it).second); - - this->m_released = true; } template <typename T> @@ -343,14 +328,7 @@ public: fast_function_summary (symbol_table *symtab); /* Destructor. */ - virtual ~fast_function_summary () - { - release (); - } - - /* Destruction method that can be called for GGC purpose. */ - using function_summary_base<T>::release; - void release (); + virtual ~fast_function_summary (); /* Traverses all summarys with a function F called with ARG as argument. */ @@ -445,22 +423,15 @@ fast_function_summary<T *, V>::fast_function_summary (symbol_table *symtab): } template <typename T, typename V> -void -fast_function_summary<T *, V>::release () +fast_function_summary<T *, V>::~fast_function_summary () { - if (this->m_released) - return; - this->unregister_hooks (); /* Release all summaries. */ for (unsigned i = 0; i < m_vector->length (); i++) if ((*m_vector)[i] != NULL) this->release ((*m_vector)[i]); - vec_free (m_vector); - - this->m_released = true; } template <typename T, typename V> @@ -558,7 +529,7 @@ class call_summary_base public: /* Default construction takes SYMTAB as an argument. */ call_summary_base (symbol_table *symtab): m_symtab (symtab), - m_initialize_when_cloning (true), m_released (false) + m_initialize_when_cloning (true) {} /* Basic implementation of removal operation. */ @@ -600,8 +571,6 @@ protected: cgraph_2edge_hook_list *m_symtab_duplication_hook; /* Initialize summary for an edge that is cloned. */ bool m_initialize_when_cloning; - /* Indicates if the summary is released. */ - bool m_released; private: /* Return true when the summary uses GGC memory for allocation. */ @@ -645,14 +614,7 @@ public: } /* Destructor. */ - virtual ~call_summary () - { - release (); - } - - /* Destruction method that can be called for GGC purpose. */ - using call_summary_base<T>::release; - void release (); + virtual ~call_summary (); /* Traverses all summarys with an edge E called with ARG as argument. */ @@ -730,20 +692,14 @@ private: }; template <typename T> -void -call_summary<T *>::release () +call_summary<T *>::~call_summary () { - if (this->m_released) - return; - this->unregister_hooks (); /* Release all summaries. */ typedef typename hash_map <map_hash, T *>::iterator map_iterator; for (map_iterator it = m_map.begin (); it != m_map.end (); ++it) this->release ((*it).second); - - this->m_released = true; } template <typename T> @@ -825,14 +781,7 @@ public: } /* Destructor. */ - virtual ~fast_call_summary () - { - release (); - } - - /* Destruction method that can be called for GGC purpose. */ - using call_summary_base<T>::release; - void release (); + virtual ~fast_call_summary (); /* Traverses all summarys with an edge F called with ARG as argument. */ @@ -908,22 +857,15 @@ private: }; template <typename T, typename V> -void -fast_call_summary<T *, V>::release () +fast_call_summary<T *, V>::~fast_call_summary () { - if (this->m_released) - return; - this->unregister_hooks (); /* Release all summaries. */ for (unsigned i = 0; i < m_vector->length (); i++) if ((*m_vector)[i] != NULL) this->release ((*m_vector)[i]); - vec_free (m_vector); - - this->m_released = true; } template <typename T, typename V> |