xref: /llvm-project/offload/test/offloading/fortran/target-map-declare-target-link-common-block.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1*37234499Sagozillon! Offloading test checking interaction of mapping a declare target link common
2*37234499Sagozillon! block with device_type any 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    !$omp declare target link(/var_common/)
17aec735cfSagozillon
18aec735cfSagozillon    call modify_1
19aec735cfSagozillon
20aec735cfSagozillon  !$omp target map(tofrom: var2)
21aec735cfSagozillon    var2 = var2 + var3
22aec735cfSagozillon  !$omp end target
23aec735cfSagozillon
24aec735cfSagozillon  call modify_2
25aec735cfSagozillon  call modify_3
26aec735cfSagozillon
27aec735cfSagozillon  print *, var1
28aec735cfSagozillon  print *, var2
29aec735cfSagozillon  print *, var3
30aec735cfSagozillonend program
31aec735cfSagozillon
32aec735cfSagozillonsubroutine modify_1
33aec735cfSagozillon  common /var_common/ var1, var2, var3
34aec735cfSagozillon  integer :: var1, var2, var3
35aec735cfSagozillon
36aec735cfSagozillon!$omp target map(tofrom: /var_common/)
37aec735cfSagozillon  var1 = 10
38aec735cfSagozillon  var2 = 20
39aec735cfSagozillon  var3 = 30
40aec735cfSagozillon!$omp end target
41aec735cfSagozillon
42aec735cfSagozillonend
43aec735cfSagozillon
44aec735cfSagozillonsubroutine modify_2
45aec735cfSagozillon  common /var_common/ var1, var2, var3
46aec735cfSagozillon  integer :: var1, var2, var3
47aec735cfSagozillon  integer :: copy
48aec735cfSagozillon
49aec735cfSagozillon!$omp target map(tofrom: copy)
50aec735cfSagozillon  copy =  var2 + var3
51aec735cfSagozillon!$omp end target
52aec735cfSagozillon
53aec735cfSagozillon  print *, copy
54aec735cfSagozillonend
55aec735cfSagozillon
56aec735cfSagozillonsubroutine modify_3
57aec735cfSagozillon  common /var_common/ var1, var2, var3
58aec735cfSagozillon  integer :: var1, var2, var3
59aec735cfSagozillon
60aec735cfSagozillon!$omp target map(tofrom: /var_common/)
61aec735cfSagozillon  var1 = var1 + var1
62aec735cfSagozillon  var2 = var2 + var2
63aec735cfSagozillon  var3 = var3 + var3
64aec735cfSagozillon!$omp end target
65aec735cfSagozillonend
66aec735cfSagozillon
67aec735cfSagozillon!CHECK: 80
68aec735cfSagozillon!CHECK: 20
69aec735cfSagozillon!CHECK: 100
70aec735cfSagozillon!CHECK: 60