https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120233
Bug ID: 120233 Summary: [16 Regression] FAIL: gcc.target/i386/pr108938-3.c scan-assembler-times bswap[\t ]+ 3 Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: hubicka at ucw dot cz, liuhongt at gcc dot gnu.org, ubizjak at gmail dot com Target Milestone: --- Target: x86-64 On x86-64, -m32 gave me FAIL: gcc.target/i386/pr108938-3.c scan-assembler-times bswap[\t ]+ 3 The new code looks aweful: foo2: .LFB1: .cfi_startproc movl 8(%esp), %edx movzwl (%edx), %eax movzwl 2(%edx), %edx movl %eax, %ecx sall $16, %eax sarw $8, %cx movzwl %cx, %ecx orl %ecx, %eax movd %eax, %xmm0 movl %edx, %eax sall $16, %edx sarw $8, %ax movdqa %xmm0, %xmm2 movzwl %ax, %eax orl %eax, %edx movl 4(%esp), %eax movd %edx, %xmm1 punpcklbw %xmm1, %xmm2 punpcklbw %xmm1, %xmm0 pshufd $65, %xmm2, %xmm2 punpcklbw %xmm2, %xmm0 movd %xmm0, (%eax) ret .cfi_endproc vs the old one: foo2: .LFB1: .cfi_startproc movl 8(%esp), %ecx movl 4(%esp), %edx movzwl (%ecx), %eax rolw $8, %ax movw %ax, (%edx) movzwl 2(%ecx), %eax rolw $8, %ax movw %ax, 2(%edx) ret .cfi_endproc