public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization @ 2023-01-28 23:16 technicallyanonymous at proton dot me 2023-01-28 23:28 ` [Bug target/108585] " pinskia at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: technicallyanonymous at proton dot me @ 2023-01-28 23:16 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 Bug ID: 108585 Summary: Using std::byte instead of char results in different (worse?) code in array zero initialization Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: technicallyanonymous at proton dot me Target Milestone: --- This code, compiled with GCC 12.2 (-O2 -std=c++20) #include <cstddef> int foo(std::byte *arr); int square(int num) { std::byte arr[96] = {}; return foo(arr); } results in this: square(int): sub rsp, 104 xor eax, eax mov ecx, 12 mov rdi, rsp rep stosq mov rdi, rsp call foo(std::byte*) add rsp, 104 ret After swapping "std::byte" with "char" the result is: square(int): sub rsp, 104 pxor xmm0, xmm0 mov rdi, rsp movaps XMMWORD PTR [rsp], xmm0 movaps XMMWORD PTR [rsp+16], xmm0 movaps XMMWORD PTR [rsp+32], xmm0 movaps XMMWORD PTR [rsp+48], xmm0 movaps XMMWORD PTR [rsp+64], xmm0 movaps XMMWORD PTR [rsp+80], xmm0 call foo(char*) add rsp, 104 ret As you can see, SSE instructions are emitted only with an char array. BTW, in clang, both versions are identical and use movaps. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/108585] Using std::byte instead of char results in different (worse?) code in array zero initialization 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me @ 2023-01-28 23:28 ` pinskia at gcc dot gnu.org 2023-01-28 23:29 ` pinskia at gcc dot gnu.org ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-01-28 23:28 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2023-01-28 Status|UNCONFIRMED |NEW Component|c++ |target Target| |x86_64-linux-gnu --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- aarch64 produces the same code generation for both std::byte and char so this is a target issue. Confirmed. std::byte: arr = {}; vs char: arr = ""; ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/108585] Using std::byte instead of char results in different (worse?) code in array zero initialization 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me 2023-01-28 23:28 ` [Bug target/108585] " pinskia at gcc dot gnu.org @ 2023-01-28 23:29 ` pinskia at gcc dot gnu.org 2023-01-28 23:34 ` pinskia at gcc dot gnu.org ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-01-28 23:29 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- *** Bug 108586 has been marked as a duplicate of this bug. *** ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/108585] Using std::byte instead of char results in different (worse?) code in array zero initialization 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me 2023-01-28 23:28 ` [Bug target/108585] " pinskia at gcc dot gnu.org 2023-01-28 23:29 ` pinskia at gcc dot gnu.org @ 2023-01-28 23:34 ` pinskia at gcc dot gnu.org 2023-01-28 23:39 ` [Bug target/108585] memset uses SSE stores but afterwards does not but if used "" will use them pinskia at gcc dot gnu.org 2023-01-28 23:41 ` pinskia at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-01-28 23:34 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |missed-optimization --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- #include <cstddef> int foo(char *arr); int square(int num) { char arr[96]; __builtin_memset(arr, 0, sizeof(arr)); return foo(arr); } Also produces the rep stosq rather than the SSE stores. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/108585] memset uses SSE stores but afterwards does not but if used "" will use them 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me ` (2 preceding siblings ...) 2023-01-28 23:34 ` pinskia at gcc dot gnu.org @ 2023-01-28 23:39 ` pinskia at gcc dot gnu.org 2023-01-28 23:41 ` pinskia at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-01-28 23:39 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|Using std::byte instead of |memset uses SSE stores but |char results in different |afterwards does not but if |(worse?) code in array zero |used "" will use them |initialization | --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The size is up to 80 they are the same afterwards they become different ... But this is still a target issue ... ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug target/108585] memset uses SSE stores but afterwards does not but if used "" will use them 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me ` (3 preceding siblings ...) 2023-01-28 23:39 ` [Bug target/108585] memset uses SSE stores but afterwards does not but if used "" will use them pinskia at gcc dot gnu.org @ 2023-01-28 23:41 ` pinskia at gcc dot gnu.org 4 siblings, 0 replies; 6+ messages in thread From: pinskia at gcc dot gnu.org @ 2023-01-28 23:41 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108585 --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- "" will start to use the rep at 64*8 ... ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-01-28 23:41 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-01-28 23:16 [Bug c++/108585] New: Using std::byte instead of char results in different (worse?) code in array zero initialization technicallyanonymous at proton dot me 2023-01-28 23:28 ` [Bug target/108585] " pinskia at gcc dot gnu.org 2023-01-28 23:29 ` pinskia at gcc dot gnu.org 2023-01-28 23:34 ` pinskia at gcc dot gnu.org 2023-01-28 23:39 ` [Bug target/108585] memset uses SSE stores but afterwards does not but if used "" will use them pinskia at gcc dot gnu.org 2023-01-28 23:41 ` 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).