lra-constrints.c (process_alt_operands): Remove non allocatable hard regs when considering ira_prohibited_class_mode_regs.

2014-12-17  Vladimir Makarov  <vmakarov@redhat.com>

	* lra-constrints.c (process_alt_operands): Remove non allocatable
	hard regs when considering ira_prohibited_class_mode_regs.

From-SVN: r218835
This commit is contained in:
Vladimir Makarov 2014-12-17 21:25:18 +00:00 committed by Vladimir Makarov
parent f4e2df8970
commit cdfc4dcf48
2 changed files with 24 additions and 13 deletions

View File

@ -1,3 +1,8 @@
2014-12-17 Vladimir Makarov <vmakarov@redhat.com>
* lra-constrints.c (process_alt_operands): Remove non allocatable
hard regs when considering ira_prohibited_class_mode_regs.
2014-12-17 Jan Hubicka <hubicka@ucw.cz> 2014-12-17 Jan Hubicka <hubicka@ucw.cz>
* sreal.h (sreal::normalize): Implement inline. * sreal.h (sreal::normalize): Implement inline.

View File

@ -2280,22 +2280,28 @@ process_alt_operands (int only_alternative)
not hold the mode value. */ not hold the mode value. */
&& ! HARD_REGNO_MODE_OK (ira_class_hard_regs && ! HARD_REGNO_MODE_OK (ira_class_hard_regs
[this_alternative][0], [this_alternative][0],
GET_MODE (*curr_id->operand_loc[nop])) GET_MODE (*curr_id->operand_loc[nop])))
{
HARD_REG_SET temp;
COPY_HARD_REG_SET (temp, this_alternative_set);
AND_COMPL_HARD_REG_SET (temp, lra_no_alloc_regs);
/* The above condition is not enough as the first /* The above condition is not enough as the first
reg in ira_class_hard_regs can be not aligned for reg in ira_class_hard_regs can be not aligned for
multi-words mode values. */ multi-words mode values. */
&& hard_reg_set_subset_p (this_alternative_set, if (hard_reg_set_subset_p (temp,
ira_prohibited_class_mode_regs ira_prohibited_class_mode_regs
[this_alternative] [this_alternative]
[GET_MODE (*curr_id->operand_loc[nop])])) [GET_MODE (*curr_id->operand_loc[nop])]))
{ {
if (lra_dump_file != NULL) if (lra_dump_file != NULL)
fprintf fprintf
(lra_dump_file, (lra_dump_file,
" alt=%d: reload pseudo for op %d " " alt=%d: reload pseudo for op %d "
" can not hold the mode value -- refuse\n", " can not hold the mode value -- refuse\n",
nalt, nop); nalt, nop);
goto fail; goto fail;
}
} }
/* Check strong discouragement of reload of non-constant /* Check strong discouragement of reload of non-constant