xref: /llvm-project/offload/test/offloading/fortran/target-map-mix-imp-exp-common-block-members.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of mapping all the members of a common
2! block with a mix of explicit and implicit mapping 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
17    call modify_1
18
19    !$omp target map(tofrom: var2)
20      var2 = var2 + var3
21    !$omp end target
22
23    call modify_2
24
25    print *, var1
26    print *, var2
27    print *, var3
28end program
29
30subroutine modify_1
31    common /var_common/ var1, var2, var3
32    integer :: var1, var2, var3
33
34  !$omp target map(tofrom: /var_common/)
35    var1 = 10
36    var2 = 20
37    var3 = 30
38  !$omp end target
39end
40
41subroutine modify_2
42    common /var_common/ var1, var2, var3
43    integer :: var1, var2, var3
44    integer :: copy
45
46  !$omp target map(tofrom: copy)
47    copy =  var2 + var3
48  !$omp end target
49
50    print *, copy
51end
52
53!CHECK: 80
54!CHECK: 10
55!CHECK: 50
56!CHECK: 30
57