comparison libgomp/testsuite/libgomp.fortran/vla8.f90 @ 63:b7f97abdc517 gcc-4.6-20100522

update gcc from gcc-4.5.0 to gcc-4.6
author ryoma <e075725@ie.u-ryukyu.ac.jp>
date Mon, 24 May 2010 12:47:05 +0900
parents
children f6334be47118
comparison
equal deleted inserted replaced
56:3c8a44c06a95 63:b7f97abdc517
1 ! { dg-do run }
2
3 call test
4 contains
5 subroutine check (x, y, l)
6 integer :: x, y
7 logical :: l
8 l = l .or. x .ne. y
9 end subroutine check
10
11 subroutine foo (c, d, e, f, g, h, i, j, k, n)
12 use omp_lib
13 integer :: n
14 character (len = *) :: c
15 character (len = n) :: d
16 integer, dimension (2, 3:5, n) :: e
17 integer, dimension (2, 3:n, n) :: f
18 character (len = *), dimension (5, 3:n) :: g
19 character (len = n), dimension (5, 3:n) :: h
20 real, dimension (:, :, :) :: i
21 double precision, dimension (3:, 5:, 7:) :: j
22 integer, dimension (:, :, :) :: k
23 logical :: l
24 integer :: p, q, r
25 character (len = n) :: s
26 integer, dimension (2, 3:5, n) :: t
27 integer, dimension (2, 3:n, n) :: u
28 character (len = n), dimension (5, 3:n) :: v
29 character (len = 2 * n + 24) :: w
30 integer :: x, z
31 character (len = 1) :: y
32 l = .false.
33 !$omp parallel default (none) private (c, d, e, f, g, h, i, j, k) &
34 !$omp & private (s, t, u, v) reduction (.or.:l) num_threads (6) &
35 !$omp private (p, q, r, w, x, y) shared (z)
36 x = omp_get_thread_num ()
37 w = ''
38 if (x .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0'
39 if (x .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1'
40 if (x .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2'
41 if (x .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3'
42 if (x .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4'
43 if (x .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
44 c = w(8:19)
45 d = w(1:7)
46 forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 * x + p + q + 2 * r
47 forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 * x + p + q + 2 * r
48 forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = w(8:19)
49 forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = w(27:38)
50 forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = w(1:7)
51 forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = w(20:26)
52 forall (p = 3:5, q = 2:6, r = 1:7) i(p - 2, q - 1, r) = (7.5 + x) * p * q * r
53 forall (p = 3:5, q = 2:6, r = 1:7) j(p, q + 3, r + 6) = (9.5 + x) * p * q * r
54 forall (p = 1:5, q = 7:7, r = 4:6) k(p, q - 6, r - 3) = 19 + x + p + q + 3 * r
55 s = w(20:26)
56 forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + x + p - q + 2 * r
57 forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - x - p + q - 2 * r
58 forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = w(1:7)
59 forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = w(20:26)
60 !$omp barrier
61 y = ''
62 if (x .eq. 0) y = '0'
63 if (x .eq. 1) y = '1'
64 if (x .eq. 2) y = '2'
65 if (x .eq. 3) y = '3'
66 if (x .eq. 4) y = '4'
67 if (x .eq. 5) y = '5'
68 l = l .or. w(7:7) .ne. y
69 l = l .or. w(19:19) .ne. y
70 l = l .or. w(26:26) .ne. y
71 l = l .or. w(38:38) .ne. y
72 l = l .or. c .ne. w(8:19)
73 l = l .or. d .ne. w(1:7)
74 l = l .or. s .ne. w(20:26)
75 do 103, p = 1, 2
76 do 103, q = 3, 7
77 do 103, r = 1, 7
78 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
79 l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
80 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
81 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
82 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
83 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
84 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
85 l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
86 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
87 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
88 103 continue
89 do 104, p = 3, 5
90 do 104, q = 2, 6
91 do 104, r = 1, 7
92 l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
93 l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
94 104 continue
95 do 105, p = 1, 5
96 do 105, q = 4, 6
97 l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
98 105 continue
99 call check (size (e, 1), 2, l)
100 call check (size (e, 2), 3, l)
101 call check (size (e, 3), 7, l)
102 call check (size (e), 42, l)
103 call check (size (f, 1), 2, l)
104 call check (size (f, 2), 5, l)
105 call check (size (f, 3), 7, l)
106 call check (size (f), 70, l)
107 call check (size (g, 1), 5, l)
108 call check (size (g, 2), 5, l)
109 call check (size (g), 25, l)
110 call check (size (h, 1), 5, l)
111 call check (size (h, 2), 5, l)
112 call check (size (h), 25, l)
113 call check (size (i, 1), 3, l)
114 call check (size (i, 2), 5, l)
115 call check (size (i, 3), 7, l)
116 call check (size (i), 105, l)
117 call check (size (j, 1), 4, l)
118 call check (size (j, 2), 5, l)
119 call check (size (j, 3), 7, l)
120 call check (size (j), 140, l)
121 call check (size (k, 1), 5, l)
122 call check (size (k, 2), 1, l)
123 call check (size (k, 3), 3, l)
124 call check (size (k), 15, l)
125 !$omp single
126 z = omp_get_thread_num ()
127 !$omp end single copyprivate (c, d, e, f, g, h, i, j, k, s, t, u, v)
128 w = ''
129 x = z
130 if (x .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0'
131 if (x .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1'
132 if (x .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2'
133 if (x .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3'
134 if (x .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4'
135 if (x .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
136 y = ''
137 if (x .eq. 0) y = '0'
138 if (x .eq. 1) y = '1'
139 if (x .eq. 2) y = '2'
140 if (x .eq. 3) y = '3'
141 if (x .eq. 4) y = '4'
142 if (x .eq. 5) y = '5'
143 l = l .or. w(7:7) .ne. y
144 l = l .or. w(19:19) .ne. y
145 l = l .or. w(26:26) .ne. y
146 l = l .or. w(38:38) .ne. y
147 l = l .or. c .ne. w(8:19)
148 l = l .or. d .ne. w(1:7)
149 l = l .or. s .ne. w(20:26)
150 do 113, p = 1, 2
151 do 113, q = 3, 7
152 do 113, r = 1, 7
153 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
154 l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
155 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
156 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
157 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
158 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
159 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
160 l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
161 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
162 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
163 113 continue
164 do 114, p = 3, 5
165 do 114, q = 2, 6
166 do 114, r = 1, 7
167 l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
168 l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
169 114 continue
170 do 115, p = 1, 5
171 do 115, q = 4, 6
172 l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
173 115 continue
174 x = omp_get_thread_num ()
175 w = ''
176 if (x .eq. 0) w = 'thread0thr_number_0THREAD0THR_NUMBER_0'
177 if (x .eq. 1) w = 'thread1thr_number_1THREAD1THR_NUMBER_1'
178 if (x .eq. 2) w = 'thread2thr_number_2THREAD2THR_NUMBER_2'
179 if (x .eq. 3) w = 'thread3thr_number_3THREAD3THR_NUMBER_3'
180 if (x .eq. 4) w = 'thread4thr_number_4THREAD4THR_NUMBER_4'
181 if (x .eq. 5) w = 'thread5thr_number_5THREAD5THR_NUMBER_5'
182 c = w(8:19)
183 d = w(1:7)
184 forall (p = 1:2, q = 3:5, r = 1:7) e(p, q, r) = 5 * x + p + q + 2 * r
185 forall (p = 1:2, q = 3:7, r = 1:7) f(p, q, r) = 25 * x + p + q + 2 * r
186 forall (p = 1:5, q = 3:7, p + q .le. 8) g(p, q) = w(8:19)
187 forall (p = 1:5, q = 3:7, p + q .gt. 8) g(p, q) = w(27:38)
188 forall (p = 1:5, q = 3:7, p + q .le. 8) h(p, q) = w(1:7)
189 forall (p = 1:5, q = 3:7, p + q .gt. 8) h(p, q) = w(20:26)
190 forall (p = 3:5, q = 2:6, r = 1:7) i(p - 2, q - 1, r) = (7.5 + x) * p * q * r
191 forall (p = 3:5, q = 2:6, r = 1:7) j(p, q + 3, r + 6) = (9.5 + x) * p * q * r
192 forall (p = 1:5, q = 7:7, r = 4:6) k(p, q - 6, r - 3) = 19 + x + p + q + 3 * r
193 s = w(20:26)
194 forall (p = 1:2, q = 3:5, r = 1:7) t(p, q, r) = -10 + x + p - q + 2 * r
195 forall (p = 1:2, q = 3:7, r = 1:7) u(p, q, r) = 30 - x - p + q - 2 * r
196 forall (p = 1:5, q = 3:7, p + q .le. 8) v(p, q) = w(1:7)
197 forall (p = 1:5, q = 3:7, p + q .gt. 8) v(p, q) = w(20:26)
198 !$omp barrier
199 y = ''
200 if (x .eq. 0) y = '0'
201 if (x .eq. 1) y = '1'
202 if (x .eq. 2) y = '2'
203 if (x .eq. 3) y = '3'
204 if (x .eq. 4) y = '4'
205 if (x .eq. 5) y = '5'
206 l = l .or. w(7:7) .ne. y
207 l = l .or. w(19:19) .ne. y
208 l = l .or. w(26:26) .ne. y
209 l = l .or. w(38:38) .ne. y
210 l = l .or. c .ne. w(8:19)
211 l = l .or. d .ne. w(1:7)
212 l = l .or. s .ne. w(20:26)
213 do 123, p = 1, 2
214 do 123, q = 3, 7
215 do 123, r = 1, 7
216 if (q .lt. 6) l = l .or. e(p, q, r) .ne. 5 * x + p + q + 2 * r
217 l = l .or. f(p, q, r) .ne. 25 * x + p + q + 2 * r
218 if (r .lt. 6 .and. q + r .le. 8) l = l .or. g(r, q) .ne. w(8:19)
219 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. g(r, q) .ne. w(27:38)
220 if (r .lt. 6 .and. q + r .le. 8) l = l .or. h(r, q) .ne. w(1:7)
221 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. h(r, q) .ne. w(20:26)
222 if (q .lt. 6) l = l .or. t(p, q, r) .ne. -10 + x + p - q + 2 * r
223 l = l .or. u(p, q, r) .ne. 30 - x - p + q - 2 * r
224 if (r .lt. 6 .and. q + r .le. 8) l = l .or. v(r, q) .ne. w(1:7)
225 if (r .lt. 6 .and. q + r .gt. 8) l = l .or. v(r, q) .ne. w(20:26)
226 123 continue
227 do 124, p = 3, 5
228 do 124, q = 2, 6
229 do 124, r = 1, 7
230 l = l .or. i(p - 2, q - 1, r) .ne. (7.5 + x) * p * q * r
231 l = l .or. j(p, q + 3, r + 6) .ne. (9.5 + x) * p * q * r
232 124 continue
233 do 125, p = 1, 5
234 do 125, q = 4, 6
235 l = l .or. k(p, 1, q - 3) .ne. 19 + x + p + 7 + 3 * q
236 125 continue
237 !$omp end parallel
238 if (l) call abort
239 end subroutine foo
240
241 subroutine test
242 character (len = 12) :: c
243 character (len = 7) :: d
244 integer, dimension (2, 3:5, 7) :: e
245 integer, dimension (2, 3:7, 7) :: f
246 character (len = 12), dimension (5, 3:7) :: g
247 character (len = 7), dimension (5, 3:7) :: h
248 real, dimension (3:5, 2:6, 1:7) :: i
249 double precision, dimension (3:6, 2:6, 1:7) :: j
250 integer, dimension (1:5, 7:7, 4:6) :: k
251 integer :: p, q, r
252 call foo (c, d, e, f, g, h, i, j, k, 7)
253 end subroutine test
254 end