Files
llvm-project/offload/test/mapping/target_map_for_member_data.cpp
Nick Sarnie 26b777444b [offload][lit] XFAIL all failing tests on the Level Zero plugin (#174804)
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>
2026-01-07 19:20:30 +00:00

100 lines
1.4 KiB
C++

// RUN: %libomptarget-compile-generic -fopenmp-version=51
// RUN: %libomptarget-run-generic 2>&1 \
// RUN: | %fcheck-generic
// XFAIL: intelgpu
extern "C" int printf(const char *, ...);
template <typename T> class A {
protected:
T X;
T Y;
public:
A(T x, T y) : X{x}, Y{y} {};
};
template <typename T> class B : public A<T> {
using A<T>::X;
using A<T>::Y;
public:
T res;
B(T x, T y) : A<T>(x, y), res{0} {};
void run(void) {
#pragma omp target map(res)
{ res = X + Y; }
}
};
class X {
protected:
int A;
public:
X(int a) : A{a} {};
};
class Y : public X {
using X::A;
protected:
int B;
public:
Y(int a, int b) : X(a), B{b} {};
};
class Z : public Y {
using X::A;
using Y::B;
public:
int res;
Z(int a, int b) : Y(a, b), res{0} {};
void run(void) {
#pragma omp target map(res)
{ res = A + B; }
}
};
struct descriptor {
int A;
int C;
};
class BASE {};
class C : public BASE {
public:
void bar(descriptor &d) {
auto Asize = 4;
auto Csize = 4;
#pragma omp target data map(from : d.C)
{
#pragma omp target teams firstprivate(Csize)
d.C = 1;
}
#pragma omp target map(from : d.A)
d.A = 3;
}
};
int main(int argc, char *argv[]) {
B<int> b(2, 3);
b.run();
// CHECK: 5
printf("b.res = %d \n", b.res);
Z c(2, 3);
c.run();
// CHECK: 5
printf("c.res = %d \n", c.res);
descriptor d;
C z;
z.bar(d);
// CHECK 1
printf("%d\n", d.C);
// CHECK 3
printf("%d\n", d.A);
}