]>
Commit | Line | Data |
---|---|---|
acbb0d03 | 1 | /* { dg-require-effective-target vect_int } */ |
9435b515 | 2 | /* { dg-additional-options "-O3 -fno-version-loops-for-strides" } */ |
acbb0d03 | 3 | |
4 | #include <string.h> | |
5 | #include "tree-vect.h" | |
6 | ||
61658d61 | 7 | /* AVX512BW has V64QImode, make char_1 vectorizable with that. */ |
8 | #define MAX_VEC_ELEMENTS 64 | |
9 | ||
acbb0d03 | 10 | #define FOO(T,N) \ |
11 | void __attribute__((noinline,noclone)) \ | |
12 | foo_ ## T ## _ ## N (T * __restrict__ in_, T * __restrict__ out_, int s) \ | |
13 | { \ | |
14 | T *in = __builtin_assume_aligned (in_, __BIGGEST_ALIGNMENT__); \ | |
15 | T *out = __builtin_assume_aligned (out_, __BIGGEST_ALIGNMENT__); \ | |
61658d61 | 16 | for (int i = 0; i < MAX_VEC_ELEMENTS; i++) \ |
acbb0d03 | 17 | { \ |
18 | for (int j = 0; j < N; ++j) \ | |
19 | out[j] = in[j]; \ | |
20 | in += s*N; \ | |
21 | out += N; \ | |
22 | } \ | |
23 | } | |
24 | ||
25 | #define TEST(T,N) \ | |
26 | do { \ | |
27 | memset (out, 0, 4096); \ | |
28 | foo_ ## T ## _ ## N ((T *)in, (T *)out, 1); \ | |
61658d61 | 29 | if (memcmp (in, out, sizeof (T) * MAX_VEC_ELEMENTS * N) != 0) \ |
acbb0d03 | 30 | __builtin_abort (); \ |
61658d61 | 31 | for (int i = sizeof (T) * MAX_VEC_ELEMENTS * N; i < 4096; ++i) \ |
acbb0d03 | 32 | if (out[i] != 0) \ |
33 | __builtin_abort (); \ | |
34 | } while (0) | |
35 | ||
36 | FOO(char, 1) | |
37 | FOO(char, 2) | |
38 | FOO(char, 3) | |
39 | FOO(char, 4) | |
40 | FOO(char, 6) | |
41 | FOO(char, 8) | |
42 | FOO(int, 1) | |
43 | FOO(int, 2) | |
44 | FOO(int, 3) | |
45 | FOO(int, 4) | |
46 | FOO(int, 6) | |
47 | FOO(int, 8) | |
48 | FOO(int, 16) | |
49 | ||
50 | char in[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__))); | |
51 | char out[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__))); | |
52 | ||
53 | int main() | |
54 | { | |
55 | check_vect (); | |
56 | ||
57 | for (int i = 0; i < 4096; ++i) | |
58 | { | |
59 | in[i] = i; | |
60 | __asm__ volatile ("" : : : "memory"); | |
61 | } | |
62 | ||
63 | TEST(char, 1); | |
64 | TEST(char, 2); | |
65 | TEST(char, 3); | |
66 | TEST(char, 4); | |
67 | TEST(char, 6); | |
68 | TEST(char, 8); | |
69 | TEST(int, 1); | |
70 | TEST(int, 2); | |
71 | TEST(int, 3); | |
72 | TEST(int, 4); | |
73 | TEST(int, 6); | |
74 | TEST(int, 8); | |
75 | TEST(int, 16); | |
76 | ||
77 | return 0; | |
78 | } | |
79 | ||
11cb7700 | 80 | /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 13 "vect" { target vect_hw_misalign } } } */ |
81 | /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target { ! vect_hw_misalign } } } } */ |