2018-11-07 Richard Biener <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / opt / 20181025-1.C
blob43d1614f02305f00bb7f6de36e1cda3c8076519f
1 // { dg-do compile }
2 // { dg-options "-Ofast" }
4 template <typename Number>
5 class Vector {
6     typedef Number value_type;
7     typedef const value_type *const_iterator;
8     Number norm_sqr () const;
9     const_iterator begin () const;
10     unsigned int dim;
12 template <typename Number>
13 static inline Number
14 local_sqr (const Number x)
16   return x*x;
18 template <typename Number>
19 Number
20 Vector<Number>::norm_sqr () const
22   Number sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
23   const_iterator ptr = begin(), eptr = ptr + (dim/4)*4;
24   while (ptr!=eptr) 
25     {
26       sum0 += ::local_sqr(*ptr++);
27       sum1 += ::local_sqr(*ptr++);
28     }
29   return sum0+sum1+sum2+sum3;
31 template class Vector<double>;