libstdc++: Extend memcmp optimization in std::lexicographical_compare
François Dumont
frs.dumont@gmail.com
Fri Jun 5 20:24:04 GMT 2020
Hi
Here is the last of my algo patches this time to extend the memcmp
optimization to std::deque iterators and _GLIBCXX_DEBUG mode.
To do so I had to return int in implementation details of
lexicographical_compare to make sure we can treat a deque iterator range
by chunk in a performant way.
Tested under Linux x86_64 normal and debug modes.
* include/bits/stl_algobase.h
(__lexicographical_compare_impl): Return int.
(__lexicographical_compare::__lc): Likewise.
(__lexicographical_compare_aux1(_II1, _II1, _II2, _II2)): New.
(__lexicographical_compare_aux1(_Deque_iterator<>, _Deque_iterator<>,
_II2, _II2)): Declare.
(__lexicographical_compare_aux1(_II1, _II1,
_Deque_iterator<>, _Deque_iterator<>)): Declare.
(__lexicographical_compare_aux1(_Deque_iterator<>, _Deque_iterator<>,
_Deque_iterator<>, _Deque_iterator<>)): Declare.
(__lexicographical_compare_aux): Adapt, call later.
(__lexicographical_compare_aux(_Safe_iterator<>,
_Safe_iterator<>,
_II2, _II2)): Declare.
(__lexicographical_compare_aux(_II1, _II1,
_Safe_iterator<>, _Safe_iterator<>)): Declare.
(__lexicographical_compare_aux(_Safe_iterator<>,
_Safe_iterator<>,
_Safe_iterator<>, _Safe_iterator<>)): Declare.
(std::lexicographical_compare): Adapt, call later without
__niter_base
usage.
* include/bits/deque.tcc (__lex_cmp_dit): New.
(__lexicographical_compare_aux1): New.
* include/debug/safe_iterator.tcc
(__lexicographical_compare_aux(const _Safe_iterator<>&,
const _Safe_iterator<>&, _II2, _II2)): New.
(__lexicographical_compare_aux(
const _Safe_iterator<>&, const_Safe_iterator<>&,
const _Safe_iterator<>&, const _Safe_iterator<>&)): New.
* testsuite/25_algorithms/lexicographical_compare/1.cc
(test6, test7):
New.
*
testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc:
New test.
Ok to commit ?
François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lexi_cmp_debug_deque.patch
Type: text/x-patch
Size: 18916 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20200605/23be3de1/attachment.bin>
More information about the Libstdc++
mailing list