public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/110793] New: regression in optimizing unused string
@ 2023-07-24 14:17 barry.revzin at gmail dot com
2023-07-24 14:36 ` [Bug c++/110793] " redi at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: barry.revzin at gmail dot com @ 2023-07-24 14:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110793
Bug ID: 110793
Summary: regression in optimizing unused string
Product: gcc
Version: 13.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: barry.revzin at gmail dot com
Target Milestone: ---
Consider this reduced, silly-looking example:
#include <string>
inline int zero(std::string const& = {}) { return 0; }
int main() {
return zero();
}
In several versions of gcc (12.2, 11.4, 10.5), this simply compiles to:
main:
xor eax, eax
ret
But in 13.1 (C++17, but not C++20), we get:
main:
sub rsp, 40
lea rax, [rsp+16]
mov rdi, rsp
mov BYTE PTR [rsp+16], 0
mov QWORD PTR [rsp], rax
mov QWORD PTR [rsp+8], 0
call std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >::_M_dispose()
xor eax, eax
add rsp, 40
ret
Notably, 13.1 C++20 and C++23 also compiles to just xor.
I'm not sure if this is a language or library issue, so tagging it language for
now.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/110793] regression in optimizing unused string
2023-07-24 14:17 [Bug c++/110793] New: regression in optimizing unused string barry.revzin at gmail dot com
@ 2023-07-24 14:36 ` redi at gcc dot gnu.org
2023-07-24 14:48 ` [Bug ipa/110793] " pinskia at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2023-07-24 14:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110793
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Barry Revzin from comment #0)
> Notably, 13.1 C++20 and C++23 also compiles to just xor.
>
Probably because we don't use the extern template declarations for C++20.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug ipa/110793] regression in optimizing unused string
2023-07-24 14:17 [Bug c++/110793] New: regression in optimizing unused string barry.revzin at gmail dot com
2023-07-24 14:36 ` [Bug c++/110793] " redi at gcc dot gnu.org
@ 2023-07-24 14:48 ` pinskia at gcc dot gnu.org
2023-07-24 15:04 ` pinskia at gcc dot gnu.org
2023-07-24 15:04 ` pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-07-24 14:48 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110793
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |marxin at gcc dot gnu.org
Component|c++ |ipa
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Actually this is more likely inlining heuristics that know that main is only
called once ever and does not inline as much into it.
Try renaming main to foo and try again b
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug ipa/110793] regression in optimizing unused string
2023-07-24 14:17 [Bug c++/110793] New: regression in optimizing unused string barry.revzin at gmail dot com
2023-07-24 14:36 ` [Bug c++/110793] " redi at gcc dot gnu.org
2023-07-24 14:48 ` [Bug ipa/110793] " pinskia at gcc dot gnu.org
@ 2023-07-24 15:04 ` pinskia at gcc dot gnu.org
2023-07-24 15:04 ` pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-07-24 15:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110793
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |INVALID
Status|UNCONFIRMED |RESOLVED
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> Actually this is more likely inlining heuristics that know that main is only
> called once ever and does not inline as much into it.
>
> Try renaming main to foo and try again b
Yes it is this heurstic.
Renaming main to foo produces:
foo():
.LFB1395:
.cfi_startproc
xorl %eax, %eax
ret
For all optimization levels.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug ipa/110793] regression in optimizing unused string
2023-07-24 14:17 [Bug c++/110793] New: regression in optimizing unused string barry.revzin at gmail dot com
` (2 preceding siblings ...)
2023-07-24 15:04 ` pinskia at gcc dot gnu.org
@ 2023-07-24 15:04 ` pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2023-07-24 15:04 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110793
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #3)
> For all optimization levels.
I mean for all C++ standards.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-07-24 15:04 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-24 14:17 [Bug c++/110793] New: regression in optimizing unused string barry.revzin at gmail dot com
2023-07-24 14:36 ` [Bug c++/110793] " redi at gcc dot gnu.org
2023-07-24 14:48 ` [Bug ipa/110793] " pinskia at gcc dot gnu.org
2023-07-24 15:04 ` pinskia at gcc dot gnu.org
2023-07-24 15:04 ` pinskia 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).