summaryrefslogtreecommitdiffstats
path: root/libcxx/include/algorithm
diff options
context:
space:
mode:
authorLouis Dionne <ldionne@apple.com>2018-11-01 21:24:32 +0000
committerLouis Dionne <ldionne@apple.com>2018-11-01 21:24:32 +0000
commite0a724ef9c897b29be40c8b284ad4485d84effff (patch)
treebd5cf8f90ae9920a7fc7b27c0edd588a72982b81 /libcxx/include/algorithm
parentdf19e57a1c39feb0c89170ffdb3a335f78d4bccf (diff)
downloadbcm5719-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/algorithm34
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_))
OpenPOWER on IntegriCloud