2014-01-16 Vladimir Makarov <vmakarov@redhat.com>
+ PR middle-end/59609
+ * lra-constraints.c (process_alt_operands): Add printing debug
+ info. Check absence of input/output reloads for matched operands
+ too.
+
+2014-01-16 Vladimir Makarov <vmakarov@redhat.com>
+
PR rtl-optimization/59835
* ira.c (ira_init_register_move_cost): Increase cost for
impossible modes.
&& MEM_P (*curr_id->operand_loc[m])
&& curr_alt[m] == NO_REGS && ! curr_alt_win[m])
continue;
-
}
else
{
int i;
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (HARD_REGNO_MODE_OK (i, mode)
- && in_hard_reg_set_p (reg_class_contents[this_alternative], mode, i))
+ && in_hard_reg_set_p (reg_class_contents[this_alternative],
+ mode, i))
break;
if (i == FIRST_PSEUDO_REGISTER)
winreg = false;
badop = false;
if (badop)
- goto fail;
+ {
+ if (lra_dump_file != NULL)
+ fprintf (lra_dump_file,
+ " alt=%d: Bad operand -- refuse\n",
+ nalt);
+ goto fail;
+ }
this_alternative_offmemok = offmemok;
if (this_costly_alternative != NO_REGS)
[this_alternative][0],
GET_MODE
(*curr_id->operand_loc[nop])))
- goto fail;
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " alt=%d: Strict low subreg reload -- refuse\n",
+ nalt);
+ goto fail;
+ }
losers++;
}
if (operand_reg[nop] != NULL_RTX
&& no_output_reloads_p
&& ! find_reg_note (curr_insn, REG_UNUSED, op))
|| (curr_static_id->operand[nop].type != OP_OUT
- && no_input_reloads_p && ! const_to_mem))
- goto fail;
+ && no_input_reloads_p && ! const_to_mem)
+ || (this_alternative_matches >= 0
+ && (no_input_reloads_p || no_output_reloads_p)))
+ {
+ if (lra_dump_file != NULL)
+ fprintf
+ (lra_dump_file,
+ " alt=%d: No input/otput reload -- refuse\n",
+ nalt);
+ goto fail;
+ }
/* Check strong discouragement of reload of non-constant
into class THIS_ALTERNATIVE. */