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)12main(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