Index: libcxx/include/algorithm =================================================================== --- libcxx/include/algorithm +++ libcxx/include/algorithm @@ -919,6 +919,64 @@ // find +#if defined(_AIX) + +template +_LIBCPP_NODISCARD_EXT inline +_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 +_InputIterator +__find(_InputIterator __first, _InputIterator __last, const _Tp& __value_, input_iterator_tag) +{ + for (; __first != __last; ++__first) + if (*__first == __value_) + break; + return __first; +} + +template +_LIBCPP_NODISCARD_EXT inline +_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 +_RandomAccessIterator +__find(_RandomAccessIterator __first, _RandomAccessIterator __last, const _Tp& __value_, random_access_iterator_tag) +{ + typename iterator_traits<_RandomAccessIterator>::difference_type __d = (__last - __first); + while (__d >= 4) { + if (*__first == __value_) + return __first; + ++__first; + + if (*__first == __value_) + return __first; + ++__first; + + if (*__first == __value_) + return __first; + ++__first; + + if (*__first == __value_) + return __first; + ++__first; + + __d -= 4; + } + + for (; __first != __last; ++__first) + if (*__first == __value_) + break; + return __first; +} + +template +_LIBCPP_NODISCARD_EXT inline +_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 +_InputIterator +find(_InputIterator __first, _InputIterator __last, const _Tp& __value_) +{ + return __find(__first, __last, __value_, typename iterator_traits<_InputIterator>::iterator_category()); +} + +#else + template _LIBCPP_NODISCARD_EXT inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17 @@ -930,6 +988,7 @@ break; return __first; } +#endif // find_if