https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102264
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- There seems to be some extra moves the register allocator cannot remove and that is causing some extra spilling. Your loop has 32 live variables and that is just at the limit.