2 /* { dg-options "-O2" } */
3 /* { dg-additional-options "-msse2" { target sse2_runtime } } */
4 /* { dg-additional-options "-mavx" { target avx_runtime } } */
7 int a
[1024] __attribute__((aligned (32))) = { 1 };
8 int b
[1024] __attribute__((aligned (32))) = { 1 };
9 unsigned char c
[1024] __attribute__((aligned (32))) = { 1 };
11 __UINTPTR_TYPE__ u
, u2
, u3
;
13 __attribute__((noinline
, noclone
)) int
16 int i
, s
= 0, s2
= 0, t
, t2
;
17 #pragma omp simd aligned(a, b, p : 32) linear(k: m + 1) reduction(+:s) \
19 for (i
= 0; i
< 512; i
++)
27 #pragma omp simd aligned(a, b, p : 32) linear(k: m + 1) reduction(+:s2) \
28 lastprivate (t, u, u2, u3)
29 for (i
= 512; i
< 1024; i
++)
34 u
= (__UINTPTR_TYPE__
) &k
;
35 u2
= (__UINTPTR_TYPE__
) &s2
;
36 u3
= (__UINTPTR_TYPE__
) &t
;
40 return s
+ s2
+ t
+ t2
;
43 __attribute__((noinline
, noclone
)) long int
44 bar (int *p
, long int n
, long int o
)
46 long int i
, s
= 0, s2
= 0, t
, t2
;
47 #pragma omp simd aligned(a, b, p : 32) linear(k: m + 1) reduction(+:s) \
49 for (i
= 0; i
< n
; i
++)
57 #pragma omp simd aligned(a, b, p : 32) linear(k: m + 1) reduction(+:s2) \
58 lastprivate (t, u, u2, u3)
59 for (i
= n
; i
< o
; i
++)
64 u
= (__UINTPTR_TYPE__
) &k
;
65 u2
= (__UINTPTR_TYPE__
) &s2
;
66 u3
= (__UINTPTR_TYPE__
) &t
;
70 return s
+ s2
+ t
+ t2
;
76 #if __SIZEOF_INT__ >= 4
80 for (i
= 0; i
< 1024; i
++)
84 c
[i
] = (unsigned char) i
;
87 for (i
= 0; i
< 1024; i
++)
89 if (b
[i
] != (i
- 51) % 39
90 || a
[i
] != (i
- 512) * b
[i
]
91 || c
[i
] != (unsigned char) (i
+ 1))
96 || s
!= 1596127 + (4 + 3 * 511 + b
[511]) + (4 + 3 * 1024 + b
[1023]))
99 s
= bar (b
, 512, 1024);
100 for (i
= 0; i
< 1024; i
++)
102 if (b
[i
] != (i
- 51) % 39
103 || a
[i
] != (i
- 512) * b
[i
]
104 || c
[i
] != (unsigned char) (i
+ 2))
108 if (k
!= 4 + 3 * 1024
109 || s
!= 1596127 + (4 + 3 * 511 + b
[511]) + (4 + 3 * 1024 + b
[1023]))
112 s
= bar (b
, 511, 1021);
113 for (i
= 0; i
< 1021; i
++)
115 if (b
[i
] != (i
- 51) % 39
116 || a
[i
] != (i
- 512) * b
[i
]
117 || c
[i
] != (unsigned char) (i
+ 3))
121 for (i
= 1021; i
< 1024; i
++)
122 if (b
[i
] != (i
- 51) % 39
124 || c
[i
] != (unsigned char) (i
+ 2))
126 if (k
!= 4 + 3 * 1021
127 || s
!= 1586803 + (4 + 3 * 510 + b
[510]) + (4 + 3 * 1021 + b
[1020]))