https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79388
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- --- gcc/combine.c.jj 2017-01-30 09:31:48.000000000 +0100 +++ gcc/combine.c 2017-02-10 12:16:18.507855160 +0100 @@ -14288,6 +14288,11 @@ distribute_notes (rtx notes, rtx_insn *f NULL_RTX, NULL_RTX, NULL_RTX); distribute_links (LOG_LINKS (tem_insn)); + unsigned int regno = REGNO (XEXP (note, 0)); + reg_stat_type *rsp = ®_stat[regno]; + if (rsp->last_set == tem_insn) + record_value_for_reg (XEXP (note, 0), NULL, NULL_RTX); + SET_INSN_DELETED (tem_insn); if (tem_insn == i2) i2 = NULL; fixes both testcases by making sure that if we delete the instruction that is still considered to be the setter of the last value, we also invalidate what we've remembered for it. No idea whether this is the right spot or right way to invalidate that though. Segher?