diff --git a/Eigen/src/Core/AssignEvaluator.h b/Eigen/src/Core/AssignEvaluator.h index cf4db8de5..8c6e31500 100644 --- a/Eigen/src/Core/AssignEvaluator.h +++ b/Eigen/src/Core/AssignEvaluator.h @@ -24,7 +24,7 @@ namespace internal { // copy_using_evaluator_traits is based on assign_traits -template +template struct copy_using_evaluator_traits { public: @@ -50,7 +50,8 @@ private: enum { StorageOrdersAgree = (int(Derived::IsRowMajor) == int(OtherDerived::IsRowMajor)), MightVectorize = StorageOrdersAgree - && (int(Derived::Flags) & int(OtherDerived::Flags) & ActualPacketAccessBit), + && (int(Derived::Flags) & int(OtherDerived::Flags) & ActualPacketAccessBit) + && (functor_traits::PacketAccess), MayInnerVectorize = MightVectorize && int(InnerSize)!=Dynamic && int(InnerSize)%int(PacketSize)==0 && int(DstIsAligned) && int(SrcIsAligned), MayLinearize = StorageOrdersAgree && (int(Derived::Flags) & int(OtherDerived::Flags) & LinearAccessBit), @@ -517,7 +518,7 @@ public: typedef SrcEvaluatorTypeT SrcEvaluatorType; typedef typename DstEvaluatorType::Scalar Scalar; typedef typename DstEvaluatorType::Index Index; - typedef copy_using_evaluator_traits AssignmentTraits; + typedef copy_using_evaluator_traits AssignmentTraits; generic_dense_assignment_kernel(DstEvaluatorType &dst, const SrcEvaluatorType &src, const Functor &func, DstXprType& dstExpr) @@ -613,7 +614,7 @@ void call_dense_assignment_loop(const DstXprType& dst, const SrcXprType& src, co { #ifdef EIGEN_DEBUG_ASSIGN // TODO these traits should be computed from information provided by the evaluators - internal::copy_using_evaluator_traits::debug(); + internal::copy_using_evaluator_traits::debug(); #endif eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); @@ -750,7 +751,7 @@ struct Assignment eigen_assert(dst.rows() == src.rows() && dst.cols() == src.cols()); #ifdef EIGEN_DEBUG_ASSIGN - internal::copy_using_evaluator_traits::debug(); + internal::copy_using_evaluator_traits::debug(); #endif call_dense_assignment_loop(dst, src, func); diff --git a/Eigen/src/Core/functors/AssignmentFunctors.h b/Eigen/src/Core/functors/AssignmentFunctors.h index ae264aa64..1ff0eac29 100644 --- a/Eigen/src/Core/functors/AssignmentFunctors.h +++ b/Eigen/src/Core/functors/AssignmentFunctors.h @@ -31,7 +31,7 @@ template struct functor_traits > { enum { Cost = NumTraits::ReadCost, - PacketAccess = packet_traits::IsVectorized + PacketAccess = packet_traits::Vectorizable }; }; @@ -73,7 +73,7 @@ template struct functor_traits > { enum { Cost = NumTraits::ReadCost + NumTraits::AddCost, - PacketAccess = packet_traits::HasAdd + PacketAccess = packet_traits::HasSub }; }; @@ -115,7 +115,7 @@ template struct functor_traits > { enum { Cost = NumTraits::ReadCost + NumTraits::MulCost, - PacketAccess = packet_traits::HasMul + PacketAccess = packet_traits::HasDiv }; }; @@ -156,7 +156,7 @@ template struct functor_traits > { enum { Cost = 3 * NumTraits::ReadCost, - PacketAccess = packet_traits::IsVectorized + PacketAccess = packet_traits::Vectorizable }; };