https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126802
Bug ID: 126802
Summary: [17 Regression] Sub-optimal code of adding 2 chars
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
Target Milestone: ---
[hjl@gnu-zen4-1 gcc]$ cat /tmp/foo.c
extern char *var1;
extern int var2;
void
func (void)
{
var2 = var1[1] + var1[0];
}
[hjl@gnu-zen4-1 gcc]$ ./xgcc -B./ -O2 -S /tmp/foo.c
[hjl@gnu-zen4-1 gcc]$ cat foo.s
.file "foo.c"
.text
.p2align 4
.globl func
.type func, @function
func:
.LFB0:
.cfi_startproc
movq var1(%rip), %rax
pxor %xmm1, %xmm1
pinsrw $0, (%rax), %xmm0
pcmpgtb %xmm0, %xmm1
punpcklbw %xmm1, %xmm0
movdqa %xmm0, %xmm1
psraw $15, %xmm1
punpcklwd %xmm1, %xmm0
movd %xmm0, %edx
pshufd $0xe5, %xmm0, %xmm2
movd %xmm2, %eax
addl %edx, %eax
movl %eax, var2(%rip)
ret
.cfi_endproc
.LFE0:
.size func, .-func
.ident "GCC: (GNU) 17.0.0 20260809 (experimental)"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-zen4-1 gcc]$ /usr/gcc-16.2.1-x32/bin/gcc -S -O2 /tmp/foo.c
[hjl@gnu-zen4-1 gcc]$ cat foo.s
.file "foo.c"
.text
.p2align 4
.globl func
.type func, @function
func:
.LFB0:
.cfi_startproc
movq var1(%rip), %rdx
movsbl 1(%rdx), %eax
movsbl (%rdx), %edx
addl %edx, %eax
movl %eax, var2(%rip)
ret
.cfi_endproc
.LFE0:
.size func, .-func
.ident "GCC: (GNU) 16.2.1 20260810"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-zen4-1 gcc]$