blob: 39e3ab1141996afe5a802b3c4bd6da6973ac4cf4 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-additional-options "-fdump-tree-original" } */
/* Check mapper binding clauses. */
struct Y {
int z;
};
struct Z {
int z;
};
#pragma omp declare mapper (struct Y y) map(tofrom: y)
#pragma omp declare mapper (struct Z z) map(tofrom: z)
int foo (void)
{
struct Y yy;
struct Z zz;
int dummy;
#pragma omp target data map(dummy)
{
#pragma omp target
{
yy.z++;
zz.z++;
}
yy.z++;
}
return yy.z;
}
struct P
{
struct Z *zp;
};
int bar (void)
{
struct Y yy;
struct Z zz;
struct P pp;
struct Z t;
int dummy;
pp.zp = &t;
#pragma omp declare mapper (struct Y y) map(tofrom: y.z)
#pragma omp declare mapper (struct Z z) map(tofrom: z.z)
#pragma omp target data map(dummy)
{
#pragma omp target
{
yy.z++;
zz.z++;
}
yy.z++;
}
#pragma omp declare mapper(struct P x) map(to:x.zp) map(tofrom:*x.zp)
#pragma omp target
{
zz = *pp.zp;
}
return zz.z;
}
/* { dg-final { scan-tree-dump-times {mapper_binding\(struct Y,omp declare mapper ~1Y\) mapper_binding\(struct Z,omp declare mapper ~1Z\)} 2 "original" { target c++ } } } */
/* { dg-final { scan-tree-dump {mapper_binding\(struct Z,omp declare mapper ~1Z\) mapper_binding\(struct P,omp declare mapper ~1P\)} "original" { target c++ } } } */
/* { dg-final { scan-tree-dump {mapper_binding\(struct Z,#pragma omp declare mapper \(struct Z z\) map\(tofrom:z\)\) mapper_binding\(struct Y,#pragma omp declare mapper \(struct Y y\) map\(tofrom:y\)\)} "original" { target c } } } */
/* { dg-final { scan-tree-dump {mapper_binding\(struct Z,#pragma omp declare mapper \(struct Z z\) map\(tofrom:z\.z\)\) mapper_binding\(struct Y,#pragma omp declare mapper \(struct Y y\) map\(tofrom:y\.z\)\)} "original" { target c } } } */
/* { dg-final { scan-tree-dump {mapper_binding\(struct P,#pragma omp declare mapper \(struct P x\) map\(tofrom:\(x\.zp\)\[0:1\]\) map\(to:x.zp\)\) mapper_binding\(struct Z,#pragma omp declare mapper \(struct Z z\) map\(tofrom:z\.z\)\)} "original" { target c } } } */