i386: Adjust rtx cost for imulq and imulw [PR115749]
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / vect-widen-shift-u8.c
bloba8e536adee0f04611115e97725608d0e82e9893c
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 C1 10
9 #define C2 5
11 __attribute__ ((noinline)) void
12 foo (unsigned char *src, unsigned int *dst1, unsigned int *dst2)
14 int i;
15 unsigned char b, *s = src;
16 unsigned int *d1 = dst1, *d2 = dst2;
18 for (i = 0; i < N; i++)
20 b = *s++;
21 *d1 = b << C1;
22 d1++;
23 *d2 = b << C2;
24 d2++;
27 s = src;
28 d1 = dst1;
29 d2 = dst2;
30 #pragma GCC novector
31 for (i = 0; i < N; i++)
33 b = *s++;
34 if (*d1 != b << C1 || *d2 != b << C2)
35 abort ();
36 d1++;
37 d2++;
41 int main (void)
43 int i;
44 unsigned char in[N];
45 unsigned int out1[N];
46 unsigned int out2[N];
48 check_vect ();
50 for (i = 0; i < N; i++)
52 in[i] = i;
53 out1[i] = 255;
54 out2[i] = 255;
55 __asm__ volatile ("");
58 foo (in, out1, out2);
60 return 0;
63 /* { dg-final { scan-tree-dump-times "vect_recog_widen_shift_pattern: detected" 2 "vect" { target vect_widen_shift } } } */
64 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */