[openacc] Factor out async argument utility functions
authorTom de Vries <tom@codesourcery.com>
Wed, 9 May 2018 13:52:49 +0000 (13:52 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Wed, 9 May 2018 13:52:49 +0000 (13:52 +0000)
2018-05-09  Tom de Vries  <tom@codesourcery.com>

PR libgomp/83792
* oacc-int.h (async_valid_stream_id_p, async_valid_p)
(async_synchronous_p): New function.
* oacc-async.c (acc_async_test, acc_wait, acc_wait_all_async): Use
async_valid_p.
* oacc-cuda.c (acc_get_cuda_stream, acc_set_cuda_stream): Use
async_valid_stream_id_p.
* oacc-mem.c (gomp_acc_remove_pointer): Use async_synchronous_p.
* oacc-parallel.c (GOACC_parallel_keyed): Same.

From-SVN: r260081

libgomp/ChangeLog
libgomp/oacc-async.c
libgomp/oacc-cuda.c
libgomp/oacc-int.h
libgomp/oacc-mem.c
libgomp/oacc-parallel.c

index 74a3842af40753171e3b2bee362ba5e58c350c05..569c0f1c8592b8e4e0e126929473e4d44208efef 100644 (file)
@@ -1,3 +1,15 @@
+2018-05-09  Tom de Vries  <tom@codesourcery.com>
+
+       PR libgomp/83792
+       * oacc-int.h (async_valid_stream_id_p, async_valid_p)
+       (async_synchronous_p): New function.
+       * oacc-async.c (acc_async_test, acc_wait, acc_wait_all_async): Use
+       async_valid_p.
+       * oacc-cuda.c (acc_get_cuda_stream, acc_set_cuda_stream): Use
+       async_valid_stream_id_p.
+       * oacc-mem.c (gomp_acc_remove_pointer): Use async_synchronous_p.
+       * oacc-parallel.c (GOACC_parallel_keyed): Same.
+
 2018-05-07  Tom de Vries  <tom@codesourcery.com>
 
        PR testsuite/85677
index 7cdb627c96a6a6376cfa99ca4658ebe3cd5cd5b0..a4e186386df065e3b9bb8532def56f393faaff31 100644 (file)
@@ -34,7 +34,7 @@
 int
 acc_async_test (int async)
 {
-  if (async < acc_async_sync)
+  if (!async_valid_p (async))
     gomp_fatal ("invalid async argument: %d", async);
 
   struct goacc_thread *thr = goacc_thread ();
@@ -59,7 +59,7 @@ acc_async_test_all (void)
 void
 acc_wait (int async)
 {
-  if (async < acc_async_sync)
+  if (!async_valid_p (async))
     gomp_fatal ("invalid async argument: %d", async);
 
   struct goacc_thread *thr = goacc_thread ();
@@ -117,7 +117,7 @@ acc_async_wait_all (void)
 void
 acc_wait_all_async (int async)
 {
-  if (async < acc_async_sync)
+  if (!async_valid_p (async))
     gomp_fatal ("invalid async argument: %d", async);
 
   struct goacc_thread *thr = goacc_thread ();
index c388170bffb87768b2a44ceb3650623232150d1e..20774c1b48763b2fb092c07bfe6d6bffea609400 100644 (file)
@@ -58,7 +58,7 @@ acc_get_cuda_stream (int async)
 {
   struct goacc_thread *thr = goacc_thread ();
 
-  if (async < 0)
+  if (!async_valid_stream_id_p (async))
     return NULL;
 
   if (thr && thr->dev && thr->dev->openacc.cuda.get_stream_func)
@@ -72,7 +72,7 @@ acc_set_cuda_stream (int async, void *stream)
 {
   struct goacc_thread *thr;
 
-  if (async < 0 || stream == NULL)
+  if (!async_valid_stream_id_p (async) || stream == NULL)
     return 0;
 
   goacc_lazy_initialize ();
index 912433a3ddd568f09b19605abfa618c717f0181e..cdd0f7f0f73727c0d06a7b31fa88a130852bc215 100644 (file)
@@ -99,6 +99,28 @@ void goacc_restore_bind (void);
 void goacc_lazy_initialize (void);
 void goacc_host_init (void);
 
+static inline bool
+async_valid_stream_id_p (int async)
+{
+  return async >= 0;
+}
+
+static inline bool
+async_valid_p (int async)
+{
+  return (async == acc_async_noval || async == acc_async_sync
+         || async_valid_stream_id_p (async));
+}
+
+static inline bool
+async_synchronous_p (int async)
+{
+  if (!async_valid_p (async))
+    return true;
+
+  return async == acc_async_sync;
+}
+
 #ifdef HAVE_ATTRIBUTE_VISIBILITY
 # pragma GCC visibility pop
 #endif
index 5cc8fcf1471a2e8761be8e3e1490da9b12fa500f..158f0862018c1fdc8958b3ebefca0d1a0f0d741a 100644 (file)
@@ -723,7 +723,7 @@ gomp_acc_remove_pointer (void *h, bool force_copyfrom, int async, int mapnum)
   gomp_mutex_unlock (&acc_dev->lock);
 
   /* If running synchronously, unmap immediately.  */
-  if (async < acc_async_noval)
+  if (async_synchronous_p (async))
     gomp_unmap_vars (t, true);
   else
     t->device_descr->openacc.register_async_cleanup_func (t, async);
index a71b399a76010356d662ca65ec588fc2c34e4b28..cfba5816036e5342a8a1aa56922c76ae7c6ab4a9 100644 (file)
@@ -183,7 +183,7 @@ GOACC_parallel_keyed (int device, void (*fn) (void *),
                              async, dims, tgt);
 
   /* If running synchronously, unmap immediately.  */
-  if (async < acc_async_noval)
+  if (async_synchronous_p (async))
     gomp_unmap_vars (tgt, true);
   else
     tgt->device_descr->openacc.register_async_cleanup_func (tgt, async);