[vectorizer][2/2] Hook up mult synthesis logic into vectorisation of mult-by-constant
[official-gcc.git] / gcc / testsuite / gcc.dg / vect / pr65951.c
blobcfd32373181fc4fc1e37677ccec6505321a81b2f
1 /* { dg-require-effective-target vect_int } */
3 #include <stdarg.h>
4 #include "tree-vect.h"
6 #define N 512
8 /* These multiplications should be vectorizable with additions when
9 no vector shift is available. */
11 __attribute__ ((noinline)) void
12 foo (int *arr)
14 for (int i = 0; i < N; i++)
15 arr[i] *= 2;
18 __attribute__ ((noinline)) void
19 foo2 (int *arr)
21 for (int i = 0; i < N; i++)
22 arr[i] *= 4;
25 int
26 main (void)
28 check_vect ();
29 int data[N];
30 int i;
32 for (i = 0; i < N; i++)
34 data[i] = i;
35 __asm__ volatile ("");
38 foo (data);
39 for (i = 0; i < N; i++)
41 if (data[i] / 2 != i)
42 __builtin_abort ();
43 __asm__ volatile ("");
46 for (i = 0; i < N; i++)
48 data[i] = i;
49 __asm__ volatile ("");
52 foo2 (data);
53 for (i = 0; i < N; i++)
55 if (data[i] / 4 != i)
56 __builtin_abort ();
57 __asm__ volatile ("");
60 return 0;
63 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */