Re: [PATCH] libstdc++: Rebase include/pstl to current upstream

2020-09-30 Thread Jonathan Wakely via Gcc-patches

On 21/09/20 15:40 +0100, Jonathan Wakely wrote:

On 15/09/20 20:35 -0700, Thomas Rodgers wrote:

From: Thomas Rodgers 

From llvm-project/pstl @ 0b2e0e80d96

libstdc++-v3/ChangeLog:

* include/pstl/algorithm_impl.h: Update file.
* include/pstl/execution_impl.h: Likewise.
* include/pstl/glue_algorithm_impl.h: Likewise.
* include/pstl/glue_memory_impl.h: Likewise.
* include/pstl/glue_numeric_impl.h: Likewise.
* include/pstl/memory_impl.h: Likewise.
* include/pstl/numeric_impl.h: Likewise.
* include/pstl/parallel_backend.h: Likewise.
* include/pstl/parallel_backend_serial.h: Likewise.
* include/pstl/parallel_backend_tbb.h: Likewise.
* include/pstl/parallel_backend_utils.h: Likewise.
* include/pstl/pstl_config.h: Likewise.
* include/pstl/unseq_backend_simd.h: Likewise.
---
libstdc++-v3/include/pstl/algorithm_impl.h| 181 ++--
libstdc++-v3/include/pstl/execution_impl.h|   4 +-
.../include/pstl/glue_algorithm_impl.h| 543 +--
libstdc++-v3/include/pstl/glue_memory_impl.h  | 264 ++---
libstdc++-v3/include/pstl/glue_numeric_impl.h |  68 +-
libstdc++-v3/include/pstl/memory_impl.h   |  67 +-
libstdc++-v3/include/pstl/numeric_impl.h  |   8 +-
libstdc++-v3/include/pstl/parallel_backend.h  |   8 +
.../include/pstl/parallel_backend_serial.h|   8 +-
.../include/pstl/parallel_backend_tbb.h   | 903 +++---
.../include/pstl/parallel_backend_utils.h | 248 +++--
libstdc++-v3/include/pstl/pstl_config.h   |  24 +-
.../include/pstl/unseq_backend_simd.h |  39 +-
13 files changed, 1586 insertions(+), 779 deletions(-)

diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h 
b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
index 379de4033ec..d2e30529f78 100644
--- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
+++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
@@ -757,8 +743,7 @@ 
__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 
__last1, _ForwardIterator2 __first2,
 _ForwardIterator2 __last2)
{
-return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
__last1, __first2, __last2,
-  __pstl::__internal::__pstl_equal());
+return equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, 
__first2, __last2, std::equal_to<>());


Any idea why this is now called unqualified? I don't think we want ADL
here.



diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h 
b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
index 9c05ade0532..4476486d548 100644
--- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
+++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h


This file is full of non-reserved names, like _root and _x_orig and
move_y_range.

Fixing those upstream might take a while though.


Please go ahead and commit this as is. The problems can be addressed
upstream and fixed here later.




Re: [PATCH] libstdc++: Rebase include/pstl to current upstream

2020-09-21 Thread Thomas Rodgers via Gcc-patches


Thanks, I'll apply locally (and sync those changes to the patch I'm
preparing for upstream).

Jonathan Wakely writes:

> On 21/09/20 08:19 -0700, Thomas Rodgers wrote:
>>
>>
>>> On Sep 21, 2020, at 7:40 AM, Jonathan Wakely  wrote:
>>>
>>> On 15/09/20 20:35 -0700, Thomas Rodgers wrote:
 From: Thomas Rodgers 

 From llvm-project/pstl @ 0b2e0e80d96

 libstdc++-v3/ChangeLog:

* include/pstl/algorithm_impl.h: Update file.
* include/pstl/execution_impl.h: Likewise.
* include/pstl/glue_algorithm_impl.h: Likewise.
* include/pstl/glue_memory_impl.h: Likewise.
* include/pstl/glue_numeric_impl.h: Likewise.
* include/pstl/memory_impl.h: Likewise.
* include/pstl/numeric_impl.h: Likewise.
* include/pstl/parallel_backend.h: Likewise.
* include/pstl/parallel_backend_serial.h: Likewise.
* include/pstl/parallel_backend_tbb.h: Likewise.
* include/pstl/parallel_backend_utils.h: Likewise.
* include/pstl/pstl_config.h: Likewise.
* include/pstl/unseq_backend_simd.h: Likewise.
 ---
 libstdc++-v3/include/pstl/algorithm_impl.h| 181 ++--
 libstdc++-v3/include/pstl/execution_impl.h|   4 +-
 .../include/pstl/glue_algorithm_impl.h| 543 +--
 libstdc++-v3/include/pstl/glue_memory_impl.h  | 264 ++---
 libstdc++-v3/include/pstl/glue_numeric_impl.h |  68 +-
 libstdc++-v3/include/pstl/memory_impl.h   |  67 +-
 libstdc++-v3/include/pstl/numeric_impl.h  |   8 +-
 libstdc++-v3/include/pstl/parallel_backend.h  |   8 +
 .../include/pstl/parallel_backend_serial.h|   8 +-
 .../include/pstl/parallel_backend_tbb.h   | 903 +++---
 .../include/pstl/parallel_backend_utils.h | 248 +++--
 libstdc++-v3/include/pstl/pstl_config.h   |  24 +-
 .../include/pstl/unseq_backend_simd.h |  39 +-
 13 files changed, 1586 insertions(+), 779 deletions(-)

 diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h 
 b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
 index 379de4033ec..d2e30529f78 100644
 --- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
 +++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
 @@ -757,8 +743,7 @@ 
 __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, 
 _ForwardIterator1 __last1, _ForwardIterator2 __first2,
  _ForwardIterator2 __last2)
 {
 -return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
 __last1, __first2, __last2,
 -  __pstl::__internal::__pstl_equal());
 +return equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
 __last1, __first2, __last2, std::equal_to<>());
>>>
>>> Any idea why this is now called unqualified? I don't think we want ADL
>>> here.
>>>
>>I’m sure it is related to ...
>>>
 diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h 
 b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
 index 9c05ade0532..4476486d548 100644
 --- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
 +++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
>>>
>>> This file is full of non-reserved names, like _root and _x_orig and
>>> move_y_range.
>>>
>>
>>The upstream authors not being sufficiently versed in thinking in terms of 
>>writing things up front to avoid the sort of issues that a stdlib requires of 
>>the code.
>>
>>> Fixing those upstream might take a while though.
>>
>>I have already started accumulating a set of patches for upstream which I’ll 
>>manage as independently of getting this rebase into gcc.
>
> Here's a patch to fix
> https://bugs.llvm.org/show_bug.cgi?id=47601
> and
> https://bugs.llvm.org/show_bug.cgi?id=47601
> by essentially rewriting the entire file!



Re: [PATCH] libstdc++: Rebase include/pstl to current upstream

2020-09-21 Thread Jonathan Wakely via Gcc-patches

On 21/09/20 08:19 -0700, Thomas Rodgers wrote:




On Sep 21, 2020, at 7:40 AM, Jonathan Wakely  wrote:

On 15/09/20 20:35 -0700, Thomas Rodgers wrote:

From: Thomas Rodgers 

From llvm-project/pstl @ 0b2e0e80d96

libstdc++-v3/ChangeLog:

* include/pstl/algorithm_impl.h: Update file.
* include/pstl/execution_impl.h: Likewise.
* include/pstl/glue_algorithm_impl.h: Likewise.
* include/pstl/glue_memory_impl.h: Likewise.
* include/pstl/glue_numeric_impl.h: Likewise.
* include/pstl/memory_impl.h: Likewise.
* include/pstl/numeric_impl.h: Likewise.
* include/pstl/parallel_backend.h: Likewise.
* include/pstl/parallel_backend_serial.h: Likewise.
* include/pstl/parallel_backend_tbb.h: Likewise.
* include/pstl/parallel_backend_utils.h: Likewise.
* include/pstl/pstl_config.h: Likewise.
* include/pstl/unseq_backend_simd.h: Likewise.
---
libstdc++-v3/include/pstl/algorithm_impl.h| 181 ++--
libstdc++-v3/include/pstl/execution_impl.h|   4 +-
.../include/pstl/glue_algorithm_impl.h| 543 +--
libstdc++-v3/include/pstl/glue_memory_impl.h  | 264 ++---
libstdc++-v3/include/pstl/glue_numeric_impl.h |  68 +-
libstdc++-v3/include/pstl/memory_impl.h   |  67 +-
libstdc++-v3/include/pstl/numeric_impl.h  |   8 +-
libstdc++-v3/include/pstl/parallel_backend.h  |   8 +
.../include/pstl/parallel_backend_serial.h|   8 +-
.../include/pstl/parallel_backend_tbb.h   | 903 +++---
.../include/pstl/parallel_backend_utils.h | 248 +++--
libstdc++-v3/include/pstl/pstl_config.h   |  24 +-
.../include/pstl/unseq_backend_simd.h |  39 +-
13 files changed, 1586 insertions(+), 779 deletions(-)

diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h 
b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
index 379de4033ec..d2e30529f78 100644
--- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
+++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
@@ -757,8 +743,7 @@ 
__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 
__last1, _ForwardIterator2 __first2,
 _ForwardIterator2 __last2)
{
-return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
__last1, __first2, __last2,
-  __pstl::__internal::__pstl_equal());
+return equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, 
__first2, __last2, std::equal_to<>());


Any idea why this is now called unqualified? I don't think we want ADL
here.


I’m sure it is related to ...



diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h 
b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
index 9c05ade0532..4476486d548 100644
--- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
+++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h


This file is full of non-reserved names, like _root and _x_orig and
move_y_range.



The upstream authors not being sufficiently versed in thinking in terms of 
writing things up front to avoid the sort of issues that a stdlib requires of 
the code.


Fixing those upstream might take a while though.


I have already started accumulating a set of patches for upstream which I’ll 
manage as independently of getting this rebase into gcc.


Here's a patch to fix
https://bugs.llvm.org/show_bug.cgi?id=47601
and
https://bugs.llvm.org/show_bug.cgi?id=47601
by essentially rewriting the entire file!


diff --git a/libstdc++-v3/include/pstl/execution_impl.h b/libstdc++-v3/include/pstl/execution_impl.h
index d53fd6ffd32..b3a8030fca3 100644
--- a/libstdc++-v3/include/pstl/execution_impl.h
+++ b/libstdc++-v3/include/pstl/execution_impl.h
@@ -22,45 +22,9 @@ namespace __internal
 
 using namespace __pstl::execution;
 
-/* predicate */
-
-template 
-std::false_type __lazy_and(_Tp, std::false_type)
-{
-return std::false_type{};
-};
-
-template 
-inline _Tp
-__lazy_and(_Tp __a, std::true_type)
-{
-return __a;
-}
-
-template 
-std::true_type __lazy_or(_Tp, std::true_type)
-{
-return std::true_type{};
-};
-
-template 
-inline _Tp
-__lazy_or(_Tp __a, std::false_type)
-{
-return __a;
-}
-
 /* iterator */
-template 
-struct __is_random_access_iterator
-{
-static constexpr bool value = __internal::__is_random_access_iterator<_IteratorType>::value &&
-  __internal::__is_random_access_iterator<_OtherIteratorTypes...>::value;
-typedef std::integral_constant type;
-};
-
 template 
-struct __is_random_access_iterator<_IteratorType>
+struct __is_random_access_iterator
 : std::is_same::iterator_category, std::random_access_iterator_tag>
 {
 };
@@ -74,86 +38,68 @@ struct __policy_traits
 template <>
 struct __policy_traits
 {
-typedef std::false_type allow_parallel;
-typedef std::false_type allow_unsequenced;
-typedef std::false_type allow_vector;
+typedef std::false_type __allow_parallel;
+typedef 

Re: [PATCH] libstdc++: Rebase include/pstl to current upstream

2020-09-21 Thread Thomas Rodgers



> On Sep 21, 2020, at 7:40 AM, Jonathan Wakely  wrote:
> 
> On 15/09/20 20:35 -0700, Thomas Rodgers wrote:
>> From: Thomas Rodgers 
>> 
>> From llvm-project/pstl @ 0b2e0e80d96
>> 
>> libstdc++-v3/ChangeLog:
>> 
>>  * include/pstl/algorithm_impl.h: Update file.
>>  * include/pstl/execution_impl.h: Likewise.
>>  * include/pstl/glue_algorithm_impl.h: Likewise.
>>  * include/pstl/glue_memory_impl.h: Likewise.
>>  * include/pstl/glue_numeric_impl.h: Likewise.
>>  * include/pstl/memory_impl.h: Likewise.
>>  * include/pstl/numeric_impl.h: Likewise.
>>  * include/pstl/parallel_backend.h: Likewise.
>>  * include/pstl/parallel_backend_serial.h: Likewise.
>>  * include/pstl/parallel_backend_tbb.h: Likewise.
>>  * include/pstl/parallel_backend_utils.h: Likewise.
>>  * include/pstl/pstl_config.h: Likewise.
>>  * include/pstl/unseq_backend_simd.h: Likewise.
>> ---
>> libstdc++-v3/include/pstl/algorithm_impl.h| 181 ++--
>> libstdc++-v3/include/pstl/execution_impl.h|   4 +-
>> .../include/pstl/glue_algorithm_impl.h| 543 +--
>> libstdc++-v3/include/pstl/glue_memory_impl.h  | 264 ++---
>> libstdc++-v3/include/pstl/glue_numeric_impl.h |  68 +-
>> libstdc++-v3/include/pstl/memory_impl.h   |  67 +-
>> libstdc++-v3/include/pstl/numeric_impl.h  |   8 +-
>> libstdc++-v3/include/pstl/parallel_backend.h  |   8 +
>> .../include/pstl/parallel_backend_serial.h|   8 +-
>> .../include/pstl/parallel_backend_tbb.h   | 903 +++---
>> .../include/pstl/parallel_backend_utils.h | 248 +++--
>> libstdc++-v3/include/pstl/pstl_config.h   |  24 +-
>> .../include/pstl/unseq_backend_simd.h |  39 +-
>> 13 files changed, 1586 insertions(+), 779 deletions(-)
>> 
>> diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h 
>> b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
>> index 379de4033ec..d2e30529f78 100644
>> --- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
>> +++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
>> @@ -757,8 +743,7 @@ 
>> __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
>> equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, 
>> _ForwardIterator1 __last1, _ForwardIterator2 __first2,
>>  _ForwardIterator2 __last2)
>> {
>> -return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
>> __last1, __first2, __last2,
>> -  __pstl::__internal::__pstl_equal());
>> +return equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, 
>> __first2, __last2, std::equal_to<>());
> 
> Any idea why this is now called unqualified? I don't think we want ADL
> here.
> 
I’m sure it is related to ... 
> 
>> diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h 
>> b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
>> index 9c05ade0532..4476486d548 100644
>> --- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
>> +++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
> 
> This file is full of non-reserved names, like _root and _x_orig and
> move_y_range.
> 

The upstream authors not being sufficiently versed in thinking in terms of 
writing things up front to avoid the sort of issues that a stdlib requires of 
the code.
 
> Fixing those upstream might take a while though.

I have already started accumulating a set of patches for upstream which I’ll 
manage as independently of getting this rebase into gcc.

Re: [PATCH] libstdc++: Rebase include/pstl to current upstream

2020-09-21 Thread Jonathan Wakely via Gcc-patches

On 15/09/20 20:35 -0700, Thomas Rodgers wrote:

From: Thomas Rodgers 

From llvm-project/pstl @ 0b2e0e80d96

libstdc++-v3/ChangeLog:

* include/pstl/algorithm_impl.h: Update file.
* include/pstl/execution_impl.h: Likewise.
* include/pstl/glue_algorithm_impl.h: Likewise.
* include/pstl/glue_memory_impl.h: Likewise.
* include/pstl/glue_numeric_impl.h: Likewise.
* include/pstl/memory_impl.h: Likewise.
* include/pstl/numeric_impl.h: Likewise.
* include/pstl/parallel_backend.h: Likewise.
* include/pstl/parallel_backend_serial.h: Likewise.
* include/pstl/parallel_backend_tbb.h: Likewise.
* include/pstl/parallel_backend_utils.h: Likewise.
* include/pstl/pstl_config.h: Likewise.
* include/pstl/unseq_backend_simd.h: Likewise.
---
libstdc++-v3/include/pstl/algorithm_impl.h| 181 ++--
libstdc++-v3/include/pstl/execution_impl.h|   4 +-
.../include/pstl/glue_algorithm_impl.h| 543 +--
libstdc++-v3/include/pstl/glue_memory_impl.h  | 264 ++---
libstdc++-v3/include/pstl/glue_numeric_impl.h |  68 +-
libstdc++-v3/include/pstl/memory_impl.h   |  67 +-
libstdc++-v3/include/pstl/numeric_impl.h  |   8 +-
libstdc++-v3/include/pstl/parallel_backend.h  |   8 +
.../include/pstl/parallel_backend_serial.h|   8 +-
.../include/pstl/parallel_backend_tbb.h   | 903 +++---
.../include/pstl/parallel_backend_utils.h | 248 +++--
libstdc++-v3/include/pstl/pstl_config.h   |  24 +-
.../include/pstl/unseq_backend_simd.h |  39 +-
13 files changed, 1586 insertions(+), 779 deletions(-)

diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h 
b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
index 379de4033ec..d2e30529f78 100644
--- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
+++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
@@ -757,8 +743,7 @@ 
__pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 
__last1, _ForwardIterator2 __first2,
  _ForwardIterator2 __last2)
{
-return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, 
__last1, __first2, __last2,
-  __pstl::__internal::__pstl_equal());
+return equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, 
__first2, __last2, std::equal_to<>());


Any idea why this is now called unqualified? I don't think we want ADL
here.



diff --git a/libstdc++-v3/include/pstl/parallel_backend_tbb.h 
b/libstdc++-v3/include/pstl/parallel_backend_tbb.h
index 9c05ade0532..4476486d548 100644
--- a/libstdc++-v3/include/pstl/parallel_backend_tbb.h
+++ b/libstdc++-v3/include/pstl/parallel_backend_tbb.h


This file is full of non-reserved names, like _root and _x_orig and
move_y_range.

Fixing those upstream might take a while though.