[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