public inbox for libstdc++-cvs@sourceware.org help / color / mirror / Atom feed
From: Tamar Christina <tnfchris@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc(refs/vendors/ARM/heads/arm-perf-staging)] libstdc++ Two simplifications for lexicographical_compare Date: Fri, 17 Jul 2020 13:24:45 +0000 (GMT) [thread overview] Message-ID: <20200717132445.852BA3A5B02B@sourceware.org> (raw) https://gcc.gnu.org/g:113f0a639dbdd78048373a253ec64145ead7d29d commit 113f0a639dbdd78048373a253ec64145ead7d29d Author: Jonathan Wakely <jwakely@redhat.com> Date: Wed Feb 26 15:19:44 2020 +0000 libstdc++ Two simplifications for lexicographical_compare * include/bits/ranges_algo.h (__lexicographical_compare_fn): Declare variables in smaller scope and avoid calling ranges::distance when we know they are pointers. Remove statically-unreachable use of __builtin_unreachable(). * include/bits/stl_algobase.h (__lexicographical_compare::__lc): Define inline. Diff: --- libstdc++-v3/ChangeLog | 7 +++++++ libstdc++-v3/include/bits/ranges_algo.h | 10 ++++------ libstdc++-v3/include/bits/stl_algobase.h | 21 ++++++++------------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c13d6fc48f4..d545526d93a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2020-02-26 Jonathan Wakely <jwakely@redhat.com> + * include/bits/ranges_algo.h (__lexicographical_compare_fn): Declare + variables in smaller scope and avoid calling ranges::distance when we + know they are pointers. Remove statically-unreachable use of + __builtin_unreachable(). + * include/bits/stl_algobase.h (__lexicographical_compare::__lc): + Define inline. + * include/std/ranges (__detail::__maybe_empty_t): Define new helper alias. (__detail::__maybe_const_t): Likewise. diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h index 7d7dbf04103..05c0851d411 100644 --- a/libstdc++-v3/include/bits/ranges_algo.h +++ b/libstdc++-v3/include/bits/ranges_algo.h @@ -3464,9 +3464,6 @@ namespace ranges && sized_sentinel_for<_Sent2, _Iter2>); if constexpr (__sized_iters) { - auto __d1 = ranges::distance(__first1, __last1); - auto __d2 = ranges::distance(__first2, __last2); - using _ValueType1 = iter_value_t<_Iter1>; using _ValueType2 = iter_value_t<_Iter2>; constexpr bool __use_memcmp @@ -3480,6 +3477,9 @@ namespace ranges && is_same_v<_Proj2, identity>); if constexpr (__use_memcmp) { + const auto __d1 = __last1 - __first1; + const auto __d2 = __last2 - __first2; + if (const auto __len = std::min(__d1, __d2)) { const auto __c @@ -3498,10 +3498,8 @@ namespace ranges if (__c < 0) return false; } - else - __builtin_unreachable(); } - return (__last1 - __first1 < __last2 - __first2); + return __d1 < __d2; } } diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 268569336b0..e4f7fa417ed 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -1254,21 +1254,16 @@ _GLIBCXX_END_NAMESPACE_CONTAINER { template<typename _II1, typename _II2> _GLIBCXX20_CONSTEXPR - static bool __lc(_II1, _II1, _II2, _II2); + static bool + __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) + { + using __gnu_cxx::__ops::__iter_less_iter; + return std::__lexicographical_compare_impl(__first1, __last1, + __first2, __last2, + __iter_less_iter()); + } }; - template<bool _BoolType> - template<typename _II1, typename _II2> - _GLIBCXX20_CONSTEXPR - bool - __lexicographical_compare<_BoolType>:: - __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) - { - return std::__lexicographical_compare_impl(__first1, __last1, - __first2, __last2, - __gnu_cxx::__ops::__iter_less_iter()); - } - template<> struct __lexicographical_compare<true> {
reply other threads:[~2020-07-17 13:24 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200717132445.852BA3A5B02B@sourceware.org \ --to=tnfchris@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ --cc=libstdc++-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).