diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp index 49f93fc39..ab83d7e90 100644 --- a/test/vectorization_logic.cpp +++ b/test/vectorization_logic.cpp @@ -470,31 +470,31 @@ EIGEN_DECLARE_TEST(vectorization_logic) { CALL_SUBTEST(vectorization_logic_half >::run()); CALL_SUBTEST(vectorization_logic_half >::run()); + // For backends without sub-packet types (e.g. the generic clang backend), + // find_best_packet may return a packet larger than the matrix, making + // MayLinearVectorize false in the assignment path (which requires + // SizeAtCompileTime >= PacketSize). The redux path has no such constraint. if (internal::packet_traits::Vectorizable) { - VERIFY(test_assign(Matrix(), Matrix() + Matrix(), - internal::packet_traits::Vectorizable && EIGEN_UNALIGNED_VECTORIZE - ? LinearVectorizedTraversal - : LinearTraversal, - CompleteUnrolling)); + constexpr int kFloatBestPacketSize3x3 = + internal::unpacket_traits::type>::size; + VERIFY(test_assign( + Matrix(), Matrix() + Matrix(), + EIGEN_UNALIGNED_VECTORIZE && kFloatBestPacketSize3x3 <= 9 ? LinearVectorizedTraversal : LinearTraversal, + CompleteUnrolling)); - VERIFY(test_redux(Matrix(), - internal::packet_traits::Vectorizable && EIGEN_UNALIGNED_VECTORIZE - ? LinearVectorizedTraversal - : LinearTraversal, + VERIFY(test_redux(Matrix(), EIGEN_UNALIGNED_VECTORIZE ? LinearVectorizedTraversal : LinearTraversal, CompleteUnrolling)); } if (internal::packet_traits::Vectorizable) { - VERIFY(test_assign(Matrix(), Matrix() + Matrix(), - internal::packet_traits::Vectorizable && EIGEN_UNALIGNED_VECTORIZE - ? LinearVectorizedTraversal - : LinearTraversal, - CompleteUnrolling)); + constexpr int kDoubleBestPacketSize3x3 = + internal::unpacket_traits::type>::size; + VERIFY(test_assign( + Matrix(), Matrix() + Matrix(), + EIGEN_UNALIGNED_VECTORIZE && kDoubleBestPacketSize3x3 <= 9 ? LinearVectorizedTraversal : LinearTraversal, + CompleteUnrolling)); - VERIFY(test_redux(Matrix(), - internal::packet_traits::Vectorizable && EIGEN_UNALIGNED_VECTORIZE - ? LinearVectorizedTraversal - : LinearTraversal, + VERIFY(test_redux(Matrix(), EIGEN_UNALIGNED_VECTORIZE ? LinearVectorizedTraversal : LinearTraversal, CompleteUnrolling)); } #endif // EIGEN_VECTORIZE