aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Eigen/src/Core/util/BlasUtil.h8
-rw-r--r--test/product_notemporary.cpp9
2 files changed, 11 insertions, 6 deletions
diff --git a/Eigen/src/Core/util/BlasUtil.h b/Eigen/src/Core/util/BlasUtil.h
index 4ae410a78..f1d93d2f8 100644
--- a/Eigen/src/Core/util/BlasUtil.h
+++ b/Eigen/src/Core/util/BlasUtil.h
@@ -167,11 +167,9 @@ template<typename XprType> struct blas_traits
IsTransposed = false,
NeedToConjugate = false,
HasUsableDirectAccess = ( (int(XprType::Flags)&DirectAccessBit)
- && ( /* Uncomment this when the low-level matrix-vector product functions support strided vectors
- bool(XprType::IsVectorAtCompileTime)
- || */
- int(inner_stride_at_compile_time<XprType>::ret) == 1)
- ) ? 1 : 0
+ && ( bool(XprType::IsVectorAtCompileTime)
+ || int(inner_stride_at_compile_time<XprType>::ret) == 1)
+ ) ? 1 : 0
};
typedef typename conditional<bool(HasUsableDirectAccess),
ExtractType,
diff --git a/test/product_notemporary.cpp b/test/product_notemporary.cpp
index 0d33e0ffb..980e2bbaf 100644
--- a/test/product_notemporary.cpp
+++ b/test/product_notemporary.cpp
@@ -60,7 +60,7 @@ template<typename MatrixType> void product_notemporary(const MatrixType& m)
m2 = MatrixType::Random(rows, cols),
m3(rows, cols);
RowVectorType rv1 = RowVectorType::Random(rows), rvres(rows);
- ColVectorType vc2 = ColVectorType::Random(cols), cvres(cols);
+ ColVectorType cv1 = ColVectorType::Random(cols), cvres(cols);
RowMajorMatrixType rm3(rows, cols);
Scalar s1 = internal::random<Scalar>(),
@@ -128,6 +128,13 @@ template<typename MatrixType> void product_notemporary(const MatrixType& m)
// Zero temporaries for ... CoeffBasedProductMode
// - does not work with GCC because of the <..>, we'ld need variadic macros ...
//VERIFY_EVALUATION_COUNT( m3.col(0).head<5>() * m3.col(0).transpose() + m3.col(0).head<5>() * m3.col(0).transpose(), 0 );
+
+ // Check matrix * vectors
+ VERIFY_EVALUATION_COUNT( cvres.noalias() = m1 * cv1, 0 );
+ VERIFY_EVALUATION_COUNT( cvres.noalias() -= m1 * cv1, 0 );
+ VERIFY_EVALUATION_COUNT( cvres.noalias() -= m1 * m2.col(0), 0 );
+ VERIFY_EVALUATION_COUNT( cvres.noalias() -= m1 * rv1.adjoint(), 0 );
+ VERIFY_EVALUATION_COUNT( cvres.noalias() -= m1 * m2.row(0).transpose(), 0 );
}
void test_product_notemporary()