| /* { 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 } } } */ |