xref: /llvm-project/offload/test/offloading/fortran/target-map-all-common-block-members.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of mapping all the members of a common
2! block 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: var1, var2, var3)
20    var3 = var3 * 10
21    var2 = var2 * 10
22    var1 = var1 * 10
23  !$omp end target
24
25  call modify_2
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!$omp target map(tofrom: var2, var1, var3)
36  var3 = var3 + 40
37  var2 = var2 + 20
38  var1 = var1 + 30
39!$omp end target
40end
41
42subroutine modify_2
43  common /var_common/ var1, var2, var3
44  integer :: var1, var2, var3
45!$omp target map(tofrom: var2, var3, var1)
46  var3 = var3 + 20
47  var1 = var1 + 10
48  var2 = var2 + 15
49!$omp end target
50end
51
52!CHECK: 310
53!CHECK: 215
54!CHECK: 420
55