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]$

Reply via email to