public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/giulianob/heads/autopar_rebase2)] libstdc++: Fix some C++20 algorithms to work in parallel mode
@ 2020-08-17 22:07 Giuliano Belinassi
  0 siblings, 0 replies; only message in thread
From: Giuliano Belinassi @ 2020-08-17 22:07 UTC (permalink / raw)
  To: gcc-cvs, libstdc++-cvs

https://gcc.gnu.org/g:04435fe52812aa109c93e246a4da6740fda42394

commit 04435fe52812aa109c93e246a4da6740fda42394
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu May 7 21:43:49 2020 +0100

    libstdc++: Fix some C++20 algorithms to work in parallel mode
    
    Some new algorithms need to use _GLIBCXX_STD_A to refer to the "normal"
    version of the algorithm, to workaround the namespace dance done for
    parallel mode.
    
            PR libstdc++/94971 (partial)
            * include/bits/ranges_algo.h (ranges::__sample_fn): Qualify
            std::sample using macro to work in parallel mode.
            (__sort_fn): Likewise for std::sort.
            (ranges::__nth_element_fn): Likewise for std::nth_element.
            * include/bits/stl_algobase.h (lexicographical_compare_three_way):
            Likewise for std::__min_cmp.
            * include/parallel/algobase.h (lexicographical_compare_three_way):
            Add to namespace std::__parallel.

Diff:
---
 libstdc++-v3/ChangeLog                   | 34 +++++++++++++++++++++-----------
 libstdc++-v3/include/bits/ranges_algo.h  | 14 +++++++------
 libstdc++-v3/include/bits/stl_algobase.h | 10 +++++-----
 libstdc++-v3/include/parallel/algobase.h |  4 ++++
 4 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d0751909dd2..3b8e6d94f87 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,25 @@
+2020-05-07  Jonathan Wakely  <jwakely@redhat.com>
+
+	PR libstdc++/94971 (partial)
+	* include/bits/ranges_algo.h (ranges::__sample_fn): Qualify
+	std::sample using macro to work in parallel mode.
+	(__sort_fn): Likewise for std::sort.
+	(ranges::__nth_element_fn): Likewise for std::nth_element.
+	* include/bits/stl_algobase.h (lexicographical_compare_three_way):
+	Likewise for std::__min_cmp.
+	* include/parallel/algobase.h (lexicographical_compare_three_way):
+	Add to namespace std::__parallel.
+
+	PR c/92472
+	* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
+	(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
+	(_UnguardedIterator::operator _RAIter): Add const qualifier.
+	(operator<(_GuardedIterator&, _GuardedIterator&)
+	(operator<=(_GuardedIterator&, _GuardedIterator&)
+	(operator<(_UnguardedIterator&, _UnguardedIterator&)
+	(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
+	parameters to const references.
+
 2020-05-07  Eric Botcazou  <ebotcazou@adacore.com>
 
 	* config/abi/post/sparc64-linux-gnu/baseline_symbols.txt: Update.
@@ -27,18 +49,6 @@
 	* config/abi/post/sparc-solaris/sparcv9/baseline_symbols.txt:
 	Likewise.
 
-2020-05-07  Jonathan Wakely  <jwakely@redhat.com>
-
-	PR c/92472
-	* include/parallel/multiway_merge.h (_GuardedIterator::operator*)
-	(_GuardedIterator::operator _RAIter, _UnguardedIterator::operator*)
-	(_UnguardedIterator::operator _RAIter): Add const qualifier.
-	(operator<(_GuardedIterator&, _GuardedIterator&)
-	(operator<=(_GuardedIterator&, _GuardedIterator&)
-	(operator<(_UnguardedIterator&, _UnguardedIterator&)
-	(operator<=(_UnguardedIterator&, _UnguardedIterator&): Change
-	parameters to const references.
-
 2020-05-06  Martin Liska  <mliska@suse.cz>
 
 	Revert:
diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index aa07cb97ea6..c038a505afa 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -1758,8 +1758,9 @@ namespace ranges
 	    // FIXME: Forwarding to std::sample here requires computing __lasti
 	    // which may take linear time.
 	    auto __lasti = ranges::next(__first, __last);
-	    return std::sample(std::move(__first), std::move(__lasti),
-			       std::move(__out), __n, std::forward<_Gen>(__g));
+	    return _GLIBCXX_STD_A::
+	      sample(std::move(__first), std::move(__lasti), std::move(__out),
+		     __n, std::forward<_Gen>(__g));
 	  }
 	else
 	  {
@@ -2018,8 +2019,8 @@ namespace ranges
 		 _Comp __comp = {}, _Proj __proj = {}) const
       {
 	auto __lasti = ranges::next(__first, __last);
-	std::sort(std::move(__first), __lasti,
-		  __detail::__make_comp_proj(__comp, __proj));
+	_GLIBCXX_STD_A::sort(std::move(__first), __lasti,
+			     __detail::__make_comp_proj(__comp, __proj));
 	return __lasti;
       }
 
@@ -2262,8 +2263,9 @@ namespace ranges
 		 _Comp __comp = {}, _Proj __proj = {}) const
       {
 	auto __lasti = ranges::next(__first, __last);
-	std::nth_element(std::move(__first), std::move(__nth), __lasti,
-			 __detail::__make_comp_proj(__comp, __proj));
+	_GLIBCXX_STD_A::nth_element(std::move(__first), std::move(__nth),
+				    __lasti,
+				    __detail::__make_comp_proj(__comp, __proj));
 	return __lasti;
       }
 
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index 089ec2903f6..0a0e29923b8 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -1706,8 +1706,8 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
 	  if constexpr (__is_byte_iter<_InputIter1>)
 	    if constexpr (__is_byte_iter<_InputIter2>)
 	      {
-		const auto [__len, __lencmp]
-		  = std::__min_cmp(__last1 - __first1, __last2 - __first2);
+		const auto [__len, __lencmp] = _GLIBCXX_STD_A::
+		  __min_cmp(__last1 - __first1, __last2 - __first2);
 		if (__len)
 		  {
 		    const auto __c
@@ -1737,9 +1737,9 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
 				      _InputIter2 __first2,
 				      _InputIter2 __last2)
     {
-      return std::lexicographical_compare_three_way(__first1, __last1,
-						    __first2, __last2,
-						    compare_three_way{});
+      return _GLIBCXX_STD_A::
+	lexicographical_compare_three_way(__first1, __last1, __first2, __last2,
+					  compare_three_way{});
     }
 #endif // three_way_comparison
 
diff --git a/libstdc++-v3/include/parallel/algobase.h b/libstdc++-v3/include/parallel/algobase.h
index 06b1f3e3b5a..7e6fdd6e062 100644
--- a/libstdc++-v3/include/parallel/algobase.h
+++ b/libstdc++-v3/include/parallel/algobase.h
@@ -466,6 +466,10 @@ namespace __parallel
                __begin1, __end1, __begin2, __end2, __pred,
                _IteratorCategory1(), _IteratorCategory2());
     }
+
+#if __cpp_lib_three_way_comparison
+  using _GLIBCXX_STD_A::lexicographical_compare_three_way;
+#endif
 } // end namespace
 } // end namespace


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-08-17 22:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17 22:07 [gcc(refs/users/giulianob/heads/autopar_rebase2)] libstdc++: Fix some C++20 algorithms to work in parallel mode Giuliano Belinassi

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).