Re: Relocation (= move+destroy)

2018-11-09 Thread Marc Glisse
On Fri, 9 Nov 2018, Jonathan Wakely wrote: Here's the fix for the regression this introduced. Thanks. I was going to handle it, but I was waiting for you to review the second relocation patch first to avoid having several patches in flight over the same piece of code. Anyway, having the regr

Re: Relocation (= move+destroy)

2018-11-09 Thread Jonathan Wakely
On 25/10/18 13:36 +0100, Jonathan Wakely wrote: On 25/10/18 14:30 +0200, Marc Glisse wrote: On Tue, 23 Oct 2018, Jonathan Wakely wrote: + template +inline void +__relocate_a(_Tp* __dest, _Up* __orig, _Allocator& __alloc) I find it a little surprising that this overload for single ob

Re: Relocation (= move+destroy)

2018-10-25 Thread Jonathan Wakely
On 25/10/18 14:30 +0200, Marc Glisse wrote: On Tue, 23 Oct 2018, Jonathan Wakely wrote: + template +inline void +__relocate_a(_Tp* __dest, _Up* __orig, _Allocator& __alloc) I find it a little surprising that this overload for single objects using the memmove argument ordering (dest,

Re: Relocation (= move+destroy)

2018-10-25 Thread Marc Glisse
On Tue, 23 Oct 2018, Jonathan Wakely wrote: + template +inline void +__relocate_a(_Tp* __dest, _Up* __orig, _Allocator& __alloc) I find it a little surprising that this overload for single objects using the memmove argument ordering (dest, source) but the range overload below uses the

Re: Relocation (= move+destroy)

2018-10-23 Thread Jonathan Wakely
On 23/10/18 23:17 +0200, Marc Glisse wrote: On Tue, 23 Oct 2018, Jonathan Wakely wrote: What depends on C++14 here? Just enable_if_t? Because we have __enable_if_t for use in C++11. Both GCC and Clang will allow constexpr-if and static_assert with no message in C++11. Probably it can be enabl

Re: Relocation (= move+destroy)

2018-10-23 Thread Marc Glisse
On Tue, 23 Oct 2018, Jonathan Wakely wrote: CCing gcc-patches It seems to have disappeared somehow during the discussion, sorry. The tricky stuff in all looks right, I only have some comments on the __relocate_a functions ... Index: libstdc++-v3/include/bits/stl_uninitialized.h =

Re: Relocation (= move+destroy)

2018-10-23 Thread Jonathan Wakely
CCing gcc-patches On 19/10/18 07:33 +0200, Marc Glisse wrote: On Thu, 18 Oct 2018, Marc Glisse wrote: Uh, why didn't I notice that the function __relocate is unused? I guess I'll resend the same patch without __relocate once retesting has finished :-( Sorry for all the corrections, I guess I

Re: Relocation (= move+destroy)

2018-10-14 Thread Marc Glisse
On Sat, 13 Oct 2018, Marc Glisse wrote: + template +struct __is_trivially_relocatable +: is_trivially_move_constructible<_Tp> { }; Oups, this part is wrong, sorry, it is supposed to be "is_trivial" instead of "is_trivially_move_constructible", to match what is done elsewhere in this

Re: Relocation (= move+destroy)

2018-10-13 Thread Marc Glisse
On Sat, 13 Oct 2018, Jonathan Wakely wrote: On 13/10/18 11:07 +0200, Marc Glisse wrote: --- libstdc++-v3/include/bits/alloc_traits.h(revision 265131) +++ libstdc++-v3/include/bits/alloc_traits.h(working copy) @@ -233,38 +233,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using type =

Re: Relocation (= move+destroy)

2018-10-13 Thread Jonathan Wakely
On 13/10/18 11:07 +0200, Marc Glisse wrote: --- libstdc++-v3/include/bits/alloc_traits.h(revision 265131) +++ libstdc++-v3/include/bits/alloc_traits.h(working copy) @@ -233,38 +233,43 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using type = decltype(__test<_Alloc>(0)); };

Re: Relocation (= move+destroy)

2018-10-13 Thread Marc Glisse
On Sun, 2 Sep 2018, Jonathan Wakely wrote: On 01/09/18 21:56 +0200, Marc Glisse wrote: On Sat, 1 Sep 2018, Marc Glisse wrote: this patch passed bootstrap+regtest on powerpc64le-unknown-linux-gnu. I realized afterwards that for a C++17-only feature, that's not testing much... So I changed i

Re: Relocation (= move+destroy)

2018-09-04 Thread Jonathan Wakely
On 01/09/18 17:00 +0200, Marc Glisse wrote: _GLIBCXX_ASAN_ANNOTATE_REINIT: I am not familiar with those annotations. It was convenient in one function to move this annotation after _Destroy, to reduce code duplication. For consistency, I did the same in the whole file. As far as I understand, t

Re: Relocation (= move+destroy)

2018-09-02 Thread Ville Voutilainen
On 2 September 2018 at 23:03, Jonathan Wakely wrote: > On 01/09/18 21:56 +0200, Marc Glisse wrote: >> >> On Sat, 1 Sep 2018, Marc Glisse wrote: >> >>> this patch passed bootstrap+regtest on powerpc64le-unknown-linux-gnu. >> >> >> I realized afterwards that for a C++17-only feature, that's not test

Re: Relocation (= move+destroy)

2018-09-02 Thread Jonathan Wakely
On 01/09/18 21:56 +0200, Marc Glisse wrote: On Sat, 1 Sep 2018, Marc Glisse wrote: this patch passed bootstrap+regtest on powerpc64le-unknown-linux-gnu. I realized afterwards that for a C++17-only feature, that's not testing much... So I changed it to apply in C++14 and fixed a minor issue.

Re: Relocation (= move+destroy)

2018-09-01 Thread Marc Glisse
On Sat, 1 Sep 2018, Marc Glisse wrote: this patch passed bootstrap+regtest on powerpc64le-unknown-linux-gnu. I realized afterwards that for a C++17-only feature, that's not testing much... So I changed it to apply in C++14 and fixed a minor issue. There is now a single regression: 23_conta

Re: Relocation (= move+destroy)

2018-09-01 Thread Marc Glisse
I forgot to attach the "diff -w" version of the patch, which may be a bit more readable. -- Marc GlisseIndex: include/bits/alloc_traits.h === --- include/bits/alloc_traits.h (revision 264027) +++ include/bits/alloc_traits.h (working

Relocation (= move+destroy)

2018-09-01 Thread Marc Glisse
Hello, this patch passed bootstrap+regtest on powerpc64le-unknown-linux-gnu. The main idea is manually performing loop fusion when we see 2 consecutive loops where the first moves data from A to B, and the second destroys the same elements in A. This is beneficial because there is one loop f