return;
/* See a comment for the input operand above. */
narrow_reload_pseudo_class (out_rtx, goal_class);
- if (find_reg_note (curr_insn, REG_UNUSED, out_rtx) == NULL_RTX)
+ if (find_reg_note (curr_insn, REG_UNUSED, out_rtx) == NULL_RTX
+ && !ira_former_scratch_p (REGNO (SUBREG_P (out_rtx)
+ ? SUBREG_REG (out_rtx) : out_rtx)))
{
reg = SUBREG_P (out_rtx) ? SUBREG_REG (out_rtx) : out_rtx;
start_sequence ();
objects with a REG_UNUSED note. */
if ((curr_static_id->operand[nop].type != OP_IN
&& no_output_reloads_p
- && ! find_reg_note (curr_insn, REG_UNUSED, op))
+ && ! find_reg_note (curr_insn, REG_UNUSED, op)
+ && ! ira_former_scratch_p (REGNO (operand_reg[nop])))
|| (curr_static_id->operand[nop].type != OP_OUT
&& no_input_reloads_p && ! const_to_mem)
|| (this_alternative_matches >= 0
[this_alternative_matches].type != OP_IN)
&& ! find_reg_note (curr_insn, REG_UNUSED,
no_subreg_reg_operand
- [this_alternative_matches])))))
+ [this_alternative_matches])
+ && ! (ira_former_scratch_p
+ (REGNO (operand_reg[nop])))))))
{
if (lra_dump_file != NULL)
fprintf
if (type != OP_IN
&& find_reg_note (curr_insn, REG_UNUSED, old) == NULL_RTX
/* OLD can be an equivalent constant here. */
- && !CONSTANT_P (old))
+ && !CONSTANT_P (old)
+ && !ira_former_scratch_p (REGNO (old)))
{
start_sequence ();
lra_emit_move (type == OP_INOUT ? copy_rtx (old) : old, new_reg);