From a0e701d8a2d31d3fcbaad4de67639aadca7a1681 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 30 Oct 2015 00:13:22 +0000 Subject: [PATCH] openacc.h (enum acc_device_t): Reformat. gcc/ * openacc.h (enum acc_device_t): Reformat. Ensure layout compatibility. (enum acc_async_t): Reformat. (acc_on_device): Declare compatible with builtin and provide C++ wrapper. * testsuite/libgomp.oacc-c-c++-common/acc-on-device.c: New. gcc/testsuite/ * c-c++-common/goacc/acc_on_device-2-off.c: Delete. * c-c++-common/goacc/acc_on_device-2.c: Delete. From-SVN: r229562 --- gcc/testsuite/ChangeLog | 5 ++ .../c-c++-common/goacc/acc_on_device-2-off.c | 24 ---------- .../c-c++-common/goacc/acc_on_device-2.c | 28 ----------- libgomp/ChangeLog | 9 ++++ libgomp/openacc.h | 48 ++++++++++++------- .../libgomp.oacc-c-c++-common/acc-on-device.c | 11 +++++ 6 files changed, 55 insertions(+), 70 deletions(-) delete mode 100644 gcc/testsuite/c-c++-common/goacc/acc_on_device-2-off.c delete mode 100644 gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 71f3148c1b0..ffefb43c1dd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-10-29 Nathan Sidwell + + * c-c++-common/goacc/acc_on_device-2-off.c: Delete. + * c-c++-common/goacc/acc_on_device-2.c: Delete. + 2015-10-29 Richard Sandiford * gcc.dg/torture/builtin-convert-1.c: Require c99_runtime. diff --git a/gcc/testsuite/c-c++-common/goacc/acc_on_device-2-off.c b/gcc/testsuite/c-c++-common/goacc/acc_on_device-2-off.c deleted file mode 100644 index 59c72f755fb..00000000000 --- a/gcc/testsuite/c-c++-common/goacc/acc_on_device-2-off.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Have to enable optimizations, as otherwise builtins won't be expanded. */ -/* { dg-additional-options "-O -fdump-rtl-expand -fno-openacc" } */ - -#if __cplusplus -extern "C" { -#endif - -typedef enum acc_device_t { acc_device_X = 123 } acc_device_t; -extern int acc_on_device (acc_device_t); - -#if __cplusplus -} -#endif - -int -f (void) -{ - const acc_device_t dev = acc_device_X; - return acc_on_device (dev); -} - -/* Without -fopenacc, we're expecting one call. - { dg-final { scan-rtl-dump-times "\\\(call \[^\\n\]* acc_on_device" 1 "expand" } } */ - diff --git a/gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c b/gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c deleted file mode 100644 index ef622a874d5..00000000000 --- a/gcc/testsuite/c-c++-common/goacc/acc_on_device-2.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Have to enable optimizations, as otherwise builtins won't be expanded. */ -/* { dg-additional-options "-O -fdump-rtl-expand" } */ - -#if __cplusplus -extern "C" { -#endif - -typedef enum acc_device_t { acc_device_X = 123 } acc_device_t; -extern int acc_on_device (acc_device_t); - -#if __cplusplus -} -#endif - -int -f (void) -{ - const acc_device_t dev = acc_device_X; - return acc_on_device (dev); -} - -/* With -fopenacc, we're expecting the builtin to be expanded, so no calls. - TODO: in C++, even under extern "C", the use of enum for acc_device_t - perturbs expansion as a builtin, which expects an int parameter. It's fine - when changing acc_device_t to plain int, but that's not what we're doing in - . - - { dg-final { scan-rtl-dump-times "\\\(call \[^\\n\]* acc_on_device" 0 "expand" { xfail c++ } } } */ diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index c78881b2b62..4d1906613f9 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,12 @@ +2015-10-29 Nathan Sidwell + + * openacc.h (enum acc_device_t): Reformat. Ensure layout + compatibility. + (enum acc_async_t): Reformat. + (acc_on_device): Declare compatible with builtin and provide C++ + wrapper. + * testsuite/libgomp.oacc-c-c++-common/acc-on-device.c: New. + 2015-10-29 Thomas Schwinge Cesar Philippidis diff --git a/libgomp/openacc.h b/libgomp/openacc.h index fc353e1502c..30b18db2b69 100644 --- a/libgomp/openacc.h +++ b/libgomp/openacc.h @@ -47,24 +47,25 @@ extern "C" { #endif /* Types */ -typedef enum acc_device_t - { - /* Keep in sync with include/gomp-constants.h. */ - acc_device_none = 0, - acc_device_default = 1, - acc_device_host = 2, - /* acc_device_host_nonshm = 3 removed. */ - acc_device_not_host = 4, - acc_device_nvidia = 5, - _ACC_device_hwm - } acc_device_t; +typedef enum acc_device_t { + /* Keep in sync with include/gomp-constants.h. */ + acc_device_none = 0, + acc_device_default = 1, + acc_device_host = 2, + /* acc_device_host_nonshm = 3 removed. */ + acc_device_not_host = 4, + acc_device_nvidia = 5, + _ACC_device_hwm, + /* Ensure enumeration is layout compatible with int. */ + _ACC_highest = __INT_MAX__, + _ACC_neg = -1 +} acc_device_t; -typedef enum acc_async_t - { - /* Keep in sync with include/gomp-constants.h. */ - acc_async_noval = -1, - acc_async_sync = -2 - } acc_async_t; +typedef enum acc_async_t { + /* Keep in sync with include/gomp-constants.h. */ + acc_async_noval = -1, + acc_async_sync = -2 +} acc_async_t; int acc_get_num_devices (acc_device_t) __GOACC_NOTHROW; void acc_set_device_type (acc_device_t) __GOACC_NOTHROW; @@ -79,7 +80,11 @@ void acc_wait_all (void) __GOACC_NOTHROW; void acc_wait_all_async (int) __GOACC_NOTHROW; void acc_init (acc_device_t) __GOACC_NOTHROW; void acc_shutdown (acc_device_t) __GOACC_NOTHROW; -int acc_on_device (acc_device_t) __GOACC_NOTHROW; +#ifdef __cplusplus +int acc_on_device (int __arg) __GOACC_NOTHROW; +#else +int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW; +#endif void *acc_malloc (size_t) __GOACC_NOTHROW; void acc_free (void *) __GOACC_NOTHROW; /* Some of these would be more correct with const qualifiers, but @@ -113,6 +118,13 @@ int acc_set_cuda_stream (int, void *) __GOACC_NOTHROW; #ifdef __cplusplus } + +/* Forwarding function with correctly typed arg. */ + +inline int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW +{ + return acc_on_device ((int) __arg); +} #endif #endif /* _OPENACC_H */ diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c new file mode 100644 index 00000000000..88c000e62f0 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O2" } */ + +#include + +int Foo (acc_device_t x) +{ + return acc_on_device (x); +} + +/* { dg-final { scan-assembler-not "acc_on_device" } } */