diff options
Diffstat (limited to 'libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90')
-rw-r--r-- | libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90 | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90 b/libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90 new file mode 100644 index 00000000000..eb0206ccce1 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-fortran/lib-14.f90 @@ -0,0 +1,82 @@ +! Exercise the data movement runtime library functions on non-shared memory +! targets. + +! { dg-do run { target openacc_nvidia_accel_selected } } + +program main + use openacc + implicit none + + integer, parameter :: N = 256 + integer, allocatable :: h(:) + integer :: i + + allocate (h(N)) + + do i = 1, N + h(i) = i + end do + + call acc_present_or_copyin (h) + + if (acc_is_present (h) .neqv. .TRUE.) call abort + + call acc_copyout (h) + + if (acc_is_present (h) .neqv. .FALSE.) call abort + + do i = 1, N + if (h(i) /= i) call abort + end do + + do i = 1, N + h(i) = i + i + end do + + call acc_pcopyin (h, sizeof (h)) + + if (acc_is_present (h) .neqv. .TRUE.) call abort + + call acc_copyout (h) + + if (acc_is_present (h) .neqv. .FALSE.) call abort + + do i = 1, N + if (h(i) /= i + i) call abort + end do + + call acc_create (h) + + if (acc_is_present (h) .neqv. .TRUE.) call abort + + !$acc parallel loop + do i = 1, N + h(i) = i + end do + !$end acc parallel + + call acc_copyout (h) + + if (acc_is_present (h) .neqv. .FALSE.) call abort + + do i = 1, N + if (h(i) /= i) call abort + end do + + call acc_present_or_create (h, sizeof (h)) + + if (acc_is_present (h) .neqv. .TRUE.) call abort + + call acc_delete (h) + + if (acc_is_present (h) .neqv. .FALSE.) call abort + + call acc_pcreate (h) + + if (acc_is_present (h) .neqv. .TRUE.) call abort + + call acc_delete (h) + + if (acc_is_present (h) .neqv. .FALSE.) call abort + +end program |