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?

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(-)
>>
>>

Reply via email to