diff --git a/Eigen/src/Eigenvalues/RealQZ.h b/Eigen/src/Eigenvalues/RealQZ.h index 591538729..a54d82d4e 100644 --- a/Eigen/src/Eigenvalues/RealQZ.h +++ b/Eigen/src/Eigenvalues/RealQZ.h @@ -449,23 +449,23 @@ inline void RealQZ::step(Index f, Index l, Index iter) { Index lr = (std::min)(k + 4, dim); // last row to update Map > tmp(m_workspace.data(), lr); // S - tmp = m_S.template middleCols<2>(k).topRows(lr) * essential2; + tmp.noalias() = m_S.template middleCols<2>(k).topRows(lr) * essential2; tmp += m_S.col(k + 2).head(lr); m_S.col(k + 2).head(lr) -= tau * tmp; - m_S.template middleCols<2>(k).topRows(lr) -= (tau * tmp) * essential2.adjoint(); + m_S.template middleCols<2>(k).topRows(lr).noalias() -= (tau * tmp) * essential2.adjoint(); // T tmp = m_T.template middleCols<2>(k).topRows(lr) * essential2; tmp += m_T.col(k + 2).head(lr); m_T.col(k + 2).head(lr) -= tau * tmp; - m_T.template middleCols<2>(k).topRows(lr) -= (tau * tmp) * essential2.adjoint(); + m_T.template middleCols<2>(k).topRows(lr).noalias() -= (tau * tmp) * essential2.adjoint(); } if (m_computeQZ) { // Z Map > tmp(m_workspace.data(), dim); - tmp = essential2.adjoint() * (m_Z.template middleRows<2>(k)); + tmp.noalias() = essential2.adjoint() * (m_Z.template middleRows<2>(k)); tmp += m_Z.row(k + 2); m_Z.row(k + 2) -= tau * tmp; - m_Z.template middleRows<2>(k) -= essential2 * (tau * tmp); + m_Z.template middleRows<2>(k).noalias() -= essential2 * (tau * tmp); } m_T.coeffRef(k + 2, k) = m_T.coeffRef(k + 2, k + 1) = Scalar(0.0); diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h index b1a9f21fa..6113e97fc 100644 --- a/Eigen/src/Geometry/Transform.h +++ b/Eigen/src/Geometry/Transform.h @@ -1059,11 +1059,11 @@ EIGEN_DEVICE_FUNC void Transform::computeRotationSca : Scalar(1); // so x has absolute value 1 VectorType sv(svd.singularValues()); sv.coeffRef(Dim - 1) *= x; - if (scaling) *scaling = svd.matrixV() * sv.asDiagonal() * svd.matrixV().adjoint(); + if (scaling) (*scaling).noalias() = svd.matrixV() * sv.asDiagonal() * svd.matrixV().adjoint(); if (rotation) { LinearMatrixType m(svd.matrixU()); m.col(Dim - 1) *= x; - *rotation = m * svd.matrixV().adjoint(); + (*rotation).noalias() = m * svd.matrixV().adjoint(); } } @@ -1182,7 +1182,8 @@ EIGEN_DEVICE_FUNC Transform Transform() = -res.matrix().template topLeftCorner() * translation(); + res.matrix().template topRightCorner().noalias() = + -res.matrix().template topLeftCorner() * translation(); res.makeAffine(); // we do need this, because in the beginning res is uninitialized } return res; @@ -1432,7 +1433,7 @@ struct transform_transform_product_impl ResultType; static EIGEN_DEVICE_FUNC ResultType run(const Lhs& lhs, const Rhs& rhs) { ResultType res; - res.linear() = lhs.linear() * rhs.linear(); + res.linear().noalias() = lhs.linear() * rhs.linear(); res.translation() = lhs.linear() * rhs.translation() + lhs.translation(); res.makeAffine(); return res; diff --git a/Eigen/src/LU/FullPivLU.h b/Eigen/src/LU/FullPivLU.h index 3e57764ac..44027103f 100644 --- a/Eigen/src/LU/FullPivLU.h +++ b/Eigen/src/LU/FullPivLU.h @@ -717,7 +717,7 @@ void FullPivLU::_solve_impl(const RhsType& rhs, // Step 2 m_lu.topLeftCorner(smalldim, smalldim).template triangularView().solveInPlace(c.topRows(smalldim)); - if (rows > cols) c.bottomRows(rows - cols) -= m_lu.bottomRows(rows - cols) * c.topRows(cols); + if (rows > cols) c.bottomRows(rows - cols).noalias() -= m_lu.bottomRows(rows - cols) * c.topRows(cols); // Step 3 m_lu.topLeftCorner(nonzero_pivots, nonzero_pivots) diff --git a/Eigen/src/SVD/SVDBase.h b/Eigen/src/SVD/SVDBase.h index d1ad63de2..dcb4dba20 100644 --- a/Eigen/src/SVD/SVDBase.h +++ b/Eigen/src/SVD/SVDBase.h @@ -379,7 +379,7 @@ void SVDBase::_solve_impl(const RhsType& rhs, DstType& dst) const { Index l_rank = rank(); tmp.noalias() = m_matrixU.leftCols(l_rank).adjoint() * rhs; tmp = m_singularValues.head(l_rank).asDiagonal().inverse() * tmp; - dst = m_matrixV.leftCols(l_rank) * tmp; + dst.noalias() = m_matrixV.leftCols(l_rank) * tmp; } template diff --git a/Eigen/src/SVD/UpperBidiagonalization.h b/Eigen/src/SVD/UpperBidiagonalization.h index d78b30bc8..6df6318c9 100644 --- a/Eigen/src/SVD/UpperBidiagonalization.h +++ b/Eigen/src/SVD/UpperBidiagonalization.h @@ -172,7 +172,7 @@ void upperbidiagonalization_blocked_helper( // 1 - update the k-th column of A SubColumnType v_k = A.col(k).tail(remainingRows); v_k -= V_k1 * Y.row(k).head(k).adjoint(); - if (k) v_k -= X_k1 * A.col(k).head(k); + if (k) v_k.noalias() -= X_k1 * A.col(k).head(k); // 2 - construct left Householder transform in-place v_k.makeHouseholderInPlace(tau_v, diagonal[k]); @@ -203,7 +203,7 @@ void upperbidiagonalization_blocked_helper( SubRowType u_k(A.row(k).tail(remainingCols)); u_k = u_k.conjugate(); { - u_k -= Y_k * A.row(k).head(k + 1).adjoint(); + u_k.noalias() -= Y_k * A.row(k).head(k + 1).adjoint(); if (k) u_k -= U_k1.adjoint() * X.row(k).head(k).adjoint(); } diff --git a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h index 808fd7d8f..19ec8ea33 100644 --- a/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +++ b/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h @@ -268,7 +268,7 @@ LevenbergMarquardtSpace::Status LevenbergMarquardt::minimiz /* compute the scaled predicted reduction and */ /* the scaled directional derivative. */ - wa3 = fjac.template triangularView() * (qrfac.colsPermutation().inverse() * wa1); + wa3.noalias() = fjac.template triangularView() * (qrfac.colsPermutation().inverse() * wa1); temp1 = numext::abs2(wa3.stableNorm() / fnorm); temp2 = numext::abs2(sqrt(par) * pnorm / fnorm); prered = temp1 + temp2 / Scalar(.5);