| ! { dg-do run } | 
 | ! { dg-additional-options "-msse2" { target sse2_runtime } } | 
 | ! { dg-additional-options "-mavx" { target avx_runtime } } | 
 |  | 
 | module work | 
 |  | 
 | integer :: P(1000) | 
 | real    :: A(1000) | 
 |  | 
 | contains | 
 | function do_work(arr) result(pri) | 
 |   implicit none | 
 |   real, dimension(*) :: arr | 
 |  | 
 |   real :: pri | 
 |   integer :: i, j | 
 |  | 
 |   !$omp simd private(j) lastprivate(pri) | 
 |   do i = 1, 999 | 
 |     j = P(i) | 
 |  | 
 |     pri = 0.5 | 
 |     if (mod(j-1, 2) == 0) then | 
 |       pri = A(j+1) + arr(i) | 
 |     endif | 
 |     A(j) = pri * 1.5 | 
 |     pri = pri + A(j) | 
 |   end do | 
 |  | 
 | end function do_work | 
 |  | 
 | end module work | 
 |  | 
 | program simd_8f | 
 |   use work | 
 |   implicit none | 
 |   real :: pri, arr(1000), diff | 
 |   integer :: i | 
 |   real, parameter :: EPS = 0.005 | 
 |  | 
 |   do i = 1, 1000 | 
 |      P(i)   = i | 
 |      A(i)   = (i-1) * 1.5 | 
 |      arr(i) = (i-1) * 1.8 | 
 |   end do | 
 |   pri = do_work(arr) | 
 |  | 
 |   diff = pri - 8237.25 | 
 |  | 
 |   if (diff > EPS .or. -diff > EPS) stop 1 | 
 |  | 
 | end program |