From fd4e366d7e224364a24d278bc23a0dca5d7472ce Mon Sep 17 00:00:00 2001 From: Benoit Jacob Date: Sun, 2 Jan 2011 12:07:39 -0500 Subject: [PATCH] fix severe perf bug: coeff-based matrix products were not considered aligned, typically preventing vectorization. added unit test. --- Eigen/src/Core/products/CoeffBasedProduct.h | 1 + test/vectorization_logic.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Eigen/src/Core/products/CoeffBasedProduct.h b/Eigen/src/Core/products/CoeffBasedProduct.h index 8605011da..878956a33 100644 --- a/Eigen/src/Core/products/CoeffBasedProduct.h +++ b/Eigen/src/Core/products/CoeffBasedProduct.h @@ -98,6 +98,7 @@ struct traits > Flags = ((unsigned int)(LhsFlags | RhsFlags) & HereditaryBits & ~RowMajorBit) | (EvalToRowMajor ? RowMajorBit : 0) | NestingFlags + | (LhsFlags & RhsFlags & AlignedBit) // TODO enable vectorization for mixed types | (SameType && (CanVectorizeLhs || CanVectorizeRhs) ? PacketAccessBit : 0), diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp index 1a00af840..911b79d0d 100644 --- a/test/vectorization_logic.cpp +++ b/test/vectorization_logic.cpp @@ -186,6 +186,8 @@ template::Vectori Matrix22 >(DefaultTraversal,CompleteUnrolling))); + VERIFY((test_assign(Matrix11(), Matrix11()*Matrix11(), InnerVectorizedTraversal, CompleteUnrolling))); + VERIFY(test_redux(VectorX(10), LinearVectorizedTraversal,NoUnrolling));