Small ChangeLog tweak.
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / slp-43.c
blobfea3aadb3416cdeb301307916dc79a1d0bcf63a4
1 /* { dg-require-effective-target vect_int } */
2 /* { dg-additional-options "-O3" } */
4 #include <string.h>
5 #include "tree-vect.h"
7 #define FOO(T,N) \
8 void __attribute__((noinline,noclone)) \
9 foo_ ## T ## _ ## N (T * __restrict__ in_, T * __restrict__ out_, int s) \
10 { \
11 T *in = __builtin_assume_aligned (in_, __BIGGEST_ALIGNMENT__); \
12 T *out = __builtin_assume_aligned (out_, __BIGGEST_ALIGNMENT__); \
13 for (int i = 0; i < 16; i++) \
14 { \
15 for (int j = 0; j < N; ++j) \
16 out[j] = in[j]; \
17 in += s*N; \
18 out += N; \
19 } \
22 #define TEST(T,N) \
23 do { \
24 memset (out, 0, 4096); \
25 foo_ ## T ## _ ## N ((T *)in, (T *)out, 1); \
26 if (memcmp (in, out, sizeof (T) * 16 * N) != 0) \
27 __builtin_abort (); \
28 for (int i = sizeof (T) * 16 * N; i < 4096; ++i) \
29 if (out[i] != 0) \
30 __builtin_abort (); \
31 } while (0)
33 FOO(char, 1)
34 FOO(char, 2)
35 FOO(char, 3)
36 FOO(char, 4)
37 FOO(char, 6)
38 FOO(char, 8)
39 FOO(int, 1)
40 FOO(int, 2)
41 FOO(int, 3)
42 FOO(int, 4)
43 FOO(int, 6)
44 FOO(int, 8)
45 FOO(int, 16)
47 char in[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
48 char out[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
50 int main()
52 check_vect ();
54 for (int i = 0; i < 4096; ++i)
56 in[i] = i;
57 __asm__ volatile ("" : : : "memory");
60 TEST(char, 1);
61 TEST(char, 2);
62 TEST(char, 3);
63 TEST(char, 4);
64 TEST(char, 6);
65 TEST(char, 8);
66 TEST(int, 1);
67 TEST(int, 2);
68 TEST(int, 3);
69 TEST(int, 4);
70 TEST(int, 6);
71 TEST(int, 8);
72 TEST(int, 16);
74 return 0;
77 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 13 "vect" { target vect_hw_misalign } } } */
78 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { ! vect_hw_misalign } } } } */