1 /* { dg-require-effective-target vect_int } */ 2 3 #include <stdarg.h> 4 #include "tree-vect.h" 5 6 #define N 512 7 8 /* These multiplications should be vectorizable with additions when 9 no vector shift is available. */ 10 11 __attribute__ ((noinline)) void foo(int * arr)12foo (int *arr) 13 { 14 for (int i = 0; i < N; i++) 15 arr[i] *= 2; 16 } 17 18 __attribute__ ((noinline)) void foo2(int * arr)19foo2 (int *arr) 20 { 21 for (int i = 0; i < N; i++) 22 arr[i] *= 4; 23 } 24 25 int main(void)26main (void) 27 { 28 check_vect (); 29 int data[N]; 30 int i; 31 32 for (i = 0; i < N; i++) 33 { 34 data[i] = i; 35 __asm__ volatile (""); 36 } 37 38 foo (data); 39 for (i = 0; i < N; i++) 40 { 41 if (data[i] / 2 != i) 42 __builtin_abort (); 43 __asm__ volatile (""); 44 } 45 46 for (i = 0; i < N; i++) 47 { 48 data[i] = i; 49 __asm__ volatile (""); 50 } 51 52 foo2 (data); 53 for (i = 0; i < N; i++) 54 { 55 if (data[i] / 4 != i) 56 __builtin_abort (); 57 __asm__ volatile (""); 58 } 59 60 return 0; 61 } 62 63 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" } } */ 64