1! { dg-do compile } 2! { dg-additional-options "-fdump-tree-omplower" } 3 4module combined_if 5 implicit none 6 7 integer, parameter :: N = 100 8 integer, parameter :: LIMIT = 60 9 integer :: i, j 10 integer, dimension(N) :: a = (/ (i, i = 1,N) /) 11contains 12 subroutine test_parallel_loop_simd 13 do j = 1, N 14 !$omp parallel do simd if(j .lt. LIMIT) 15 do i = 1, N 16 a(i) = a(i) + 1 17 end do 18 end do 19 end subroutine 20 21 subroutine test_target_parallel 22 do j = 1, N 23 !$omp target parallel if(j .lt. LIMIT) map(tofrom: a(1:N)) 24 do i = 1, N 25 a(i) = a(i) + 1 26 end do 27 !$omp end target parallel 28 end do 29 end subroutine 30 31 subroutine test_target_parallel_loop 32 do j = 1, N 33 !$omp target parallel do if(j .lt. LIMIT) map(tofrom: a(1:N)) 34 do i = 1, N 35 a(i) = a(i) + 1 36 end do 37 end do 38 end subroutine 39 40 subroutine test_target_parallel_loop_simd 41 do j = 1, N 42 !$omp target parallel do simd if(j .lt. LIMIT) map(tofrom: a(1:N)) 43 do i = 1, N 44 a(i) = a(i) + 1 45 end do 46 end do 47 end subroutine 48 49 subroutine test_target_simd 50 do j = 1, N 51 !$omp target simd if(j .lt. LIMIT) map(tofrom: a(1:N)) 52 do i = 1, N 53 a(i) = a(i) + 1 54 end do 55 end do 56 end subroutine 57 58 subroutine test_target_teams 59 do j = 1, N 60 !$omp target teams if(j .lt. LIMIT) map(tofrom: a(1:N)) 61 do i = 1, N 62 a(i) = a(i) + 1 63 end do 64 !$omp end target teams 65 end do 66 end subroutine 67 68 subroutine test_target_teams_distribute 69 do j = 1, N 70 !$omp target teams distribute if(j .lt. LIMIT) map(tofrom: a(1:N)) 71 do i = 1, N 72 a(i) = a(i) + 1 73 end do 74 end do 75 end subroutine 76 77 subroutine test_target_teams_distibute_simd 78 do j = 1, N 79 !$omp target teams distribute simd if(j .lt. LIMIT) map(tofrom: a(1:N)) 80 do i = 1, N 81 a(i) = a(i) + 1 82 end do 83 end do 84 end subroutine 85 86 subroutine test_target_teams_distribute_parallel_loop 87 do j = 1, N 88 !$omp target teams distribute parallel do if(j .lt. LIMIT) map(tofrom: a(1:N)) 89 do i = 1, N 90 a(i) = a(i) + 1 91 end do 92 end do 93 end subroutine 94 95 subroutine test_target_teams_distribute_parallel_loop_simd 96 do j = 1, N 97 !$omp target teams distribute parallel do simd if(j .lt. LIMIT) map(tofrom: a(1:N)) 98 do i = 1, N 99 a(i) = a(i) + 1 100 end do 101 end do 102 end subroutine 103 104end module 105 106! { dg-final { scan-tree-dump-times "(?n)#pragma omp target.* if\\(" 9 "omplower" } } 107! { dg-final { scan-tree-dump-times "(?n)#pragma omp simd.* if\\(" 5 "omplower" { target { ! offload_nvptx } } } } 108! { dg-final { scan-tree-dump-times "(?n)#pragma omp simd.* if\\(" 9 "omplower" { target { offload_nvptx } } } } 109! { dg-final { scan-tree-dump-times "(?n)#pragma omp parallel.* if\\(" 6 "omplower" } } 110