https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114514
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement Last reconfirmed| |2024-03-28 CC| |pinskia at gcc dot gnu.org Ever confirmed|0 |1 Status|UNCONFIRMED |NEW --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed. Note non sign bit can be improved too: ``` #define vector __attribute__((vector_size(16))) typedef vector signed char v16qi; typedef vector unsigned char v16uqi; v16qi foo2 (v16qi a, v16qi b) { return a >> 6; } v16uqi foo1 (v16uqi a, v16uqi b) { return a >> 6; } ``` clang produces: ``` _Z4foo2Dv16_aS_: psrlw $6, %xmm0 pand .LCPI0_0(%rip), %xmm0 #{3,3,3,...} movdqa .LCPI0_1(%rip), %xmm1 #{2,2,2,...} pxor %xmm1, %xmm0 psubb %xmm1, %xmm0 retq _Z4foo1Dv16_hS_: psrlw $6, %xmm0 pand .LCPI1_0(%rip), %xmm0 #{3,3,3,...} retq ```