Fix bugs in evaluator files

libeigen/eigen!2244

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-03-27 18:25:51 -07:00
committed by Charles Schlosser
parent b8baa2c49c
commit 79d7d280a5
3 changed files with 8 additions and 6 deletions

View File

@@ -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
};

View File

@@ -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);

View File

@@ -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));