[gcc(refs/vendors/ARM/heads/arm-struct-reorg-wip)] libstdc++ Two simplifications for lexicographical_compare
Tamar Christina
tnfchris@gcc.gnu.org
Fri Jul 17 13:12:36 GMT 2020
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>
{
More information about the Libstdc++-cvs
mailing list