https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77714
--- Comment #3 from Bernd Edlinger <edlinger at gcc dot gnu.org> --- because a different pattern is choosen for this insn the reg-note is overwritten here: Choosing alt 2 in insn 48: (0) l (1) l (2) lL {*thumb1_addsi3} Creating newreg=129, assigning class LO_REGS to r129 48: sfp:SI=r7:SI+r129:SI REG_EQUAL r7:SI+r129:SI Inserting insn reload before: 82: r129:SI=0xfffffffffffffff0 but it should be: Choosing alt 2 in insn 48: (0) l (1) l (2) lL {*thumb1_addsi3} Creating newreg=129, assigning class LO_REGS to r129 48: sfp:SI=r7:SI+r129:SI REG_EQUAL r7:SI-0x10 Inserting insn reload before: 82: r129:SI=0xfffffffffffffff0 and in the next pass this insn is removed because the reg-note is no longer found. The reason is the alias between the reg-note and the SET_SRC. So this would be a more conservative fix: Index: lra-eliminations.c =================================================================== --- lra-eliminations.c (revision 240437) +++ lra-eliminations.c (working copy) @@ -981,7 +981,7 @@ eliminate_regs_in_insn (rtx_insn *insn, bool repla } lra_update_insn_recog_data (insn); /* Add offset note for future updates. */ - add_reg_note (insn, REG_EQUAL, src); + add_reg_note (insn, REG_EQUAL, copy_rtx (src)); return; } }