https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #300 from Oleg Endo <olegendo at gcc dot gnu.org> --- (In reply to Kazumoto Kojima from comment #297) > > > > && REG_P (operands[2]) && REGNO (operands[2]) == R4_REG > > > && REG_P (operands[3]) && REGNO (operands[3]) == R5_REG > > > && REG_P (operands[4]) && REGNO (operands[4]) == R6_REG" > > > > Out of curiousity, why are these checks needed? > > Otherwise, operands[2-4] can be replaced by another register. I've seen that > in some cases. So the checks fail the pattern match unless all hard regs are in place and so if something tries to change the reg operands in the insn it will fail and will stay put? Is that what's happening there?