diff options
-rw-r--r-- | Eigen/src/Core/util/BlasUtil.h | 8 | ||||
-rw-r--r-- | test/product_notemporary.cpp | 9 |
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() |