Tighten condition in vect/pr85586.c (PR 85654)
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / slp-45.c
blob20a9f815292e1e805fab8b8e2838a4922a4057d7
1 /* { dg-require-effective-target vect_int } */
2 /* { dg-additional-options "-O3" } */
4 #include <string.h>
5 #include "tree-vect.h"
7 /* AVX512BW has V64QImode, make char_1 vectorizable with that. */
8 #define MAX_VEC_ELEMENTS 64
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__); \
16 for (int i = 0; i < MAX_VEC_ELEMENTS; i++) \
17 { \
18 for (int j = 0; j < N; ++j) \
19 out[j] = in[j]; \
20 in += N; \
21 out += s*N; \
22 } \
25 #define TEST(T,N) \
26 do { \
27 memset (out, 0, 4096); \
28 foo_ ## T ## _ ## N ((T *)in, (T *)out, 1); \
29 if (memcmp (in, out, sizeof (T) * MAX_VEC_ELEMENTS * N) != 0) \
30 __builtin_abort (); \
31 for (int i = sizeof (T) * MAX_VEC_ELEMENTS * N; i < 4096; ++i) \
32 if (out[i] != 0) \
33 __builtin_abort (); \
34 } while (0)
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)
50 char in[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
51 char out[4096] __attribute__((aligned(__BIGGEST_ALIGNMENT__)));
53 int main()
55 check_vect ();
57 for (int i = 0; i < 4096; ++i)
59 in[i] = i;
60 __asm__ volatile ("" : : : "memory");
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);
77 return 0;
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 } } } } */