diff options
author | Segher Boessenkool <segher@kernel.crashing.org> | 2019-07-20 19:34:06 +0200 |
---|---|---|
committer | Segher Boessenkool <segher@gcc.gnu.org> | 2019-07-20 19:34:06 +0200 |
commit | 45986ed939d2187a03b6f55721e51e363968f5be (patch) | |
tree | f027ff7802ce0093979508f6ba53cf980d041d08 /gcc | |
parent | 5744faa9851c86d018f32de7363b1064d5348d26 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/predicates.md | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/volatile-mem.c | 16 |
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 } } */ |