1 ! { dg-additional-options "-fdump-tree-original" }
4 ! Same as non-rectangular-loop-4.f90 but expr in upper bound
8 subroutine foo (av
, avo
, a0
, a0o
, a1
, a2
, a3
, a4
)
12 integer, value
, optional
:: avo
14 integer, optional
:: a0o
15 integer, pointer :: a1
16 integer, pointer, optional
:: a2
17 integer, allocatable
:: a3
18 integer, allocatable
, optional
:: a4
20 integer, pointer :: a6
21 integer, allocatable
:: a7
22 integer :: arr(20,10), ref(20,10)
24 integer :: j
, i
, lp_i
, lp_j
31 ref(j
, i
) = j
+ 100 * i
36 ! { dg-final { scan-tree-dump-times "for \\(av = 1; av <= 10; av = av \\+ 1\\)" 1 "original" } }
37 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= av \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
41 !$omp simd collapse(2) lastprivate(av,j)
44 arr(j
, av
) = j
+ 100 * av
47 if (any (ref
/= arr
)) error
stop
48 if (av
/= lp_i
.or
. j
/= lp_j
) error
stop
50 ! { dg-final { scan-tree-dump-times "for \\(avo = 1; avo <= 10; avo = avo \\+ 1\\)" 1 "original" } }
51 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= avo \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
55 !$omp simd collapse(2) lastprivate(avo, j)
58 arr(j
, avo
) = j
+ 100 * avo
61 if (any (ref
/= arr
)) error
stop
62 if (avo
/= lp_i
.or
. j
/= lp_j
) error
stop
64 ! { dg-final { scan-tree-dump-times "for \\(a0\\.\[0-9\]+ = 1; a0\\.\[0-9\]+ <= 10; a0\\.\[0-9\]+ = a0\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
65 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a0\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
66 ! { dg-final { scan-tree-dump-times "\\*a0 = a0\\.\[0-9\]+;" 1 "original" } }
69 !$omp simd collapse(2) lastprivate(a0,j)
72 arr(j
, a0
) = j
+ 100 * a0
75 if (any (ref
/= arr
)) error
stop
76 if (a0
/= lp_i
.or
. j
/= lp_j
) error
stop
78 ! { dg-final { scan-tree-dump-times "for \\(a0o\\.\[0-9\]+ = 1; a0o\\.\[0-9\]+ <= 10; a0o\\.\[0-9\]+ = a0o\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
79 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a0o\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
80 ! { dg-final { scan-tree-dump-times "\\*a0o = a0o\\.\[0-9\]+;" 1 "original" } }
83 !$omp simd collapse(2) lastprivate(a0o,j)
86 arr(j
, a0o
) = j
+ 100 * a0o
89 if (any (ref
/= arr
)) error
stop
90 if (a0o
/= lp_i
.or
. j
/= lp_j
) error
stop
92 ! { dg-final { scan-tree-dump-times "for \\(a1\\.\[0-9\]+ = 1; a1\\.\[0-9\]+ <= 10; a1\\.\[0-9\]+ = a1\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
93 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a1\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
94 ! { dg-final { scan-tree-dump-times "\\*\\*a1 = a1\\.\[0-9\]+;" 1 "original" } }
97 ! no last private for 'a1' as "The initial status of a private pointer is undefined."
98 !$omp simd collapse(2) lastprivate(j)
101 arr(j
, a1
) = j
+ 100 * a1
104 if (any (ref
/= arr
)) error
stop
105 if (j
/= lp_j
) error
stop
107 ! { dg-final { scan-tree-dump-times "for \\(a2\\.\[0-9\]+ = 1; a2\\.\[0-9\]+ <= 10; a2\\.\[0-9\]+ = a2\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
108 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a2\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
109 ! { dg-final { scan-tree-dump-times "\\*\\*a2 = a2\\.\[0-9\]+;" 1 "original" } }
112 ! no last private for 'a2' as "The initial status of a private pointer is undefined."
113 !$omp simd collapse(2) lastprivate(j)
116 arr(j
, a2
) = j
+ 100 * a2
119 if (any (ref
/= arr
)) error
stop
120 if (j
/= lp_j
) error
stop
122 ! { dg-final { scan-tree-dump-times "for \\(a3\\.\[0-9\]+ = 1; a3\\.\[0-9\]+ <= 10; a3\\.\[0-9\]+ = a3\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
123 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a3\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
124 ! { dg-final { scan-tree-dump-times "\\*\\*a3 = a3\\.\[0-9\]+;" 1 "original" } }
127 !$omp simd collapse(2) lastprivate(a3,j)
130 arr(j
, a3
) = j
+ 100 * a3
133 if (any (ref
/= arr
)) error
stop
134 if (a3
/= lp_i
.or
. j
/= lp_j
) error
stop
136 ! { dg-final { scan-tree-dump-times "for \\(a4\\.\[0-9\]+ = 1; a4\\.\[0-9\]+ <= 10; a4\\.\[0-9\]+ = a4\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
137 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a4\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
138 ! { dg-final { scan-tree-dump-times "\\*\\*a4 = a4\\.\[0-9\]+;" 1 "original" } }
141 !$omp simd collapse(2) lastprivate(a4,j)
144 arr(j
, a4
) = j
+ 100 * a4
147 if (any (ref
/= arr
)) error
stop
148 if (a4
/= lp_i
.or
. j
/= lp_j
) error
stop
150 ! { dg-final { scan-tree-dump-times "for \\(a5 = 1; a5 <= 10; a5 = a5 \\+ 1\\)" 1 "original" } }
151 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a5 \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
155 !$omp simd collapse(2) lastprivate(a5,j)
158 arr(j
, a5
) = j
+ 100 * a5
161 if (any (ref
/= arr
)) error
stop
162 if (a5
/= lp_i
.or
. j
/= lp_j
) error
stop
164 ! { dg-final { scan-tree-dump-times "for \\(a6\\.\[0-9\]+ = 1; a6\\.\[0-9\]+ <= 10; a6\\.\[0-9\]+ = a6\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
165 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a6\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
166 ! { dg-final { scan-tree-dump-times "\\*a6 = a6\\.\[0-9\]+;" 1 "original" } }
169 ! no last private for 'a6' as "The initial status of a private pointer is undefined."
170 !$omp simd collapse(2) lastprivate(j)
173 arr(j
, a6
) = j
+ 100 * a6
176 if (any (ref
/= arr
)) error
stop
177 if (j
/= lp_j
) error
stop
179 ! { dg-final { scan-tree-dump-times "for \\(a7\\.\[0-9\]+ = 1; a7\\.\[0-9\]+ <= 10; a7\\.\[0-9\]+ = a7\\.\[0-9\]+ \\+ 1\\)" 1 "original" } }
180 ! { dg-final { scan-tree-dump-times "for \\(j = 1; j <= a7\\.\[0-9\]+ \\* 2 \\+ -1; j = j \\+ 1\\)" 1 "original" } }
181 ! { dg-final { scan-tree-dump-times "\\*a7 = a7\\.\[0-9\]+;" 1 "original" } }
184 !$omp simd collapse(2) lastprivate(a7,j)
187 arr(j
, a7
) = j
+ 100 * a7
190 if (any (ref
/= arr
)) error
stop
191 if (a7
/= lp_i
.or
. j
/= lp_j
) error
stop
206 integer, pointer :: a1
207 integer, pointer :: a2
208 integer, allocatable
:: a3
209 integer, allocatable
:: a4
212 allocate(a1
,a2
,a3
,a4
)
213 call foo (av
, avo
, a0
, a0o
, a1
, a2
, a3
, a4
)
214 deallocate(a1
,a2
,a3
,a4
)