re PR libgomp/66950 (FAIL: libgomp.fortran/examples-4/simd-7.f90 -O0 execution...
[gcc.git] / libgomp / testsuite / libgomp.fortran / examples-4 / simd-7.f90
index a61bb038bf0023cd15f89ff8a1ee179b8e229697..7560657050391f358d1af790b8bc873901458500 100644 (file)
@@ -4,9 +4,9 @@
 
 program fibonacci
    implicit none
-   integer,parameter :: N=45
+   integer,parameter :: N=30
    integer           :: a(0:N-1), b(0:N-1)
-   integer           :: a_ref(0:N-1), b_ref(0:N-1)
+   integer           :: a_ref(0:N-1)
    integer           :: i
    integer, external :: fib
 
@@ -15,35 +15,39 @@ program fibonacci
       b(i) = i
    end do
 
-   do i = 0,N-1
-      b_ref(i) = i
-   end do
-
    !$omp simd
    do i=0,N-1
       a(i) = fib(b(i))
    end do
 
-   do i=0,N-1
-      a_ref(i) = fib(b_ref(i))
-   end do
+   call fib_ref (a_ref, N)
 
    do i = 0, N-1
      if (a(i) .ne. a_ref(i)) call abort ()
    end do
 
-   if (a(44) .ne. 1134903170) call abort()
-
 end program
 
 recursive function fib(n) result(r)
 !$omp declare simd(fib) inbranch
    integer  :: n, r
 
-   if (n <= 2) then
-      r = n
+   if (n <= 1) then
+       r = n
    else
       r = fib(n-1) + fib(n-2)
    endif
 
 end function fib
+
+subroutine fib_ref(a_ref, n)
+   integer  :: n, a_ref(0:n-1)
+
+   a_ref(0) = 0
+   a_ref(1) = 1
+
+   do i = 2, n-1
+     a_ref(i) = a_ref(i-1) + a_ref(i-2)
+   end do
+
+end subroutine fib_ref