https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98877
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- In the original testcase, there are still extra movs. For the testcase in comment #4, it is fixed on the trunk and we now get: ``` fun: stp x29, x30, [sp, -48]! mov x29, sp str q2, [sp, 32] bl g str q0, [sp, 16] bl g ldp q30, q2, [sp, 16] mov v31.16b, v0.16b ldp x29, x30, [sp], 48 tbl v0.16b, {v30.16b - v31.16b}, v2.16b ret ``` Maybe the issue is only with arguments now.