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