1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdlib.h>
       4  #include <stdarg.h>
       5  #include "tree-vect.h"
       6  
       7  #define N 9
       8  
       9  static int a[N] = {1,2,3,4,5,6,7,8,9};
      10  static int b[N] = {2,3,4,5,6,7,8,9,0};
      11  
      12  __attribute__ ((noinline))
      13  int main1 () {
      14    int i;
      15    int *p, *q, *p1, *q1;
      16    p = (unsigned int *) malloc (sizeof (unsigned int) * N);
      17    q = (unsigned int *) malloc (sizeof (unsigned int) * N);
      18  
      19    p1 = p; q1 = q;
      20  
      21    /* Vectorizable, before pointer plus we would get a redundant cast
      22       (caused by pointer arithmetics), alias analysis fails to distinguish
      23       between the pointers.  */
      24    for (i = 0; i < N; i++)
      25      {
      26        *(q + i) = a[i];
      27        *(p + i) = b[i];
      28      }
      29  
      30    /* check results: */
      31    for (i = 0; i < N; i++)
      32      {
      33         if (*q != a[i] || *p != b[i])
      34           abort();
      35         q++; 
      36         p++;
      37      }
      38    
      39    q = q1;
      40    p = p1;
      41    /* Vectorizable.  */ 
      42    for (i = 0; i < N; i++)
      43      {
      44        *q = b[i];
      45        *p = a[i];
      46        q++;
      47        p++;
      48      }
      49  
      50    q = q1;
      51    p = p1;
      52    /* check results: */
      53    for (i = 0; i < N; i++)
      54      {
      55         if (*q != b[i] || *p != a[i])
      56           abort();
      57         q++;
      58         p++;
      59      }
      60  
      61    return 0; 
      62  }
      63  
      64  int main (void)
      65  { 
      66    check_vect ();
      67  
      68    return main1 ();
      69  }
      70  
      71  /* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" } } */
      72