Message ID | 20150327152606.GE63825@kam.mff.cuni.cz |
---|---|
State | New |
Headers | show |
On Fri, Mar 27, 2015 at 4:26 PM, Jan Hubicka <hubicka@ucw.cz> wrote: > Hi, > I notieced that GGC hash tables are now accounted to hash-table.h:alloc_entries > that is not very informative (we do not have any stats for heap hash tables that > would be nice to have). > > This patch fixes the first problem by adding annotations. OK (perhaps for next stage1?) Ok for stage1. Thanks, Richard. > Bootstrapped/regtested x86_64-linux with and without gathering stats. > > Honza > > * hash-table.c (hash_table constructor): Add mem stats. > (alloc_entries): Likewise. > Index: hash-table.h > =================================================================== > --- hash-table.h (revision 221734) > +++ hash-table.h (working copy) > @@ -615,7 +615,7 @@ class hash_table<Descriptor, Allocator, > typedef typename Descriptor::compare_type compare_type; > > public: > - hash_table (size_t); > + hash_table (size_t CXX_MEM_STAT_INFO); > ~hash_table (); > > /* Current size (in entries) of the hash table. */ > @@ -751,7 +751,8 @@ private: > }; > > template<typename Descriptor, template<typename Type> class Allocator> > -hash_table<Descriptor, Allocator, false>::hash_table (size_t size) : > +hash_table<Descriptor, Allocator, false>::hash_table (size_t size > + MEM_STAT_DECL) : > m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0) > { > unsigned int size_prime_index; > @@ -1116,7 +1117,7 @@ class hash_table<Descriptor, Allocator, > typedef typename Descriptor::compare_type compare_type; > > public: > - explicit hash_table (size_t, bool ggc = false); > + explicit hash_table (size_t, bool ggc = false CXX_MEM_STAT_INFO); > ~hash_table (); > > /* Create a hash_table in gc memory. */ > @@ -1245,7 +1246,7 @@ private: > template<typename T> friend void gt_pch_nx (hash_table<T> *, > gt_pointer_operator, void *); > > - value_type *alloc_entries (size_t n) const; > + value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const; > value_type *find_empty_slot_for_expand (hashval_t); > void expand (); > static bool is_deleted (value_type &v) > @@ -1295,7 +1296,8 @@ private: > }; > > template<typename Descriptor, template<typename Type> class Allocator> > -hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc) : > +hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc > + MEM_STAT_DECL) : > m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0), > m_ggc (ggc) > { > @@ -1304,7 +1306,7 @@ hash_table<Descriptor, Allocator, true>: > size_prime_index = hash_table_higher_prime_index (size); > size = prime_tab[size_prime_index].prime; > > - m_entries = alloc_entries (size); > + m_entries = alloc_entries (size PASS_MEM_STAT); > m_size = size; > m_size_prime_index = size_prime_index; > } > @@ -1326,14 +1328,15 @@ hash_table<Descriptor, Allocator, true>: > > template<typename Descriptor, template<typename Type> class Allocator> > inline typename hash_table<Descriptor, Allocator, true>::value_type * > -hash_table<Descriptor, Allocator, true>::alloc_entries (size_t n) const > +hash_table<Descriptor, Allocator, true>::alloc_entries > + (size_t n MEM_STAT_DECL) const > { > value_type *nentries; > > if (!m_ggc) > nentries = Allocator <value_type> ::data_alloc (n); > else > - nentries = ::ggc_cleared_vec_alloc<value_type> (n); > + nentries = ::ggc_cleared_vec_alloc<value_type> (n PASS_MEM_STAT); > > gcc_assert (nentries != NULL); > for (size_t i = 0; i < n; i++)
On 03/27/2015 09:26 AM, Jan Hubicka wrote: > Hi, > I notieced that GGC hash tables are now accounted to hash-table.h:alloc_entries > that is not very informative (we do not have any stats for heap hash tables that > would be nice to have). > > This patch fixes the first problem by adding annotations. OK (perhaps for next stage1?) > Bootstrapped/regtested x86_64-linux with and without gathering stats. > > Honza > > * hash-table.c (hash_table constructor): Add mem stats. > (alloc_entries): Likewise. OK for the trunk. jeff
Index: hash-table.h =================================================================== --- hash-table.h (revision 221734) +++ hash-table.h (working copy) @@ -615,7 +615,7 @@ class hash_table<Descriptor, Allocator, typedef typename Descriptor::compare_type compare_type; public: - hash_table (size_t); + hash_table (size_t CXX_MEM_STAT_INFO); ~hash_table (); /* Current size (in entries) of the hash table. */ @@ -751,7 +751,8 @@ private: }; template<typename Descriptor, template<typename Type> class Allocator> -hash_table<Descriptor, Allocator, false>::hash_table (size_t size) : +hash_table<Descriptor, Allocator, false>::hash_table (size_t size + MEM_STAT_DECL) : m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0) { unsigned int size_prime_index; @@ -1116,7 +1117,7 @@ class hash_table<Descriptor, Allocator, typedef typename Descriptor::compare_type compare_type; public: - explicit hash_table (size_t, bool ggc = false); + explicit hash_table (size_t, bool ggc = false CXX_MEM_STAT_INFO); ~hash_table (); /* Create a hash_table in gc memory. */ @@ -1245,7 +1246,7 @@ private: template<typename T> friend void gt_pch_nx (hash_table<T> *, gt_pointer_operator, void *); - value_type *alloc_entries (size_t n) const; + value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const; value_type *find_empty_slot_for_expand (hashval_t); void expand (); static bool is_deleted (value_type &v) @@ -1295,7 +1296,8 @@ private: }; template<typename Descriptor, template<typename Type> class Allocator> -hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc) : +hash_table<Descriptor, Allocator, true>::hash_table (size_t size, bool ggc + MEM_STAT_DECL) : m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0), m_ggc (ggc) { @@ -1304,7 +1306,7 @@ hash_table<Descriptor, Allocator, true>: size_prime_index = hash_table_higher_prime_index (size); size = prime_tab[size_prime_index].prime; - m_entries = alloc_entries (size); + m_entries = alloc_entries (size PASS_MEM_STAT); m_size = size; m_size_prime_index = size_prime_index; } @@ -1326,14 +1328,15 @@ hash_table<Descriptor, Allocator, true>: template<typename Descriptor, template<typename Type> class Allocator> inline typename hash_table<Descriptor, Allocator, true>::value_type * -hash_table<Descriptor, Allocator, true>::alloc_entries (size_t n) const +hash_table<Descriptor, Allocator, true>::alloc_entries + (size_t n MEM_STAT_DECL) const { value_type *nentries; if (!m_ggc) nentries = Allocator <value_type> ::data_alloc (n); else - nentries = ::ggc_cleared_vec_alloc<value_type> (n); + nentries = ::ggc_cleared_vec_alloc<value_type> (n PASS_MEM_STAT); gcc_assert (nentries != NULL); for (size_t i = 0; i < n; i++)