diff --git a/Eigen/src/Core/Sum.h b/Eigen/src/Core/Sum.h index 33aa60956..ab9cdad1f 100644 --- a/Eigen/src/Core/Sum.h +++ b/Eigen/src/Core/Sum.h @@ -231,11 +231,18 @@ template struct ei_sum_impl { typedef typename Derived::Scalar Scalar; + typedef typename ei_packet_traits::type PacketScalar; + enum { + PacketSize = ei_packet_traits::size, + Size = Derived::SizeAtCompileTime, + VectorizationSize = (Size / PacketSize) * PacketSize + }; static Scalar run(const Derived& mat) { - return ei_predux( - ei_sum_vec_unroller::run(mat) - ); + Scalar res = ei_predux(ei_sum_vec_unroller::run(mat)); + if (VectorizationSize != Size) + res += ei_sum_novec_unroller::run(mat); + return res; } };