https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89189
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|target |tree-optimization Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Severity|normal |enhancement Last reconfirmed| |2021-08-03 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed. At the gimple level we should be able to produce a SHUFFLE with the other vector being full of zeros: _1 = BIT_FIELD_REF <x_3(D), 16, 48>; _2 = BIT_FIELD_REF <x_3(D), 16, 112>; _4 = {_1, _2}; This is what clang produces: vpshufb .LCPI0_0(%rip), %xmm0, %xmm0 # xmm0 = xmm0[6,7,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero .... .LCPI1_0: .byte 6 # 0x6 .byte 7 # 0x7 .byte 14 # 0xe .byte 15 # 0xf .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 .byte 128 # 0x80 The problem is also seem on aarch64 too.