111
|
1 ! Exercise nested function decomposition, gcc/tree-nested.c.
|
|
2
|
|
3 ! { dg-do run }
|
|
4
|
|
5 program sub_collapse_3
|
|
6 call test1
|
|
7 call test2 (2, 6, -2, 4, 13, 18)
|
|
8 call test3 (2, 6, -2, 4, 13, 18, 1, 1, 1)
|
|
9 call test4
|
|
10 call test5 (2, 6, -2, 4, 13, 18)
|
|
11 call test6 (2, 6, -2, 4, 13, 18, 1, 1, 1)
|
|
12 contains
|
|
13 subroutine test1
|
|
14 integer :: a(3,3,3), k, kk, kkk, l, ll, lll
|
|
15 !$acc parallel
|
|
16 !$acc loop collapse(3)
|
|
17 do 115 k=1,3
|
|
18 dokk: do kk=1,3
|
|
19 do kkk=1,3
|
|
20 a(k,kk,kkk) = 1
|
|
21 enddo
|
|
22 enddo dokk
|
|
23 115 continue
|
|
24 !$acc end parallel
|
131
|
25 if (any(a(1:3,1:3,1:3).ne.1)) STOP 1
|
111
|
26 !$acc parallel
|
|
27 !$acc loop collapse(3)
|
|
28 dol: do 120 l=1,3
|
|
29 doll: do ll=1,3
|
|
30 do lll=1,3
|
|
31 a(l,ll,lll) = 2
|
|
32 enddo
|
|
33 enddo doll
|
|
34 120 end do dol
|
|
35 !$acc end parallel
|
131
|
36 if (any(a(1:3,1:3,1:3).ne.2)) STOP 2
|
111
|
37 end subroutine test1
|
|
38
|
|
39 subroutine test2(v1, v2, v3, v4, v5, v6)
|
|
40 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
|
|
41 integer :: v1, v2, v3, v4, v5, v6
|
|
42 logical :: l, r
|
|
43 l = .false.
|
|
44 r = .false.
|
|
45 a(:, :, :) = 0
|
|
46 b(:, :, :) = 0
|
|
47 !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l)
|
|
48 !$acc loop reduction (.or.:l) collapse (3)
|
|
49 do i = v1, v2
|
|
50 do j = v3, v4
|
|
51 do k = v5, v6
|
|
52 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
53 l = l.or.k.lt.13.or.k.gt.18
|
|
54 if (.not.l) a(i, j, k) = a(i, j, k) + 1
|
|
55 end do
|
|
56 end do
|
|
57 end do
|
|
58 !$acc end parallel
|
|
59 do i = v1, v2
|
|
60 do j = v3, v4
|
|
61 do k = v5, v6
|
|
62 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
63 r = r.or.k.lt.13.or.k.gt.18
|
|
64 if (.not.l) b(i, j, k) = b(i, j, k) + 1
|
|
65 end do
|
|
66 end do
|
|
67 end do
|
131
|
68 if (l .neqv. r) STOP 3
|
111
|
69 do i = v1, v2
|
|
70 do j = v3, v4
|
|
71 do k = v5, v6
|
131
|
72 if (a(i, j, k) .ne. b(i, j, k)) STOP 4
|
111
|
73 end do
|
|
74 end do
|
|
75 end do
|
|
76 end subroutine test2
|
|
77
|
|
78 subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9)
|
|
79 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
|
|
80 integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
|
|
81 logical :: l, r
|
|
82 l = .false.
|
|
83 r = .false.
|
|
84 a(:, :, :) = 0
|
|
85 b(:, :, :) = 0
|
|
86 !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
|
|
87 !$acc loop reduction (.or.:l) collapse (3)
|
|
88 do i = v1, v2, v7
|
|
89 do j = v3, v4, v8
|
|
90 do k = v5, v6, v9
|
|
91 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
92 l = l.or.k.lt.13.or.k.gt.18
|
|
93 if (.not.l) a(i, j, k) = a(i, j, k) + 1
|
|
94 end do
|
|
95 end do
|
|
96 end do
|
|
97 !$acc end parallel
|
|
98 do i = v1, v2, v7
|
|
99 do j = v3, v4, v8
|
|
100 do k = v5, v6, v9
|
|
101 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
102 r = r.or.k.lt.13.or.k.gt.18
|
|
103 if (.not.l) b(i, j, k) = b(i, j, k) + 1
|
|
104 end do
|
|
105 end do
|
|
106 end do
|
131
|
107 if (l .neqv. r) STOP 5
|
111
|
108 do i = v1, v2, v7
|
|
109 do j = v3, v4, v8
|
|
110 do k = v5, v6, v9
|
131
|
111 if (a(i, j, k) .ne. b(i, j, k)) STOP 6
|
111
|
112 end do
|
|
113 end do
|
|
114 end do
|
|
115 end subroutine test3
|
|
116
|
|
117 subroutine test4
|
|
118 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
|
|
119 integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
|
|
120 logical :: l, r
|
|
121 l = .false.
|
|
122 r = .false.
|
|
123 a(:, :, :) = 0
|
|
124 b(:, :, :) = 0
|
|
125 v1 = 2
|
|
126 v2 = 6
|
|
127 v3 = -2
|
|
128 v4 = 4
|
|
129 v5 = 13
|
|
130 v6 = 18
|
|
131 v7 = 1
|
|
132 v8 = 1
|
|
133 v9 = 1
|
|
134 !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
|
|
135 !$acc loop reduction (.or.:l) collapse (3)
|
|
136 do i = v1, v2, v7
|
|
137 do j = v3, v4, v8
|
|
138 do k = v5, v6, v9
|
|
139 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
140 l = l.or.k.lt.13.or.k.gt.18
|
|
141 if (.not.l) a(i, j, k) = a(i, j, k) + 1
|
|
142 end do
|
|
143 end do
|
|
144 end do
|
|
145 !$acc end parallel
|
|
146 do i = v1, v2, v7
|
|
147 do j = v3, v4, v8
|
|
148 do k = v5, v6, v9
|
|
149 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
150 r = r.or.k.lt.13.or.k.gt.18
|
|
151 if (.not.r) b(i, j, k) = b(i, j, k) + 1
|
|
152 end do
|
|
153 end do
|
|
154 end do
|
131
|
155 if (l .neqv. r) STOP 7
|
111
|
156 do i = v1, v2, v7
|
|
157 do j = v3, v4, v8
|
|
158 do k = v5, v6, v9
|
131
|
159 if (a(i, j, k) .ne. b(i, j, k)) STOP 8
|
111
|
160 end do
|
|
161 end do
|
|
162 end do
|
|
163 end subroutine test4
|
|
164
|
|
165 subroutine test5(v1, v2, v3, v4, v5, v6)
|
|
166 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
|
|
167 integer :: v1, v2, v3, v4, v5, v6
|
|
168 logical :: l, r
|
|
169 l = .false.
|
|
170 r = .false.
|
|
171 a(:, :, :) = 0
|
|
172 b(:, :, :) = 0
|
|
173 !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6) reduction (.or.:l)
|
|
174 !$acc loop reduction (.or.:l) collapse (3)
|
|
175 do i = v1, v2
|
|
176 do j = v3, v4
|
|
177 do k = v5, v6
|
|
178 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
179 l = l.or.k.lt.13.or.k.gt.18
|
|
180 if (.not.l) a(i, j, k) = a(i, j, k) + 1
|
|
181 end do
|
|
182 end do
|
|
183 end do
|
|
184 !$acc end parallel
|
|
185 do i = v1, v2
|
|
186 do j = v3, v4
|
|
187 do k = v5, v6
|
|
188 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
189 r = r.or.k.lt.13.or.k.gt.18
|
|
190 if (.not.r) b(i, j, k) = b(i, j, k) + 1
|
|
191 end do
|
|
192 end do
|
|
193 end do
|
131
|
194 if (l .neqv. r) STOP 9
|
111
|
195 do i = v1, v2
|
|
196 do j = v3, v4
|
|
197 do k = v5, v6
|
131
|
198 if (a(i, j, k) .ne. b(i, j, k)) STOP 10
|
111
|
199 end do
|
|
200 end do
|
|
201 end do
|
|
202 end subroutine test5
|
|
203
|
|
204 subroutine test6(v1, v2, v3, v4, v5, v6, v7, v8, v9)
|
|
205 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
|
|
206 integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
|
|
207 logical :: l, r
|
|
208 l = .false.
|
|
209 r = .false.
|
|
210 a(:, :, :) = 0
|
|
211 b(:, :, :) = 0
|
|
212 !$acc parallel pcopyin (v1, v2, v3, v4, v5, v6, v7, v8, v9) reduction (.or.:l)
|
|
213 !$acc loop reduction (.or.:l) collapse (3)
|
|
214 do i = v1, v2, v7
|
|
215 do j = v3, v4, v8
|
|
216 do k = v5, v6, v9
|
|
217 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
218 l = l.or.k.lt.13.or.k.gt.18
|
|
219 if (.not.l) a(i, j, k) = a(i, j, k) + 1
|
|
220 m = i * 100 + j * 10 + k
|
|
221 end do
|
|
222 end do
|
|
223 end do
|
|
224 !$acc end parallel
|
|
225 do i = v1, v2, v7
|
|
226 do j = v3, v4, v8
|
|
227 do k = v5, v6, v9
|
|
228 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
|
|
229 r = r.or.k.lt.13.or.k.gt.18
|
|
230 if (.not.r) b(i, j, k) = b(i, j, k) + 1
|
|
231 end do
|
|
232 end do
|
|
233 end do
|
131
|
234 if (l .neqv. r) STOP 11
|
111
|
235 do i = v1, v2, v7
|
|
236 do j = v3, v4, v8
|
|
237 do k = v5, v6, v9
|
131
|
238 if (a(i, j, k) .ne. b(i, j, k)) STOP 12
|
111
|
239 end do
|
|
240 end do
|
|
241 end do
|
|
242 end subroutine test6
|
|
243
|
|
244 end program sub_collapse_3
|