xref: /llvm-project/offload/test/offloading/fortran/target-map-declare-target-link-common-block.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of mapping a declare target link common
2! block with device_type any to a target region
3! REQUIRES: flang, amdgcn-amd-amdhsa
4! UNSUPPORTED: nvptx64-nvidia-cuda
5! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
6! UNSUPPORTED: aarch64-unknown-linux-gnu
7! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
8! UNSUPPORTED: x86_64-unknown-linux-gnu
9! UNSUPPORTED: x86_64-unknown-linux-gnu-LTO
10
11! RUN: %libomptarget-compile-fortran-run-and-check-generic
12program main
13    implicit none
14    common /var_common/ var1, var2, var3
15    integer :: var1, var2, var3
16    !$omp declare target link(/var_common/)
17
18    call modify_1
19
20  !$omp target map(tofrom: var2)
21    var2 = var2 + var3
22  !$omp end target
23
24  call modify_2
25  call modify_3
26
27  print *, var1
28  print *, var2
29  print *, var3
30end program
31
32subroutine modify_1
33  common /var_common/ var1, var2, var3
34  integer :: var1, var2, var3
35
36!$omp target map(tofrom: /var_common/)
37  var1 = 10
38  var2 = 20
39  var3 = 30
40!$omp end target
41
42end
43
44subroutine modify_2
45  common /var_common/ var1, var2, var3
46  integer :: var1, var2, var3
47  integer :: copy
48
49!$omp target map(tofrom: copy)
50  copy =  var2 + var3
51!$omp end target
52
53  print *, copy
54end
55
56subroutine modify_3
57  common /var_common/ var1, var2, var3
58  integer :: var1, var2, var3
59
60!$omp target map(tofrom: /var_common/)
61  var1 = var1 + var1
62  var2 = var2 + var2
63  var3 = var3 + var3
64!$omp end target
65end
66
67!CHECK: 80
68!CHECK: 20
69!CHECK: 100
70!CHECK: 60