annotate libgomp/testsuite/libgomp.oacc-fortran/nested-function-3.f90 @ 158:494b0b89df80 default tip

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