1 ! { dg-do run { target vect_simd_clones } }
2 ! { dg-additional-options "-msse2" { target sse2_runtime } }
3 ! { dg-additional-options "-mavx" { target avx_runtime } }
7 function add1(a
,b
,fact
) result(c
)
8 !$omp declare simd(add1) uniform(fact)
9 double precision :: a
,b
,fact
, c
13 function add2(a
,b
,i
, fact
) result(c
)
14 !$omp declare simd(add2) uniform(a,b,fact) linear(i:1)
16 double precision, dimension(:) :: a
, b
17 double precision :: fact
, c
18 c
= a(i
) + b(i
) + fact
21 subroutine work(a
, b
, n
)
23 double precision :: a(n
),b(n
), tmp
26 !$omp simd private(tmp)
28 tmp
= add1(a(i
), b(i
), 1.0d0)
29 a(i
) = add2(a
, b
, i
, 1.0d0) + tmp
30 a(i
) = a(i
) + b(i
) + 1.0d0
34 subroutine work_ref(a
, b
, n
)
36 double precision :: a(n
),b(n
), tmp
40 tmp
= add1(a(i
), b(i
), 1.0d0)
41 a(i
) = add2(a
, b
, i
, 1.0d0) + tmp
42 a(i
) = a(i
) + b(i
) + 1.0d0
46 subroutine check (a
, b
, n
)
48 double precision, parameter :: EPS
= 0.0000000000001
49 double precision :: diff
, a(*), b(*)
52 if (diff
> EPS
.or
. -diff
> EPS
) STOP 1
59 integer, parameter :: N
=32
61 double precision :: a(N
), b(N
), a_ref(N
)
69 call work_ref(a_ref
, b
, N
)
71 call check(a
, a_ref
, N
)