Use dmb ishld and dmb ishst for a release fence since this is less
restrictive than dmb ish.

Passes regress, OK for commit?

gcc:
        * config/aarch64/atomics.md (*dmb): Expand release fence into dmb ishld
        and dmb ishst.

---

diff --git a/gcc/config/aarch64/atomics.md b/gcc/config/aarch64/atomics.md
index 
ea4a9367fc880ed449870f80aecd571bf1d61d7b..d4b4afb5815db50bc4344c885eb03e95cc153f61
 100644
--- a/gcc/config/aarch64/atomics.md
+++ b/gcc/config/aarch64/atomics.md
@@ -870,7 +870,13 @@ (define_insn "*dmb"
     enum memmodel model = memmodel_from_int (INTVAL (operands[1]));
     if (is_mm_acquire (model))
       return "dmb\\tishld";
+    else if (is_mm_release (model))
+      return "dmb\\tishld\;dmb\\tishst";
     else
       return "dmb\\tish";
   }
+  [(set (attr "length")
+    (if_then_else
+     (match_test "is_mm_release (memmodel_from_int (INTVAL (operands[1])))")
+      (const_int 8) (const_int 4)))]
 )

Reply via email to