gcc:
        PR target/120995
        * config/riscv/sync.md (zacas_atomic_cas_value_strong<mode>):
        Allow op3 to be zero.

gcc/testsuite:
        PR target/120995
        * gcc.target/riscv/amo/zabha-zacas-atomic-cas.c: New test.
---
 gcc/config/riscv/sync.md                              |  2 +-
 .../gcc.target/riscv/amo/zabha-zacas-atomic-cas.c     | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c

diff --git a/gcc/config/riscv/sync.md b/gcc/config/riscv/sync.md
index a75ea6834e4..50ec8b38f72 100644
--- a/gcc/config/riscv/sync.md
+++ b/gcc/config/riscv/sync.md
@@ -627,7 +627,7 @@
        (match_operand:SHORT 1 "memory_operand" "+A"))                          
;; memory
    (set (match_dup 1)
        (unspec_volatile:SHORT [(match_operand:SHORT 2 "register_operand" "0")  
;; expected_val
-                               (match_operand:SHORT 3 "register_operand" "rJ") 
;; desired_val
+                               (match_operand:SHORT 3 "reg_or_0_operand" "rJ") 
;; desired_val
                                (match_operand:SI 4 "const_int_operand")        
;; mod_s
                                (match_operand:SI 5 "const_int_operand")]       
;; mod_f
         UNSPEC_COMPARE_AND_SWAP))]
diff --git a/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c 
b/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c
new file mode 100644
index 00000000000..d3d84fd3088
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/amo/zabha-zacas-atomic-cas.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* PR target/120995 ICE unrecognized subword atomic cas */
+/* { dg-options "-O" } */
+/* { dg-add-options riscv_zacas } */
+/* { dg-add-options riscv_zabha } */
+
+_Bool b;
+void atomic_bool_cmpxchg()
+{
+  __sync_bool_compare_and_swap(&b, 1, 0);
+}
-- 
2.50.0


-- 
Andreas Schwab, SUSE Labs, sch...@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

Reply via email to