From: Jonathan Wakely Date: Mon, 5 Jun 2017 10:34:13 +0000 (+0100) Subject: Optimize std::advance for single increments X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6c2417786217d33b27e7079647ed5f1b10b235c7;p=gcc.git Optimize std::advance for single increments * include/bits/stl_iterator_base_funcs.h (__advance<_RandomAccessIterator, _Distance>): Optimize for next/prev cases where incrementing or decrementing a single step. From-SVN: r248875 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 4ee4c42c7ea..0b0881091e3 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2017-06-05 Jonathan Wakely + * include/bits/stl_iterator_base_funcs.h + (__advance<_RandomAccessIterator, _Distance>): Optimize for next/prev + cases where incrementing or decrementing a single step. + * include/bits/shared_ptr_base.h (__shared_ptr::owner_before) (__weak_ptr::owner_before, _Sp_owner_less::operator()): Add noexcept specifiers as per LWG 2873 and LWG 2942. diff --git a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h index ce6c3d20e03..e14a22ce255 100644 --- a/libstdc++-v3/include/bits/stl_iterator_base_funcs.h +++ b/libstdc++-v3/include/bits/stl_iterator_base_funcs.h @@ -177,7 +177,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // concept requirements __glibcxx_function_requires(_RandomAccessIteratorConcept< _RandomAccessIterator>) - __i += __n; + if (__builtin_constant_p(__n) && __n == 1) + ++__i; + else if (__builtin_constant_p(__n) && __n == -1) + --__i; + else + __i += __n; } /**