| ! { dg-do compile } |
| ! { dg-additional-options "-fdump-tree-gimple" } |
| |
| program main |
| !$omp requires atomic_default_mem_order(seq_cst) |
| !$omp declare target to (test3) |
| contains |
| subroutine f01 () |
| end subroutine |
| |
| subroutine f02 () |
| !$omp declare variant (f01) match (user={condition(6 == 7)},implementation={vendor(gnu)}) |
| end subroutine |
| |
| subroutine f03 () |
| end subroutine |
| |
| subroutine f04 () |
| !$omp declare variant (f03) match (user={condition(6 == 6)},implementation={atomic_default_mem_order(seq_cst)}) |
| end subroutine |
| |
| subroutine f05 () |
| end subroutine |
| |
| subroutine f06 () |
| !$omp declare variant (f05) match (user={condition(1)},implementation={atomic_default_mem_order(relaxed)}) |
| end subroutine |
| |
| subroutine f07 () |
| end subroutine |
| |
| subroutine f08 () |
| !$omp declare variant (f07) match (construct={parallel,do},device={kind("any")}) |
| end subroutine |
| |
| subroutine f09 () |
| end subroutine |
| |
| subroutine f10 () |
| !$omp declare variant (f09) match (construct={parallel,do},implementation={vendor("gnu")}) |
| end subroutine |
| |
| subroutine f11 () |
| end subroutine |
| |
| subroutine f12 () |
| !$omp declare variant (f11) match (construct={parallel,do}) |
| end subroutine |
| |
| subroutine f13 () |
| end subroutine |
| |
| subroutine f14 () |
| !$omp declare variant (f13) match (construct={parallel,do}) |
| end subroutine |
| |
| subroutine f15 () |
| !$omp declare target to (f13, f14) |
| end subroutine |
| |
| subroutine f16 () |
| !$omp declare variant (f15) match (implementation={vendor(llvm)}) |
| end subroutine |
| |
| subroutine f17 () |
| end subroutine |
| |
| subroutine f18 () |
| !$omp declare variant (f17) match (construct={target,parallel}) |
| end subroutine |
| |
| subroutine f19 () |
| end subroutine |
| |
| subroutine f20 () |
| !$omp declare variant (f19) match (construct={target,parallel}) |
| end subroutine |
| |
| subroutine f22 () |
| !$omp declare variant (f21) match (construct={teams,parallel}) |
| end subroutine |
| |
| subroutine f23 () |
| end subroutine |
| |
| subroutine f24 () |
| !$omp declare variant (f23) match (construct={teams,parallel,do}) |
| end subroutine |
| |
| subroutine f25 () |
| end subroutine |
| |
| subroutine f27 () |
| end subroutine |
| |
| subroutine f28 () |
| !$omp declare variant (f27) match (construct={teams,parallel,do}) |
| end subroutine |
| |
| subroutine f30 () |
| !$omp declare variant (f29) match (implementation={vendor(gnu)}) |
| end subroutine |
| |
| subroutine f31 () |
| end subroutine |
| |
| subroutine f32 () |
| !$omp declare variant (f31) match (construct={teams,parallel,do}) |
| end subroutine |
| |
| subroutine f33 () |
| end subroutine |
| |
| subroutine f34 () |
| !$omp declare variant (f33) match (device={kind("any\0any")}) ! { dg-warning "unknown property '.any..0any.' of 'kind' selector" } |
| end subroutine |
| |
| subroutine f35 () |
| end subroutine |
| |
| subroutine f36 () |
| !$omp declare variant (f35) match (implementation={vendor("gnu\0")}) ! { dg-warning "unknown property '.gnu..0.' of 'vendor' selector" } |
| end subroutine |
| |
| subroutine test1 () |
| integer :: i |
| |
| call f02 () ! { dg-final { scan-tree-dump-times "f02 \\\(\\\);" 1 "gimple" } } |
| call f04 () ! { dg-final { scan-tree-dump-times "f03 \\\(\\\);" 1 "gimple" } } |
| call f06 () ! { dg-final { scan-tree-dump-times "f06 \\\(\\\);" 1 "gimple" } } |
| |
| !$omp parallel |
| !$omp do |
| do i = 1, 2 |
| call f08 () ! { dg-final { scan-tree-dump-times "f07 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end do |
| !$omp end parallel |
| |
| !$omp parallel do |
| do i = 1, 2 |
| call f10 () ! { dg-final { scan-tree-dump-times "f09 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end parallel do |
| |
| !$omp do |
| do i = 1, 2 |
| !$omp parallel |
| call f12 () ! { dg-final { scan-tree-dump-times "f12 \\\(\\\);" 1 "gimple" } } |
| !$omp end parallel |
| end do |
| !$omp end do |
| |
| !$omp parallel |
| !$omp target |
| !$omp do |
| do i = 1, 2 |
| call f14 () ! { dg-final { scan-tree-dump-times "f14 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end do |
| !$omp end target |
| !$omp end parallel |
| |
| call f16 () ! { dg-final { scan-tree-dump-times "f16 \\\(\\\);" 1 "gimple" } } |
| call f34 () ! { dg-final { scan-tree-dump-times "f34 \\\(\\\);" 1 "gimple" } } |
| call f36 () ! { dg-final { scan-tree-dump-times "f36 \\\(\\\);" 1 "gimple" } } |
| end subroutine |
| |
| subroutine test2 () |
| ! OpenMP 5.0 specifies that the 'target' trait should be added for |
| ! functions within a declare target block, but Fortran does not have |
| ! the notion of a declare target _block_, so the variant is not used here. |
| ! This may change in later versions of OpenMP. |
| |
| !$omp declare target |
| !$omp parallel |
| call f18 () ! { dg-final { scan-tree-dump-times "f18 \\\(\\\);" 1 "gimple" } } |
| !$omp end parallel |
| end subroutine |
| |
| subroutine test3 () |
| ! In the C version, this test was used to check that the |
| ! 'declare target to' form of the directive did not result in the variant |
| ! being used. |
| !$omp parallel |
| call f20 () ! { dg-final { scan-tree-dump-times "f20 \\\(\\\);" 1 "gimple" } } |
| !$omp end parallel |
| end subroutine |
| |
| subroutine f21 () |
| integer :: i |
| !$omp do |
| do i = 1, 2 |
| call f24 () ! { dg-final { scan-tree-dump-times "f23 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end do |
| end subroutine |
| |
| subroutine f26 () |
| !$omp declare variant (f25) match (construct={teams,parallel}) |
| |
| integer :: i |
| !$omp do |
| do i = 1, 2 |
| call f28 () ! { dg-final { scan-tree-dump-times "f28 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end do |
| end subroutine |
| |
| subroutine f29 () |
| integer :: i |
| !$omp do |
| do i = 1, 2 |
| call f32 () ! { dg-final { scan-tree-dump-times "f32 \\\(\\\);" 1 "gimple" } } |
| end do |
| !$omp end do |
| end subroutine |
| end program |