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