| ! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" } |
| |
| subroutine f |
| implicit none |
| type t |
| integer :: i |
| end type t |
| integer, target :: scalar |
| integer, target :: array(5) |
| integer, pointer :: ptr1, ptr2(:) |
| integer, allocatable :: alloc1, alloc2(:) |
| type(t) :: agg1, agg2(2) |
| |
| scalar = 1 |
| array = [1,2,3,4,5] |
| ptr1 => scalar |
| ptr2 => array |
| alloc1 = 5 |
| alloc2 = [1,2] |
| agg1%i = 1 |
| agg2(:)%i = [1,2] |
| |
| ! firstprivate + unspecified modifer. |
| !$omp target defaultmap(firstprivate) |
| block |
| scalar = 1; |
| array(1) = 2; |
| if (associated(ptr1)) & |
| agg1%i = 3; |
| if (associated(ptr2)) & |
| agg2(1)%i = 3; |
| if (allocated(alloc1)) & |
| alloc2(1) = 0 |
| end block |
| |
| ! equivalent: firstprivate + ALL modifer. |
| !$omp target defaultmap(firstprivate : all) |
| block |
| scalar = 1; |
| array(1) = 2; |
| if (associated(ptr1)) & |
| agg1%i = 3; |
| if (associated(ptr2)) & |
| agg2(1)%i = 3; |
| if (allocated(alloc1)) & |
| alloc2(1) = 0 |
| end block |
| |
| ! tofrom + ALL modifer. |
| !$omp target defaultmap(tofrom : all) |
| block |
| scalar = 1; |
| array(1) = 2; |
| if (associated(ptr1)) & |
| agg1%i = 3; |
| if (associated(ptr2)) & |
| agg2(1)%i = 3; |
| if (allocated(alloc1)) & |
| alloc2(1) = 0 |
| end block |
| end subroutine |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp target defaultmap\\(firstprivate\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp target defaultmap\\(firstprivate:all\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "#pragma omp target defaultmap\\(tofrom:all\\)" 1 "original" } } |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp target.* defaultmap\\(firstprivate\\) firstprivate\\(scalar\\) firstprivate\\(ptr2\\) firstprivate\\(ptr1\\) firstprivate\\(array\\) firstprivate\\(alloc2\\) firstprivate\\(alloc1\\) firstprivate\\(agg2\\) firstprivate\\(agg1\\)" 1 "gimple" } } |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp target.* defaultmap\\(firstprivate:all\\) firstprivate\\(scalar\\) firstprivate\\(ptr2\\) firstprivate\\(ptr1\\) firstprivate\\(array\\) firstprivate\\(alloc2\\) firstprivate\\(alloc1\\) firstprivate\\(agg2\\) firstprivate\\(agg1\\)" 1 "gimple" } } |
| |
| ! { dg-final { scan-tree-dump-times "#pragma omp target.* defaultmap\\(tofrom:all\\) map\\(tofrom:scalar \\\[len: .\\\] \\\[runtime_implicit\\\]\\) map\\(tofrom:.*ptr2.data \\\[len: .*\\\] \\\[runtime_implicit\\\]\\) map\\(to:ptr2 \\\[pointer set, len: ..\\\]\\) map\\(always_pointer:.*ptr2.data \\\[pointer assign, bias: 0\\\]\\) map\\(tofrom:\\*ptr1 \\\[len: .\\\] \\\[runtime_implicit\\\]\\) map\\(alloc:ptr1 \\\[pointer assign, bias: 0\\\]\\) map\\(tofrom:array \\\[len: ..\\\] \\\[runtime_implicit\\\]\\) map\\(tofrom:.*alloc2.data \\\[len: .*\\\] \\\[runtime_implicit\\\]\\) map\\(to:alloc2 \\\[pointer set, len: ..\\\]\\) map\\(alloc:.*alloc2.data \\\[pointer assign, bias: 0\\\]\\) map\\(tofrom:\\*alloc1 \\\[len: .\\\] \\\[runtime_implicit\\\]\\) map\\(alloc:alloc1 \\\[pointer assign, bias: 0\\\]\\) map\\(tofrom:agg2 \\\[len: .\\\] \\\[runtime_implicit\\\]\\) map\\(tofrom:agg1 \\\[len: .\\\] \\\[runtime_implicit\\\]\\)" 1 "gimple" } } |