diff options
author | Louis Dionne <ldionne@apple.com> | 2018-11-01 21:24:32 +0000 |
---|---|---|
committer | Louis Dionne <ldionne@apple.com> | 2018-11-01 21:24:32 +0000 |
commit | e0a724ef9c897b29be40c8b284ad4485d84effff (patch) | |
tree | bd5cf8f90ae9920a7fc7b27c0edd588a72982b81 /libcxx/include/algorithm | |
parent | df19e57a1c39feb0c89170ffdb3a335f78d4bccf (diff) | |
download | bcm5719-llvm-e0a724ef9c897b29be40c8b284ad4485d84effff.tar.gz bcm5719-llvm-e0a724ef9c897b29be40c8b284ad4485d84effff.zip |
Revert "Bug 39129: Speeding up partition_point/lower_bound/upper_bound/ by using unsigned division by 2 when possible."
This reverts r345525. I'm reverting because that patch apparently caused
a regression on certain platforms (see https://reviews.llvm.org/D53994).
Since we don't fully understand the reasons for the regression, I'm
reverting until we can provide a fix we understand.
llvm-svn: 345893
Diffstat (limited to 'libcxx/include/algorithm')
-rw-r--r-- | libcxx/include/algorithm | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm index f119d252063..beee6b5b837 100644 --- a/libcxx/include/algorithm +++ b/libcxx/include/algorithm @@ -750,32 +750,6 @@ public: bool operator()(const _T1& __x, const _T2& __y) {return __p_(__y, __x);} }; -// Perform division by two quickly for positive integers (llvm.org/PR39129) - -template <typename _Integral> -_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR -typename enable_if -< - is_integral<_Integral>::value, - _Integral ->::type -__half_positive(_Integral __value) -{ - return static_cast<_Integral>(static_cast<typename make_unsigned<_Integral>::type>(__value) / 2); -} - -template <typename _Tp> -_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR -typename enable_if -< - !is_integral<_Tp>::value, - _Tp ->::type -__half_positive(_Tp __value) -{ - return __value / 2; -} - #ifdef _LIBCPP_DEBUG template <class _Compare> @@ -3228,7 +3202,7 @@ partition_point(_ForwardIterator __first, _ForwardIterator __last, _Predicate __ difference_type __len = _VSTD::distance(__first, __last); while (__len != 0) { - difference_type __l2 = _VSTD::__half_positive(__len); + difference_type __l2 = __len / 2; _ForwardIterator __m = __first; _VSTD::advance(__m, __l2); if (__pred(*__m)) @@ -4095,7 +4069,7 @@ __lower_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __va difference_type __len = _VSTD::distance(__first, __last); while (__len != 0) { - difference_type __l2 = _VSTD::__half_positive(__len); + difference_type __l2 = __len / 2; _ForwardIterator __m = __first; _VSTD::advance(__m, __l2); if (__comp(*__m, __value_)) @@ -4137,7 +4111,7 @@ __upper_bound(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __va difference_type __len = _VSTD::distance(__first, __last); while (__len != 0) { - difference_type __l2 = _VSTD::__half_positive(__len); + difference_type __l2 = __len / 2; _ForwardIterator __m = __first; _VSTD::advance(__m, __l2); if (__comp(__value_, *__m)) @@ -4179,7 +4153,7 @@ __equal_range(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __va difference_type __len = _VSTD::distance(__first, __last); while (__len != 0) { - difference_type __l2 = _VSTD::__half_positive(__len); + difference_type __l2 = __len / 2; _ForwardIterator __m = __first; _VSTD::advance(__m, __l2); if (__comp(*__m, __value_)) |