Commit 58814c76 by Andreas Krebbel Committed by Andreas Krebbel

S/390: Fix PR81534

The HI/QI atomic_fetch_<atomic><mode>" expander accepted symbolic
references and emitted CAS patterns whose insn predicates rejected them.

Fixed by allowing symbolic references there as well.  Reload will get
rid of them due to the constraint letter.

Regression tested on s390x.

gcc/ChangeLog:

2017-07-27  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	PR target/81534
	* config/s390/s390.md ("*atomic_compare_and_swap<mode>_1")
	("*atomic_compare_and_swapdi_2", "*atomic_compare_and_swapsi_3"):
	Change s_operand to memory_operand.

gcc/testsuite/ChangeLog:

2017-07-27  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>

	PR target/81534
	* gcc.target/s390/pr81534.c: New test.

From-SVN: r250617
parent 02d3ba0e
2017-07-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/81534
* config/s390/s390.md ("*atomic_compare_and_swap<mode>_1")
("*atomic_compare_and_swapdi_2", "*atomic_compare_and_swapsi_3"):
Change s_operand to memory_operand.
2017-07-27 Richard Sandiford <richard.sandiford@linaro.org>
* config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_permute): Declare.
......
......@@ -10266,7 +10266,7 @@
; cdsg, csg
(define_insn "*atomic_compare_and_swap<mode>_1"
[(set (match_operand:TDI 0 "register_operand" "=r")
(match_operand:TDI 1 "s_operand" "+S"))
(match_operand:TDI 1 "memory_operand" "+S"))
(set (match_dup 1)
(unspec_volatile:TDI
[(match_dup 1)
......@@ -10284,7 +10284,7 @@
; cds, cdsy
(define_insn "*atomic_compare_and_swapdi_2"
[(set (match_operand:DI 0 "register_operand" "=r,r")
(match_operand:DI 1 "s_operand" "+Q,S"))
(match_operand:DI 1 "memory_operand" "+Q,S"))
(set (match_dup 1)
(unspec_volatile:DI
[(match_dup 1)
......@@ -10305,7 +10305,7 @@
; cs, csy
(define_insn "*atomic_compare_and_swapsi_3"
[(set (match_operand:SI 0 "register_operand" "=r,r")
(match_operand:SI 1 "s_operand" "+Q,S"))
(match_operand:SI 1 "memory_operand" "+Q,S"))
(set (match_dup 1)
(unspec_volatile:SI
[(match_dup 1)
......
2017-07-27 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
PR target/81534
* gcc.target/s390/pr81534.c: New test.
2017-07-27 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/81555
......
/* PR81534 This testcase used to fail because the HI/QI
"atomic_fetch_<atomic><mode>" expander accepted symbolic references
and emitted CAS patterns whose insn definition rejected them. */
/* { dg-do compile } */
/* { dg-options "-O2 -march=zEC12" } */
struct {
short b;
long c;
} a = {};
void
d ()
{
__atomic_fetch_add(&a.b, 0, 5);
}
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