From d604907d646023dfbba8aa2f1f8ee89582d6f4f9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 14 Sep 2018 09:26:27 -0400 Subject: [PATCH] Fix --enable-gather-detailed-mem-stats. * hash-table.c (hash_table_usage): Change from variable to function. * hash-table.h: Adjust. * Makefile.in: Add missing dependencies on hash-table.h. From-SVN: r264313 --- gcc/ChangeLog | 7 +++++++ gcc/Makefile.in | 4 ++-- gcc/hash-table.c | 14 +++++++++++--- gcc/hash-table.h | 12 ++++++------ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a9d008dea01..0b685b4f442 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-09-14 Jason Merrill + + Fix --enable-gather-detailed-mem-stats. + * hash-table.c (hash_table_usage): Change from variable to function. + * hash-table.h: Adjust. + * Makefile.in: Add missing dependencies on hash-table.h. + 2018-09-14 Kyrylo Tkachov PR tree-optimization/87259 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index e008f63b2ea..4b7cec82382 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2665,7 +2665,7 @@ build/version.o: version.c version.h \ build/errors.o : errors.c $(BCONFIG_H) $(SYSTEM_H) errors.h build/gensupport.o: gensupport.c $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(GTM_H) $(RTL_BASE_H) $(OBSTACK_H) errors.h \ - $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) + $(HASHTAB_H) $(READ_MD_H) $(GENSUPPORT_H) $(HASH_TABLE_H) build/ggc-none.o : ggc-none.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ $(GGC_H) build/min-insn-modes.o : min-insn-modes.c $(BCONFIG_H) $(SYSTEM_H) \ @@ -2680,7 +2680,7 @@ build/read-rtl.o: read-rtl.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) \ build/rtl.o: rtl.c $(BCONFIG_H) $(CORETYPES_H) $(GTM_H) $(SYSTEM_H) \ $(RTL_H) $(GGC_H) errors.h build/vec.o : vec.c $(BCONFIG_H) $(SYSTEM_H) $(CORETYPES_H) $(VEC_H) \ - $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) + $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) $(HASH_TABLE_H) build/hash-table.o : hash-table.c $(BCONFIG_H) $(SYSTEM_H) \ $(CORETYPES_H) $(HASH_TABLE_H) $(GGC_H) toplev.h $(DIAGNOSTIC_CORE_H) build/sort.o : sort.cc $(BCONFIG_H) $(SYSTEM_H) diff --git a/gcc/hash-table.c b/gcc/hash-table.c index c86d84de217..bff9644ae81 100644 --- a/gcc/hash-table.c +++ b/gcc/hash-table.c @@ -98,7 +98,16 @@ hash_table_higher_prime_index (unsigned long n) return low; } -mem_alloc_description hash_table_usage; +/* Return a reference to the lazily initialized hash-table usage description. + This needs to be a function rather than a simple global variable so that it + is reliably initialized before hash table variables in other files such as + sem_item::m_type_hash_cache. */ +mem_alloc_description& +hash_table_usage () +{ + static mem_alloc_description usage; + return usage; +} /* Support function for statistics. */ void dump_hash_table_loc_statistics (void) @@ -109,7 +118,6 @@ void dump_hash_table_loc_statistics (void) for (unsigned i = HASH_TABLE_ORIGIN; i <= HASH_SET_ORIGIN; i++) { mem_alloc_origin origin = (mem_alloc_origin) i; - hash_table_usage.dump (origin); + hash_table_usage ().dump (origin); } } - diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 706b2370e23..bd83345c7b8 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -561,7 +561,7 @@ private: #include "mem-stats.h" #include "hash-map.h" -extern mem_alloc_description hash_table_usage; +extern mem_alloc_description& hash_table_usage (void); /* Support function for statistics. */ extern void dump_hash_table_loc_statistics (void); @@ -580,7 +580,7 @@ hash_table::hash_table (size_t size, bool ggc, bool size = prime_tab[size_prime_index].prime; if (m_gather_mem_stats) - hash_table_usage.register_descriptor (this, origin, ggc + hash_table_usage ().register_descriptor (this, origin, ggc FINAL_PASS_MEM_STAT); m_entries = alloc_entries (size PASS_MEM_STAT); @@ -600,7 +600,7 @@ hash_table::hash_table (const hash_table &h, bool ggc, size_t size = h.m_size; if (m_gather_mem_stats) - hash_table_usage.register_descriptor (this, origin, ggc + hash_table_usage ().register_descriptor (this, origin, ggc FINAL_PASS_MEM_STAT); value_type *nentries = alloc_entries (size PASS_MEM_STAT); @@ -630,7 +630,7 @@ hash_table::~hash_table () ggc_free (m_entries); if (m_gather_mem_stats) - hash_table_usage.release_instance_overhead (this, + hash_table_usage ().release_instance_overhead (this, sizeof (value_type) * m_size, true); } @@ -644,7 +644,7 @@ hash_table::alloc_entries (size_t n MEM_STAT_DECL) const value_type *nentries; if (m_gather_mem_stats) - hash_table_usage.register_instance_overhead (sizeof (value_type) * n, this); + hash_table_usage ().register_instance_overhead (sizeof (value_type) * n, this); if (!m_ggc) nentries = Allocator ::data_alloc (n); @@ -736,7 +736,7 @@ hash_table::expand () value_type *nentries = alloc_entries (nsize); if (m_gather_mem_stats) - hash_table_usage.release_instance_overhead (this, sizeof (value_type) + hash_table_usage ().release_instance_overhead (this, sizeof (value_type) * osize); m_entries = nentries; -- 2.30.2