view libgomp/testsuite/libgomp.oacc-fortran/non-scalar-data.f90 @ 120:f93fa5091070

fix conv1.c
author mir3636
date Thu, 08 Mar 2018 14:53:42 +0900
parents 04ced10e8804
children 84e7813d76e9
line wrap: on
line source

! Ensure that a non-scalar dummy arguments which are implicitly used inside
! offloaded regions are properly mapped using present_or_copy, or (default)
! present.

! { dg-do run }

program main
  implicit none

  integer,parameter :: size = 100
  integer :: array(size), i, n

  n = size

  !$acc data copy(array)

  call kernels(array, n)

  !$acc update host(array)

  do i = 1, n
     if (array(i) .ne. i) call abort
  end do

  call kernels_default_present(array, n)

  !$acc update host(array)

  do i = 1, n
     if (array(i) .ne. i+1) call abort
  end do

  call parallel(array, n)

  !$acc update host(array)

  do i = 1, n
     if (array(i) .ne. i+i) call abort
  end do

  call parallel_default_present(array, n)

  !$acc end data

  do i = 1, n
     if (array(i) .ne. i+i+1) call abort
  end do
end program main

subroutine kernels (array, n)
  integer, dimension (n) :: array
  integer :: n, i

  !$acc kernels
  do i = 1, n
     array(i) = i
  end do
  !$acc end kernels
end subroutine kernels

subroutine kernels_default_present (array, n)
  integer, dimension (n) :: array
  integer :: n, i

  !$acc kernels default(present)
  do i = 1, n
     array(i) = i+1
  end do
  !$acc end kernels
end subroutine kernels_default_present

subroutine parallel (array, n)
  integer, dimension (n) :: array
  integer :: n, i

  !$acc parallel
  do i = 1, n
     array(i) = i+i
  end do
  !$acc end parallel
end subroutine parallel

subroutine parallel_default_present (array, n)
  integer, dimension (n) :: array
  integer :: n, i

  !$acc parallel default(present)
  do i = 1, n
     array(i) = i+i+1
  end do
  !$acc end parallel
end subroutine parallel_default_present