This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 3/N] Make symbol_summary::get and call_summary::get pure.
> Hi.
>
> Last part of planned clean-up where I declare ::get as PURE.
> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.
>
> Ready to be installed?
OK,
thanks!
Honza
> Martin
> From 540efe3374d649cc8745445a3e6dc1c720fb79ad Mon Sep 17 00:00:00 2001
> From: marxin <mliska@suse.cz>
> Date: Wed, 20 Jun 2018 14:26:48 +0200
> Subject: [PATCH] Make symbol_summary::get and call_summary::get pure.
>
> gcc/ChangeLog:
>
> 2018-06-20 Martin Liska <mliska@suse.cz>
>
> * symbol-summary.h (get): Make it pure and inline move
> functionality from ::get function.
> (get): Remove and inline into ::get and ::get_create.
> (get_create): Move code from ::get function.
> ---
> gcc/symbol-summary.h | 74 +++++++++++---------------------------------
> 1 file changed, 18 insertions(+), 56 deletions(-)
>
> diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h
> index bf32810abd7..26e9773d3c0 100644
> --- a/gcc/symbol-summary.h
> +++ b/gcc/symbol-summary.h
> @@ -90,13 +90,19 @@ public:
> does not exist it will be created. */
> T* get_create (cgraph_node *node)
> {
> - return get (node->get_uid (), true);
> + bool existed;
> + T **v = &m_map.get_or_insert (node->get_uid (), &existed);
> + if (!existed)
> + *v = allocate_new ();
> +
> + return *v;
> }
>
> /* Getter for summary callgraph node pointer. */
> - T* get (cgraph_node *node)
> + T* get (cgraph_node *node) ATTRIBUTE_PURE
> {
> - return get (node->get_uid (), false);
> + T **v = m_map.get (node->get_uid ());
> + return v == NULL ? NULL : *v;
> }
>
> /* Remove node from summary. */
> @@ -152,9 +158,6 @@ protected:
> private:
> typedef int_hash <int, 0, -1> map_hash;
>
> - /* Getter for summary callgraph ID. */
> - T *get (int uid, bool lazy_insert);
> -
> /* Indicates if insertion hook is enabled. */
> bool m_insertion_enabled;
> /* Indicates if the summary is released. */
> @@ -273,28 +276,6 @@ function_summary<T *>::symtab_duplication (cgraph_node *node,
> }
> }
>
> -template <typename T>
> -T*
> -function_summary<T *>::get (int uid, bool lazy_insert)
> -{
> - gcc_checking_assert (uid > 0);
> -
> - if (lazy_insert)
> - {
> - bool existed;
> - T **v = &m_map.get_or_insert (uid, &existed);
> - if (!existed)
> - *v = allocate_new ();
> -
> - return *v;
> - }
> - else
> - {
> - T **v = m_map.get (uid);
> - return v == NULL ? NULL : *v;
> - }
> -}
> -
> template <typename T>
> void
> gt_ggc_mx(function_summary<T *>* const &summary)
> @@ -387,13 +368,19 @@ public:
> If a summary for an edge does not exist, it will be created. */
> T* get_create (cgraph_edge *edge)
> {
> - return get (edge->get_uid (), true);
> + bool existed;
> + T **v = &m_map.get_or_insert (edge->get_uid (), &existed);
> + if (!existed)
> + *v = allocate_new ();
> +
> + return *v;
> }
>
> /* Getter for summary callgraph edge pointer. */
> - T* get (cgraph_edge *edge)
> + T* get (cgraph_edge *edge) ATTRIBUTE_PURE
> {
> - return get (edge->get_uid (), false);
> + T **v = m_map.get (edge->get_uid ());
> + return v == NULL ? NULL : *v;
> }
>
> /* Remove edge from summary. */
> @@ -437,9 +424,6 @@ protected:
> private:
> typedef int_hash <int, 0, -1> map_hash;
>
> - /* Getter for summary callgraph ID. */
> - T *get (int uid, bool lazy_insert);
> -
> /* Main summary store, where summary ID is used as key. */
> hash_map <map_hash, T *> m_map;
> /* Internal summary removal hook pointer. */
> @@ -457,28 +441,6 @@ private:
> gt_pointer_operator, void *);
> };
>
> -template <typename T>
> -T*
> -call_summary<T *>::get (int uid, bool lazy_insert)
> -{
> - gcc_checking_assert (uid > 0);
> -
> - if (lazy_insert)
> - {
> - bool existed;
> - T **v = &m_map.get_or_insert (uid, &existed);
> - if (!existed)
> - *v = allocate_new ();
> -
> - return *v;
> - }
> - else
> - {
> - T **v = m_map.get (uid);
> - return v == NULL ? NULL : *v;
> - }
> -}
> -
> template <typename T>
> void
> call_summary<T *>::release ()
> --
> 2.17.1
>