On February 26, 2019 6:50:13 PM GMT+01:00, "Martin Liška" <mli...@suse.cz> wrote: >On 2/26/19 4:02 PM, Richard Biener wrote: >> On Tue, Feb 26, 2019 at 3:30 PM Martin Liška <mli...@suse.cz> wrote: >>> >>> Hi. >>> >>> I've rewritten bitmap memory statistics which abused unsigned >>> type via register_overhead (map, -((int)sizeof (bitmap_head))). >>> I come up with a concept that each bitmap has assigned a unique ID >>> which is used for stats tracking. It's caused by fact that e.g. DF >is >>> heavily reallocating bitmaps that then have a different address. >>> >>> Survives bootstrap with --enable-gather-detailed-mem-stats. >>> >>> Ready for next stage1? >> >> + /* Get bitmap descriptor UID casted to an unsigned integer >pointer. */ >> + unsigned *get_descriptor () >> + { >> + return (unsigned *)(ptrdiff_t)alloc_descriptor; >> + } >> >> this one is a bit ugly and together with > >I know it's not perfect. > >> >> template <typename Type> >> inline hashval_t >> pointer_hash <Type>::hash (const value_type &candidate) >> { >> /* This is a really poor hash function, but it is what the current >code uses, >> so I am reusing it to avoid an additional axis in testing. */ >> return (hashval_t) ((intptr_t)candidate >> 3); >> >> will give quite some hash collisions. So I guess you should shift >> the descriptor << 3 at least (and then make it at most 29 bits in >> size?). > >That's easily doable. > >> Not sure what to do about the descriptor wrapping btw. > >Question is whether we want to invest in our internal scaffolding more >time? >Or can we live with the ugly casting?
I guess we can live with it if we can avoid the hash collisions. Richard. >Martin > >> >> Richard. >> >>> Thanks, >>> Martin >>> >>> gcc/ChangeLog: >>> >>> 2019-02-26 Martin Liska <mli...@suse.cz> >>> >>> * bitmap.c (bitmap_register): Come up with >>> alloc_descriptor_max_uid and assign it for >>> a new bitmap. >>> (register_overhead): Use get_descriptor as >>> a descriptor. >>> (release_overhead): New. >>> (bitmap_elem_to_freelist): Call it. >>> (bitmap_elt_clear_from): Likewise. >>> (bitmap_obstack_free): Likewise. >>> (bitmap_move): Sensitively release memory. >>> * bitmap.h (struct GTY): Add alloc_descriptor. >>> (bitmap_initialize): Initialize alloc_descriptor to zero. >>> * tree-ssa-pre.c (do_hoist_insertion): Use bitmap_move. >>> --- >>> gcc/bitmap.c | 39 ++++++++++++++++++++++++++++----------- >>> gcc/bitmap.h | 17 ++++++++++++++--- >>> gcc/tree-ssa-pre.c | 2 +- >>> 3 files changed, 43 insertions(+), 15 deletions(-) >>> >>>