diff options
author | Sandra Loosemore <sloosemore@baylibre.com> | 2025-01-08 01:55:47 +0000 |
---|---|---|
committer | Sandra Loosemore <sloosemore@baylibre.com> | 2025-01-16 18:12:21 +0000 |
commit | fdeceba59bee60040fd58203b6fe0239d789eade (patch) | |
tree | b5948f52397624c47da64df784709734a6d83220 /libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c | |
parent | 677e452e55e5a91e699d4f01cc9b88297cc41a0d (diff) | |
download | gcc-fdeceba59bee60040fd58203b6fe0239d789eade.zip gcc-fdeceba59bee60040fd58203b6fe0239d789eade.tar.gz gcc-fdeceba59bee60040fd58203b6fe0239d789eade.tar.bz2 |
OpenMP: Shared metadirective/dynamic selector tests for C and C++
gcc/testsuite/ChangeLog
* c-c++-common/gomp/adjust-args-6.c: New.
* c-c++-common/gomp/attrs-metadirective-1.c: New.
* c-c++-common/gomp/attrs-metadirective-2.c: New.
* c-c++-common/gomp/attrs-metadirective-3.c: New.
* c-c++-common/gomp/attrs-metadirective-4.c: New.
* c-c++-common/gomp/attrs-metadirective-5.c: New.
* c-c++-common/gomp/attrs-metadirective-6.c: New.
* c-c++-common/gomp/attrs-metadirective-7.c: New.
* c-c++-common/gomp/attrs-metadirective-8.c: New.
* c-c++-common/gomp/declare-variant-arg-exprs.c: New.
* c-c++-common/gomp/declare-variant-dynamic-1.c: New.
* c-c++-common/gomp/declare-variant-dynamic-2.c: New.
* c-c++-common/gomp/metadirective-1.c: New.
* c-c++-common/gomp/metadirective-2.c: New.
* c-c++-common/gomp/metadirective-3.c: New.
* c-c++-common/gomp/metadirective-4.c: New.
* c-c++-common/gomp/metadirective-5.c: New.
* c-c++-common/gomp/metadirective-6.c: New.
* c-c++-common/gomp/metadirective-7.c: New.
* c-c++-common/gomp/metadirective-8.c: New.
* c-c++-common/gomp/metadirective-construct.c: New.
* c-c++-common/gomp/metadirective-device.c: New.
* c-c++-common/gomp/metadirective-no-score.c: New.
* c-c++-common/gomp/metadirective-target-device-1.c: New.
* c-c++-common/gomp/metadirective-target-device-2.c: New.
libgomp/ChangeLog
* testsuite/libgomp.c-c++-common/metadirective-1.c: New.
* testsuite/libgomp.c-c++-common/metadirective-2.c: New.
* testsuite/libgomp.c-c++-common/metadirective-3.c: New.
* testsuite/libgomp.c-c++-common/metadirective-4.c: New.
* testsuite/libgomp.c-c++-common/metadirective-5.c: New.
* testsuite/libgomp.c-c++-common/metadirective-late-1.c: New.
* testsuite/libgomp.c-c++-common/metadirective-late-2.c: New.
* testsuite/libgomp.c-c++-common/metadirective-target-device.c: New.
Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com>
Co-Authored-By: Sandra Loosemore <sandra@codesourcery.com>
Diffstat (limited to 'libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c')
-rw-r--r-- | libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c b/libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c new file mode 100644 index 0000000..7c2f7e5 --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c @@ -0,0 +1,76 @@ +#include <omp.h> +#include <stdlib.h> +#include <stdio.h> + +/* PR112779 item (B) */ + +/* Check that the target_device selector correctly matches device numbers + and handles kind=host|nohost|any. */ + +static int +check_explicit_device (int d, int expect_host) +{ + int ok = 0; + if (expect_host) + { + #pragma omp metadirective \ + when (target_device={device_num(d), kind("host")} : nothing) \ + otherwise (error at(execution) message("check_explicit_device host")) + ok = 1; + } + else + { + #pragma omp metadirective \ + when (target_device={device_num(d), kind("nohost")} : nothing) \ + otherwise (error at(execution) message("check_explicit_device nohost")) + ok = 1; + } + + return ok; +} + +static int +check_implicit_device (int d, int expect_host) +{ + int ok = 0; + omp_set_default_device (d); + + if (expect_host) + { + #pragma omp metadirective \ + when (target_device={kind("host")} : nothing) \ + otherwise (error at(execution) message("check_implicit_device host")) + ok = 1; + } + else + { + #pragma omp metadirective \ + when (target_device={kind("nohost")} : nothing) \ + otherwise (error at(execution) message("check_implicit_device nohost")) + ok = 1; + } + #pragma omp metadirective \ + when (target_device={kind("any")} : nothing) \ + otherwise (error at(execution) message("check_implicit_device any")) + ok = 1; + omp_set_default_device (omp_initial_device); + + return ok; +} + +int +main (void) +{ + printf ("Checking omp_initial_device\n"); + check_explicit_device (omp_initial_device, 1); + check_implicit_device (omp_initial_device, 1); + int n = omp_get_num_devices (); + printf ("There are %d devices\n", n); + for (int i = 0; i < n; i++) + { + printf ("Checking device %d\n", i); + check_explicit_device (i, 0); + check_implicit_device (i, 0); + } + return 0; +} |