public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers @ 2012-09-14 21:11 chip at pobox dot com 2013-09-05 20:06 ` [Bug rtl-optimization/54585] " chip at pobox dot com ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: chip at pobox dot com @ 2012-09-14 21:11 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54585 Bug #: 54585 Summary: stack space allocated but never used when calling functions that return structs in registers Classification: Unclassified Product: gcc Version: 4.7.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassigned@gcc.gnu.org ReportedBy: chip@pobox.com Now that bug #44194 is fixed, and a returned structure used as a parameter is no longer stored unnecessarily, a new bug is visible: a stack frame is being allocated that is entirely unused. On x86_64 target with the fix for 44194 backported to the 4.7 branch, this code: #include <stdint.h> struct blargh { uint32_t a, b, c; } foo(); void bar(uint32_t a, uint32_t b, uint32_t c); void func() { struct blargh s = foo(); bar(s.a, s.b, s.c); } no longer uses any stack memory at all, but still the function call reserves 24 bytes with "subq $24,%rsp" and promptly returns it with "addq $24,%rsp". The generated code looks like this: func: .cfi_startproc xorl %eax, %eax subq $24, %rsp .cfi_def_cfa_offset 32 call foo movq %rax, %rsi movl %eax, %edi addq $24, %rsp .cfi_def_cfa_offset 8 shrq $32, %rsi jmp bar .cfi_endproc ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/54585] stack space allocated but never used when calling functions that return structs in registers 2012-09-14 21:11 [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers chip at pobox dot com @ 2013-09-05 20:06 ` chip at pobox dot com 2013-09-05 21:05 ` ebotcazou at gcc dot gnu.org ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: chip at pobox dot com @ 2013-09-05 20:06 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54585 --- Comment #1 from Chip Salzenberg <chip at pobox dot com> --- I'd like to suggest this ticket be at least CONFIRMED what with the code samples in the ticket. What will it take to fix this? ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/54585] stack space allocated but never used when calling functions that return structs in registers 2012-09-14 21:11 [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers chip at pobox dot com 2013-09-05 20:06 ` [Bug rtl-optimization/54585] " chip at pobox dot com @ 2013-09-05 21:05 ` ebotcazou at gcc dot gnu.org 2013-09-23 20:05 ` chip at pobox dot com 2021-12-18 23:59 ` [Bug middle-end/54585] " pinskia at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: ebotcazou at gcc dot gnu.org @ 2013-09-05 21:05 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54585 Eric Botcazou <ebotcazou at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-09-05 CC| |ebotcazou at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #2 from Eric Botcazou <ebotcazou at gcc dot gnu.org> --- It's quite hard because the frame is laid out way before all the memory accesses to the stack slots are optimized away. My personal take is that it's not worth the hassle, but I'm ready to be proved wrong. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug rtl-optimization/54585] stack space allocated but never used when calling functions that return structs in registers 2012-09-14 21:11 [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers chip at pobox dot com 2013-09-05 20:06 ` [Bug rtl-optimization/54585] " chip at pobox dot com 2013-09-05 21:05 ` ebotcazou at gcc dot gnu.org @ 2013-09-23 20:05 ` chip at pobox dot com 2021-12-18 23:59 ` [Bug middle-end/54585] " pinskia at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: chip at pobox dot com @ 2013-09-23 20:05 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54585 --- Comment #3 from Chip Salzenberg <chip at pobox dot com> --- It's worth it for cache reasons I believe. The data cache works better you don't spread out the stack data unnecessarily. More concretely, if the stack frame can entirely disappear then you also reduce the instruction count. That's fewer instructions to dispatch and less icache pressure. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug middle-end/54585] stack space allocated but never used when calling functions that return structs in registers 2012-09-14 21:11 [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers chip at pobox dot com ` (2 preceding siblings ...) 2013-09-23 20:05 ` chip at pobox dot com @ 2021-12-18 23:59 ` pinskia at gcc dot gnu.org 3 siblings, 0 replies; 5+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-12-18 23:59 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54585 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|rtl-optimization |middle-end Severity|normal |enhancement ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-12-18 23:59 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-09-14 21:11 [Bug rtl-optimization/54585] New: stack space allocated but never used when calling functions that return structs in registers chip at pobox dot com 2013-09-05 20:06 ` [Bug rtl-optimization/54585] " chip at pobox dot com 2013-09-05 21:05 ` ebotcazou at gcc dot gnu.org 2013-09-23 20:05 ` chip at pobox dot com 2021-12-18 23:59 ` [Bug middle-end/54585] " 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).