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.
111 lines
2.2 KiB
C++
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);
|
|
}
|