]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[AArch64] Don't split 64-bit constant stores to volatile location
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Tue, 1 Oct 2019 10:33:40 +0000 (10:33 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Tue, 1 Oct 2019 10:33:40 +0000 (10:33 +0000)
2019-10-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

Backport from mainline
2019-09-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/aarch64/aarch64.md (mov<mode>): Don't call
aarch64_split_dimode_const_store on volatile MEM.

* gcc.target/aarch64/nosplit-di-const-volatile_1.c: New test.

From-SVN: r276398

gcc/ChangeLog
gcc/config/aarch64/aarch64.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c [new file with mode: 0644]

index 5f1145ef8d4afd4ec8726771246a2aa1fd9e0b6e..182d2e28b9e77e621287f36e7f4a8393939e2216 100644 (file)
@@ -1,3 +1,11 @@
+2019-10-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2019-09-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * config/aarch64/aarch64.md (mov<mode>): Don't call
+       aarch64_split_dimode_const_store on volatile MEM.
+
 2019-10-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        Backport from mainline
index f08cd0930b3fc6527fbca218ad3c464f1ead0103..cc5a887d404999adc91ef3fddb8a64686d468ad8 100644 (file)
        (match_operand:GPI 1 "general_operand" ""))]
   ""
   "
-    if (MEM_P (operands[0]) && CONST_INT_P (operands[1])
-       && <MODE>mode == DImode
+    if (MEM_P (operands[0]) && !MEM_VOLATILE_P (operands[0])
+       && CONST_INT_P (operands[1]) && <MODE>mode == DImode
        && aarch64_split_dimode_const_store (operands[0], operands[1]))
       DONE;
 
index 71b6ec52fcd494d2720429966fb8ac309aea590a..5cf8feb32a526a8bda65984068699288b2dc2e68 100644 (file)
@@ -1,3 +1,10 @@
+2019-10-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       Backport from mainline
+       2019-09-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * gcc.target/aarch64/nosplit-di-const-volatile_1.c: New test.
+
 2019-09-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c b/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c
new file mode 100644 (file)
index 0000000..da5975a
--- /dev/null
@@ -0,0 +1,15 @@
+/* Check that storing the 64-bit immediate to a volatile location is done
+   with a single store.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+typedef unsigned long long u64;
+
+void bar (u64 *x)
+{
+  *(volatile u64 *)x = 0xabcdef10abcdef10ULL;
+}
+
+/* { dg-final { scan-assembler-times "str\tx..?, .*" 1 } } */
+/* { dg-final { scan-assembler-not "str\tw..?, .*" } } */