cfgexpand: Expand comment on when non-var clobbers can show up
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-widen-shift-s16.c
blob26d5310807781eb5a7935c51e813bc88892f747c
1 /* { dg-require-effective-target vect_int } */
2 /* { dg-require-effective-target vect_shift } */
4 #include <stdarg.h>
5 #include "tree-vect.h"
7 #define N 64
8 #define C 16
10 __attribute__ ((noinline)) void
11 foo (short *src, int *dst)
13 int i;
14 short b, b0, b1, b2, b3, *s = src;
15 int *d = dst;
17 for (i = 0; i < N/4; i++)
19 b0 = *s++;
20 b1 = *s++;
21 b2 = *s++;
22 b3 = *s++;
23 *d = b0 << C;
24 d++;
25 *d = b1 << C;
26 d++;
27 *d = b2 << C;
28 d++;
29 *d = b3 << C;
30 d++;
33 s = src;
34 d = dst;
35 #pragma GCC novector
36 for (i = 0; i < N; i++)
38 b = *s++;
39 if (*d != b << C)
40 abort ();
41 d++;
44 s = src;
45 d = dst;
46 for (i = 0; i < N/4; i++)
48 b0 = *s++;
49 b1 = *s++;
50 b2 = *s++;
51 b3 = *s++;
52 *d = b0 << C;
53 d++;
54 *d = b1 << C;
55 d++;
56 *d = b2 << C;
57 d++;
58 *d = b3 << 6;
59 d++;
62 s = src;
63 d = dst;
64 #pragma GCC novector
65 for (i = 0; i < N/4; i++)
67 b = *s++;
68 if (*d != b << C)
69 abort ();
70 d++;
71 b = *s++;
72 if (*d != b << C)
73 abort ();
74 d++;
75 b = *s++;
76 if (*d != b << C)
77 abort ();
78 d++;
79 b = *s++;
80 if (*d != b << 6)
81 abort ();
82 d++;
86 int main (void)
88 int i;
89 short in[N];
90 int out[N];
92 check_vect ();
94 for (i = 0; i < N; i++)
96 in[i] = i;
97 out[i] = 255;
98 __asm__ volatile ("");
101 foo (in, out);
103 return 0;
106 /* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 8 "vect" { target vect_widen_shift } } } */
107 /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */