[PATCH] Remove redundant loop in unsynchronized_pool_resource code
Jonathan Wakely
jwakely@redhat.com
Wed Nov 14 00:06:00 GMT 2018
On 13/11/18 23:19 +0000, Jonathan Wakely wrote:
>On 13/11/18 22:59 +0000, Jonathan Wakely wrote:
>> * src/c++17/memory_resource.cc (bitset::find_first_unset()): Remove
>> unused function.
>> (bitset::get_first_unset()): Remove loop, if there's are unset bits
>> then _M_next_word refers to the first one and there's no need to loop.
>> (_Pool::_Pool(size_t, size_t), _Pool::block_size()): Remove dead code.
>
>
>> size_type get_first_unset() noexcept
>> {
>>- for (size_type i = _M_next_word; i < nwords(); ++i)
>>+ if (_M_next_word < nwords())
>> {
>>- const size_type n = std::__countr_one(_M_words[i]);
>>+ const size_type n = std::__countr_one(_M_words[_M_next_word]);
>> if (n < bits_per_word)
>> {
>> const word bit = word(1) << n;
>>- _M_words[i] |= bit;
>>- if (i == _M_next_word)
>>+ _M_words[_M_next_word] |= bit;
>>+ const size_t res = (_M_next_word * bits_per_word) + n;
>>+ if (n == (bits_per_word - 1))
>> update_next_word();
>>- return (i * bits_per_word) + n;
>>+ return res;
>> }
>> }
>> return size_type(-1);
>
>I'm not sure why, but this version seems to perform measurably worse.
>I'll investigate, and maybe revert the change.
The attached patch restores the previous performance. I'll finish
testing it tomorrow.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 948 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20181114/0ff91397/attachment.bin>
More information about the Libstdc++
mailing list