commit
4b71cafc8447e09ee41aff02acb5b26e8b112466
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Feb 17 11:43:43 2026 +0100
bswap: Handle VEC_PACK_TRUNC_EXPR [PR120233]
compiles
void
foo2 (char* a, short* __restrict b)
{
a[0] = b[0] >> 8;
a[1] = b[0];
a[2] = b[1] >> 8;
a[3] = b[1];
}
into
movl (%rsi), %eax
bswap %eax
roll $16, %eax
movl %eax, (%rdi)
ret
instead of
movzwl (%rsi), %eax
movzwl 2(%rsi), %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
movd %edx, %xmm1
punpcklbw %xmm1, %xmm2
punpcklbw %xmm1, %xmm0
pshufd $65, %xmm2, %xmm2
punpcklbw %xmm2, %xmm0
movd %xmm0, (%rdi)
ret
Update gcc.target/i386/pr108938-3.c to also scan 3 bswaps for x86-64.
PR target/120233
* gcc.target/i386/pr108938-3.c: Also scan 3 bswaps for x86-64.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
/* { dg-do compile } */
/* { dg-options "-O2 -ftree-vectorize -mno-movbe -msse2 -mno-avx" } */
-/* { dg-final { scan-assembler-times "bswap\[\t ]+" 2 { target { ! ia32 } } } } */
-/* { dg-final { scan-assembler-times "bswap\[\t ]+" 3 { target ia32 } } } */
+/* { dg-final { scan-assembler-times "bswap\[\t ]+" 3 } } */
void
foo1 (char* a, unsigned int* __restrict b)