public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-6524] [nvptx] Improve gcc.target/nvptx/atomic_fetch-*.c test-cases
@ 2022-01-12 14:56 Tom de Vries
  0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2022-01-12 14:56 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:d62e14e24cdc6de11b1367916cdd613cc7bd3ed7

commit r12-6524-gd62e14e24cdc6de11b1367916cdd613cc7bd3ed7
Author: Tom de Vries <tdevries@suse.de>
Date:   Wed Jan 12 15:29:06 2022 +0100

    [nvptx] Improve gcc.target/nvptx/atomic_fetch-*.c test-cases
    
    Fix a few issues in test-cases gcc.target/nvptx/atomic_fetch-*.c:
    - atomic_fetch-1.c uses scan-assembler instead of scan-assembler-times,
      which is less accurate
    - atomic_fetch-2.c only contains negative testing using
      scan-assembler-not
    - the test-cases use stack variables to generate generic addresses,
      while stack atomics are not natively supported
    - the test-cases only test (64-bit) x (generic), instead of
      (32-bit, 64-bit) x (generic, global, shared)
    - the test-cases use a hardcoded '0' instead of the clearer
      MEMMODEL_RELAXED
    
    Tested on nvptx.
    
    gcc/testsuite/ChangeLog:
    
    2022-01-12  Tom de Vries  <tdevries@suse.de>
    
            * gcc.target/nvptx/atomic_fetch-1.c: Rewrite.
            * gcc.target/nvptx/atomic_fetch-2.c: Rewrite.

Diff:
---
 gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c | 98 ++++++++++++++++++++++---
 gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c | 92 ++++++++++++++++++++---
 2 files changed, 168 insertions(+), 22 deletions(-)

diff --git a/gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c
index c637caa79a0..941cf3a2ab4 100644
--- a/gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c
+++ b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-1.c
@@ -4,21 +4,97 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -misa=sm_35" } */
 
+enum memmodel
+{
+  MEMMODEL_RELAXED = 0
+};
+
+unsigned long long int *p64;
+unsigned int *p32;
+
+unsigned long long int g64;
+unsigned int g32;
+
+unsigned int s32 __attribute__((shared));
+unsigned long long int s64 __attribute__((shared));
+
+unsigned long long int v64;
+unsigned int v32;
+
 int
 main()
 {
-  unsigned long long a = ~0;
-  unsigned b = 0xa;
+  /* Generic.  */
 
-  __atomic_fetch_add (&a, b, 0);
-  __atomic_fetch_and (&a, b, 0);
-  __atomic_fetch_or (&a, b, 0);
-  __atomic_fetch_xor (&a, b, 0);
+  __atomic_fetch_add (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (p64, v64, MEMMODEL_RELAXED);
   
-  return a;
+  __atomic_fetch_add (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (p32, v32, MEMMODEL_RELAXED);
+
+  /* Global.  */
+
+  __atomic_fetch_add (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&g64, v64, MEMMODEL_RELAXED);
+  
+  __atomic_fetch_add (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&g32, v32, MEMMODEL_RELAXED);
+
+  /* Shared.  */
+
+  __atomic_fetch_add (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&s64, v64, MEMMODEL_RELAXED);
+  
+  __atomic_fetch_add (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&s32, v32, MEMMODEL_RELAXED);
+
+  return 0;
 }
 
-/* { dg-final { scan-assembler "atom.add.u64" } } */
-/* { dg-final { scan-assembler "atom.b64.and" } } */
-/* { dg-final { scan-assembler "atom.b64.or" } } */
-/* { dg-final { scan-assembler "atom.b64.xor" } } */
+/* Generic.  */
+
+/* { dg-final { scan-assembler-times "atom.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b64.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b64.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b64.xor" 1 } } */
+
+/* { dg-final { scan-assembler-times "atom.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.xor" 1 } } */
+
+/* Global.  */
+
+/* { dg-final { scan-assembler-times "atom.global.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b64.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b64.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b64.xor" 1 } } */
+
+/* { dg-final { scan-assembler-times "atom.global.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.xor" 1 } } */
+
+/* Shared.  */
+
+/* { dg-final { scan-assembler-times "atom.shared.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b64.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b64.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b64.xor" 1 } } */
+
+/* { dg-final { scan-assembler-times "atom.shared.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.xor" 1 } } */
diff --git a/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
index 1d35a176a62..f5131fc4984 100644
--- a/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
+++ b/gcc/testsuite/gcc.target/nvptx/atomic_fetch-2.c
@@ -4,21 +4,91 @@
 /* { dg-do compile } */
 /* { dg-options "-O2 -misa=sm_30" } */
 
+enum memmodel
+{
+  MEMMODEL_RELAXED = 0
+};
+
+unsigned long long int *p64;
+unsigned int *p32;
+
+unsigned long long int g64;
+unsigned int g32;
+
+unsigned int s32 __attribute__((shared));
+unsigned long long int s64 __attribute__((shared));
+
+unsigned long long int v64;
+unsigned int v32;
+
 int
 main()
 {
-  unsigned long long a = ~0;
-  unsigned b = 0xa;
+  /* Generic.  */
 
-  __atomic_fetch_add (&a, b, 0);
-  __atomic_fetch_and (&a, b, 0);
-  __atomic_fetch_or (&a, b, 0);
-  __atomic_fetch_xor (&a, b, 0);
+  __atomic_fetch_add (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (p64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (p64, v64, MEMMODEL_RELAXED);
   
-  return a;
+  __atomic_fetch_add (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (p32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (p32, v32, MEMMODEL_RELAXED);
+
+  /* Global.  */
+
+  __atomic_fetch_add (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&g64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&g64, v64, MEMMODEL_RELAXED);
+  
+  __atomic_fetch_add (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&g32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&g32, v32, MEMMODEL_RELAXED);
+
+  /* Shared.  */
+
+  __atomic_fetch_add (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&s64, v64, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&s64, v64, MEMMODEL_RELAXED);
+  
+  __atomic_fetch_add (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_and (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_or (&s32, v32, MEMMODEL_RELAXED);
+  __atomic_fetch_xor (&s32, v32, MEMMODEL_RELAXED);
+
+  return 0;
 }
 
-/* { dg-final { scan-assembler-not "atom.b64.add" } } */
-/* { dg-final { scan-assembler-not "atom.b64.and" } } */
-/* { dg-final { scan-assembler-not "atom.b64.or" } } */
-/* { dg-final { scan-assembler-not "atom.b64.xor" } } */
+/* Generic.  */
+
+/* { dg-final { scan-assembler-times "atom.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.cas.b64" 3 } } */
+
+/* { dg-final { scan-assembler-times "atom.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.b32.xor" 1 } } */
+
+/* Global.  */
+
+/* { dg-final { scan-assembler-times "atom.global.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.cas.b64" 3 } } */
+
+/* { dg-final { scan-assembler-times "atom.global.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.global.b32.xor" 1 } } */
+
+/* Shared.  */
+
+/* { dg-final { scan-assembler-times "atom.shared.add.u64" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.cas.b64" 3 } } */
+
+/* { dg-final { scan-assembler-times "atom.shared.add.u32" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.and" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.or" 1 } } */
+/* { dg-final { scan-assembler-times "atom.shared.b32.xor" 1 } } */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-12 14:56 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-12 14:56 [gcc r12-6524] [nvptx] Improve gcc.target/nvptx/atomic_fetch-*.c test-cases Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).