2016-03-30 17:08:47 +02:00
! Miscellaneous tests for private variables.
! { dg-do run }
2021-05-20 16:11:37 +02:00
! { dg-additional-options "-fopt-info-note-omp" }
! { dg-additional-options "--param=openacc-privatization=noisy" }
! { dg-additional-options "-foffload=-fopt-info-note-omp" }
! { dg-additional-options "-foffload=--param=openacc-privatization=noisy" }
! for testing/documenting aspects of that functionality.
2021-04-23 12:23:51 +02:00
! { dg-additional-options "-Wopenacc-parallelism" } for testing/documenting
! aspects of that functionality.
2021-05-20 16:11:37 +02:00
! 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".
2016-03-30 17:08:47 +02:00
! Test of gang-private variables declared on loop directive.
subroutine t1 ( )
integer :: x , i , arr ( 32 )
do i = 1 , 32
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
2021-05-20 16:11:37 +02:00
!$acc loop gang private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do i = 1 , 32
x = i * 2 ;
arr ( i ) = arr ( i ) + x
end do
!$acc end parallel
do i = 1 , 32
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . i * 3 ) STOP 1
2016-03-30 17:08:47 +02:00
end do
end subroutine t1
! Test of gang-private variables declared on loop directive, with broadcasting
! to partitioned workers.
subroutine t2 ( )
integer :: x , i , j , arr ( 0 : 32 * 32 )
do i = 0 , 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
2021-05-20 16:11:37 +02:00
!$acc loop gang private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
x = i * 2 ;
2021-05-20 16:11:37 +02:00
!$acc loop worker ! { 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 }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
arr ( i * 32 + j ) = arr ( i * 32 + j ) + x
end do
end do
!$acc end parallel
do i = 0 , 32 * 32 - 1
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . i + ( i / 32 ) * 2 ) STOP 2
2016-03-30 17:08:47 +02:00
end do
end subroutine t2
! Test of gang-private variables declared on loop directive, with broadcasting
! to partitioned vectors.
subroutine t3 ( )
integer :: x , i , j , arr ( 0 : 32 * 32 )
do i = 0 , 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
2021-05-20 16:11:37 +02:00
!$acc loop gang private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
x = i * 2 ;
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { 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 }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
arr ( i * 32 + j ) = arr ( i * 32 + j ) + x
end do
end do
!$acc end parallel
do i = 0 , 32 * 32 - 1
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . i + ( i / 32 ) * 2 ) STOP 3
2016-03-30 17:08:47 +02:00
end do
end subroutine t3
! Test of gang-private addressable variable declared on loop directive, with
! broadcasting to partitioned workers.
subroutine t4 ( )
type vec3
integer x , y , z , attr ( 13 )
end type vec3
integer i , j , arr ( 0 : 32 * 32 )
type ( vec3 ) pt
do i = 0 , 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
2021-05-20 16:11:37 +02:00
!$acc loop gang private(pt) ! { 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 'pt' in 'private' clause is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_loop$c_loop }
! But, with optimizations enabled, per the '*.ssa' dump ('gcc/tree-ssa.c:execute_update_addresses_taken'):
! No longer having address taken: pt
! However, 'pt' remains in the candidate set:
! { dg-note {variable 'pt' ought to be adjusted for OpenACC privatization level: 'gang'} "" { target *-*-* } l_loop$c_loop }
! Now, for GCN offloading, 'adjust_private_decl' does the privatization change right away:
! { dg-note {variable 'pt' adjusted for OpenACC privatization level: 'gang'} "" { target openacc_radeon_accel_selected } l_loop$c_loop }
! For nvptx offloading however, we first mark up 'pt', and then later apply the privatization change -- or, with optimizations enabled, don't, because we then don't actually call 'expand_var_decl'.
! { dg-note {variable 'pt' adjusted for OpenACC privatization level: 'gang'} "" { target { openacc_nvidia_accel_selected && { ! __OPTIMIZE__ } } } l_loop$c_loop }
! { dg-bogus {note: variable 'pt' adjusted for OpenACC privatization level: 'gang'} "" { target { openacc_nvidia_accel_selected && __OPTIMIZE__ } } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
pt % x = i
pt % y = i * 2
pt % z = i * 4
pt % attr ( 5 ) = i * 6
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { 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 }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
arr ( i * 32 + j ) = arr ( i * 32 + j ) + pt % x + pt % y + pt % z + pt % attr ( 5 ) ;
end do
end do
!$acc end parallel
do i = 0 , 32 * 32 - 1
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . i + ( i / 32 ) * 13 ) STOP 4
2016-03-30 17:08:47 +02:00
end do
end subroutine t4
! Test of vector-private variables declared on loop directive.
subroutine t5 ( )
integer :: x , i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker ! { 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 }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop vector private(x) ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
x = ieor ( i , j * 3 )
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
2021-05-20 16:11:37 +02:00
!$acc loop vector private(x) ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
x = ior ( i , j * 5 )
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 5
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t5
! Test of vector-private variables declared on loop directive. Array type.
subroutine t6 ( )
integer :: i , j , k , idx , arr ( 0 : 32 * 32 * 32 ) , pt ( 2 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker ! { 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 }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop vector private(x, pt) ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
! { dg-bogus {note: variable 'x' in 'private' clause} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'pt' in 'private' clause is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'pt' ought to be adjusted for OpenACC privatization level: 'vector'} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'pt' adjusted for OpenACC privatization level: 'vector'} "" { target { ! openacc_host_selected } } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
pt ( 1 ) = ieor ( i , j * 3 )
pt ( 2 ) = ior ( i , j * 5 )
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt ( 1 ) * k
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt ( 2 ) * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 6
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t6
! Test of worker-private variables declared on a loop directive.
subroutine t7 ( )
integer :: x , i , j , arr ( 0 : 32 * 32 )
common x
do i = 0 , 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-1 }
2021-05-20 16:11:37 +02:00
!$acc loop gang private(x) ! { 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-bogus {note: variable 'x' in 'private' clause} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
x = ieor ( i , j * 3 )
arr ( i * 32 + j ) = arr ( i * 32 + j ) + x
end do
end do
!$acc end parallel
do i = 0 , 32 * 32 - 1
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . i + ieor ( i / 32 , mod ( i , 32 ) * 3 ) ) STOP 7
2016-03-30 17:08:47 +02:00
end do
end subroutine t7
! Test of worker-private variables declared on a loop directive, broadcasting
! to vector-partitioned mode.
subroutine t8 ( )
integer :: x , i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
x = ieor ( i , j * 3 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
2018-03-25 16:00:52 +00:00
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k ) STOP 8
2016-03-30 17:08:47 +02:00
end do
end do
end do
end subroutine t8
! Test of worker-private variables declared on a loop directive, broadcasting
! to vector-partitioned mode. Back-to-back worker loops.
subroutine t9 ( )
integer :: x , i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
x = ieor ( i , j * 3 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
x = ior ( i , j * 5 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 9
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t9
! Test of worker-private variables declared on a loop directive, broadcasting
! to vector-partitioned mode. Successive vector loops. */
subroutine t10 ( )
integer :: x , i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x) ! { 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 'x' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
x = ieor ( i , j * 3 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
x = ior ( i , j * 5 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 10
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t10
! Test of worker-private variables declared on a loop directive, broadcasting
! to vector-partitioned mode. Addressable worker variable.
subroutine t11 ( )
integer :: i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
integer , target :: x
integer , pointer :: p
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(x, p) ! { 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 'x' in 'private' clause is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'x' ought to be adjusted for OpenACC privatization level: 'worker'} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'x' adjusted for OpenACC privatization level: 'worker'} "TODO" { target { ! openacc_host_selected } xfail *-*-* } l_loop$c_loop }
! { dg-note {variable 'p' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
p = > x
x = ieor ( i , j * 3 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
p = ior ( i , j * 5 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + x * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 11
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t11
! Test of worker-private variables declared on a loop directive, broadcasting
! to vector-partitioned mode. Aggregate worker variable.
subroutine t12 ( )
type vec2
integer x , y
end type vec2
integer :: i , j , k , idx , arr ( 0 : 32 * 32 * 32 )
type ( vec2 ) :: pt
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(pt) ! { 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 'pt' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do j = 0 , 31
pt % x = ieor ( i , j * 3 )
pt % y = ior ( i , j * 5 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt % x * k
end do
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt % y * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 12
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t12
! Test of worker-private variables declared on loop directive, broadcasting
! to vector-partitioned mode. Array worker variable.
subroutine t13 ( )
integer :: i , j , k , idx , arr ( 0 : 32 * 32 * 32 ) , pt ( 2 )
do i = 0 , 32 * 32 * 32 - 1
arr ( i ) = i
end do
!$acc parallel copy(arr) num_gangs(32) num_workers(8) vector_length(32)
2021-05-20 16:11:37 +02:00
!$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 }
2016-03-30 17:08:47 +02:00
do i = 0 , 31
2021-05-20 16:11:37 +02:00
!$acc loop worker private(pt) ! { 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 'pt' in 'private' clause is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'pt' ought to be adjusted for OpenACC privatization level: 'worker'} "" { target *-*-* } l_loop$c_loop }
! { dg-note {variable 'pt' adjusted for OpenACC privatization level: 'worker'} "TODO" { target { ! openacc_host_selected } xfail *-*-* } l_loop$c_loop } */
2016-03-30 17:08:47 +02:00
do j = 0 , 31
pt ( 1 ) = ieor ( i , j * 3 )
pt ( 2 ) = ior ( i , j * 5 )
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt ( 1 ) * k
end do
2021-05-20 16:11:37 +02:00
!$acc loop vector ! { dg-line l_loop[incr c_loop] }
! { dg-note {variable 'k' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop$c_loop }
2016-03-30 17:08:47 +02:00
do k = 0 , 31
arr ( i * 1024 + j * 32 + k ) = arr ( i * 1024 + j * 32 + k ) + pt ( 2 ) * k
end do
end do
end do
!$acc end parallel
do i = 0 , 32 - 1
do j = 0 , 32 - 1
do k = 0 , 32 - 1
idx = i * 1024 + j * 32 + k
if ( arr ( idx ) . ne . idx + ieor ( i , j * 3 ) * k + ior ( i , j * 5 ) * k ) then
2018-03-25 16:00:52 +00:00
STOP 13
2016-03-30 17:08:47 +02:00
end if
end do
end do
end do
end subroutine t13
! Test of gang-private variables declared on the parallel directive.
subroutine t14 ( )
use openacc
integer :: x = 5
integer , parameter :: n = 32
integer :: arr ( n )
do i = 1 , n
arr ( i ) = 3
end do
!$acc parallel private(x) copy(arr) num_gangs(n) num_workers(8) vector_length(32)
2021-04-23 12:23:51 +02:00
! { dg-warning "region is worker partitioned but does not contain worker partitioned code" "" { target *-*-* } .-1 }
! { dg-warning "region is vector partitioned but does not contain vector partitioned code" "" { target *-*-* } .-2 }
2021-05-20 16:11:37 +02:00
!$acc loop gang(static:1) ! { 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 }
2016-03-30 17:08:47 +02:00
do i = 1 , n
x = i * 2 ;
end do
2021-05-20 16:11:37 +02:00
!$acc loop gang(static:1) ! { 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 }
2016-03-30 17:08:47 +02:00
do i = 1 , n
2021-05-20 16:11:37 +02:00
! { dg-note {variable 'C\.[0-9]+' declared in block potentially has improper OpenACC privatization level: 'const_decl'} "TODO" { target *-*-* } l_loop$c_loop }
!TODO Unhandled 'CONST_DECL' instance for constant argument in 'acc_on_device' call.
2016-03-30 17:08:47 +02:00
if ( acc_on_device ( acc_device_host ) . eqv . . TRUE . ) x = i * 2
arr ( i ) = arr ( i ) + x
end do
!$acc end parallel
do i = 1 , n
2018-03-25 16:00:52 +00:00
if ( arr ( i ) . ne . ( 3 + i * 2 ) ) STOP 14
2016-03-30 17:08:47 +02:00
end do
end subroutine t14
program main
call t1 ( )
call t2 ( )
call t3 ( )
call t4 ( )
call t5 ( )
call t6 ( )
call t7 ( )
call t8 ( )
call t9 ( )
call t10 ( )
call t11 ( )
call t12 ( )
call t13 ( )
call t14 ( )
end program main