[PATCH][stage 1] Fix bitmap registration of overheads.

Martin Liška mliska@suse.cz
Wed Feb 27 08:20:00 GMT 2019


On 2/26/19 7:48 PM, Richard Biener wrote:
> On February 26, 2019 6:50:13 PM GMT+01:00, "Martin Liška" <mliska@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 <mliska@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. 

Great.

Then there's updated version of the patch for next stage1.

Martin

> 
> Richard. 
> 
>> Martin
>>
>>>
>>> Richard.
>>>
>>>> Thanks,
>>>> Martin
>>>>
>>>> gcc/ChangeLog:
>>>>
>>>> 2019-02-26  Martin Liska  <mliska@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(-)
>>>>
>>>>
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-bitmap-registration-of-overheads.patch
Type: text/x-patch
Size: 6181 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20190227/77bcb2a7/attachment.bin>


More information about the Gcc-patches mailing list