2018-03-25 Thomas Koenig <tkoenig@gcc.gnu.org>
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / examples-4 / simd-7.f90
blobe6af9c8224bb9b02c810e164d2e2b2ee9c855e82
1 ! { dg-do run { target vect_simd_clones } }
2 ! { dg-additional-options "-msse2" { target sse2_runtime } }
3 ! { dg-additional-options "-mavx" { target avx_runtime } }
5 program fibonacci
6 implicit none
7 integer,parameter :: N=30
8 integer :: a(0:N-1), b(0:N-1)
9 integer :: a_ref(0:N-1)
10 integer :: i
11 integer, external :: fib
13 !$omp simd
14 do i = 0,N-1
15 b(i) = i
16 end do
18 !$omp simd
19 do i=0,N-1
20 a(i) = fib(b(i))
21 end do
23 call fib_ref (a_ref, N)
25 do i = 0, N-1
26 if (a(i) .ne. a_ref(i)) STOP 1
27 end do
29 end program
31 recursive function fib(n) result(r)
32 !$omp declare simd(fib) inbranch
33 integer :: n, r
35 if (n <= 1) then
36 r = n
37 else
38 r = fib(n-1) + fib(n-2)
39 endif
41 end function fib
43 subroutine fib_ref(a_ref, n)
44 integer :: n, a_ref(0:n-1)
46 a_ref(0) = 0
47 a_ref(1) = 1
49 do i = 2, n-1
50 a_ref(i) = a_ref(i-1) + a_ref(i-2)
51 end do
53 end subroutine fib_ref