Revert "Select AVX2 even if the data size is not a multiple of 8"
Tests are failing for AVX and NEON.
This reverts commit eb85b97339e3791d533592bac20999b1b3ebca09.
diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h
index a1314e9..4ed6ae2 100644
--- a/Eigen/src/Core/util/XprHelper.h
+++ b/Eigen/src/Core/util/XprHelper.h
@@ -180,32 +180,8 @@
template<typename T> struct unpacket_traits;
-// If we vectorize regardless of alignment, pick the full-sized packet if:
-//
-// * The size is large enough;
-// * Picking it will result in less operations than picking the half size.
-// Consider the case where the size is 12, the full packet is 8, and the
-// half packet is 4. If we pick the full packet we'd have 1 + 4 operations,
-// but only 3 operations if we pick the half-packet.
-//
-// The reason why we only do this with EIGEN_UNALIGNED_VECTORIZE is that if
-// we chose packets which do not divide the data size exactly we're going to
-// be left with some possibly unaligned data at the end.
-#if EIGEN_UNALIGNED_VECTORIZE
-template<int Size, typename PacketType,
- bool Stop =
- Size==Dynamic ||
- (Size >= unpacket_traits<PacketType>::size &&
- // If the packet size is 1 we're always good -- it will always divide things perfectly.
- // We have this check since otherwise 1/2 would be 0 in the division below.
- (unpacket_traits<PacketType>::size == 1 ||
- (Size/unpacket_traits<PacketType>::size + Size%unpacket_traits<PacketType>::size) <=
- (Size/(unpacket_traits<PacketType>::size/2) + Size%(unpacket_traits<PacketType>::size/2)))) ||
- is_same<PacketType,typename unpacket_traits<PacketType>::half>::value>
-#else
template<int Size, typename PacketType,
bool Stop = Size==Dynamic || (Size%unpacket_traits<PacketType>::size)==0 || is_same<PacketType,typename unpacket_traits<PacketType>::half>::value>
-#endif
struct find_best_packet_helper;
template< int Size, typename PacketType>
diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp
index ecdfbfc..01b9862 100644
--- a/test/vectorization_logic.cpp
+++ b/test/vectorization_logic.cpp
@@ -258,38 +258,7 @@
VERIFY(test_redux(VectorX(10),
LinearVectorizedTraversal,NoUnrolling));
-
- // Some static checks for packet-picking -- see
- // <https://gitlab.com/libeigen/eigen/merge_requests/46#note_271497656> for context.
-
- // Any multiple of the packet size itself will result in the normal packet
- STATIC_CHECK((
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize>::type, PacketType>::value
- ));
- STATIC_CHECK((
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*2>::type, PacketType>::value
- ));
- STATIC_CHECK((
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5>::type, PacketType>::value
- ));
- // Moreover, situations where the size is _not_ a multiple but picking the full packet
- // is convenient will also work, but only with unaligned vectorize
- STATIC_CHECK((
- !(EIGEN_UNALIGNED_VECTORIZE || PacketSize == HalfPacketSize) ||
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5+1>::type, PacketType>::value
- ));
- STATIC_CHECK((
- !(EIGEN_UNALIGNED_VECTORIZE || PacketSize == HalfPacketSize) ||
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*5+2>::type, PacketType>::value
- ));
- // In situations where the picking the full-packet would be detrimental the half-packet
- // is chosen.
- STATIC_CHECK((
- !(PacketSize > 2) ||
- internal::is_same<typename internal::find_best_packet<Scalar, PacketSize*2-1>::type, HalfPacketType>::value
- ));
}
-
};
template<typename Scalar> struct vectorization_logic<Scalar,false>