aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCesar Philippidis <cesar@codesourcery.com>2018-09-17 12:59:19 -0700
committerCesar Philippidis <cesar@gcc.gnu.org>2018-09-17 12:59:19 -0700
commit69d7aabfd8fec442047cefb136b1fd2680310fa9 (patch)
tree5ff611e01425f26733751c7a92913a171d0ee51d /gcc
parentfa540cecf5553ab3af9d127a3c7ed3ac901ef0fb (diff)
downloadgcc-69d7aabfd8fec442047cefb136b1fd2680310fa9.zip
gcc-69d7aabfd8fec442047cefb136b1fd2680310fa9.tar.gz
gcc-69d7aabfd8fec442047cefb136b1fd2680310fa9.tar.bz2
[nvptx] Add atomic_fetch* support for SImode arguments.
gcc/ * config/nvptx/nvptx.md (atomic_fetch_<logic><mode>): Enable with SImode args. gcc/testsuite/ * gcc.target/nvptx/atomic-fetch-2.c: Rename to ... * gcc.target/nvptx/atomic_fetch-2.c: ... this. * gcc.target/nvptx/atomic_fetch-3.c: New test. Co-Authored-By: Bernd Schmidt <bernds_cb1@t-online.de> From-SVN: r264371
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/nvptx/nvptx.md2
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c (renamed from gcc/testsuite/gcc.target/nvptx/atomic-fetch-2.c)0
-rw-r--r--gcc/testsuite/gcc.target/nvptx/atomic_fetch-3.c24
5 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a9e0589..017aa64 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-09-17 Cesar Philippidis <cesar@codesourcery.com>
+ Bernd Schmidt <bernds_cb1@t-online.de>
+
+ * config/nvptx/nvptx.md (atomic_fetch_<logic><mode>): Enable with
+ SImode args.
+
2018-09-17 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (truncxf<mode>2_i387_noop_unspec): Change
diff --git a/gcc/config/nvptx/nvptx.md b/gcc/config/nvptx/nvptx.md
index dd6032d..ca00b1d 100644
--- a/gcc/config/nvptx/nvptx.md
+++ b/gcc/config/nvptx/nvptx.md
@@ -1449,7 +1449,7 @@
UNSPECV_LOCK))
(set (match_operand:SDIM 0 "nvptx_register_operand" "=R")
(match_dup 1))]
- "TARGET_SM35"
+ "<MODE>mode == SImode || TARGET_SM35"
"%.\\tatom%A1.b%T0.<logic>\\t%0, %1, %2;"
[(set_attr "atomic" "true")])
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5cce863..ddf5f73 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2018-09-17 Cesar Philippidis <cesar@codesourcery.com>
+ Bernd Schmidt <bernds_cb1@t-online.de>
+
+ * gcc.target/nvptx/atomic-fetch-2.c: Rename to ...
+ * gcc.target/nvptx/atomic_fetch-2.c: ... this.
+ * gcc.target/nvptx/atomic_fetch-3.c: New test.
+
2018-09-17 Richard Biener <rguenther@suse.de>
PR tree-optimization/87328
diff --git a/gcc/testsuite/gcc.target/nvptx/atomic-fetch-2.c b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
index 1d35a17..1d35a17 100644
--- a/gcc/testsuite/gcc.target/nvptx/atomic-fetch-2.c
+++ b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
diff --git a/gcc/testsuite/gcc.target/nvptx/atomic_fetch-3.c b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-3.c
new file mode 100644
index 0000000..36a83eb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-3.c
@@ -0,0 +1,24 @@
+/* Test the nvptx atomic instructions for __atomic_fetch_OP for
+ SImode arguments. */
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -m32" } */
+
+int
+main()
+{
+ unsigned long a = ~0;
+ unsigned b = 0xa;
+
+ __atomic_fetch_add (&a, b, 0);
+ __atomic_fetch_and (&a, b, 0);
+ __atomic_fetch_or (&a, b, 0);
+ __atomic_fetch_xor (&a, b, 0);
+
+ return a;
+}
+
+/* { dg-final { scan-assembler "atom.add.u32" } } */
+/* { dg-final { scan-assembler "atom.b32.and" } } */
+/* { dg-final { scan-assembler "atom.b32.or" } } */
+/* { dg-final { scan-assembler "atom.b32.xor" } } */