aboutsummaryrefslogtreecommitdiff
path: root/gcc/vec.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-11-05 14:35:56 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-11-05 13:35:56 +0000
commit00e6775a5faa43702e96e315e7a1c22297983f2a (patch)
treebcf3354f255012a40df5a04906022748690bab09 /gcc/vec.c
parent93ef36dc6987e424e775ced165d9011c9b2477a8 (diff)
downloadgcc-00e6775a5faa43702e96e315e7a1c22297983f2a.zip
gcc-00e6775a5faa43702e96e315e7a1c22297983f2a.tar.gz
gcc-00e6775a5faa43702e96e315e7a1c22297983f2a.tar.bz2
Fix vector memory statistics.
2018-11-05 Martin Liska <mliska@suse.cz> * mem-stats.h (mem_alloc_description::release_instance_overhead): Return T *. * vec.c (struct vec_usage): Register m_element_size. (vec_prefix::register_overhead): New arguments: elements and element_size. (vec_prefix::release_overhead): Subtract elements. * vec.h (struct vec_prefix): Change signature. (va_heap::reserve): Pass proper arguments. (va_heap::release): Likewise. From-SVN: r265799
Diffstat (limited to 'gcc/vec.c')
-rw-r--r--gcc/vec.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/gcc/vec.c b/gcc/vec.c
index ff2456a..bfd5285 100644
--- a/gcc/vec.c
+++ b/gcc/vec.c
@@ -52,13 +52,14 @@ vnull vNULL;
struct vec_usage: public mem_usage
{
/* Default constructor. */
- vec_usage (): m_items (0), m_items_peak (0) {}
+ vec_usage (): m_items (0), m_items_peak (0), m_element_size (0) {}
/* Constructor. */
vec_usage (size_t allocated, size_t times, size_t peak,
- size_t items, size_t items_peak)
+ size_t items, size_t items_peak, size_t element_size)
: mem_usage (allocated, times, peak),
- m_items (items), m_items_peak (items_peak) {}
+ m_items (items), m_items_peak (items_peak),
+ m_element_size (element_size) {}
/* Sum the usage with SECOND usage. */
vec_usage
@@ -68,7 +69,7 @@ struct vec_usage: public mem_usage
m_times + second.m_times,
m_peak + second.m_peak,
m_items + second.m_items,
- m_items_peak + second.m_items_peak);
+ m_items_peak + second.m_items_peak, 0);
}
/* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */
@@ -81,7 +82,8 @@ struct vec_usage: public mem_usage
s[48] = '\0';
- fprintf (stderr, "%-48s %10li:%4.1f%%%10li%10li:%4.1f%%%11li%11li\n", s,
+ fprintf (stderr, "%-48s %10li%11li:%4.1f%%%10li%10li:%4.1f%%%11li%11li\n", s,
+ (long)m_element_size,
(long)m_allocated, m_allocated * 100.0 / total.m_allocated,
(long)m_peak, (long)m_times, m_times * 100.0 / total.m_times,
(long)m_items, (long)m_items_peak);
@@ -101,8 +103,8 @@ struct vec_usage: public mem_usage
static inline void
dump_header (const char *name)
{
- fprintf (stderr, "%-48s %11s%15s%10s%17s%11s\n", name, "Leak", "Peak",
- "Times", "Leak items", "Peak items");
+ fprintf (stderr, "%-48s %10s%11s%16s%10s%17s%11s\n", name, "sizeof(T)",
+ "Leak", "Peak", "Times", "Leak items", "Peak items");
print_dash_line ();
}
@@ -110,6 +112,8 @@ struct vec_usage: public mem_usage
size_t m_items;
/* Peak value of number of allocated items. */
size_t m_items_peak;
+ /* Size of element of the vector. */
+ size_t m_element_size;
};
/* Vector memory description. */
@@ -118,12 +122,14 @@ static mem_alloc_description <vec_usage> vec_mem_desc;
/* Account the overhead. */
void
-vec_prefix::register_overhead (void *ptr, size_t size, size_t elements
- MEM_STAT_DECL)
+vec_prefix::register_overhead (void *ptr, size_t elements,
+ size_t element_size MEM_STAT_DECL)
{
vec_mem_desc.register_descriptor (ptr, VEC_ORIGIN, false
FINAL_PASS_MEM_STAT);
- vec_usage *usage = vec_mem_desc.register_instance_overhead (size, ptr);
+ vec_usage *usage
+ = vec_mem_desc.register_instance_overhead (elements * element_size, ptr);
+ usage->m_element_size = element_size;
usage->m_items += elements;
if (usage->m_items_peak < usage->m_items)
usage->m_items_peak = usage->m_items;
@@ -132,13 +138,15 @@ vec_prefix::register_overhead (void *ptr, size_t size, size_t elements
/* Notice that the memory allocated for the vector has been freed. */
void
-vec_prefix::release_overhead (void *ptr, size_t size, bool in_dtor
- MEM_STAT_DECL)
+vec_prefix::release_overhead (void *ptr, size_t size, size_t elements,
+ bool in_dtor MEM_STAT_DECL)
{
if (!vec_mem_desc.contains_descriptor_for_instance (ptr))
vec_mem_desc.register_descriptor (ptr, VEC_ORIGIN,
false FINAL_PASS_MEM_STAT);
- vec_mem_desc.release_instance_overhead (ptr, size, in_dtor);
+ vec_usage *usage = vec_mem_desc.release_instance_overhead (ptr, size,
+ in_dtor);
+ usage->m_items -= elements;
}
/* Calculate the number of slots to reserve a vector, making sure that