xref: /llvm-project/offload/test/offloading/fortran/target-map-large-nested-dtype-multi-member.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of an explicit member map a large nested
2! derived type
3! REQUIRES: flang, amdgpu
4
5! RUN: %libomptarget-compile-fortran-run-and-check-generic
6program main
7    type :: bottom_layer1
8    real(4) :: i4
9    real(4) :: j4
10    real(4) :: k4
11    end type bottom_layer1
12
13    type :: bottom_layer2
14      integer(4) :: i3
15      integer(4) :: j3
16      integer(4) :: k3
17    end type bottom_layer2
18
19    type :: middle_layer
20     real(4) :: array_i2(10)
21     real(4) :: i2
22     real(4) :: array_j2(10)
23     type(bottom_layer1) :: nest
24     type(bottom_layer2) :: nest2
25    end type middle_layer
26
27    type :: top_layer
28    real(4) :: i
29    integer(4) :: array_i(10)
30    real(4) :: j
31    integer, allocatable :: array_j(:)
32    integer(4) :: k
33    type(middle_layer) :: nested
34    end type top_layer
35
36    type(top_layer) :: top_dtype
37
38    top_dtype%nested%nest%j4 = 12
39!$omp target map(tofrom: top_dtype%nested%nest%j4, top_dtype%nested%nest%i4, top_dtype%nested%nest%k4) &
40!$omp map(tofrom: top_dtype%array_i, top_dtype%nested%nest2%i3, top_dtype%nested%i2, top_dtype%nested%nest2%k3, top_dtype%nested%nest2%j3)
41    top_dtype%nested%nest%i4 = 10
42    top_dtype%nested%nest%j4 = 12 + top_dtype%nested%nest%j4
43    top_dtype%nested%nest%k4 = 54
44
45    top_dtype%nested%nest2%i3 = 20
46    top_dtype%nested%nest2%j3 = 40
47    top_dtype%nested%nest2%k3 = 60
48
49    top_dtype%nested%i2 = 200
50
51      do i = 1, 10
52        top_dtype%array_i(i) = i
53      end do
54!$omp end target
55
56  print *, top_dtype%nested%nest%i4
57  print *, top_dtype%nested%nest%j4
58  print *, top_dtype%nested%nest%k4
59
60  print *, top_dtype%nested%nest2%i3
61  print *, top_dtype%nested%nest2%j3
62  print *, top_dtype%nested%nest2%k3
63
64  print *, top_dtype%nested%i2
65
66  print *, top_dtype%array_i
67end program main
68
69!CHECK: 10.
70!CHECK: 24.
71!CHECK: 54.
72!CHECK: 20
73!CHECK: 40
74!CHECK: 60
75!CHECK: 200.
76!CHECK: 1 2 3 4 5 6 7 8 9 10
77