We finally got our buildbot added (to staging, at least) so we want to start running L0 tests in CI. We need `check-offload` to pass though, so XFAIL everything failing. There's a couple `UNSUPPORTED` as well, those are for sporadic fails. Also make set the `gpu` and `intelgpu` LIT variables when testing the `spirv64-intel` triple. We have no DeviceRTL yet so basically everything fails, but we manage to get ``` Total Discovered Tests: 432 Unsupported : 169 (39.12%) Passed : 67 (15.51%) Expectedly Failed: 196 (45.37%) ``` We still don't build the level zero plugin by default and these tests don't run unless the plugin was built, so this has no effect on most builds. --------- Signed-off-by: Nick Sarnie <nick.sarnie@intel.com>
52 lines
1.2 KiB
C++
52 lines
1.2 KiB
C++
// RUN: %libomptarget-compileopt-generic -fno-exceptions
|
|
// RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic
|
|
// XFAIL: intelgpu
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
|
|
// CHECK: before: [[V1:111]] [[V2:222]] [[PX:0x[^ ]+]] [[PY:0x[^ ]+]]
|
|
// CHECK: lambda: [[V1]] [[V2]] [[PX_TGT:0x[^ ]+]] 0x{{.*}}
|
|
// CHECK: tgt : [[V2]] [[PX_TGT]] 1
|
|
// CHECK: out : [[V2]] [[V2]] [[PX]] [[PY]]
|
|
|
|
#pragma omp begin declare target
|
|
int a = -1, *c;
|
|
long b = -1;
|
|
const long *d;
|
|
int e = -1, *f, g = -1;
|
|
#pragma omp end declare target
|
|
|
|
int main() {
|
|
int x[10];
|
|
long y[8];
|
|
x[1] = 111;
|
|
y[1] = 222;
|
|
|
|
auto lambda = [&x, y]() {
|
|
a = x[1];
|
|
b = y[1];
|
|
c = &x[0];
|
|
d = &y[0];
|
|
printf("lambda: %d %ld %p %p\n", x[1], y[1], &x[0], &y[0]);
|
|
x[1] = y[1];
|
|
};
|
|
printf("before: %d %ld %p %p\n", x[1], y[1], &x[0], &y[0]);
|
|
|
|
intptr_t xp = (intptr_t)&x[0];
|
|
#pragma omp target firstprivate(xp)
|
|
{
|
|
lambda();
|
|
e = x[1];
|
|
f = &x[0];
|
|
g = (&x[0] != (int *)xp);
|
|
printf("tgt : %d %p %d\n", x[1], &x[0], (&x[0] != (int *)xp));
|
|
}
|
|
#pragma omp target update from(a, b, c, d, e, f, g)
|
|
printf("lambda: %d %ld %p %p\n", a, b, c, d);
|
|
printf("tgt : %d %p %d\n", e, f, g);
|
|
printf("out : %d %ld %p %p\n", x[1], y[1], &x[0], &y[0]);
|
|
|
|
return 0;
|
|
}
|