Commit 615792b7 by Andreas Krebbel Committed by Andreas Krebbel

S/390: Reject long disp for vector load/store early

The vector memory instructions only support short displacements.
Reject invalid displacements early to prevent plenty of lay
instructions to be generated later which then cannot be merged
properly.

gcc/ChangeLog:

2019-04-03  Andreas Krebbel  <krebbel@linux.ibm.com>

	* config/s390/s390.c (s390_legitimate_address_p): Reject long
	displacement addresses for vector mode operands.

From-SVN: r270122
parent 487efcfd
2019-04-03 Andreas Krebbel <krebbel@linux.ibm.com>
* config/s390/s390.c (s390_legitimate_address_p): Reject long
displacement addresses for vector mode operands.
2019-04-03 Claudiu Zissulescu <claziss@synopsys.com> 2019-04-03 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc.c (GMASK_LEN): Define. * config/arc/arc.c (GMASK_LEN): Define.
......
...@@ -4677,6 +4677,17 @@ s390_legitimate_address_p (machine_mode mode, rtx addr, bool strict) ...@@ -4677,6 +4677,17 @@ s390_legitimate_address_p (machine_mode mode, rtx addr, bool strict)
if (!s390_decompose_address (addr, &ad)) if (!s390_decompose_address (addr, &ad))
return false; return false;
/* The vector memory instructions only support short displacements.
Reject invalid displacements early to prevent plenty of lay
instructions to be generated later which then cannot be merged
properly. */
if (TARGET_VX
&& VECTOR_MODE_P (mode)
&& ad.disp != NULL_RTX
&& CONST_INT_P (ad.disp)
&& !SHORT_DISP_IN_RANGE (INTVAL (ad.disp)))
return false;
if (strict) if (strict)
{ {
if (ad.base && !REGNO_OK_FOR_BASE_P (REGNO (ad.base))) if (ad.base && !REGNO_OK_FOR_BASE_P (REGNO (ad.base)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment