aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c
diff options
context:
space:
mode:
authorSandra Loosemore <sloosemore@baylibre.com>2025-01-08 01:55:47 +0000
committerSandra Loosemore <sloosemore@baylibre.com>2025-01-16 18:12:21 +0000
commitfdeceba59bee60040fd58203b6fe0239d789eade (patch)
treeb5948f52397624c47da64df784709734a6d83220 /libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c
parent677e452e55e5a91e699d4f01cc9b88297cc41a0d (diff)
downloadgcc-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.c76
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;
+}