https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101882
--- Comment #15 from Xi Ruoyao <xry111 at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #14) > (match_operand:DI 1 "register_operand" "r0") > > That means either a general register ("r"), or the same thing as operand 0 > (that's what "0" means)! > > So the backend explicitly allows it here. The problem is operand 4 does not have "0", and it's also assigned the hard register r23. It's fine for operand 0 and 1 to be the same, also for operand 1 and 4 to be the same, but operand 0 and 4 cannot be same. Thus this combine breaks the code.