public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20
@ 2022-10-24  2:28 unlvsur at live dot com
  2022-10-24  2:33 ` [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when " unlvsur at live dot com
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2022-10-24  2:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

            Bug ID: 107367
           Summary: All standard library algorithms should detect whether
                    they are contiguous iterators after C++20
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: unlvsur at live dot com
  Target Milestone: ---

https://github.com/gcc-mirror/gcc/blob/00716b776200c2de6813ce706d2757eec4cb2735/libstdc%2B%2B-v3/include/bits/stl_algo.h#L3229

Take is_sorted for example:

  template<typename _ForwardIterator>
    _GLIBCXX20_CONSTEXPR
    inline bool
    is_sorted(_ForwardIterator __first, _ForwardIterator __last)
    { return std::is_sorted_until(__first, __last) == __last; }

It should be optimized to

  template<typename _ForwardIterator>
    _GLIBCXX20_CONSTEXPR
    inline bool
    is_sorted(_ForwardIterator __first, _ForwardIterator __last)
    { 
       if
constexpr(contiguous_iterator<_ForwardIterator>&&!is_pointer_v<_ForwardIterator>)
{
       return is_sorted(to_address(__first),to_address(__last));
}
else
{
 return std::is_sorted_until(__first, __last) == __last; 
}
 }

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
@ 2022-10-24  2:33 ` unlvsur at live dot com
  2022-10-25  3:36 ` unlvsur at live dot com
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2022-10-24  2:33 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #1 from cqwrteur <unlvsur at live dot com> ---
This optimization will prevent duplications of templates over iterators and
pointers. (vector<int>::iterator and int* duplications for example)

For example:

https://godbolt.org/z/9zEajxxa8
vs
https://godbolt.org/z/n61vEddj1

579 vs 879

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
  2022-10-24  2:33 ` [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when " unlvsur at live dot com
@ 2022-10-25  3:36 ` unlvsur at live dot com
  2023-12-16 18:40 ` unlvsur at live dot com
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2022-10-25  3:36 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #2 from cqwrteur <unlvsur at live dot com> ---
(In reply to cqwrteur from comment #1)
> This optimization will prevent duplications of templates over iterators and
> pointers. (vector<int>::iterator and int* duplications for example)
> 
> For example:
> 
> https://godbolt.org/z/9zEajxxa8
> vs
> https://godbolt.org/z/n61vEddj1
> 
> 579 vs 879
For debugging. You can do something like this

template<typename ForwardIterator>
concept can_optimize_to_pointer_impl = 
#ifdef _GLIBCXX_DEBUG
false;
#else
std::contiguous_iterator<ForwardIterator>&&!std::is_pointer_v<ForwardIterator>;
#endif

template<typename ForwardIterator>
constexpr void my_sort(ForwardIterator first,ForwardIterator last)
{
    if constexpr(can_optimize_to_pointer_impl<ForwardIterator>)
    {
        std::sort(std::to_address(first),std::to_address(last));
    }
    else
    {
        std::sort(first,last);
    }
}

https://godbolt.org/z/jj38MoWen

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
  2022-10-24  2:33 ` [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when " unlvsur at live dot com
  2022-10-25  3:36 ` unlvsur at live dot com
@ 2023-12-16 18:40 ` unlvsur at live dot com
  2023-12-17 13:44 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2023-12-16 18:40 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

cqwrteur <unlvsur at live dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |MOVED
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #3 from cqwrteur <unlvsur at live dot com> ---
moved and restart

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
                   ` (2 preceding siblings ...)
  2023-12-16 18:40 ` unlvsur at live dot com
@ 2023-12-17 13:44 ` redi at gcc dot gnu.org
  2023-12-17 13:45 ` redi at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2023-12-17 13:44 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
*** Bug 113046 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
                   ` (3 preceding siblings ...)
  2023-12-17 13:44 ` redi at gcc dot gnu.org
@ 2023-12-17 13:45 ` redi at gcc dot gnu.org
  2024-06-28 11:41 ` redi at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2023-12-17 13:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-12-17
     Ever confirmed|0                           |1
           Keywords|                            |missed-optimization
         Resolution|MOVED                       |---
             Status|RESOLVED                    |NEW
           Severity|normal                      |enhancement

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
                   ` (4 preceding siblings ...)
  2023-12-17 13:45 ` redi at gcc dot gnu.org
@ 2024-06-28 11:41 ` redi at gcc dot gnu.org
  2024-06-28 18:03 ` unlvsur at live dot com
  2024-06-28 18:10 ` unlvsur at live dot com
  7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2024-06-28 11:41 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This optimization isn't valid if any iterator operations can throw, because
such an exception should terminate the loop early. Performing the algo on raw
pointers would alter the behaviour.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
                   ` (5 preceding siblings ...)
  2024-06-28 11:41 ` redi at gcc dot gnu.org
@ 2024-06-28 18:03 ` unlvsur at live dot com
  2024-06-28 18:10 ` unlvsur at live dot com
  7 siblings, 0 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2024-06-28 18:03 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #6 from cqwrteur <unlvsur at live dot com> ---
Your argument is not correct when you can just detect all the iterator methods
are noexcept. Plus, the standard does not need you to handle exceptions if
iterator throw it but to terminate.

Btw what is the point of contiguous_iterator if i am not allowed to use
std::to_address to optimize code? The whole point of contiguous_iterator is
that i am allowed to use pointer arithematics directly.

Get Outlook for Android<https://aka.ms/AAb9ysg>
________________________________
From: redi at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
Sent: Friday, June 28, 2024 7:41:47 AM
To: unlvsur@live.com <unlvsur@live.com>
Subject: [Bug libstdc++/107367] All standard library algorithms should optimize
to pointers internally when they are contiguous iterators after C++20

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This optimization isn't valid if any iterator operations can throw, because
such an exception should terminate the loop early. Performing the algo on raw
pointers would alter the behaviour.

--
You are receiving this mail because:
You are on the CC list for the bug.
You reported the bug.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when they are contiguous iterators after C++20
  2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
                   ` (6 preceding siblings ...)
  2024-06-28 18:03 ` unlvsur at live dot com
@ 2024-06-28 18:10 ` unlvsur at live dot com
  7 siblings, 0 replies; 9+ messages in thread
From: unlvsur at live dot com @ 2024-06-28 18:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107367

--- Comment #7 from cqwrteur <unlvsur at live dot com> ---
I see similar side effects like what if someone adds a print statement in the
operator++ or operator * in a contiguous iterator and etc.

If I am not allowed to use std::to_address, what’s the point?

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-06-28 18:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-24  2:28 [Bug libstdc++/107367] New: All standard library algorithms should detect whether they are contiguous iterators after C++20 unlvsur at live dot com
2022-10-24  2:33 ` [Bug libstdc++/107367] All standard library algorithms should optimize to pointers internally when " unlvsur at live dot com
2022-10-25  3:36 ` unlvsur at live dot com
2023-12-16 18:40 ` unlvsur at live dot com
2023-12-17 13:44 ` redi at gcc dot gnu.org
2023-12-17 13:45 ` redi at gcc dot gnu.org
2024-06-28 11:41 ` redi at gcc dot gnu.org
2024-06-28 18:03 ` unlvsur at live dot com
2024-06-28 18:10 ` unlvsur at live dot com

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