Files
clang-p2996/openmp/libomptarget/test/mapping/target_derefence_array_pointrs.cpp
Joseph Huber ab02372c23 [OpenMP] Fix or disable NVPTX tests failing currently (#77844)
Summary:
This patch is an attempt to get a clean run of `check-openmp` running on
an NVPTX machine. I simply took the lists of tests that failed on my
`sm_89` machine and disabled them or fixed them. A lot of these tests
are disabled on AMDGPU already, so it makes sense that NVPTX fails. The
others are simply problems with NVPTX optimized debugging which will
need to be fixed. I opened an issue on one of them.
2024-01-11 19:17:08 -06:00

111 lines
2.2 KiB
C++

// RUN: %libomptarget-compilexx-generic -fopenmp-version=51
// RUN: %libomptarget-run-generic 2>&1 \
// RUN: | %fcheck-generic
// FIXME: This is currently broken on all GPU targets
// UNSUPPORTED: amdgcn-amd-amdhsa
// UNSUPPORTED: nvptx64-nvidia-cuda
// UNSUPPORTED: nvptx64-nvidia-cuda-LTO
#include <stdio.h>
#include <stdlib.h>
void foo(int **t1d) {
int ***t2d = &t1d;
int ****t3d = &t2d;
*t1d = (int *)malloc(3 * sizeof(int));
int j, a = 0, b = 0;
for (j = 0; j < 3; j++)
(*t1d)[j] = 0;
#pragma omp target map(tofrom : (*t1d)[0 : 3])
{ (*t1d)[1] = 1; }
// CHECK: 1
printf("%d\n", (*t1d)[1]);
#pragma omp target map(tofrom : (**t2d)[0 : 3])
{ (**t2d)[1] = 2; }
// CHECK: 2
printf("%d\n", (**t2d)[1]);
#pragma omp target map(tofrom : (***t3d)[0 : 3])
{ (***t3d)[1] = 3; }
// CHECK: 3
printf("%d\n", (***t3d)[1]);
#pragma omp target map(tofrom : (**t1d))
{ (*t1d)[0] = 4; }
// CHECK: 4
printf("%d\n", (*t1d)[0]);
#pragma omp target map(tofrom : (*(*(t1d + a) + b)))
{ *(*(t1d + a) + b) = 5; }
// CHECK: 5
printf("%d\n", *(*(t1d + a) + b));
}
typedef int(T)[3];
void bar() {
T **a;
int b[2][3];
int(*p)[3] = b;
a = &p;
for (int i = 0; i < 3; i++) {
(**a)[1] = i;
}
#pragma omp target map((**a)[ : 3])
{
(**a)[1] = 6;
// CHECK: 6
printf("%d\n", (**a)[1]);
}
}
struct SSA {
int i;
SSA *sa;
SSA() {
i = 1;
sa = this;
}
};
void zoo(int **f, SSA *sa) {
int *t = *f;
f = (int **)malloc(sa->i * 4 * sizeof(int));
t = (int *)malloc(sa->i * sizeof(int));
*(f + sa->i + 1) = t;
*(sa->sa->i + *(f + sa->i + 1)) = 4;
printf("%d\n", *(sa->sa->i + *(1 + sa->i + f)));
#pragma omp target map(sa, *(sa->sa->i + *(1 + sa->i + f)))
{ *(sa->sa->i + *(1 + sa->i + f)) = 7; }
// CHECK: 7
printf("%d\n", *(sa->sa->i + *(1 + sa->i + f)));
}
void xoo() {
int *x = 0;
SSA *sa = new SSA();
zoo(&x, sa);
}
void yoo(int **x) {
*x = (int *)malloc(2 * sizeof(int));
#pragma omp target map(**x)
{
**x = 8;
// CHECK: 8
printf("%d\n", **x);
}
#pragma omp target map(*(*x + 1))
{
*(*x + 1) = 9;
// CHECK: 9
printf("%d\n", *(*x + 1));
}
}
int main() {
int *data = 0;
foo(&data);
bar();
xoo();
yoo(&data);
}