xref: /llvm-project/offload/test/offloading/fortran/target-map-mix-imp-exp-common-block-members.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1*37234499Sagozillon! Offloading test checking interaction of mapping all the members of a common
2*37234499Sagozillon! block with a mix of explicit and implicit mapping to a target region
3aec735cfSagozillon! REQUIRES: flang, amdgcn-amd-amdhsa
4aec735cfSagozillon! UNSUPPORTED: nvptx64-nvidia-cuda
5aec735cfSagozillon! UNSUPPORTED: nvptx64-nvidia-cuda-LTO
6aec735cfSagozillon! UNSUPPORTED: aarch64-unknown-linux-gnu
7aec735cfSagozillon! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO
81a0cf245SJan Patrick Lehr! UNSUPPORTED: x86_64-unknown-linux-gnu
91a0cf245SJan Patrick Lehr! UNSUPPORTED: x86_64-unknown-linux-gnu-LTO
10aec735cfSagozillon
11aec735cfSagozillon! RUN: %libomptarget-compile-fortran-run-and-check-generic
12aec735cfSagozillonprogram main
13aec735cfSagozillon    implicit none
14aec735cfSagozillon    common /var_common/ var1, var2, var3
15aec735cfSagozillon    integer :: var1, var2, var3
16aec735cfSagozillon
17aec735cfSagozillon    call modify_1
18aec735cfSagozillon
19aec735cfSagozillon    !$omp target map(tofrom: var2)
20aec735cfSagozillon      var2 = var2 + var3
21aec735cfSagozillon    !$omp end target
22aec735cfSagozillon
23aec735cfSagozillon    call modify_2
24aec735cfSagozillon
25aec735cfSagozillon    print *, var1
26aec735cfSagozillon    print *, var2
27aec735cfSagozillon    print *, var3
28aec735cfSagozillonend program
29aec735cfSagozillon
30aec735cfSagozillonsubroutine modify_1
31aec735cfSagozillon    common /var_common/ var1, var2, var3
32aec735cfSagozillon    integer :: var1, var2, var3
33aec735cfSagozillon
34aec735cfSagozillon  !$omp target map(tofrom: /var_common/)
35aec735cfSagozillon    var1 = 10
36aec735cfSagozillon    var2 = 20
37aec735cfSagozillon    var3 = 30
38aec735cfSagozillon  !$omp end target
39aec735cfSagozillonend
40aec735cfSagozillon
41aec735cfSagozillonsubroutine modify_2
42aec735cfSagozillon    common /var_common/ var1, var2, var3
43aec735cfSagozillon    integer :: var1, var2, var3
44aec735cfSagozillon    integer :: copy
45aec735cfSagozillon
46aec735cfSagozillon  !$omp target map(tofrom: copy)
47aec735cfSagozillon    copy =  var2 + var3
48aec735cfSagozillon  !$omp end target
49aec735cfSagozillon
50aec735cfSagozillon    print *, copy
51aec735cfSagozillonend
52aec735cfSagozillon
53aec735cfSagozillon!CHECK: 80
54aec735cfSagozillon!CHECK: 10
55aec735cfSagozillon!CHECK: 50
56aec735cfSagozillon!CHECK: 30
57