[llvm] [OpenMP] Add test to print interop identifiers (PR #161434)
Jan Patrick Lehr via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 2 04:57:02 PDT 2025
https://github.com/jplehr updated https://github.com/llvm/llvm-project/pull/161434
>From 54544d93d7896dd00c0a1ae53531fe2a42506cff Mon Sep 17 00:00:00 2001
From: JP Lehr <JanPatrick.Lehr at amd.com>
Date: Tue, 30 Sep 2025 15:23:29 -0500
Subject: [PATCH 1/4] [OpenMP] Add test to print interop identifiers
The test covers some of the identifier symbols in the interop runtime.
---
offload/test/offloading/interop-print.c | 71 +++++++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 offload/test/offloading/interop-print.c
diff --git a/offload/test/offloading/interop-print.c b/offload/test/offloading/interop-print.c
new file mode 100644
index 0000000000000..cf59d03d3779e
--- /dev/null
+++ b/offload/test/offloading/interop-print.c
@@ -0,0 +1,71 @@
+// RUN: %libomptarget-compile-amdgcn-amd-amdhsa
+// RUN: %libomptarget-run-generic 2>&1 | \
+// RUN: %fcheck-generic -check-prefix=AMDCHECK
+
+// REQUIRES: amdgpu
+
+#include <omp.h>
+#include <stdio.h>
+
+const char *interop_int_to_string(const int interop_int) {
+ switch (interop_int) {
+ case 1:
+ return "cuda";
+ case 2:
+ return "cuda_driver";
+ case 3:
+ return "opencl";
+ case 4:
+ return "sycl";
+ case 5:
+ return "hip";
+ case 6:
+ return "level_zero";
+ case 7:
+ return "hsa";
+ default:
+ return "unknown";
+ }
+}
+
+int main(int argc, char **argv) {
+ omp_interop_t iobj = omp_interop_none;
+#pragma omp interop init(targetsync : iobj)
+
+ int err;
+ int interop_int = omp_get_interop_int(iobj, omp_ipr_fr_id, &err);
+
+ if (err) {
+ fprintf(stderr, "omp_get_interop_int failed: %d\n", err);
+ return -1;
+ }
+
+ // FIXME: This should be hsa instead of hip
+ // AMDCHECK: {{.*}} hip
+ printf("omp_get_interop_int returned %s\n",
+ interop_int_to_string(interop_int));
+
+ const char *interop_vendor =
+ omp_get_interop_str(iobj, omp_ipr_vendor_name, &err);
+ if (err) {
+ fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
+ return -1;
+ }
+
+ // AMDCHECK: {{.*}} amd
+ printf("omp_get_interop_str returned %s\n", interop_vendor);
+
+ const char *interop_fr_name =
+ omp_get_interop_str(iobj, omp_ipr_fr_name, &err);
+ if (err) {
+ fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
+ return -1;
+ }
+
+ // FIXME: This should be hsa instead of hip
+ // AMDCHECK: {{.*}} hip
+ printf("omp_get_interop_str returned %s\n", interop_fr_name);
+
+#pragma omp interop destroy(iobj)
+ return 0;
+}
>From 2260660b4e51c7989d5255980a67b6060763049b Mon Sep 17 00:00:00 2001
From: JP Lehr <JanPatrick.Lehr at amd.com>
Date: Thu, 2 Oct 2025 02:44:59 -0500
Subject: [PATCH 2/4] Change 'hip' to correct 'hsa'
The required linked PR got updated to include that fix. Adjusting the
test to reflect the correct behavior.
---
offload/test/offloading/interop-print.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/offload/test/offloading/interop-print.c b/offload/test/offloading/interop-print.c
index cf59d03d3779e..faf47e0a997cd 100644
--- a/offload/test/offloading/interop-print.c
+++ b/offload/test/offloading/interop-print.c
@@ -40,8 +40,7 @@ int main(int argc, char **argv) {
return -1;
}
- // FIXME: This should be hsa instead of hip
- // AMDCHECK: {{.*}} hip
+ // AMDCHECK: {{.*}} hsa
printf("omp_get_interop_int returned %s\n",
interop_int_to_string(interop_int));
@@ -62,8 +61,7 @@ int main(int argc, char **argv) {
return -1;
}
- // FIXME: This should be hsa instead of hip
- // AMDCHECK: {{.*}} hip
+ // AMDCHECK: {{.*}} hsa
printf("omp_get_interop_str returned %s\n", interop_fr_name);
#pragma omp interop destroy(iobj)
>From df676c1f1a218b8c6edf0e9556afda6cacf7c2f4 Mon Sep 17 00:00:00 2001
From: JP Lehr <JanPatrick.Lehr at amd.com>
Date: Thu, 2 Oct 2025 06:27:33 -0500
Subject: [PATCH 3/4] Address review feedback
- Added Nvidia run line
- Added loop around all devices
---
offload/test/offloading/interop-print.c | 68 +++++++++++++++----------
1 file changed, 40 insertions(+), 28 deletions(-)
diff --git a/offload/test/offloading/interop-print.c b/offload/test/offloading/interop-print.c
index faf47e0a997cd..b0632626868d2 100644
--- a/offload/test/offloading/interop-print.c
+++ b/offload/test/offloading/interop-print.c
@@ -2,7 +2,11 @@
// RUN: %libomptarget-run-generic 2>&1 | \
// RUN: %fcheck-generic -check-prefix=AMDCHECK
-// REQUIRES: amdgpu
+// RUN: %libomptarget-compile-nvptx64-nvidia-cuda
+// RUN: %libomptarget-run-generic 2>&1 | \
+// RUN: %fcheck-generic -check-prefix=NVIDIACHECK
+
+// REQUIRES: gpu
#include <omp.h>
#include <stdio.h>
@@ -29,41 +33,49 @@ const char *interop_int_to_string(const int interop_int) {
}
int main(int argc, char **argv) {
- omp_interop_t iobj = omp_interop_none;
-#pragma omp interop init(targetsync : iobj)
- int err;
- int interop_int = omp_get_interop_int(iobj, omp_ipr_fr_id, &err);
+ // Loop over all available devices
+ // XXX What happens in machines w/ GPUs from different vendors?
+ for (int id = 0; id < omp_get_num_devices(); ++id) {
+ omp_interop_t iobj = omp_interop_none;
+#pragma omp interop init(target : iobj) device(id)
- if (err) {
- fprintf(stderr, "omp_get_interop_int failed: %d\n", err);
- return -1;
- }
+ int err;
+ int interop_int = omp_get_interop_int(iobj, omp_ipr_fr_id, &err);
- // AMDCHECK: {{.*}} hsa
- printf("omp_get_interop_int returned %s\n",
- interop_int_to_string(interop_int));
+ if (err) {
+ fprintf(stderr, "omp_get_interop_int failed: %d\n", err);
+ return -1;
+ }
- const char *interop_vendor =
- omp_get_interop_str(iobj, omp_ipr_vendor_name, &err);
- if (err) {
- fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
- return -1;
- }
+ // AMDCHECK: {{.*}} hsa
+ // NVIDIACHECK: {{.*}} cuda
+ printf("omp_get_interop_int returned %s\n",
+ interop_int_to_string(interop_int));
- // AMDCHECK: {{.*}} amd
- printf("omp_get_interop_str returned %s\n", interop_vendor);
+ const char *interop_vendor =
+ omp_get_interop_str(iobj, omp_ipr_vendor_name, &err);
+ if (err) {
+ fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
+ return -1;
+ }
- const char *interop_fr_name =
- omp_get_interop_str(iobj, omp_ipr_fr_name, &err);
- if (err) {
- fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
- return -1;
- }
+ // AMDCHECK: {{.*}} amd
+ // NVIDIACHECK: {{.*}} nvidia
+ printf("omp_get_interop_str returned %s\n", interop_vendor);
+
+ const char *interop_fr_name =
+ omp_get_interop_str(iobj, omp_ipr_fr_name, &err);
+ if (err) {
+ fprintf(stderr, "omp_get_interop_str failed: %d\n", err);
+ return -1;
+ }
- // AMDCHECK: {{.*}} hsa
- printf("omp_get_interop_str returned %s\n", interop_fr_name);
+ // AMDCHECK: {{.*}} hsa
+ // NVIDIACHECK: {{.*}} cuda
+ printf("omp_get_interop_str returned %s\n", interop_fr_name);
#pragma omp interop destroy(iobj)
+ }
return 0;
}
>From 640ae2725f817036ee88449ba3e71e10a856408f Mon Sep 17 00:00:00 2001
From: JP Lehr <JanPatrick.Lehr at amd.com>
Date: Thu, 2 Oct 2025 06:55:08 -0500
Subject: [PATCH 4/4] Fix RUN line for both targets
---
offload/test/offloading/interop-print.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/offload/test/offloading/interop-print.c b/offload/test/offloading/interop-print.c
index b0632626868d2..59f450e716b88 100644
--- a/offload/test/offloading/interop-print.c
+++ b/offload/test/offloading/interop-print.c
@@ -1,10 +1,10 @@
// RUN: %libomptarget-compile-amdgcn-amd-amdhsa
// RUN: %libomptarget-run-generic 2>&1 | \
-// RUN: %fcheck-generic -check-prefix=AMDCHECK
+// RUN: %fcheck-amdgcn-amd-amdhsa -check-prefixes=AMD
// RUN: %libomptarget-compile-nvptx64-nvidia-cuda
// RUN: %libomptarget-run-generic 2>&1 | \
-// RUN: %fcheck-generic -check-prefix=NVIDIACHECK
+// RUN: %fcheck-nvptx64-nvidia-cuda -check-prefixes=NVIDIA
// REQUIRES: gpu
@@ -35,10 +35,9 @@ const char *interop_int_to_string(const int interop_int) {
int main(int argc, char **argv) {
// Loop over all available devices
- // XXX What happens in machines w/ GPUs from different vendors?
for (int id = 0; id < omp_get_num_devices(); ++id) {
omp_interop_t iobj = omp_interop_none;
-#pragma omp interop init(target : iobj) device(id)
+#pragma omp interop init(targetsync : iobj) device(id)
int err;
int interop_int = omp_get_interop_int(iobj, omp_ipr_fr_id, &err);
@@ -48,8 +47,8 @@ int main(int argc, char **argv) {
return -1;
}
- // AMDCHECK: {{.*}} hsa
- // NVIDIACHECK: {{.*}} cuda
+ // AMD: {{.*}} hsa
+ // NVIDIA: {{.*}} cuda
printf("omp_get_interop_int returned %s\n",
interop_int_to_string(interop_int));
@@ -60,8 +59,8 @@ int main(int argc, char **argv) {
return -1;
}
- // AMDCHECK: {{.*}} amd
- // NVIDIACHECK: {{.*}} nvidia
+ // AMD: {{.*}} amd
+ // NVIDIA: {{.*}} nvidia
printf("omp_get_interop_str returned %s\n", interop_vendor);
const char *interop_fr_name =
@@ -71,8 +70,8 @@ int main(int argc, char **argv) {
return -1;
}
- // AMDCHECK: {{.*}} hsa
- // NVIDIACHECK: {{.*}} cuda
+ // AMD: {{.*}} hsa
+ // NVIDIA: {{.*}} cuda
printf("omp_get_interop_str returned %s\n", interop_fr_name);
#pragma omp interop destroy(iobj)
More information about the llvm-commits
mailing list