xref: /llvm-project/offload/test/offloading/fortran/target_map_common_block.f90 (revision 8823448807f3b1a1362d1417e062d763734e02f5)
1330d8983SJohannes Doerfert! Basic offloading test with a target region
2*88234488SEthan Luis McDonough! REQUIRES: flang, amdgpu
3330d8983SJohannes Doerfert! RUN: %libomptarget-compile-fortran-run-and-check-generic
4330d8983SJohannes Doerfert
5330d8983SJohannes Doerfert! Testing simple variables in common block.
6330d8983SJohannes Doerfertprogram main
7330d8983SJohannes Doerfert  call check_device
8330d8983SJohannes Doerfert  call commonblock_simple_with_implicit_type_var
9330d8983SJohannes Doerfert  call commonblock_simple_with_integer
10330d8983SJohannes Doerfert  call commonblock_simple_with_real
11330d8983SJohannes Doerfert  call commonblock_simple_to_from
12330d8983SJohannes Doerfert  call set_commonblock_named
13330d8983SJohannes Doerfert  call use_commonblock_named
14330d8983SJohannes Doerfertend program main
15330d8983SJohannes Doerfert
16330d8983SJohannes Doerfert!-----
17330d8983SJohannes Doerfert
18330d8983SJohannes Doerfertsubroutine check_device
19330d8983SJohannes Doerfert  use omp_lib
20330d8983SJohannes Doerfert  integer :: devices(2)
21330d8983SJohannes Doerfert  devices(1) = omp_get_device_num()
22330d8983SJohannes Doerfert  !$omp target map(tofrom:devices)
23330d8983SJohannes Doerfert    devices(2) = omp_get_device_num()
24330d8983SJohannes Doerfert  !$omp end target
25330d8983SJohannes Doerfert  print *, omp_get_num_devices()
26330d8983SJohannes Doerfert  !CHECK: [[ND:[0-9]+]]
27330d8983SJohannes Doerfert  print *, omp_get_default_device()
28330d8983SJohannes Doerfert  !CHECK: [[DD:[0-9]+]]
29330d8983SJohannes Doerfert  !CHECK: devices: [[ND]] [[DD]]
30330d8983SJohannes Doerfert  print *, "devices: ", devices
31330d8983SJohannes Doerfertend subroutine check_device
32330d8983SJohannes Doerfert
33330d8983SJohannes Doerfert!-----
34330d8983SJohannes Doerfert
35330d8983SJohannes Doerfertsubroutine commonblock_simple_with_implicit_type_var
36330d8983SJohannes Doerfert  use omp_lib
37330d8983SJohannes Doerfert  common var1
38330d8983SJohannes Doerfert  var1 = 10
39330d8983SJohannes Doerfert  print *, "var1 before target = ", var1
40330d8983SJohannes Doerfert  !$omp target map(tofrom:var1)
41330d8983SJohannes Doerfert    var1 = 20
42330d8983SJohannes Doerfert  !$omp end target
43330d8983SJohannes Doerfert  print *, "var1 after target = ", var1
44330d8983SJohannes Doerfertend subroutine
45330d8983SJohannes Doerfert
46330d8983SJohannes Doerfert! CHECK: var1 before target = 10
47330d8983SJohannes Doerfert! CHECK: var1 after target = 20
48330d8983SJohannes Doerfert
49330d8983SJohannes Doerfert! -----
50330d8983SJohannes Doerfert
51330d8983SJohannes Doerfertsubroutine commonblock_simple_with_integer
52330d8983SJohannes Doerfert  use omp_lib
53330d8983SJohannes Doerfert  integer :: var2
54330d8983SJohannes Doerfert  common var2
55330d8983SJohannes Doerfert  var2 = 10
56330d8983SJohannes Doerfert  print *, "var2 before target = ", var2
57330d8983SJohannes Doerfert  !$omp target map(tofrom:var2)
58330d8983SJohannes Doerfert    var2 = 20
59330d8983SJohannes Doerfert  !$omp end target
60330d8983SJohannes Doerfert  print *, "var2 after target = ", var2
61330d8983SJohannes Doerfertend subroutine
62330d8983SJohannes Doerfert
63330d8983SJohannes Doerfert! CHECK: var2 before target = 10
64330d8983SJohannes Doerfert! CHECK: var2 after target = 20
65330d8983SJohannes Doerfert
66330d8983SJohannes Doerfert! -----
67330d8983SJohannes Doerfert
68330d8983SJohannes Doerfertsubroutine commonblock_simple_with_real
69330d8983SJohannes Doerfert  use omp_lib
70330d8983SJohannes Doerfert  real :: var3
71330d8983SJohannes Doerfert  common var3
72330d8983SJohannes Doerfert  var3 = 12.5
73330d8983SJohannes Doerfert  print *, "var3 before target = ", var3
74330d8983SJohannes Doerfert  !$omp target map(tofrom:var3)
75330d8983SJohannes Doerfert    var3 = 14.5
76330d8983SJohannes Doerfert  !$omp end target
77330d8983SJohannes Doerfert  print *, "var3 after target = ", var3
78330d8983SJohannes Doerfertend subroutine
79330d8983SJohannes Doerfert
80330d8983SJohannes Doerfert! CHECK: var3 before target = 12.5
81330d8983SJohannes Doerfert! CHECK: var3 after target = 14.5
82330d8983SJohannes Doerfert
83330d8983SJohannes Doerfert! -----
84330d8983SJohannes Doerfert
85330d8983SJohannes Doerfertsubroutine commonblock_simple_to_from
86330d8983SJohannes Doerfert  use omp_lib
87330d8983SJohannes Doerfert  integer :: var4, tmp
88330d8983SJohannes Doerfert  common var4
89330d8983SJohannes Doerfert  var4 = 10
90330d8983SJohannes Doerfert  tmp = 20
91330d8983SJohannes Doerfert  !$omp target map(to:var4) map(from:tmp)
92330d8983SJohannes Doerfert    tmp = var4
93330d8983SJohannes Doerfert    var4 = 20
94330d8983SJohannes Doerfert  !$omp end target
95330d8983SJohannes Doerfert  print *, "var4 after target = ", var4
96330d8983SJohannes Doerfert  print *, "tmp after target = ", tmp
97330d8983SJohannes Doerfertend subroutine
98330d8983SJohannes Doerfert
99330d8983SJohannes Doerfert! CHECK: var4 after target = 10
100330d8983SJohannes Doerfert! CHECK: tmp after target = 10
101330d8983SJohannes Doerfert
102330d8983SJohannes Doerfert! -----
103330d8983SJohannes Doerfert
104330d8983SJohannes Doerfertsubroutine set_commonblock_named
105330d8983SJohannes Doerfert  integer :: var6
106330d8983SJohannes Doerfert  common /my_common_block/ var6
107330d8983SJohannes Doerfert  var6 = 20
108330d8983SJohannes Doerfertend subroutine
109330d8983SJohannes Doerfert
110330d8983SJohannes Doerfertsubroutine use_commonblock_named
111330d8983SJohannes Doerfert  integer :: var6
112330d8983SJohannes Doerfert  common /my_common_block/ var6
113330d8983SJohannes Doerfert  print *, "var6 before target = ", var6
114330d8983SJohannes Doerfert  !$omp target map(tofrom: var6)
115330d8983SJohannes Doerfert    var6 = 30
116330d8983SJohannes Doerfert  !$omp end target
117330d8983SJohannes Doerfert  print *, "var6 after target = ", var6
118330d8983SJohannes Doerfertend subroutine
119330d8983SJohannes Doerfert
120330d8983SJohannes Doerfert! CHECK: var6 before target = 20
121330d8983SJohannes Doerfert! CHECK: var6 after target = 30
122