public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find
@ 2024-05-10 22:42 sjames at gcc dot gnu.org
2024-05-10 22:52 ` [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements pinskia at gcc dot gnu.org
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: sjames at gcc dot gnu.org @ 2024-05-10 22:42 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
Bug ID: 115040
Summary: Missed optimization opportunity in std::find
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: hiraditya at msn dot com
Target Milestone: ---
https://gcc.godbolt.org/z/s3hv15935
```
#include <algorithm>
#include <vector>
#include <cstdint>
bool find_epi8(const std::vector<int8_t>& v) {
return std::find(v.begin(), v.end(), 42) != v.end();
}
bool find_epi32(const std::vector<int32_t>& v) {
return std::find(v.begin(), v.end(), 42) != v.end();
}
```
$ gcc -O3 -ftree-vectorize -march=pantherlake
```
find_epi8(std::vector<signed char, std::allocator<signed char> > const&):
mov rcx, QWORD PTR [rdi+8]
mov rdx, QWORD PTR [rdi]
mov rsi, rcx
sub rsi, rdx
mov rax, rsi
sar rax, 2
test rax, rax
jle .L2
lea rax, [rdx+rax*4]
jmp .L8
.L3:
cmp BYTE PTR [rdx+1], 42
je .L23
cmp BYTE PTR [rdx+2], 42
je .L24
cmp BYTE PTR [rdx+3], 42
je .L25
add rdx, 4
cmp rdx, rax
je .L26
.L8:
cmp BYTE PTR [rdx], 42
jne .L3
.L21:
cmp rcx, rdx
setne al
ret
.L26:
mov rsi, rcx
sub rsi, rdx
.L2:
cmp rsi, 2
je .L9
cmp rsi, 3
je .L10
cmp rsi, 1
je .L11
xor eax, eax
ret
.L10:
cmp BYTE PTR [rdx], 42
je .L21
add rdx, 1
.L9:
cmp BYTE PTR [rdx], 42
je .L21
add rdx, 1
.L11:
cmp BYTE PTR [rdx], 42
sete al
cmp rcx, rdx
setne dl
and eax, edx
ret
.L23:
add rdx, 1
cmp rcx, rdx
setne al
ret
.L24:
add rdx, 2
cmp rcx, rdx
setne al
ret
.L25:
add rdx, 3
cmp rcx, rdx
setne al
ret
find_epi32(std::vector<int, std::allocator<int> > const&):
mov rcx, QWORD PTR [rdi+8]
mov rdx, QWORD PTR [rdi]
mov rax, rcx
sub rax, rdx
mov rsi, rax
sar rax, 4
sar rsi, 2
test rax, rax
jle .L28
sal rax, 4
add rax, rdx
jmp .L34
.L29:
cmp DWORD PTR [rdx+4], 42
je .L48
cmp DWORD PTR [rdx+8], 42
je .L49
cmp DWORD PTR [rdx+12], 42
je .L50
add rdx, 16
cmp rdx, rax
je .L51
.L34:
cmp DWORD PTR [rdx], 42
jne .L29
.L47:
cmp rcx, rdx
setne al
ret
.L51:
mov rsi, rcx
sub rsi, rdx
sar rsi, 2
.L28:
cmp rsi, 2
je .L35
cmp rsi, 3
je .L36
cmp rsi, 1
je .L37
xor eax, eax
ret
.L36:
cmp DWORD PTR [rdx], 42
je .L47
add rdx, 4
.L35:
cmp DWORD PTR [rdx], 42
je .L47
add rdx, 4
.L37:
cmp DWORD PTR [rdx], 42
sete al
cmp rcx, rdx
setne dl
and eax, edx
ret
.L48:
add rdx, 4
cmp rcx, rdx
setne al
ret
.L49:
add rdx, 8
cmp rcx, rdx
setne al
ret
.L50:
add rdx, 12
cmp rcx, rdx
setne al
ret
```
clang lowers both the calls to (w)memchr
--- Comment #1 from Sam James <sjames at gcc dot gnu.org> ---
*** Bug 115041 has been marked as a duplicate of this bug. ***
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
@ 2024-05-10 22:52 ` pinskia at gcc dot gnu.org
2024-05-10 22:56 ` pinskia at gcc dot gnu.org
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-10 22:52 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
2024-05-10 22:52 ` [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements pinskia at gcc dot gnu.org
@ 2024-05-10 22:56 ` pinskia at gcc dot gnu.org
2024-05-10 23:04 ` sjames at gcc dot gnu.org
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-10 22:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
> clang lowers both the calls to (w)memchr
Is that with libc++ or libstdc++?
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
2024-05-10 22:52 ` [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements pinskia at gcc dot gnu.org
2024-05-10 22:56 ` pinskia at gcc dot gnu.org
@ 2024-05-10 23:04 ` sjames at gcc dot gnu.org
2024-05-10 23:10 ` [Bug libstdc++/115040] " pinskia at gcc dot gnu.org
2024-05-13 13:11 ` redi at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: sjames at gcc dot gnu.org @ 2024-05-10 23:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
--- Comment #3 from Sam James <sjames at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> > clang lowers both the calls to (w)memchr
>
> Is that with libc++ or libstdc++?
It's libc++. Checked locally too..
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/115040] Missed optimization opportunity in std::find of std::vector elements
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
` (2 preceding siblings ...)
2024-05-10 23:04 ` sjames at gcc dot gnu.org
@ 2024-05-10 23:10 ` pinskia at gcc dot gnu.org
2024-05-13 13:11 ` redi at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-10 23:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Sam James from comment #3)
> (In reply to Andrew Pinski from comment #2)
> > > clang lowers both the calls to (w)memchr
> >
> > Is that with libc++ or libstdc++?
>
> It's libc++. Checked locally too..
Then this is partly a dup of bug 88545
^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug libstdc++/115040] Missed optimization opportunity in std::find of std::vector elements
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
` (3 preceding siblings ...)
2024-05-10 23:10 ` [Bug libstdc++/115040] " pinskia at gcc dot gnu.org
@ 2024-05-13 13:11 ` redi at gcc dot gnu.org
4 siblings, 0 replies; 6+ messages in thread
From: redi at gcc dot gnu.org @ 2024-05-13 13:11 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115040
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #4)
> Then this is partly a dup of bug 88545
Yes, that would manually transform the find_epi8 case into a memchr call, but
Clang doesn't need a manual transform in the library, it does it in the
compiler.
Tamar's plan to remove the manual loop unrolling in our std::find_if might help
here, but I'm not sure.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-05-13 13:11 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-10 22:42 [Bug tree-optimization/115040] New: Missed optimization opportunity in std::find sjames at gcc dot gnu.org
2024-05-10 22:52 ` [Bug tree-optimization/115040] Missed optimization opportunity in std::find of std::vector elements pinskia at gcc dot gnu.org
2024-05-10 22:56 ` pinskia at gcc dot gnu.org
2024-05-10 23:04 ` sjames at gcc dot gnu.org
2024-05-10 23:10 ` [Bug libstdc++/115040] " pinskia at gcc dot gnu.org
2024-05-13 13:11 ` redi at gcc dot gnu.org
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).