cfgexpand: Expand comment on when non-var clobbers can show up
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / bb-slp-28.c
blobc92b687aa44705118f21421a817ac3067e2023c6
1 /* { dg-require-effective-target vect_int } */
3 #include <stdarg.h>
4 #include "tree-vect.h"
6 #define A 300
7 #define N 16
9 char src[N];
10 short dst[N];
11 short src1[N], dst1[N];
13 void foo (int a)
15 dst[0] = (short) (a * (int) src[0]);
16 dst[1] = (short) (a * (int) src[1]);
17 dst[2] = (short) (a * (int) src[2]);
18 dst[3] = (short) (a * (int) src[3]);
19 dst[4] = (short) (a * (int) src[4]);
20 dst[5] = (short) (a * (int) src[5]);
21 dst[6] = (short) (a * (int) src[6]);
22 dst[7] = (short) (a * (int) src[7]);
23 dst[8] = (short) (a * (int) src[8]);
24 dst[9] = (short) (a * (int) src[9]);
25 dst[10] = (short) (a * (int) src[10]);
26 dst[11] = (short) (a * (int) src[11]);
27 dst[12] = (short) (a * (int) src[12]);
28 dst[13] = (short) (a * (int) src[13]);
29 dst[14] = (short) (a * (int) src[14]);
30 dst[15] = (short) (a * (int) src[15]);
32 dst1[0] += src1[0];
33 dst1[1] += src1[1];
34 dst1[2] += src1[2];
35 dst1[3] += src1[3];
36 dst1[4] += src1[4];
37 dst1[5] += src1[5];
38 dst1[6] += src1[6];
39 dst1[7] += src1[7];
43 int main (void)
45 int i;
47 check_vect ();
49 for (i = 0; i < N; i++)
51 dst[i] = 2;
52 dst1[i] = 0;
53 src[i] = i;
54 src1[i] = i+2;
57 foo (A);
59 #pragma GCC novector
60 for (i = 0; i < N; i++)
62 if (dst[i] != A * i
63 || (i < N/2 && dst1[i] != i + 2))
64 abort ();
67 return 0;
70 /* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" { target { vect_int_mult && { vect_pack_trunc && vect_unpack } } } } } */