diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h index 9df0c9641..f1ee7c8ec 100644 --- a/Eigen/src/Core/CoreEvaluators.h +++ b/Eigen/src/Core/CoreEvaluators.h @@ -1181,7 +1181,7 @@ struct mapbase_evaluator : evaluator_base { typedef typename XprType::CoeffReturnType CoeffReturnType; enum { - IsRowMajor = XprType::RowsAtCompileTime, + IsRowMajor = XprType::IsRowMajor, ColsAtCompileTime = XprType::ColsAtCompileTime, CoeffReadCost = NumTraits::ReadCost }; diff --git a/Eigen/src/Core/PartialReduxEvaluator.h b/Eigen/src/Core/PartialReduxEvaluator.h index 1f638f9ac..4d64df28e 100644 --- a/Eigen/src/Core/PartialReduxEvaluator.h +++ b/Eigen/src/Core/PartialReduxEvaluator.h @@ -168,7 +168,7 @@ struct evaluator > Alignment = 0 // FIXME this will need to be improved once PartialReduxExpr is vectorized }; - EIGEN_DEVICE_FUNC explicit evaluator(const XprType xpr) : m_arg(xpr.nestedExpression()), m_functor(xpr.functor()) { + EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) : m_arg(xpr.nestedExpression()), m_functor(xpr.functor()) { EIGEN_INTERNAL_CHECK_COST_VALUE(TraversalSize == Dynamic ? HugeCost : (TraversalSize == 0 ? 1 : int(CostOpType::value))); EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost); diff --git a/Eigen/src/Core/ProductEvaluators.h b/Eigen/src/Core/ProductEvaluators.h index ae860e272..b157bc523 100644 --- a/Eigen/src/Core/ProductEvaluators.h +++ b/Eigen/src/Core/ProductEvaluators.h @@ -920,8 +920,9 @@ struct diagonal_product_evaluator_base : evaluator_base { enum { InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime, DiagonalPacketLoadMode = plain_enum_min( - LoadMode, - ((InnerSize % 16) == 0) ? int(Aligned16) : int(evaluator::Alignment)) // FIXME hardcoded 16!! + LoadMode, ((InnerSize * int(sizeof(Scalar))) % int(unpacket_traits::alignment) == 0) + ? int(unpacket_traits::alignment) + : int(evaluator::Alignment)) }; return internal::pmul(m_matImpl.template packet(row, col), m_diagImpl.template packet(id)); @@ -940,8 +941,9 @@ struct diagonal_product_evaluator_base : evaluator_base { enum { InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime, DiagonalPacketLoadMode = plain_enum_min( - LoadMode, - ((InnerSize % 16) == 0) ? int(Aligned16) : int(evaluator::Alignment)) // FIXME hardcoded 16!! + LoadMode, ((InnerSize * int(sizeof(Scalar))) % int(unpacket_traits::alignment) == 0) + ? int(unpacket_traits::alignment) + : int(evaluator::Alignment)) }; return internal::pmul(m_matImpl.template packetSegment(row, col, begin, count), m_diagImpl.template packetSegment(id, begin, count));