mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Fix bugs in evaluator files
libeigen/eigen!2244 Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
committed by
Charles Schlosser
parent
b8baa2c49c
commit
79d7d280a5
@@ -1181,7 +1181,7 @@ struct mapbase_evaluator : evaluator_base<Derived> {
|
||||
typedef typename XprType::CoeffReturnType CoeffReturnType;
|
||||
|
||||
enum {
|
||||
IsRowMajor = XprType::RowsAtCompileTime,
|
||||
IsRowMajor = XprType::IsRowMajor,
|
||||
ColsAtCompileTime = XprType::ColsAtCompileTime,
|
||||
CoeffReadCost = NumTraits<Scalar>::ReadCost
|
||||
};
|
||||
|
||||
@@ -168,7 +168,7 @@ struct evaluator<PartialReduxExpr<ArgType, MemberOp, Direction> >
|
||||
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);
|
||||
|
||||
@@ -920,8 +920,9 @@ struct diagonal_product_evaluator_base : evaluator_base<Derived> {
|
||||
enum {
|
||||
InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
|
||||
DiagonalPacketLoadMode = plain_enum_min(
|
||||
LoadMode,
|
||||
((InnerSize % 16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
|
||||
LoadMode, ((InnerSize * int(sizeof(Scalar))) % int(unpacket_traits<PacketType>::alignment) == 0)
|
||||
? int(unpacket_traits<PacketType>::alignment)
|
||||
: int(evaluator<DiagonalType>::Alignment))
|
||||
};
|
||||
return internal::pmul(m_matImpl.template packet<LoadMode, PacketType>(row, col),
|
||||
m_diagImpl.template packet<DiagonalPacketLoadMode, PacketType>(id));
|
||||
@@ -940,8 +941,9 @@ struct diagonal_product_evaluator_base : evaluator_base<Derived> {
|
||||
enum {
|
||||
InnerSize = (MatrixType::Flags & RowMajorBit) ? MatrixType::ColsAtCompileTime : MatrixType::RowsAtCompileTime,
|
||||
DiagonalPacketLoadMode = plain_enum_min(
|
||||
LoadMode,
|
||||
((InnerSize % 16) == 0) ? int(Aligned16) : int(evaluator<DiagonalType>::Alignment)) // FIXME hardcoded 16!!
|
||||
LoadMode, ((InnerSize * int(sizeof(Scalar))) % int(unpacket_traits<PacketType>::alignment) == 0)
|
||||
? int(unpacket_traits<PacketType>::alignment)
|
||||
: int(evaluator<DiagonalType>::Alignment))
|
||||
};
|
||||
return internal::pmul(m_matImpl.template packetSegment<LoadMode, PacketType>(row, col, begin, count),
|
||||
m_diagImpl.template packetSegment<DiagonalPacketLoadMode, PacketType>(id, begin, count));
|
||||
|
||||
Reference in New Issue
Block a user