]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/testsuite/gcc.dg/vect/slp-43.c
Add a loop versioning pass
[thirdparty/gcc.git] / gcc / testsuite / gcc.dg / vect / slp-43.c
CommitLineData
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) \
11void __attribute__((noinline,noclone)) \
12foo_ ## 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
36FOO(char, 1)
37FOO(char, 2)
38FOO(char, 3)
39FOO(char, 4)
40FOO(char, 6)
41FOO(char, 8)
42FOO(int, 1)
43FOO(int, 2)
44FOO(int, 3)
45FOO(int, 4)
46FOO(int, 6)
47FOO(int, 8)
48FOO(int, 16)
49
50char in[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
51char out[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
52
53int 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 } } } } */