2 ! { dg-additional-options "-msse2" { target sse2_runtime } }
3 ! { dg-additional-options "-mavx" { target avx_runtime } }
7 ! Nonrectangular loop nests checks
8 ! This testcase uses negative step sizes
11 implicit none (type, external)
14 ! The 'k' loop uses i or j as start value
15 ! but a constant end value such that 'lastprivate'
16 ! should be well-defined
17 subroutine lastprivate_check_simd_1
18 integer :: n
,m
,p
, i
,j
,k
, one
25 ! Use 'i' or 'j', unit step on 'i' or on 'j' -> 4 loops
26 ! Then same, except use non-unit step for 'k'
28 !$omp simd collapse(3) lastprivate(k)
31 do k
= p
+ j
, p
- 41, -1
32 if (k
< p
- 41 .or
. k
> p
+m
) error
stop
36 if (k
/= p
- 41 - 1) error
stop
38 !$omp simd collapse(3) lastprivate(k)
42 if (k
< 1 - 41 .or
. k
> p
) error
stop
46 if (k
/= -41) error
stop
48 !$omp simd collapse(3) lastprivate(k)
52 if (k
< 1 - 41 .or
. k
> p
) then
53 ! print *, i, j, k,p, " -> i, j, k, p (k < 1 - 41 .or. k > p)"
59 if (k
/= -41) error
stop
63 !$omp simd collapse(3) lastprivate(k)
67 if (k
< 1 - 41 .or
. k
> p
) then
68 ! print *, i, j, k,p, " -> i, j, k, p (k < 1 - 41 .or. k > p)"
74 if (k
/= -43) error
stop
78 !$omp simd collapse(3) lastprivate(k)
82 if (k
< 1 - 41 .or
. k
> p
) error
stop
86 if (k
/= -41) error
stop
90 !$omp simd collapse(3) lastprivate(k)
94 if (k
< 1 - 41 .or
. k
> p
) error
stop
98 if (k
/= -70) error
stop
102 ! Same but 'private' for all (i,j) vars
104 !$omp simd collapse(3) lastprivate(k) private(i,j)
108 if (k
< 1 - 41 .or
. k
> p
) error
stop
112 if (k
/= -41) error
stop
114 !$omp simd collapse(3) lastprivate(k) private(i,j)
118 if (k
< 1 - 41 .or
. k
> p
) error
stop
122 if (k
/= -41) error
stop
124 !$omp simd collapse(3) lastprivate(k) private(i,j)
128 if (k
< 1 - 41 .or
. k
> p
) error
stop
132 if (k
/= -41) error
stop
134 !$omp simd collapse(3) lastprivate(k) private(i,j)
138 if (k
< 1 - 41 .or
. k
> p
) error
stop
142 if (k
/= -41) error
stop
144 ! Same - but with lastprivate(i,j)
146 !$omp simd collapse(3) lastprivate(k) lastprivate(i,j)
150 if (k
< 1 - 41 .or
. k
> p
) error
stop
154 if (k
/= -41) error
stop
155 if (i
/= 0 .or
. j
/= -1) error
stop
157 !$omp simd collapse(3) lastprivate(k) lastprivate(i,j)
161 if (k
< 1 - 41 .or
. k
> p
) error
stop
165 if (k
/= -41) error
stop
166 if (i
/= -1 .or
. j
/= 0) error
stop
168 !$omp simd collapse(3) lastprivate(k) lastprivate(i,j)
172 if (k
< 1 - 41 .or
. k
> p
) error
stop
176 if (k
/= -41) error
stop
177 if (i
/= -1 .or
. j
/= 0) error
stop
179 !$omp simd collapse(3) lastprivate(k) lastprivate(i,j)
183 if (k
< 1 - 41 .or
. k
> p
) error
stop
187 if (k
/= -41) error
stop
188 if (i
/= 0 .or
. j
/= -1) error
stop
189 end subroutine lastprivate_check_simd_1
194 implicit none (type, external)
195 call lastprivate_check_simd_1