s390.c (s390_preferred_reload_class): Return NO_REGS for invalid symbolic addresses.

2011-03-24  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>

	* config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
	for invalid symbolic addresses.
	(s390_secondary_reload): Don't use s390_check_symref_alignment for
	larl operands.

From-SVN: r171405
This commit is contained in:
Andreas Krebbel 2011-03-24 16:38:24 +00:00 committed by Andreas Krebbel
parent bf3b3396ef
commit 212aa74f9e
2 changed files with 19 additions and 4 deletions

View file

@ -1,3 +1,10 @@
2011-03-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
for invalid symbolic addresses.
(s390_secondary_reload): Don't use s390_check_symref_alignment for
larl operands.
2011-03-24 Eric Botcazou <ebotcazou@adacore.com>
* fold-const.c (fold_ternary_loc): Preserve the location (if any) of

View file

@ -2974,12 +2974,16 @@ s390_preferred_reload_class (rtx op, reg_class_t rclass)
it is most likely being used as an address, so
prefer ADDR_REGS. If 'class' is not a superset
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
case PLUS:
case LABEL_REF:
case SYMBOL_REF:
case CONST:
if (!legitimate_reload_constant_p (op))
return NO_REGS;
/* fallthrough */
case PLUS:
/* load address will be used. */
if (reg_class_subset_p (ADDR_REGS, rclass))
return ADDR_REGS;
return ADDR_REGS;
else
return NO_REGS;
@ -3097,12 +3101,16 @@ s390_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
if (TARGET_Z10)
{
HOST_WIDE_INT offset;
rtx symref;
/* On z10 several optimizer steps may generate larl operands with
an odd addend. */
if (in_p
&& s390_symref_operand_p (x, NULL, NULL)
&& s390_symref_operand_p (x, &symref, &offset)
&& mode == Pmode
&& !s390_check_symref_alignment (x, 2))
&& !SYMBOL_REF_ALIGN1_P (symref)
&& (offset & 1) == 1)
sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
: CODE_FOR_reloadsi_larl_odd_addend_z10);