1 /* { dg-require-effective-target vect_int } */
7 #define N (VECTOR_BITS * 2 / 32)
16 unsigned int out
[N
*8];
18 unsigned int in
[N
*8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
20 unsigned int in
[N
* 8];
21 for (unsigned int i
= 0; i
< N
* 8; ++i
)
24 asm volatile ("" ::: "memory");
27 unsigned int ia
[N
*2], a0
, a1
, a2
, a3
;
29 /* The last stmt requires interleaving of not power of 2 size - not
31 for (i
= 0; i
< N
/2; i
++)
34 out
[i
*12 + 1] = in
[i
*12 + 1];
35 out
[i
*12 + 2] = in
[i
*12 + 2];
36 out
[i
*12 + 3] = in
[i
*12 + 3];
37 out
[i
*12 + 4] = in
[i
*12 + 4];
38 out
[i
*12 + 5] = in
[i
*12 + 5];
39 out
[i
*12 + 6] = in
[i
*12 + 6];
40 out
[i
*12 + 7] = in
[i
*12 + 7];
41 out
[i
*12 + 8] = in
[i
*12 + 8];
42 out
[i
*12 + 9] = in
[i
*12 + 9];
43 out
[i
*12 + 10] = in
[i
*12 + 10];
44 out
[i
*12 + 11] = in
[i
*12 + 11];
50 for (i
= 0; i
< N
/2; i
++)
52 if (out
[i
*12] != in
[i
*12]
53 || out
[i
*12 + 1] != in
[i
*12 + 1]
54 || out
[i
*12 + 2] != in
[i
*12 + 2]
55 || out
[i
*12 + 3] != in
[i
*12 + 3]
56 || out
[i
*12 + 4] != in
[i
*12 + 4]
57 || out
[i
*12 + 5] != in
[i
*12 + 5]
58 || out
[i
*12 + 6] != in
[i
*12 + 6]
59 || out
[i
*12 + 7] != in
[i
*12 + 7]
60 || out
[i
*12 + 8] != in
[i
*12 + 8]
61 || out
[i
*12 + 9] != in
[i
*12 + 9]
62 || out
[i
*12 + 10] != in
[i
*12 + 10]
63 || out
[i
*12 + 11] != in
[i
*12 + 11]
64 || ia
[i
] != in
[i
*12 + 7])
68 /* Hybrid SLP with unrolling by 2. */
69 for (i
= 0; i
< N
; i
++)
72 out
[i
*6 + 1] = in
[i
*6 + 1];
73 out
[i
*6 + 2] = in
[i
*6 + 2];
74 out
[i
*6 + 3] = in
[i
*6 + 3];
75 out
[i
*6 + 4] = in
[i
*6 + 4];
76 out
[i
*6 + 5] = in
[i
*6 + 5];
82 for (i
= 0; i
< N
/2; i
++)
84 if (out
[i
*6] != in
[i
*6]
85 || out
[i
*6 + 1] != in
[i
*6 + 1]
86 || out
[i
*6 + 2] != in
[i
*6 + 2]
87 || out
[i
*6 + 3] != in
[i
*6 + 3]
88 || out
[i
*6 + 4] != in
[i
*6 + 4]
89 || out
[i
*6 + 5] != in
[i
*6 + 5]
106 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
107 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" } } */