public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug tree-optimization/107837] New: Missed optimization: Using memcpy to load a struct unnecessary uses stack space @ 2022-11-23 15:23 chfast at gmail dot com 2022-11-23 18:06 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] " pinskia at gcc dot gnu.org ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: chfast at gmail dot com @ 2022-11-23 15:23 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107837 Bug ID: 107837 Summary: Missed optimization: Using memcpy to load a struct unnecessary uses stack space Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: chfast at gmail dot com Target Milestone: --- I have a simple struct with array uint64_t[4]. When using memcpy() load it from a storage of bytes and then performing some additional operations, a temporary object on the stack is created. struct uint256 { unsigned long v[4]; }; void load_bad(uint256* o, const char* src) noexcept { uint256 x; __builtin_memcpy(&x, src, sizeof(x)); uint256 y; y.v[0] = __builtin_bswap64(x.v[3]); y.v[1] = __builtin_bswap64(x.v[2]); y.v[2] = __builtin_bswap64(x.v[1]); y.v[3] = __builtin_bswap64(x.v[0]); *o = y; } load_bad(uint256*, char const*): movdqu xmm0, XMMWORD PTR [rsi] movdqu xmm1, XMMWORD PTR [rsi+16] movaps XMMWORD PTR [rsp-40], xmm0 mov rdx, QWORD PTR [rsp-32] mov rax, QWORD PTR [rsp-40] movaps XMMWORD PTR [rsp-24], xmm1 mov rsi, QWORD PTR [rsp-16] mov rcx, QWORD PTR [rsp-24] bswap rdx bswap rax mov QWORD PTR [rdi+16], rdx bswap rsi bswap rcx mov QWORD PTR [rdi], rsi mov QWORD PTR [rdi+8], rcx mov QWORD PTR [rdi+24], rax ret The workaround is to use reinterpret_cast. https://godbolt.org/z/WevYch8nv ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107837] [10/11/12/13 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space 2022-11-23 15:23 [Bug tree-optimization/107837] New: Missed optimization: Using memcpy to load a struct unnecessary uses stack space chfast at gmail dot com @ 2022-11-23 18:06 ` pinskia at gcc dot gnu.org 2022-12-02 10:58 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space since r8-5200 jakub at gcc dot gnu.org 2023-07-07 10:44 ` [Bug tree-optimization/107837] [11/12/13/14 " rguenth at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: pinskia at gcc dot gnu.org @ 2022-11-23 18:06 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107837 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2022-11-23 Summary|Missed optimization: Using |[10/11/12/13 Regression] |memcpy to load a struct |Missed optimization: Using |unnecessary uses stack |memcpy to load a struct |space |unnecessary uses stack | |space Keywords| |needs-bisection Known to work| |4.5.3, 4.7.3, 5.1.0, 7.5.0 Target Milestone|--- |10.5 Known to fail| |8.1.0 Ever confirmed|0 |1 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed, GCC 7 did the right thing ... Even on the gimple level: x$v$0_8 = MEM[(char * {ref-all})src_6(D)]; x$v$1_9 = MEM[(char * {ref-all})src_6(D) + 8B]; x$v$2_10 = MEM[(char * {ref-all})src_6(D) + 16B]; x$v$3_11 = MEM[(char * {ref-all})src_6(D) + 24B]; _1 = __builtin_bswap64 (x$v$3_11); _2 = __builtin_bswap64 (x$v$2_10); _3 = __builtin_bswap64 (x$v$1_9); _4 = __builtin_bswap64 (x$v$0_8); MEM[(struct uint256 *)o_7(D)] = _1; MEM[(struct uint256 *)o_7(D) + 8B] = _2; MEM[(struct uint256 *)o_7(D) + 16B] = _3; MEM[(struct uint256 *)o_7(D) + 24B] = _4; ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107837] [10/11/12/13 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space since r8-5200 2022-11-23 15:23 [Bug tree-optimization/107837] New: Missed optimization: Using memcpy to load a struct unnecessary uses stack space chfast at gmail dot com 2022-11-23 18:06 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] " pinskia at gcc dot gnu.org @ 2022-12-02 10:58 ` jakub at gcc dot gnu.org 2023-07-07 10:44 ` [Bug tree-optimization/107837] [11/12/13/14 " rguenth at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: jakub at gcc dot gnu.org @ 2022-12-02 10:58 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107837 Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |jamborm at gcc dot gnu.org Priority|P3 |P2 Keywords|needs-bisection | Summary|[10/11/12/13 Regression] |[10/11/12/13 Regression] |Missed optimization: Using |Missed optimization: Using |memcpy to load a struct |memcpy to load a struct |unnecessary uses stack |unnecessary uses stack |space |space since r8-5200 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r8-5200-gd90ffcfb7d105d004cf04911a42935be03256b49 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/107837] [11/12/13/14 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space since r8-5200 2022-11-23 15:23 [Bug tree-optimization/107837] New: Missed optimization: Using memcpy to load a struct unnecessary uses stack space chfast at gmail dot com 2022-11-23 18:06 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] " pinskia at gcc dot gnu.org 2022-12-02 10:58 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space since r8-5200 jakub at gcc dot gnu.org @ 2023-07-07 10:44 ` rguenth at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: rguenth at gcc dot gnu.org @ 2023-07-07 10:44 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107837 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|10.5 |11.5 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- GCC 10 branch is being closed. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-07-07 10:44 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-11-23 15:23 [Bug tree-optimization/107837] New: Missed optimization: Using memcpy to load a struct unnecessary uses stack space chfast at gmail dot com 2022-11-23 18:06 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] " pinskia at gcc dot gnu.org 2022-12-02 10:58 ` [Bug tree-optimization/107837] [10/11/12/13 Regression] Missed optimization: Using memcpy to load a struct unnecessary uses stack space since r8-5200 jakub at gcc dot gnu.org 2023-07-07 10:44 ` [Bug tree-optimization/107837] [11/12/13/14 " rguenth 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).