2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / simd2.f90
blob0062d5e6e60bfdcf2ebb2f39cc54b4b3dae8a96f
1 ! { dg-do run }
2 ! { dg-additional-options "-msse2" { target sse2_runtime } }
3 ! { dg-additional-options "-mavx" { target avx_runtime } }
5 integer :: a(1024), b(1024), k, m, i, s, t
6 k = 4
7 m = 2
8 t = 1
9 do i = 1, 1024
10 a(i) = i - 513
11 b(i) = modulo (i - 52, 39)
12 if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
13 end do
14 s = foo (b)
15 do i = 1, 1024
16 if (a(i).ne.((i - 513) * b(i))) STOP 1
17 if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
18 if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 2
19 else
20 if (b(i).ne.(modulo (i - 52, 39))) STOP 3
21 end if
22 a(i) = i - 513
23 end do
24 if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 4
25 k = 4
26 m = 2
27 t = 1
28 s = bar (b)
29 do i = 1, 1024
30 if (a(i).ne.((i - 513) * b(i))) STOP 5
31 if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
32 if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 6
33 else
34 if (b(i).ne.(modulo (i - 52, 39))) STOP 7
35 end if
36 a(i) = i - 513
37 end do
38 if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 8
39 k = 4
40 m = 2
41 t = 1
42 s = baz (b)
43 do i = 1, 1024
44 if (a(i).ne.((i - 513) * b(i))) STOP 9
45 if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
46 if (b(i).ne.(modulo (i - 52, 39) - 39)) STOP 10
47 else
48 if (b(i).ne.(modulo (i - 52, 39))) STOP 11
49 end if
50 end do
51 if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) STOP 12
52 contains
53 function foo (p)
54 integer :: p(1024), u, v, i, s, foo
55 s = 0
56 !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
57 do i = 1, 1024
58 a(i) = a(i) * p(i)
59 u = p(i) + k
60 k = k + m + 1
61 v = p(i) + k
62 s = s + p(i) + k
63 end do
64 !$omp end simd
65 if (i.ne.1025) STOP 13
66 if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 14
67 foo = s
68 end function foo
69 function bar (p)
70 integer :: p(1024), u, v, i, s, bar
71 s = 0
72 !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
73 do i = 1, 1024, t
74 a(i) = a(i) * p(i)
75 u = p(i) + k
76 k = k + m + 1
77 v = p(i) + k
78 s = s + p(i) + k
79 end do
80 !$omp end simd
81 if (i.ne.1025) STOP 15
82 if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 16
83 bar = s
84 end function bar
85 function baz (p)
86 integer :: p(1024), u, v, i, s, baz
87 s = 0
88 !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
89 !$omp & linear(i : t)
90 do i = 1, 1024, t
91 a(i) = a(i) * p(i)
92 u = p(i) + k
93 k = k + m + 1
94 v = p(i) + k
95 s = s + p(i) + k
96 end do
97 if (i.ne.1025) STOP 17
98 if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) STOP 18
99 baz = s
100 end function baz