xref: /llvm-project/offload/test/offloading/fortran/target-map-pointer-target-scopes.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1*37234499Sagozillon! Offloading test checking interaction of pointer and target with target across
2*37234499Sagozillon! multiple scopes
388234488SEthan Luis McDonough! REQUIRES: flang, amdgpu
4330d8983SJohannes Doerfert
5330d8983SJohannes Doerfert! RUN: %libomptarget-compile-fortran-run-and-check-generic
6330d8983SJohannes Doerfertmodule test
7330d8983SJohannes Doerfert    contains
8330d8983SJohannes Doerfert  subroutine func_arg(arg_alloc)
9330d8983SJohannes Doerfert    integer,  pointer, intent (inout) :: arg_alloc(:)
10330d8983SJohannes Doerfert
11330d8983SJohannes Doerfert  !$omp target map(tofrom: arg_alloc)
12330d8983SJohannes Doerfert    do index = 1, 10
13330d8983SJohannes Doerfert      arg_alloc(index) = arg_alloc(index) + index
14330d8983SJohannes Doerfert    end do
15330d8983SJohannes Doerfert  !$omp end target
16330d8983SJohannes Doerfert
17330d8983SJohannes Doerfert    print *, arg_alloc
18330d8983SJohannes Doerfert  end subroutine func_arg
19330d8983SJohannes Doerfertend module
20330d8983SJohannes Doerfert
21330d8983SJohannes Doerfertsubroutine func
22330d8983SJohannes Doerfert   integer,  pointer :: local_alloc(:)
23330d8983SJohannes Doerfert   integer, target :: b(10)
24330d8983SJohannes Doerfert   local_alloc => b
25330d8983SJohannes Doerfert
26330d8983SJohannes Doerfert  !$omp target map(tofrom: local_alloc)
27330d8983SJohannes Doerfert    do index = 1, 10
28330d8983SJohannes Doerfert      local_alloc(index) = index
29330d8983SJohannes Doerfert    end do
30330d8983SJohannes Doerfert  !$omp end target
31330d8983SJohannes Doerfert
32330d8983SJohannes Doerfert    print *, local_alloc
33330d8983SJohannes Doerfert  end subroutine func
34330d8983SJohannes Doerfert
35330d8983SJohannes Doerfert
36330d8983SJohannes Doerfert  program main
37330d8983SJohannes Doerfert  use test
38330d8983SJohannes Doerfert  integer,  pointer :: map_ptr(:)
39330d8983SJohannes Doerfert  integer, target :: b(10)
40330d8983SJohannes Doerfert
41330d8983SJohannes Doerfert  map_ptr => b
42330d8983SJohannes Doerfert
43330d8983SJohannes Doerfert  !$omp target map(tofrom: map_ptr)
44330d8983SJohannes Doerfert    do index = 1, 10
45330d8983SJohannes Doerfert      map_ptr(index) = index
46330d8983SJohannes Doerfert    end do
47330d8983SJohannes Doerfert  !$omp end target
48330d8983SJohannes Doerfert
49330d8983SJohannes Doerfert   call func
50330d8983SJohannes Doerfert
51330d8983SJohannes Doerfert   print *, map_ptr
52330d8983SJohannes Doerfert
53330d8983SJohannes Doerfert   call func_arg(map_ptr)
54330d8983SJohannes Doerfertend program
55330d8983SJohannes Doerfert
56330d8983SJohannes Doerfert!CHECK: 1 2 3 4 5 6 7 8 9 10
57330d8983SJohannes Doerfert!CHECK: 1 2 3 4 5 6 7 8 9 10
58330d8983SJohannes Doerfert!CHECK: 2 4 6 8 10 12 14 16 18 20
59