https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100533
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (code_label # 0 0 3 (nil) [1 uses]) (note # 0 0 [bb 5] NOTE_INSN_BASIC_BLOCK) +(note # 0 0 NOTE_INSN_DELETED) (insn # 0 0 (set (mem:HI (plus:DI (reg/f:DI 2 x2 [102]) (const_int 30 [0x1e])) [ MEM[(short int *)&arr_747 + 30B + _13 * 2]+0 S2 A16]) (reg:HI 4 x4 [104])) "t.c":6:25# {*movhi_aarch64} (expr_list:REG_DEAD (reg/f:DI 2 x2 [102]) (nil))) -(note # 0 0 NOTE_INSN_DELETED) (insn # 0 0 (set (reg/f:DI 2 x2 [102]) (plus:DI (ashift:DI (reg/v:DI 0 x0 [orig:93 i_1 ] [93]) (const_int 1 [0x1])) sms definitely moved the deleted instruction before the mem.