https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65250
--- Comment #1 from Oleg Endo <olegendo at gcc dot gnu.org> --- The patch attachment 36012 for PR 54236 improves the treg_set_expr machinery by doing proper comparison inversion, instead of trying only EQ <-> NE. This will be the prerequisite to match a (set (reg:SI 168) (leu:SI (reg:SI 4 r4 [ value ]) (const_int 2 [0x2]))) with a treg_set_expr. As for the multiple-set negc movrt insn, it's probably better to get rid of that altogether. Its main purpose is to indicate that the T reg is clobbered by the negc and to get a little bit of constant sharing of the -1 constant. If constant optimization is done after split1, this will be not necessary anymore. In some cases, a sett insn after a negc with constant -1 can be optimized away. To keep this, a negc insn that initially clobbers the T reg should be converted to the full multiple-set negc insn "negc" after combine/split1. Then the clrt_sett optimization pass (PR 53976) should be extended to understand addc, subc and negc insns which involve constants, to figure out whether a clrt or sett is really needed. Before that PR 67459 needs to be fixed.