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
      12  foo (int *arr)
      13  {
      14    for (int i = 0; i < N; i++)
      15      arr[i] *= 2;
      16  }
      17  
      18  __attribute__ ((noinline)) void
      19  foo2 (int *arr)
      20  {
      21    for (int i = 0; i < N; i++)
      22      arr[i] *= 4;
      23  }
      24  
      25  int
      26  main (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" } } */