1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include "tree-vect.h"
       4  
       5  int a[1024];
       6  unsigned char b[1024];
       7  
       8  extern void abort (void);
       9  
      10  __attribute__((noinline, noclone)) void
      11  foo (int k, int m)
      12  {
      13    int i, k2 = k;
      14    for (i = 0; i < 1024; i++)
      15      {
      16        a[i] = k2;
      17        k2 += m + 1;
      18      }
      19  }
      20  
      21  __attribute__((noinline, noclone)) void
      22  bar (int k, int m)
      23  {
      24    int i, k2 = k;
      25    for (i = 0; i < 1024; i++)
      26      {
      27        k2 += m + 1;
      28        a[i] = k2;
      29      }
      30  }
      31  
      32  __attribute__((noinline, noclone)) void
      33  baz (int k, int m)
      34  {
      35    int i, k2 = k;
      36    for (i = 0; i < 1024; i++)
      37      {
      38        a[i] = k2;
      39        b[i] = i;
      40        k2 += m + 1;
      41      }
      42  }
      43  
      44  int
      45  main ()
      46  {
      47    int i;
      48    check_vect ();
      49    foo (5, 3);
      50    for (i = 0; i < 1024; i++)
      51      if (a[i] != 5 + 4 * i)
      52        abort ();
      53    bar (5, 3);
      54    for (i = 0; i < 1024; i++)
      55      if (a[i] != 9 + 4 * i)
      56        abort ();
      57    baz (5, 3);
      58    for (i = 0; i < 1024; i++)
      59      if (a[i] != 5 + 4 * i || b[i] != (unsigned char) i)
      60        abort ();
      61    return 0;
      62  }
      63  
      64  /* { dg-final { scan-tree-dump-times "vectorized 1 loop" 3 "vect" { target vect_pack_trunc } } } */
      65  /* { dg-final { scan-tree-dump-times "vectorized 1 loop" 2 "vect" { target { ! vect_pack_trunc } } } } */