| ! { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } |
| |
| implicit none |
| !$omp requires reverse_offload |
| integer :: A(50), A2(50) |
| integer :: i, error |
| logical :: shared_mem |
| |
| error = 0 |
| shared_mem = .false. |
| A = [(i, i=1,50)] |
| A2 = [(i, i=1,50)] |
| |
| !$omp target map(to: shared_mem) |
| shared_mem = .true. |
| !$omp end target |
| |
| !$omp target map(to: A(20:40), A2(20:40)) map(from: error) |
| block |
| integer :: B(10), C(10) |
| B = 99 |
| C = 88 |
| A(20:40) = -A(20:40) |
| A2(20:40) = -A2(20:40) |
| |
| !$omp target device (ancestor:1) & |
| !$omp& map(to: A(25:35)) map(always, to: A2(25:35)) & |
| !$omp& map(from:B(4:8)) map(tofrom:C(4:8)) |
| if (shared_mem) then |
| if (any (A(25:35) /= [(-i,i=25,35)])) stop 20 |
| else |
| if (any (A(25:35) /= [( i,i=25,35)])) stop 21 |
| end if |
| if (any (A2(25:35) /= [(-i,i=25,35)])) stop 22 |
| if (any (C(4:8) /= 88)) stop 23 |
| |
| A(25:35) = -A(25:35)*10 |
| A2(25:35) = -A2(25:35)*10 |
| B(4:8) = [4,5,6,7,8] |
| C(4:8) = [-4,-5,-6,-7,-8] |
| !$omp end target |
| |
| if (any (B(1:3) /= 99) .or. any (B(9:10) /= 99)) then |
| error = 30 |
| elseif (any (B(4:8) /= [4,5,6,7,8])) then |
| error = 31 |
| elseif (any (C(1:3) /= 88) .or. any (C(9:10) /= 88)) then |
| error = 32 |
| elseif (any (C(4:8) /= [-4,-5,-6,-7,-8])) then |
| error = 33 |
| else |
| error = 0 |
| endif |
| end block |
| |
| if (error /= 0) stop error |
| |
| if (shared_mem) then |
| if (any (A(1:19) /= [( i, i=1,19)])) stop 1 |
| if (any (A(20:24) /= [(-i, i=20,24)])) stop 2 |
| if (any (A(36:40) /= [(-i, i=36,40)])) stop 3 |
| if (any (A(41:50) /= [( i, i=41,50)])) stop 4 |
| |
| if (any (A(25:35) /= [( 10*i, i=25,35)])) stop 5 |
| else |
| if (any (A(1:24) /= [( i, i=1,24)])) stop 6 |
| if (any (A(36:50) /= [( i, i=36,50)])) stop 7 |
| |
| if (any (A(25:35) /= [(-10*i, i=25,35)])) stop 8 |
| end if |
| if (any (A2(25:35) /= [( 10*i, i=25,35)])) stop 9 |
| end |