1! { dg-additional-options "-fdump-tree-original" }
2
3subroutine bar
4integer, target :: x, x2
5integer, allocatable, target :: y(:,:), z(:,:)
6x = 7
7!$omp target enter data map(to:x, x2)
8
9x = 8
10!$omp target data map(always, to: x)
11call foo(x)
12!$omp end target data
13
14!$omp target data use_device_ptr(x)
15call foo2(x)
16!$omp end target data
17
18!$omp target data use_device_addr(x2)
19call foo2(x)
20!$omp end target data
21!$omp target exit data map(release:x)
22
23!$omp target data map(y) use_device_addr(y)
24call foo3(y)
25!$omp end target data
26
27!$omp target data map(z) use_device_ptr(z)
28call foo3(z)
29!$omp end target data
30end
31
32! { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(to:x\\)" 1 "original" } }
33! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(always,to:x\\)" 1 "original" } }
34! { dg-final { scan-tree-dump-times "#pragma omp target data use_device_addr\\(x\\)" 1 "original" } }
35! { dg-final { scan-tree-dump-times "#pragma omp target data use_device_addr\\(x2\\)" 1 "original" } }
36! { dg-final { scan-tree-dump-times "#pragma omp target exit data map\\(release:x\\)" 1 "original" } }
37! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) y.data \\\[len: .*\\) map\\(to:y \\\[pointer set, len: .*\\) map\\(alloc:.*y.data \\\[pointer assign, bias: 0\\\]\\) use_device_addr\\(y\\)" 1 "original" } }
38! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:\\*\\(integer\\(kind=4\\)\\\[0:\\\] \\*\\) z.data \\\[len: .*\\) map\\(to:z \\\[pointer set, len: .*\\) map\\(alloc:.*z.data \\\[pointer assign, bias: 0\\\]\\) use_device_addr\\(z\\)" 1 "original" } }
39