1 // { dg-do compile }
2 // { dg-require-effective-target vect_double }
3 
4 #include <vector>
5 #include <complex>
6 #include <iostream>
7 #include <cstdlib>
8 
9 using namespace std;
10 
11 int
main(int argc,char ** argv)12 main(int argc, char** argv)
13 {
14   if (argc < 3)
15     {
16       cout << "usage: size N" << endl;
17       return -1;
18     }
19 
20   const unsigned int size = atoi(argv[1]);
21   const unsigned int N    = atoi(argv[2]);
22 
23   cout << "size = " << size << endl;
24   cout << "N    = " << N    << endl;
25 
26   typedef complex<double> cx_double;
27 
28   vector< cx_double > A(size);
29   vector< cx_double > B(size);
30   vector< cx_double > C(size);
31 
32   cx_double* A_ptr = &A[0];
33   cx_double* B_ptr = &B[0];
34   cx_double* C_ptr = &C[0];
35 
36   for (unsigned int i=0; i<size; ++i)
37     {
38       A_ptr[i] = cx_double( (double(rand())/RAND_MAX), (double(rand())/RAND_MAX) );
39       B_ptr[i] = cx_double( (double(rand())/RAND_MAX), (double(rand())/RAND_MAX) );
40       C_ptr[i] = cx_double( double(0), double(0) );
41     }
42 
43   for (unsigned int j=0; j<N; ++j)
44     for (unsigned int i=0; i<size; ++i)
45       C_ptr[i] = A_ptr[i] + B_ptr[i];
46 
47   cout << C_ptr[0] << endl;
48 
49   return 0;
50 }
51 
52 // { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } }
53