+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.
; 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)
; 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)
; 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
--- /dev/null
+/* 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);
+}