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

Reply via email to