aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2009-07-15 19:54:31 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2009-07-15 19:54:31 +0200
commit97c9445c60f307f6a59a212872173c256adf2acd (patch)
treed1497ad8b5c836341d73d53d6a45ec789456a40a /Eigen/src
parent079fa81d84fc1efb3df784dc840f09b507db5536 (diff)
parent1578421ed14c23fa5c7ab3c818a069f1c1cefb8a (diff)
synch with main devel branch
Diffstat (limited to 'Eigen/src')
-rw-r--r--Eigen/src/Core/Dot.h2
-rw-r--r--Eigen/src/Core/Product.h4
-rw-r--r--Eigen/src/Core/util/XprHelper.h6
-rw-r--r--Eigen/src/QR/Tridiagonalization.h1
4 files changed, 8 insertions, 5 deletions
diff --git a/Eigen/src/Core/Dot.h b/Eigen/src/Core/Dot.h
index 4f185ea5b..c5f2e8505 100644
--- a/Eigen/src/Core/Dot.h
+++ b/Eigen/src/Core/Dot.h
@@ -394,7 +394,7 @@ MatrixBase<Derived>::blueNorm() const
{
ax = ei_abs(coeff(j));
if(ax > b2) abig += ei_abs2(ax*s2m);
- else if(ax < b2) asml += ei_abs2(ax*s1m);
+ else if(ax < b1) asml += ei_abs2(ax*s1m);
else amed += ei_abs2(ax);
}
if(abig > Scalar(0))
diff --git a/Eigen/src/Core/Product.h b/Eigen/src/Core/Product.h
index f0c4480de..6feede458 100644
--- a/Eigen/src/Core/Product.h
+++ b/Eigen/src/Core/Product.h
@@ -208,10 +208,10 @@ struct ei_traits<Product<LhsNested, RhsNested, ProductMode> >
RhsRowMajor = RhsFlags & RowMajorBit,
CanVectorizeRhs = RhsRowMajor && (RhsFlags & PacketAccessBit)
- && (ColsAtCompileTime % ei_packet_traits<Scalar>::size == 0),
+ && (ColsAtCompileTime == Dynamic || (ColsAtCompileTime % ei_packet_traits<Scalar>::size) == 0),
CanVectorizeLhs = (!LhsRowMajor) && (LhsFlags & PacketAccessBit)
- && (RowsAtCompileTime % ei_packet_traits<Scalar>::size == 0),
+ && (RowsAtCompileTime == Dynamic || (RowsAtCompileTime % ei_packet_traits<Scalar>::size) == 0),
EvalToRowMajor = RhsRowMajor && (ProductMode==(int)CacheFriendlyProduct ? LhsRowMajor : (!CanVectorizeLhs)),
diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h
index a4ffb8a20..d392e27ba 100644
--- a/Eigen/src/Core/util/XprHelper.h
+++ b/Eigen/src/Core/util/XprHelper.h
@@ -86,9 +86,11 @@ class ei_compute_matrix_flags
{
enum {
row_major_bit = Options&RowMajor ? RowMajorBit : 0,
- inner_max_size = row_major_bit ? MaxCols : MaxRows,
+ inner_max_size = MaxCols==1 ? MaxRows
+ : MaxRows==1 ? MaxCols
+ : row_major_bit ? MaxCols : MaxRows,
is_big = inner_max_size == Dynamic,
- is_packet_size_multiple = (Cols*Rows) % ei_packet_traits<Scalar>::size == 0,
+ is_packet_size_multiple = Rows==Dynamic || Cols==Dynamic || ((Cols*Rows) % ei_packet_traits<Scalar>::size) == 0,
aligned_bit = (((Options&DontAlign)==0) && (is_big || is_packet_size_multiple)) ? AlignedBit : 0,
packet_access_bit = ei_packet_traits<Scalar>::size > 1 && aligned_bit ? PacketAccessBit : 0
};
diff --git a/Eigen/src/QR/Tridiagonalization.h b/Eigen/src/QR/Tridiagonalization.h
index 4808b69ce..8051f7a55 100644
--- a/Eigen/src/QR/Tridiagonalization.h
+++ b/Eigen/src/QR/Tridiagonalization.h
@@ -277,6 +277,7 @@ Tridiagonalization<MatrixType>::matrixQ(void) const
Scalar tmp = m_matrix.coeff(i+1,i);
m_matrix.const_cast_derived().coeffRef(i+1,i) = 1;
+ // TODO this product could be optimized by processing the submatrix per panel of at least 4 columns
matQ.corner(BottomRight,n-i-1,n-i-1) -=
((m_hCoeffs.coeff(i) * m_matrix.col(i).end(n-i-1)) *
(m_matrix.col(i).end(n-i-1).adjoint() * matQ.corner(BottomRight,n-i-1,n-i-1)).lazy()).lazy();