https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121027
--- Comment #4 from Alex Coplan <acoplan at gcc dot gnu.org> --- Interestingly the codegen seems to have regressed significantly after that change, too. We used to get: foo: mov z2.h, #0 uzp1 z0.h, z0.h, z1.h zip2 z0.h, z2.h, z0.h ret in GCC 13, but in GCC 15 we now get: foo: ptrue p3.b, vl32 adrp x0, .LANCHOR0 movi d30, #0 add x0, x0, :lo12:.LANCHOR0 ld1h z31.h, p3/z, [x0] tbl z30.h, {z30.h}, z31.h sub z31.h, z31.h, #16 tbl z0.h, {z1.h}, z31.h orr z0.d, z30.d, z0.d ret