From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 86324 invoked by alias); 30 Mar 2015 09:13:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 86306 invoked by uid 89); 30 Mar 2015 09:13:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,KAM_FROM_URIBL_PCCC,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-HELO: mail-oi0-f54.google.com Received: from mail-oi0-f54.google.com (HELO mail-oi0-f54.google.com) (209.85.218.54) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 30 Mar 2015 09:13:12 +0000 Received: by oifl3 with SMTP id l3so122798794oif.0 for ; Mon, 30 Mar 2015 02:13:10 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.202.187.5 with SMTP id l5mr11276164oif.51.1427706790362; Mon, 30 Mar 2015 02:13:10 -0700 (PDT) Received: by 10.76.98.137 with HTTP; Mon, 30 Mar 2015 02:13:10 -0700 (PDT) In-Reply-To: <20150327152606.GE63825@kam.mff.cuni.cz> References: <20150327152606.GE63825@kam.mff.cuni.cz> Date: Mon, 30 Mar 2015 09:13:00 -0000 Message-ID: Subject: Re: Fix detailed mem report WRT hash tables From: Richard Biener To: Jan Hubicka Cc: GCC Patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2015-03/txt/msg01533.txt.bz2 On Fri, Mar 27, 2015 at 4:26 PM, 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?) 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 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 class Allocator> > -hash_table::hash_table (size_t size) : > +hash_table::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 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 friend void gt_pch_nx (hash_table *, > 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 class Allocator> > -hash_table::hash_table (size_t size, bool ggc) : > +hash_table::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: > 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: > > template class Allocator> > inline typename hash_table::value_type * > -hash_table::alloc_entries (size_t n) const > +hash_table::alloc_entries > + (size_t n MEM_STAT_DECL) const > { > value_type *nentries; > > if (!m_ggc) > nentries = Allocator ::data_alloc (n); > else > - nentries = ::ggc_cleared_vec_alloc (n); > + nentries = ::ggc_cleared_vec_alloc (n PASS_MEM_STAT); > > gcc_assert (nentries != NULL); > for (size_t i = 0; i < n; i++)