! { dg-do run } ! { dg-additional-options "-fopt-info-note-omp" } ! { dg-additional-options "-foffload=-fopt-info-note-omp" } ! { dg-additional-options "--param=openacc-privatization=noisy" } ! { dg-additional-options "-foffload=--param=openacc-privatization=noisy" } ! { dg-additional-options "-Wuninitialized" } !TODO ! { dg-xfail-run-if TODO { openacc_radeon_accel_selected && { ! __OPTIMIZE__ } } } ! It's only with Tcl 8.5 (released in 2007) that "the variable 'varName' ! passed to 'incr' may be unset, and in that case, it will be set to [...]", ! so to maintain compatibility with earlier Tcl releases, we manually ! initialize counter variables: ! { dg-line l_dummy[variable c_loop 0] } ! { dg-message "dummy" "" { target iN-VAl-Id } l_dummy } to avoid ! "WARNING: dg-line var l_dummy defined, but not used". */ program main implicit none integer :: myint integer :: i real :: res(65536), tmp res(:) = 0.0 myint = 3 call gangs(myint, res) do i=1,65536 tmp = i * 97 if (res(i) .ne. tmp) stop 1 end do res(:) = 0.0 myint = 5 call workers(myint, res) do i=1,65536 tmp = i * 99 if (res(i) .ne. tmp) stop 2 end do res(:) = 0.0 myint = 7 call vectors(myint, res) do i=1,65536 tmp = i * 101 if (res(i) .ne. tmp) stop 3 end do res(:) = 0.0 myint = 9 call gangs_workers_vectors(myint, res) do i=1,65536 tmp = i * 103 if (res(i) .ne. tmp) stop 4 end do contains subroutine gangs(t1, res) implicit none integer :: t1 integer :: i, j real, intent(out) :: res(:) !$acc parallel copyout(res) num_gangs(64) !$acc loop collapse(2) gang private(t1) ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 't1' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do i=0,255 do j=1,256 t1 = (i * 256 + j) * 97 res(i * 256 + j) = t1 end do end do !$acc end parallel end subroutine gangs subroutine workers(t1, res) implicit none integer :: t1 integer :: i, j real, intent(out) :: res(:) !$acc parallel copyout(res) num_gangs(64) num_workers(64) ! { dg-warning "using .num_workers \\(32\\)., ignoring 64" "" { target openacc_nvidia_accel_selected } .-1 } !$acc loop gang ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do i=0,255 !$acc loop worker private(t1) ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 't1' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do j=1,256 t1 = (i * 256 + j) * 99 res(i * 256 + j) = t1 end do end do !$acc end parallel end subroutine workers subroutine vectors(t1, res) implicit none integer :: t1 integer :: i, j real, intent(out) :: res(:) !$acc parallel copyout(res) num_gangs(64) num_workers(64) ! { dg-warning "using .num_workers \\(32\\)., ignoring 64" "" { target openacc_nvidia_accel_selected } .-1 } !$acc loop gang worker ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do i=0,255 !$acc loop vector private(t1) ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 't1' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do j=1,256 t1 = (i * 256 + j) * 101 res(i * 256 + j) = t1 end do end do !$acc end parallel end subroutine vectors subroutine gangs_workers_vectors(t1, res) implicit none integer :: t1 integer :: i, j real, intent(out) :: res(:) !$acc parallel copyout(res) num_gangs(64) num_workers(64) ! { dg-warning "using .num_workers \\(32\\)., ignoring 64" "" { target openacc_nvidia_accel_selected } .-1 } !$acc loop collapse(2) gang worker vector private(t1) ! { dg-line l_loop[incr c_loop] } ! { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } ! { dg-note {variable 't1' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop } do i=0,255 do j=1,256 t1 = (i * 256 + j) * 103 res(i * 256 + j) = t1 end do end do !$acc end parallel end subroutine gangs_workers_vectors end program main