public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug tree-optimization/94834] New: Failure to optimize loop bswap pattern @ 2020-04-28 22:35 gabravier at gmail dot com 2020-04-29 7:08 ` [Bug tree-optimization/94834] " rguenth at gcc dot gnu.org ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: gabravier at gmail dot com @ 2020-04-28 22:35 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94834 Bug ID: 94834 Summary: Failure to optimize loop bswap pattern Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: gabravier at gmail dot com Target Milestone: --- uint32_t load(const uint8_t* data) { uint32_t val = 0; for (int i = 0; i < sizeof(val) * CHAR_BIT; i += CHAR_BIT) { val |= *data++ << i; } return val; } This can be optimized to a single 32-bit load. LLVM does this transformation, gcc just unrolls the loop and misses the transformation. LLVM gives : load(unsigned char const*): # @load(unsigned char const*) mov eax, dword ptr [rdi] ret GCC gives : load(unsigned char const*): movzx edx, BYTE PTR [rdi+1] movzx eax, BYTE PTR [rdi] sal edx, 8 or edx, eax movzx eax, BYTE PTR [rdi+2] sal eax, 16 or edx, eax movzx eax, BYTE PTR [rdi+3] sal eax, 24 or eax, edx ret See also https://godbolt.org/z/kmYTLZ ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/94834] Failure to optimize loop bswap pattern 2020-04-28 22:35 [Bug tree-optimization/94834] New: Failure to optimize loop bswap pattern gabravier at gmail dot com @ 2020-04-29 7:08 ` rguenth at gcc dot gnu.org 2020-04-29 9:40 ` gabravier at gmail dot com 2021-09-04 21:33 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: rguenth at gcc dot gnu.org @ 2020-04-29 7:08 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94834 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Keywords| |missed-optimization Last reconfirmed| |2020-04-29 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. We have a pass that would grok the unrolled form but unrolling happens too late (if at all) for it to trigger. Not sure if we should try to pattern-match this (or other reductions) in loop distribution. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/94834] Failure to optimize loop bswap pattern 2020-04-28 22:35 [Bug tree-optimization/94834] New: Failure to optimize loop bswap pattern gabravier at gmail dot com 2020-04-29 7:08 ` [Bug tree-optimization/94834] " rguenth at gcc dot gnu.org @ 2020-04-29 9:40 ` gabravier at gmail dot com 2021-09-04 21:33 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: gabravier at gmail dot com @ 2020-04-29 9:40 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94834 --- Comment #2 from Gabriel Ravier <gabravier at gmail dot com> --- Now I wonder why the unrolling happens too late since there was 1 ecp check that should happen after the unrolling, from my understanding. Are the multiple ecp passes detecting different things? ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug tree-optimization/94834] Failure to optimize loop bswap pattern 2020-04-28 22:35 [Bug tree-optimization/94834] New: Failure to optimize loop bswap pattern gabravier at gmail dot com 2020-04-29 7:08 ` [Bug tree-optimization/94834] " rguenth at gcc dot gnu.org 2020-04-29 9:40 ` gabravier at gmail dot com @ 2021-09-04 21:33 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-09-04 21:33 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94834 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |DUPLICATE Status|NEW |RESOLVED --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- This is a dup of bug 89811. *** This bug has been marked as a duplicate of bug 89811 *** ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-09-04 21:33 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-28 22:35 [Bug tree-optimization/94834] New: Failure to optimize loop bswap pattern gabravier at gmail dot com 2020-04-29 7:08 ` [Bug tree-optimization/94834] " rguenth at gcc dot gnu.org 2020-04-29 9:40 ` gabravier at gmail dot com 2021-09-04 21:33 ` 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).