fix severe perf bug: coeff-based matrix products were not considered aligned, typically preventing vectorization.

added unit test.
This commit is contained in:
Benoit Jacob 2011-01-02 12:07:39 -05:00
parent 47a9d2ed54
commit fd4e366d7e
2 changed files with 3 additions and 0 deletions

View File

@ -98,6 +98,7 @@ struct traits<CoeffBasedProduct<LhsNested,RhsNested,NestingFlags> >
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),

View File

@ -186,6 +186,8 @@ template<typename Scalar, bool Enable = internal::packet_traits<Scalar>::Vectori
Matrix22
>(DefaultTraversal,CompleteUnrolling)));
VERIFY((test_assign(Matrix11(), Matrix11()*Matrix11(), InnerVectorizedTraversal, CompleteUnrolling)));
VERIFY(test_redux(VectorX(10),
LinearVectorizedTraversal,NoUnrolling));