https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55212
--- Comment #389 from Richard Sandiford <rsandifo at gcc dot gnu.org> --- (In reply to Oleg Endo from comment #304) > (define_insn "block_lump_real" > [(set (mem:BLK (match_operand:SI 2 "sfunc_arg0_reg" "=r,r")) > (mem:BLK (match_operand:SI 3 "sfunc_arg1_reg" "=r,r"))) > (use (match_operand:SI 0 "arith_reg_operand" "r,r")) > (use (match_operand 1 "" "Z,Ccl")) > (use (match_operand:SI 4 "sfunc_arg2_reg" "=r,r")) > > (use (reg:SI R4_REG)) <<<<<< > (use (reg:SI R5_REG)) <<<<<< > (use (reg:SI R6_REG)) <<<<<< > > (clobber (match_dup 2)) > (clobber (match_dup 3)) > (clobber (match_dup 4)) > (clobber (reg:SI PR_REG)) Sorry for the late reply, but I think this is somewhat dangerous, in that the constraints (r) are more general than the predicates (sfunc_arg0_reg etc.). Do we know why the pattern in trunk doesn't work? It looks correct to me, and I think it should work with LRA too. Did Andrew P's patch (PR116058) not help?