Allow single-element interleaving for non-power-of-2 strides
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / struct_vect_18_run.c
blob9698216ddfbefa289b35dca127913fcb05affb88
1 /* { dg-do run { target aarch64_sve_hw } } */
2 /* { dg-options "-O2 -ftree-vectorize" } */
4 #include "struct_vect_18.c"
6 #undef TEST_LOOP
7 #define TEST_LOOP(NAME, TYPE) \
8 { \
9 TYPE out[N]; \
10 TYPE in[N * 3]; \
11 for (int i = 0; i < N; ++i) \
12 { \
13 out[i] = i * 7 / 2; \
14 asm volatile ("" ::: "memory"); \
15 } \
16 for (int i = 0; i < N * 3; ++i) \
17 { \
18 in[i] = i * 9 / 2; \
19 asm volatile ("" ::: "memory"); \
20 } \
21 NAME (out, in); \
22 for (int i = 0; i < N; ++i) \
23 { \
24 TYPE expected = i * 7 / 2 + in[i * 3]; \
25 if (out[i] != expected) \
26 __builtin_abort (); \
27 asm volatile ("" ::: "memory"); \
28 } \
31 int __attribute__ ((optimize (1)))
32 main (void)
34 TEST (test);
35 return 0;