https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69691
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the bug is in move_plus_up, as that function transforms: (subreg:SI (plus:DI (reg/f:DI 20 frame) (const_int 16 [0x10])) 0) into: (plus:SI (plus:SI (subreg:SI (reg/f:DI 20 frame) 0) (const_int 16 [0x10])) (const_int 16 [0x10])) which looks just wrong, it should have been (plus:SI (subreg:SI (reg/f:DI 20 frame) 0) (const_int 16 [0x10])))