aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2018-09-14 09:26:27 -0400
committerJason Merrill <jason@gcc.gnu.org>2018-09-14 09:26:27 -0400
commitd604907d646023dfbba8aa2f1f8ee89582d6f4f9 (patch)
tree23e946bd3970287410ac9c8c7c5e22b946bd843c /gcc
parent115b470829a7d3ad0c60ea0e09fefef61d50b437 (diff)
downloadgcc-d604907d646023dfbba8aa2f1f8ee89582d6f4f9.zip
gcc-d604907d646023dfbba8aa2f1f8ee89582d6f4f9.tar.gz
gcc-d604907d646023dfbba8aa2f1f8ee89582d6f4f9.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/Makefile.in4
-rw-r--r--gcc/hash-table.c14
-rw-r--r--gcc/hash-table.h12
4 files changed, 26 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a9d008d..0b685b4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-09-14 Jason Merrill <jason@redhat.com>
+
+ 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 <kyrylo.tkachov@arm.com>
PR tree-optimization/87259
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index e008f63..4b7cec8 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 c86d84d..bff9644 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<mem_usage> 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<mem_usage>&
+hash_table_usage ()
+{
+ static mem_alloc_description<mem_usage> 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 706b237..bd83345 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<mem_usage> hash_table_usage;
+extern mem_alloc_description<mem_usage>& hash_table_usage (void);
/* Support function for statistics. */
extern void dump_hash_table_loc_statistics (void);
@@ -580,7 +580,7 @@ hash_table<Descriptor, Allocator>::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<Descriptor, Allocator>::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<Descriptor, Allocator>::~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<Descriptor, Allocator>::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 <value_type> ::data_alloc (n);
@@ -736,7 +736,7 @@ hash_table<Descriptor, Allocator>::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;