blob: b15c34a3ab5756d95b2243108cfe8faa4712c927 [file] [log] [blame]
 /* { dg-do compile } */ /* { dg-require-effective-target vect_float } */ typedef float Value; struct LorentzVector { LorentzVector(Value x=0, Value y=0, Value z=0, Value t=0) : theX(x),theY(y),theZ(z),theT(t){} LorentzVector & operator+=(const LorentzVector & a) { theX += a.theX; theY += a.theY; theZ += a.theZ; theT += a.theT; return *this; } Value theX; Value theY; Value theZ; Value theT; } __attribute__ ((aligned(16))); inline LorentzVector operator+(LorentzVector const & a, LorentzVector const & b) { return LorentzVector(a.theX+b.theX,a.theY+b.theY,a.theZ+b.theZ,a.theT+b.theT); } inline LorentzVector operator*(LorentzVector const & a, Value s) { return LorentzVector(a.theX*s,a.theY*s,a.theZ*s,a.theT*s); } inline LorentzVector operator*(Value s, LorentzVector const & a) { return a*s; } void sum1(LorentzVector & res, Value s, LorentzVector const & v1, LorentzVector const & v2) { res += s*(v1+v2); } void sum2(LorentzVector & res, Value s, LorentzVector const & v1, LorentzVector const & v2) { res = res + s*(v1+v2); } /* { dg-final { scan-tree-dump-times "optimized: basic block" 2 "slp2" } } */