S/390: Fix PR80725.

gcc/ChangeLog:

2017-05-29  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	Backport from mainline
	2017-05-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	PR target/80725
	* config/s390/s390.c (s390_check_qrst_address): Check incoming
	address against address_operand predicate.
	* config/s390/s390.md ("*indirect_jump"): Swap alternatives.

gcc/testsuite/ChangeLog:

2017-05-29  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	Backport from mainline
	2017-05-24  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	* gcc.target/s390/pr80725.c: New test.

From-SVN: r248557
This commit is contained in:
Andreas Krebbel 2017-05-29 07:54:13 +00:00 committed by Andreas Krebbel
parent a60c747f6d
commit 8de0f875d0
5 changed files with 52 additions and 4 deletions

View File

@ -1,3 +1,13 @@
2017-05-29 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Backport from mainline
2017-05-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/80725
* config/s390/s390.c (s390_check_qrst_address): Check incoming
address against address_operand predicate.
* config/s390/s390.md ("*indirect_jump"): Swap alternatives.
2017-05-28 Uros Bizjak <ubizjak@gmail.com>
Backport from mainline

View File

@ -3102,6 +3102,9 @@ s390_check_qrst_address (char c, rtx op, bool lit_pool_ok)
struct s390_address addr;
bool decomposed = false;
if (!address_operand (op, GET_MODE (op)))
return 0;
/* This check makes sure that no symbolic address (except literal
pool references) are accepted by the R or T constraints. */
if (s390_loadrelative_operand_p (op, NULL, NULL))

View File

@ -9660,14 +9660,16 @@
operands[0] = force_reg (Pmode, operands[0]);
})
; The first constraint must be an "extra address constraint" in order
; to trigger address reloading in LRA/reload
(define_insn "*indirect_jump"
[(set (pc)
(match_operand 0 "address_operand" "a,ZR"))]
(match_operand 0 "address_operand" "ZR,a"))]
""
"@
br\t%0
b\t%a0"
[(set_attr "op_type" "RR,RX")
b\t%a0
br\t%0"
[(set_attr "op_type" "RX,RR")
(set_attr "type" "branch")
(set_attr "atype" "agen")
(set_attr "cpu_facility" "*")])

View File

@ -1,3 +1,10 @@
2017-05-29 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Backport from mainline
2017-05-24 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* gcc.target/s390/pr80725.c: New test.
2017-05-26 Marek Polacek <polacek@redhat.com>
Backported from mainline

View File

@ -0,0 +1,26 @@
/* Regression test for PR/80725. */
/* { dg-do compile } */
/* { dg-options "-O2 -march=zEC12" } */
int a, e;
const char b;
char c;
const int d;
void bar (short);
void
foo (int x, int y)
{
long f = d;
short g = 0;
while (e)
while (a < x)
{
if (y)
goto *d;
g = b | b + g;
bar (g);
c = (char) (long) foo;
}
}