aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2019-07-20 19:34:06 +0200
committerSegher Boessenkool <segher@gcc.gnu.org>2019-07-20 19:34:06 +0200
commit45986ed939d2187a03b6f55721e51e363968f5be (patch)
treef027ff7802ce0093979508f6ba53cf980d041d08 /gcc
parent5744faa9851c86d018f32de7363b1064d5348d26 (diff)
downloadgcc-45986ed939d2187a03b6f55721e51e363968f5be.zip
gcc-45986ed939d2187a03b6f55721e51e363968f5be.tar.gz
gcc-45986ed939d2187a03b6f55721e51e363968f5be.tar.bz2
rs6000: Make lwa_operand use any_memory_operand
Testcase from comex, see https://lwn.net/Articles/793932/ . * config/rs6000/predicates.md (lwa_operand): Allow volatile memory. gcc/testsuite/ * gcc.target/powerpc/volatile-mem.c: New testcase. From-SVN: r273631
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/rs6000/predicates.md2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/volatile-mem.c16
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 58220e6..459c869 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2019-07-20 Segher Boessenkool <segher@kernel.crashing.org>
+ * config/rs6000/predicates.md (lwa_operand): Allow volatile memory.
+
+2019-07-20 Segher Boessenkool <segher@kernel.crashing.org>
+
* config/rs6000/predicates.md (volatile_mem_operand): Modernize syntax.
(any_memory_operand): New predicate.
(reg_or_mem_operand): Use it.
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index 13c7c02..23d626b 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -929,7 +929,7 @@
if (gpc_reg_operand (inner, mode))
return true;
- if (!memory_operand (inner, mode))
+ if (!any_memory_operand (inner, mode))
return false;
addr = XEXP (inner, 0);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cd553db..fc9b4c8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-07-20 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * gcc.target/powerpc/volatile-mem.c: New testcase.
+
2019-07-20 Jakub Jelinek <jakub@redhat.com>
PR target/91204
diff --git a/gcc/testsuite/gcc.target/powerpc/volatile-mem.c b/gcc/testsuite/gcc.target/powerpc/volatile-mem.c
new file mode 100644
index 0000000..c8a7444
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/volatile-mem.c
@@ -0,0 +1,16 @@
+/* { dg-options "-O2 -std=c11" } */
+/* { dg-require-effective-target lp64 } */
+
+/* This tests if the instructions used for C atomic are optimised properly
+ as atomic by the target code, too. */
+
+#include <stdatomic.h>
+
+int load(_Atomic int *ptr)
+{
+ return atomic_load_explicit(ptr, memory_order_relaxed);
+}
+
+/* There should be only two machine instructions, an lwa and a blr: */
+/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 2 } } */
+/* { dg-final { scan-assembler-times {\mlwa\M} 1 } } */