[clang] [llvm] [NFC][OpenMP] Add tests for mapping pointers and their dereferences. (PR #146934)
Abhinav Gaba via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 3 10:47:59 PDT 2025
================
@@ -0,0 +1,83 @@
+// RUN: %libomptarget-compilexx-run-and-check-generic
+
+#include <omp.h>
+#include <stdio.h>
+
+int x[10];
+
+void f1() {
+ int *p;
+ p = &x[0];
+ p[0] = 111;
+ p[1] = 222;
+ p[2] = 333;
+ p[3] = 444;
+
+#pragma omp target enter data map(to : p)
+#pragma omp target enter data map(to : p[0 : 5])
+
+ int **p_mappedptr = (int **)omp_get_mapped_ptr(&p, omp_get_default_device());
+ int *x0_mappedptr =
+ (int *)omp_get_mapped_ptr(&x[0], omp_get_default_device());
+ int *x0_hostaddr = &x[0];
+
+ printf("p_mappedptr %s null\n", p_mappedptr == (int **)NULL ? "==" : "!=");
+ printf("x0_mappedptr %s null\n", x0_mappedptr == (int *)NULL ? "==" : "!=");
+
+// CHECK: p_mappedptr != null
+// CHECK: x0_mappedptr != null
+
+// p is predetermined firstprivate, so its address will be different from
+// the mapped address for this construct. So, any changes to p within the
+// region will not be visible after the construct.
+#pragma omp target map(p[0]) map(to : p_mappedptr, x0_mappedptr, x0_hostaddr)
+ {
+ printf("%d %d %d %d\n", p[0], p_mappedptr == &p, x0_mappedptr == &p[0],
+ x0_hostaddr == &p[0]);
+ // CHECK: 111 0 1 0
+ p++;
+ }
+
+// For the remaining constructs, p is not firstprivate, so its address will
+// be the same as the mapped address, and changes to p will be visible to any
+// subsequent regions.
+#pragma omp target map(to : p[0], p) \
+ map(to : p_mappedptr, x0_mappedptr, x0_hostaddr)
+ {
+ printf("%d %d %d %d\n", p[0], p_mappedptr == &p, x0_mappedptr == &p[0],
+ x0_hostaddr == &p[0]);
+ // EXPECTED: 111 1 1 0
+ // CHECK: 111 0 1 0
+ p++;
+ }
+
+#pragma omp target map(to : p, p[0]) \
+ map(to : p_mappedptr, x0_mappedptr, x0_hostaddr)
+ {
+ printf("%d %d %d %d\n", p[0], p_mappedptr == &p, x0_mappedptr == &p[-1],
+ x0_hostaddr == &p[-1]);
+ // EXPECTED: 222 1 1 0
+ // CHECK: 111 0 0 0
----------------
abhinavgaba wrote:
I kept the expected output here as a comment, instead of using that for CHECKs, so that we can track the current status of the compiler/runtime, instead of marking this as UNSUPPORTED/XFAIL. I can change that and mark these as XFAIL if that's preferable.
https://github.com/llvm/llvm-project/pull/146934
More information about the llvm-commits
mailing list