Skip gnat.dg/prot7.adb on hppa.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / nested-function-2.f90
blob4f4148be0aa1878fa22b5090ddaec34e169a5b88
1 ! Exercise nested function decomposition, gcc/tree-nested.c.
3 ! { dg-do run }
5 program collapse3
6 integer :: p1, p2, p3, p4, p5, p6, p7, p8, p9
7 p1 = 2
8 p2 = 6
9 p3 = -2
10 p4 = 4
11 p5 = 13
12 p6 = 18
13 p7 = 1
14 p8 = 1
15 p9 = 1
16 call test1
17 call test2 (p1, p2, p3, p4, p5, p6)
18 call test3 (p1, p2, p3, p4, p5, p6, p7, p8, p9)
19 call test4
20 contains
21 subroutine test1
22 integer :: a(3,3,3), k, kk, kkk, l, ll, lll
23 !$acc parallel
24 !$acc loop collapse(3)
25 do 115 k=1,3
26 dokk: do kk=1,3
27 do kkk=1,3
28 a(k,kk,kkk) = 1
29 enddo
30 enddo dokk
31 115 continue
32 !$acc end parallel
33 if (any(a(1:3,1:3,1:3).ne.1)) STOP 1
34 !$acc parallel
35 !$acc loop collapse(3)
36 dol: do 120 l=1,3
37 doll: do ll=1,3
38 do lll=1,3
39 a(l,ll,lll) = 2
40 enddo
41 enddo doll
42 120 end do dol
43 !$acc end parallel
44 if (any(a(1:3,1:3,1:3).ne.2)) STOP 2
45 end subroutine test1
47 subroutine test2(v1, v2, v3, v4, v5, v6)
48 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
49 integer :: v1, v2, v3, v4, v5, v6
50 logical :: l, r
51 l = .false.
52 r = .false.
53 a(:, :, :) = 0
54 b(:, :, :) = 0
55 !$acc parallel reduction (.or.:l)
56 !$acc loop reduction (.or.:l) collapse (3)
57 do i = v1, v2
58 do j = v3, v4
59 do k = v5, v6
60 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
61 l = l.or.k.lt.13.or.k.gt.18
62 if (.not.l) a(i, j, k) = a(i, j, k) + 1
63 end do
64 end do
65 end do
66 !$acc end parallel
67 do i = v1, v2
68 do j = v3, v4
69 do k = v5, v6
70 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
71 r = r.or.k.lt.13.or.k.gt.18
72 if (.not.l) b(i, j, k) = b(i, j, k) + 1
73 end do
74 end do
75 end do
76 if (l .neqv. r) STOP 3
77 do i = v1, v2
78 do j = v3, v4
79 do k = v5, v6
80 if (a(i, j, k) .ne. b(i, j, k)) STOP 4
81 end do
82 end do
83 end do
84 end subroutine test2
86 subroutine test3(v1, v2, v3, v4, v5, v6, v7, v8, v9)
87 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
88 integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
89 logical :: l, r
90 l = .false.
91 r = .false.
92 a(:, :, :) = 0
93 b(:, :, :) = 0
94 !$acc parallel reduction (.or.:l)
95 !$acc loop reduction (.or.:l) collapse (3)
96 do i = v1, v2, v7
97 do j = v3, v4, v8
98 do k = v5, v6, v9
99 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
100 l = l.or.k.lt.13.or.k.gt.18
101 if (.not.l) a(i, j, k) = a(i, j, k) + 1
102 end do
103 end do
104 end do
105 !$acc end parallel
106 do i = v1, v2, v7
107 do j = v3, v4, v8
108 do k = v5, v6, v9
109 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
110 r = r.or.k.lt.13.or.k.gt.18
111 if (.not.l) b(i, j, k) = b(i, j, k) + 1
112 end do
113 end do
114 end do
115 if (l .neqv. r) STOP 5
116 do i = v1, v2, v7
117 do j = v3, v4, v8
118 do k = v5, v6, v9
119 if (a(i, j, k) .ne. b(i, j, k)) STOP 6
120 end do
121 end do
122 end do
123 end subroutine test3
125 subroutine test4
126 integer :: i, j, k, a(1:7, -3:5, 12:19), b(1:7, -3:5, 12:19)
127 integer :: v1, v2, v3, v4, v5, v6, v7, v8, v9
128 logical :: l, r
129 l = .false.
130 r = .false.
131 a(:, :, :) = 0
132 b(:, :, :) = 0
133 v1 = p1
134 v2 = p2
135 v3 = p3
136 v4 = p4
137 v5 = p5
138 v6 = p6
139 v7 = p7
140 v8 = p8
141 v9 = p9
142 !$acc parallel reduction (.or.:l)
143 !$acc loop reduction (.or.:l) collapse (3)
144 do i = v1, v2, v7
145 do j = v3, v4, v8
146 do k = v5, v6, v9
147 l = l.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
148 l = l.or.k.lt.13.or.k.gt.18
149 if (.not.l) a(i, j, k) = a(i, j, k) + 1
150 end do
151 end do
152 end do
153 !$acc end parallel
154 do i = v1, v2, v7
155 do j = v3, v4, v8
156 do k = v5, v6, v9
157 r = r.or.i.lt.2.or.i.gt.6.or.j.lt.-2.or.j.gt.4
158 r = r.or.k.lt.13.or.k.gt.18
159 if (.not.r) b(i, j, k) = b(i, j, k) + 1
160 end do
161 end do
162 end do
163 if (l .neqv. r) STOP 7
164 do i = v1, v2, v7
165 do j = v3, v4, v8
166 do k = v5, v6, v9
167 if (a(i, j, k) .ne. b(i, j, k)) STOP 8
168 end do
169 end do
170 end do
171 end subroutine test4
173 end program collapse3