libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / slp-perm-10.c
blob2cce30c2444323ba6166ceee6a768fbd9d881a47
1 /* { dg-require-effective-target vect_int } */
3 #include "tree-vect.h"
5 int a[256], b[256];
7 void __attribute__((noinline))
8 foo (void)
10 int i;
11 for (i = 0; i < 32; ++i)
13 b[i*8+0] = a[i*8+0];
14 b[i*8+1] = a[i*8+0];
15 b[i*8+2] = a[i*8+3];
16 b[i*8+3] = a[i*8+3];
17 b[i*8+4] = a[i*8+4];
18 b[i*8+5] = a[i*8+6];
19 b[i*8+6] = a[i*8+4];
20 b[i*8+7] = a[i*8+6];
24 int main ()
26 int i;
28 check_vect ();
30 for (i = 0; i < 256; ++i)
32 a[i] = i;
33 __asm__ volatile ("");
36 foo ();
38 #pragma GCC novector
39 for (i = 0; i < 32; ++i)
40 if (b[i*8+0] != i*8+0
41 || b[i*8+1] != i*8+0
42 || b[i*8+2] != i*8+3
43 || b[i*8+3] != i*8+3
44 || b[i*8+4] != i*8+4
45 || b[i*8+5] != i*8+6
46 || b[i*8+6] != i*8+4
47 || b[i*8+7] != i*8+6)
48 abort ();
50 return 0;
53 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */
54 /* SLP fails for variable-length SVE because the load size is greater
55 than the minimum vector size. */
56 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target vect_perm xfail { aarch64_sve && vect_variable_length } } } } */