Add support for ARMv8-R architecture
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / examples-4 / target_data-7.f90
blob8fc5832ee86aee611d117e2c96af2fcd648d24cf
1 ! { dg-do run }
2 ! { dg-require-effective-target offload_device_nonshared_as }
4 module e_51_7_mod
5 integer, parameter :: THRESHOLD = 500
6 contains
7 subroutine init (v1, v2, N)
8 integer :: i, N
9 real :: v1(N), v2(N)
10 do i = 1, N
11 v1(i) = i + 2.0
12 v2(i) = i - 3.0
13 end do
14 end subroutine
16 subroutine check (p, N)
17 integer :: i, N
18 real, parameter :: EPS = 0.00001
19 real :: diff, p(N)
20 do i = 1, N
21 diff = p(i) - (i + 2.0) * (i - 3.0)
22 if (diff > EPS .or. -diff > EPS) call abort
23 end do
24 end subroutine
26 subroutine vec_mult (N)
27 use omp_lib, only: omp_is_initial_device
28 real :: p(N), v1(N), v2(N)
29 integer :: i, N
30 call init (v1, v2, N)
31 !$omp target data if(N > THRESHOLD) map(to: v1, v2) map(from: p)
32 !$omp target
33 if (omp_is_initial_device ()) call abort
34 !$omp parallel do
35 do i = 1, N
36 p(i) = v1(i) * v2(i)
37 end do
38 !$omp end target
39 !$omp end target data
40 call check (p, N)
41 end subroutine
42 end module
44 program e_51_7
45 use e_51_7_mod, only : vec_mult
46 integer :: n
47 n = 1000
48 call vec_mult (n)
49 end program