1! Explicit 'private' clauses related to 'do' loops inside an OpenACC
2! 'parallel' construct.
3
4! { dg-additional-options "-fdump-tree-original -fdump-tree-gimple" }
5
6! (The 'independent' clauses are used as end of directive markers in tree dump
7! scanning.)
8
9program test
10  implicit none
11  integer :: i0_1
12  integer :: i0_2, j0_2
13  integer :: i1_s
14  integer :: i1_c
15  integer :: i2_1_s, j2_1_s
16  integer :: i2_1_c, j2_1_c
17  integer :: i2_2_s, j2_2_s
18  integer :: i2_3_s, j2_3_s
19  integer :: i2_3_c, j2_3_c
20  integer :: i3_1_s, j3_1_s, k3_1_s
21  integer :: i3_1_c, j3_1_c, k3_1_c
22  integer :: i3_2_s, j3_2_s, k3_2_s
23  integer :: i3_2_c, j3_2_c, k3_2_c
24  integer :: i3_3_s, j3_3_s, k3_3_s
25  integer :: i3_3_c, j3_3_c, k3_3_c
26  integer :: i3_4_s, j3_4_s, k3_4_s
27  integer :: i3_4_c, j3_4_c, k3_4_c
28  integer :: i3_5_s, j3_5_s, k3_5_s
29
30  !$acc parallel private(i0_1)
31  ! { dg-final { scan-tree-dump-times "#pragma acc parallel private\\(i0_1\\)" 1 "original" } }
32  ! { dg-final { scan-tree-dump-times "#pragma omp target oacc_parallel private\\(i0_1\\)" 1 "gimple" } }
33  ! { dg-final { scan-tree-dump-times "firstprivate\\(i0_1\\)" 0 "gimple" } }
34  do i0_1 = 1, 100
35  end do
36  !$acc end parallel
37
38  !$acc parallel private(i0_2, j0_2)
39  ! { dg-final { scan-tree-dump-times "#pragma acc parallel private\\(i0_2\\) private\\(j0_2\\)" 1 "original" } }
40  ! { dg-final { scan-tree-dump-times "#pragma omp target oacc_parallel private\\(i0_2\\) private\\(j0_2\\)" 1 "gimple" } }
41  ! { dg-final { scan-tree-dump-times "firstprivate\\(i0_2\\)" 0 "gimple" } }
42  ! { dg-final { scan-tree-dump-times "firstprivate\\(j0_2\\)" 0 "gimple" } }
43  do i0_2 = 1, 100
44     do j0_2 = 1, 100
45     end do
46  end do
47  !$acc end parallel
48
49  !$acc parallel
50  !$acc loop private(i1_s) independent
51  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i1_s\\) independent" 1 "original" } }
52  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i1_s\\) independent" 1 "gimple" } }
53  do i1_s = 1, 100
54  end do
55  !$acc end parallel
56
57  !$acc parallel loop private(i1_c) independent
58  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i1_c\\) independent" 1 "original" } }
59  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i1_c\\) independent" 1 "gimple" } }
60  do i1_c = 1, 100
61  end do
62
63  !$acc parallel
64  !$acc loop private(i2_1_s, j2_1_s) independent
65  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_1_s\\) private\\(j2_1_s\\) independent" 1 "original" } }
66  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_1_s\\) private\\(j2_1_s\\) independent" 1 "gimple" } }
67  do i2_1_s = 1, 100
68     do j2_1_s = 1, 100
69     end do
70  end do
71  !$acc end parallel
72
73  !$acc parallel loop private(i2_1_c, j2_1_c) independent
74  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_1_c\\) private\\(j2_1_c\\) independent" 1 "original" } }
75  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_1_c\\) private\\(j2_1_c\\) independent" 1 "gimple" } }
76  do i2_1_c = 1, 100
77     do j2_1_c = 1, 100
78     end do
79  end do
80
81  !$acc parallel private(i2_2_s)
82  ! { dg-final { scan-tree-dump-times "#pragma acc parallel private\\(i2_2_s\\)" 1 "original" } }
83  ! { dg-final { scan-tree-dump-times "#pragma omp target oacc_parallel private\\(i2_2_s\\)" 1 "gimple" } }
84  ! { dg-final { scan-tree-dump-times "firstprivate\\(i2_2_s\\)" 0 "gimple" } }
85  do i2_2_s = 1, 100
86     !$acc loop private(j2_2_s) independent
87     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_2_s\\) independent" 1 "original" } }
88     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_2_s\\) independent" 1 "gimple" } }
89     do j2_2_s = 1, 100
90     end do
91  end do
92  !$acc end parallel
93
94  !$acc parallel
95  !$acc loop private(i2_3_s) independent
96  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_3_s\\) independent" 1 "original" } }
97  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_3_s\\) independent" 1 "gimple" } }
98  do i2_3_s = 1, 100
99     !$acc loop private(j2_3_s) independent
100     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_3_s\\) independent" 1 "original" } }
101     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_3_s\\) independent" 1 "gimple" } }
102     do j2_3_s = 1, 100
103     end do
104  end do
105  !$acc end parallel
106
107  !$acc parallel loop private(i2_3_c) independent
108  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_3_c\\) independent" 1 "original" } }
109  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i2_3_c\\) independent" 1 "gimple" } }
110  do i2_3_c = 1, 100
111     !$acc loop private(j2_3_c) independent
112     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_3_c\\) independent" 1 "original" } }
113     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j2_3_c\\) independent" 1 "gimple" } }
114     do j2_3_c = 1, 100
115     end do
116  end do
117
118  !$acc parallel
119  !$acc loop private(i3_1_s, j3_1_s, k3_1_s) independent
120  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_1_s\\) private\\(j3_1_s\\) private\\(k3_1_s\\) independent" 1 "original" } }
121  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_1_s\\) private\\(j3_1_s\\) private\\(k3_1_s\\) independent" 1 "gimple" } }
122  do i3_1_s = 1, 100
123     do j3_1_s = 1, 100
124        do k3_1_s = 1, 100
125        end do
126     end do
127  end do
128  !$acc end parallel
129
130  !$acc parallel loop private(i3_1_c, j3_1_c, k3_1_c) independent
131  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_1_c\\) private\\(j3_1_c\\) private\\(k3_1_c\\) independent" 1 "original" } }
132  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_1_c\\) private\\(j3_1_c\\) private\\(k3_1_c\\) independent" 1 "gimple" } }
133  do i3_1_c = 1, 100
134     do j3_1_c = 1, 100
135        do k3_1_c = 1, 100
136        end do
137     end do
138  end do
139
140  !$acc parallel
141  !$acc loop private(i3_2_s) independent
142  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_2_s\\) independent" 1 "original" } }
143  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_2_s\\) independent" 1 "gimple" } }
144  do i3_2_s = 1, 100
145     !$acc loop private(j3_2_s, k3_2_s) independent
146     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_2_s\\) private\\(k3_2_s\\) independent" 1 "original" } }
147     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_2_s\\) private\\(k3_2_s\\) independent" 1 "gimple" } }
148     do j3_2_s = 1, 100
149        do k3_2_s = 1, 100
150        end do
151     end do
152  end do
153  !$acc end parallel
154
155  !$acc parallel loop private(i3_2_c) independent
156  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_2_c\\) independent" 1 "original" } }
157  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_2_c\\) independent" 1 "gimple" } }
158  do i3_2_c = 1, 100
159     !$acc loop private(j3_2_c, k3_2_c) independent
160     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_2_c\\) private\\(k3_2_c\\) independent" 1 "original" } }
161     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_2_c\\) private\\(k3_2_c\\) independent" 1 "gimple" } }
162     do j3_2_c = 1, 100
163        do k3_2_c = 1, 100
164        end do
165     end do
166  end do
167
168  !$acc parallel
169  !$acc loop private(i3_3_s, j3_3_s) independent
170  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_3_s\\) private\\(j3_3_s\\) independent" 1 "original" } }
171  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_3_s\\) private\\(j3_3_s\\) independent" 1 "gimple" } }
172  do i3_3_s = 1, 100
173     do j3_3_s = 1, 100
174        !$acc loop private(k3_3_s) independent
175        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_3_s\\) independent" 1 "original" } }
176        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_3_s\\) independent" 1 "gimple" } }
177        do k3_3_s = 1, 100
178        end do
179     end do
180  end do
181  !$acc end parallel
182
183  !$acc parallel loop private(i3_3_c, j3_3_c) independent
184  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_3_c\\) private\\(j3_3_c\\) independent" 1 "original" } }
185  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_3_c\\) private\\(j3_3_c\\) independent" 1 "gimple" } }
186  do i3_3_c = 1, 100
187     do j3_3_c = 1, 100
188        !$acc loop private(k3_3_c) independent
189        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_3_c\\) independent" 1 "original" } }
190        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_3_c\\) independent" 1 "gimple" } }
191        do k3_3_c = 1, 100
192        end do
193     end do
194  end do
195
196  !$acc parallel
197  !$acc loop private(i3_4_s) independent
198  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_4_s\\) independent" 1 "original" } }
199  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_4_s\\) independent" 1 "gimple" } }
200  do i3_4_s = 1, 100
201     !$acc loop private(j3_4_s) independent
202     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_4_s\\) independent" 1 "original" } }
203     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_4_s\\) independent" 1 "gimple" } }
204     do j3_4_s = 1, 100
205        !$acc loop private(k3_4_s) independent
206        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_4_s\\) independent" 1 "original" } }
207        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_4_s\\) independent" 1 "gimple" } }
208        do k3_4_s = 1, 100
209        end do
210     end do
211  end do
212  !$acc end parallel
213
214  !$acc parallel loop private(i3_4_c) independent
215  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_4_c\\) independent" 1 "original" } }
216  ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(i3_4_c\\) independent" 1 "gimple" } }
217  do i3_4_c = 1, 100
218     !$acc loop private(j3_4_c) independent
219     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_4_c\\) independent" 1 "original" } }
220     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_4_c\\) independent" 1 "gimple" } }
221     do j3_4_c = 1, 100
222        !$acc loop private(k3_4_c) independent
223        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_4_c\\) independent" 1 "original" } }
224        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_4_c\\) independent" 1 "gimple" } }
225        do k3_4_c = 1, 100
226        end do
227     end do
228  end do
229
230  !$acc parallel private(i3_5_s)
231  ! { dg-final { scan-tree-dump-times "#pragma acc parallel private\\(i3_5_s\\)" 1 "original" } }
232  ! { dg-final { scan-tree-dump-times "#pragma omp target oacc_parallel private\\(i3_5_s\\)" 1 "gimple" } }
233  ! { dg-final { scan-tree-dump-times "firstprivate\\(i3_5_s\\)" 0 "gimple" } }
234  do i3_5_s = 1, 100
235     !$acc loop private(j3_5_s) independent
236     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_5_s\\) independent" 1 "original" } }
237     ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(j3_5_s\\) independent" 1 "gimple" } }
238     do j3_5_s = 1, 100
239        !$acc loop private(k3_5_s) independent
240        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_5_s\\) independent" 1 "original" } }
241        ! { dg-final { scan-tree-dump-times "#pragma acc loop private\\(k3_5_s\\) independent" 1 "gimple" } }
242        do k3_5_s = 1, 100
243        end do
244     end do
245  end do
246  !$acc end parallel
247end program test
248