c++: Mostly concepts related formatting fixes
[official-gcc.git] / libgomp / testsuite / libgomp.fortran / simd2.f90
blob415ad9c965d2938b58f694263b8fc84d14664b6d
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