[Bug rtl-optimization/40772] generating rendundant moves from second byte of 32b/64b register
roger at nextmovesoftware dot com
gcc-bugzilla@gcc.gnu.org
Sun Jun 6 10:58:05 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40772
Roger Sayle <roger at nextmovesoftware dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
CC| |roger at nextmovesoftware dot com
Target Milestone|--- |7.0
Status|UNCONFIRMED |RESOLVED
--- Comment #5 from Roger Sayle <roger at nextmovesoftware dot com> ---
This issue has been fixed since gcc 7; the compiler now stores the high-byte
register ah/bh/dh etc directly to memory. The original tst2b.c testcase when
compiled with -O3 -march=k8 -fno-tree-vectorize looks like:
test:
.LFB0:
.cfi_startproc
leal 1(%rdi), %edx
movl %edi, %eax
movb %ah, data(%rip)
addl $15, %eax
movb %dh, data+1(%rip)
leal 2(%rdi), %edx
movb %ah, data+15(%rip)
movb %dh, data+2(%rip)
leal 3(%rdi), %edx
movb %dh, data+3(%rip)
leal 4(%rdi), %edx
movb %dh, data+4(%rip)
leal 5(%rdi), %edx
movb %dh, data+5(%rip)
leal 6(%rdi), %edx
movb %dh, data+6(%rip)
leal 7(%rdi), %edx
movb %dh, data+7(%rip)
leal 8(%rdi), %edx
movb %dh, data+8(%rip)
leal 9(%rdi), %edx
movb %dh, data+9(%rip)
leal 10(%rdi), %edx
movb %dh, data+10(%rip)
leal 11(%rdi), %edx
movb %dh, data+11(%rip)
leal 12(%rdi), %edx
movb %dh, data+12(%rip)
leal 13(%rdi), %edx
movb %dh, data+13(%rip)
leal 14(%rdi), %edx
movb %dh, data+14(%rip)
ret
More information about the Gcc-bugs
mailing list