aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-06-08 14:10:02 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-06-08 12:10:02 +0000
commit2a281178f70c38d796c8ec77e049f8139e1110fc (patch)
treece72a2afcaa62c39b9575278f66b9fa9f2201ae1 /gcc
parentef2ceb103d2eaa47fc9d2a8e8c93360c7886a186 (diff)
downloadgcc-2a281178f70c38d796c8ec77e049f8139e1110fc.zip
gcc-2a281178f70c38d796c8ec77e049f8139e1110fc.tar.gz
gcc-2a281178f70c38d796c8ec77e049f8139e1110fc.tar.bz2
Code refactoring for call_summary.
2018-06-08 Martin Liska <mliska@suse.cz> * symbol-summary.h (release): Move definition out of class declaration. (symtab_removal): Likewise. (symtab_duplication): Likewise. From-SVN: r261308
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/symbol-summary.h123
2 files changed, 77 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b8f501b..9a338f2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2018-06-08 Martin Liska <mliska@suse.cz>
+ * symbol-summary.h (release): Move definition out of class
+ declaration.
+ (symtab_removal): Likewise.
+ (symtab_duplication): Likewise.
+
+2018-06-08 Martin Liska <mliska@suse.cz>
+
* symbol-summary.h (function_summary): Move constructor
implementation out of class declaration.
(release): Likewise.
diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h
index 13f8f04..a73472e 100644
--- a/gcc/symbol-summary.h
+++ b/gcc/symbol-summary.h
@@ -330,21 +330,7 @@ public:
}
/* Destruction method that can be called for GGT purpose. */
- void release ()
- {
- if (m_released)
- return;
-
- m_symtab->remove_edge_removal_hook (m_symtab_removal_hook);
- m_symtab->remove_edge_duplication_hook (m_symtab_duplication_hook);
-
- /* 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)
- release ((*it).second);
-
- m_released = true;
- }
+ void release ();
/* Traverses all summarys with a function F called with
ARG as argument. */
@@ -369,16 +355,7 @@ public:
}
/* Release an item that is stored within map. */
- void release (T *item)
- {
- if (m_ggc)
- {
- item->~T ();
- ggc_free (item);
- }
- else
- delete item;
- }
+ void release (T *item);
/* Getter for summary callgraph edge pointer. */
T* get (cgraph_edge *edge)
@@ -399,37 +376,11 @@ public:
}
/* Symbol removal hook that is registered to symbol table. */
- static void symtab_removal (cgraph_edge *edge, void *data)
- {
- call_summary *summary = (call_summary <T *> *) (data);
-
- int h_uid = summary->hashable_uid (edge);
- T **v = summary->m_map.get (h_uid);
-
- if (v)
- {
- summary->remove (edge, *v);
- summary->release (*v);
- summary->m_map.remove (h_uid);
- }
- }
+ static void symtab_removal (cgraph_edge *edge, void *data);
/* Symbol duplication hook that is registered to symbol table. */
static void symtab_duplication (cgraph_edge *edge1, cgraph_edge *edge2,
- void *data)
- {
- call_summary *summary = (call_summary <T *> *) (data);
- T **v = summary->m_map.get (summary->hashable_uid (edge1));
-
- if (v)
- {
- /* This load is necessary, because we insert a new value! */
- T *data = *v;
- T *duplicate = summary->allocate_new ();
- summary->m_map.put (summary->hashable_uid (edge2), duplicate);
- summary->duplicate (edge1, edge2, data, duplicate);
- }
- }
+ void *data);
protected:
/* Indication if we use ggc summary. */
@@ -475,6 +426,72 @@ private:
template <typename T>
void
+call_summary<T *>::release ()
+{
+ if (m_released)
+ return;
+
+ m_symtab->remove_edge_removal_hook (m_symtab_removal_hook);
+ m_symtab->remove_edge_duplication_hook (m_symtab_duplication_hook);
+
+ /* 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)
+ release ((*it).second);
+
+ m_released = true;
+}
+
+template <typename T>
+void
+call_summary<T *>::release (T *item)
+{
+ if (m_ggc)
+ {
+ item->~T ();
+ ggc_free (item);
+ }
+ else
+ delete item;
+}
+
+template <typename T>
+void
+call_summary<T *>::symtab_removal (cgraph_edge *edge, void *data)
+{
+ call_summary *summary = (call_summary <T *> *) (data);
+
+ int h_uid = summary->hashable_uid (edge);
+ T **v = summary->m_map.get (h_uid);
+
+ if (v)
+ {
+ summary->remove (edge, *v);
+ summary->release (*v);
+ summary->m_map.remove (h_uid);
+ }
+}
+
+template <typename T>
+void
+call_summary<T *>::symtab_duplication (cgraph_edge *edge1,
+ cgraph_edge *edge2, void *data)
+{
+ call_summary *summary = (call_summary <T *> *) (data);
+ T **v = summary->m_map.get (summary->hashable_uid (edge1));
+
+ if (v)
+ {
+ /* This load is necessary, because we insert a new value! */
+ T *data = *v;
+ T *duplicate = summary->allocate_new ();
+ summary->m_map.put (summary->hashable_uid (edge2), duplicate);
+ summary->duplicate (edge1, edge2, data, duplicate);
+ }
+}
+
+template <typename T>
+void
gt_ggc_mx(call_summary<T *>* const &summary)
{
gcc_checking_assert (summary->m_ggc);