1 ! Exercise nested function decomposition, gcc/tree-nested.c.
6 integer :: p1
, p2
, p3
, p4
, p5
, p6
, p7
, p8
, p9
17 call test2 (p1
, p2
, p3
, p4
, p5
, p6
)
18 call test3 (p1
, p2
, p3
, p4
, p5
, p6
, p7
, p8
, p9
)
22 integer :: a(3,3,3), k
, kk
, kkk
, l
, ll
, lll
24 !$acc loop collapse(3)
33 if (any(a(1:3,1:3,1:3).ne
.1)) STOP 1
35 !$acc loop collapse(3)
44 if (any(a(1:3,1:3,1:3).ne
.2)) STOP 2
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
55 !$acc parallel reduction (.or.:l)
56 !$acc loop reduction (.or.:l) collapse (3)
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
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
76 if (l
.neqv
. r
) STOP 3
80 if (a(i
, j
, k
) .ne
. b(i
, j
, k
)) STOP 4
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
94 !$acc parallel reduction (.or.:l)
95 !$acc loop reduction (.or.:l) collapse (3)
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
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
115 if (l
.neqv
. r
) STOP 5
119 if (a(i
, j
, k
) .ne
. b(i
, j
, k
)) STOP 6
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
142 !$acc parallel reduction (.or.:l)
143 !$acc loop reduction (.or.:l) collapse (3)
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
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
163 if (l
.neqv
. r
) STOP 7
167 if (a(i
, j
, k
) .ne
. b(i
, j
, k
)) STOP 8
173 end program collapse3