10 #ifdef EIGEN_TEST_PART_1 11 #define EIGEN_UNALIGNED_VECTORIZE 1 14 #ifdef EIGEN_TEST_PART_2 15 #define EIGEN_UNALIGNED_VECTORIZE 0 18 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR 19 #undef EIGEN_DEFAULT_TO_ROW_MAJOR 21 #define EIGEN_DEBUG_ASSIGN 25 using internal::demangle_flags;
26 using internal::demangle_traversal;
27 using internal::demangle_unrolling;
29 template<
typename Dst,
typename Src>
30 bool test_assign(
const Dst&,
const Src&,
int traversal,
int unrolling)
32 typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar,typename Src::Scalar> > traits;
33 bool res = traits::Traversal==traversal;
37 res = res &&
int(traits::Unrolling)==unrolling;
40 std::cerr <<
"Src: " << demangle_flags(Src::Flags) << std::endl;
41 std::cerr <<
" " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
42 std::cerr <<
"Dst: " << demangle_flags(Dst::Flags) << std::endl;
43 std::cerr <<
" " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
45 std::cerr <<
" Expected Traversal == " << demangle_traversal(traversal)
46 <<
" got " << demangle_traversal(traits::Traversal) <<
"\n";
47 std::cerr <<
" Expected Unrolling == " << demangle_unrolling(unrolling)
48 <<
" got " << demangle_unrolling(traits::Unrolling) <<
"\n";
53 template<
typename Dst,
typename Src>
56 typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar,typename Src::Scalar> > traits;
57 bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
60 std::cerr <<
"Src: " << demangle_flags(Src::Flags) << std::endl;
61 std::cerr <<
" " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl;
62 std::cerr <<
"Dst: " << demangle_flags(Dst::Flags) << std::endl;
63 std::cerr <<
" " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl;
65 std::cerr <<
" Expected Traversal == " << demangle_traversal(traversal)
66 <<
" got " << demangle_traversal(traits::Traversal) <<
"\n";
67 std::cerr <<
" Expected Unrolling == " << demangle_unrolling(unrolling)
68 <<
" got " << demangle_unrolling(traits::Unrolling) <<
"\n";
73 template<
typename Xpr>
74 bool test_redux(
const Xpr&,
int traversal,
int unrolling)
77 typedef internal::redux_traits<internal::scalar_sum_op<Scalar,Scalar>,internal::redux_evaluator<Xpr> > traits;
79 bool res = traits::Traversal==traversal && traits::Unrolling==unrolling;
82 std::cerr << demangle_flags(Xpr::Flags) << std::endl;
83 std::cerr << demangle_flags(internal::evaluator<Xpr>::Flags) << std::endl;
86 std::cerr <<
" Expected Traversal == " << demangle_traversal(traversal)
87 <<
" got " << demangle_traversal(traits::Traversal) <<
"\n";
88 std::cerr <<
" Expected Unrolling == " << demangle_unrolling(unrolling)
89 <<
" got " << demangle_unrolling(traits::Unrolling) <<
"\n";
94 template<typename Scalar, bool Enable = internal::packet_traits<Scalar>::Vectorizable>
119 (
PacketSize==8 ? 4 : PacketSize==4 ? 2 : PacketSize==2 ? 1 : 1),
120 (PacketSize==8 ? 2 : PacketSize==4 ? 2 : PacketSize==2 ? 2 : 1)
124 (PacketSize==8 ? 4 : PacketSize==4 ? 2 : PacketSize==2 ? 1 : 1),
125 (PacketSize==8 ? 2 : PacketSize==4 ? 2 : PacketSize==2 ? 2 : 1),
130 (PacketSize==8 ? 4 : PacketSize==4 ? 6 : PacketSize==2 ? ((Matrix11::Flags&
RowMajorBit)?2:3) : 1),
131 (PacketSize==8 ? 6 : PacketSize==4 ? 2 : PacketSize==2 ? ((Matrix11::Flags&
RowMajorBit)?3:2) : 3)
134 #if !EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 186 LinearVectorizedTraversal,CompleteUnrolling));
197 VERIFY(
test_assign(Matrix11(),
Matrix<Scalar,17,17>().
template block<PacketSize,PacketSize>(2,3)+
Matrix<Scalar,17,17>().
template block<PacketSize,PacketSize>(8,4),
223 LinearVectorizedTraversal,NoUnrolling));
225 VERIFY(
test_redux(Matrix44().
template block<(Matrix1::Flags&RowMajorBit)?4:PacketSize,(Matrix1::Flags&RowMajorBit)?PacketSize:4>(1,2),
252 LinearVectorizedTraversal,NoUnrolling));
284 (
PacketSize==8 ? 4 : PacketSize==4 ? 2 : PacketSize==2 ? 1 : 1),
285 (PacketSize==8 ? 2 : PacketSize==4 ? 2 : PacketSize==2 ? 2 : 1)
289 (PacketSize==8 ? 4 : PacketSize==4 ? 2 : PacketSize==2 ? 1 : 1),
290 (PacketSize==8 ? 2 : PacketSize==4 ? 2 : PacketSize==2 ? 2 : 1),
295 (PacketSize==8 ? 4 : PacketSize==4 ? 6 : PacketSize==2 ? ((Matrix11::Flags&
RowMajorBit)?2:3) : 1),
296 (PacketSize==8 ? 6 : PacketSize==4 ? 2 : PacketSize==2 ? ((Matrix11::Flags&
RowMajorBit)?3:2) : 3)
299 #if !EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 342 PacketTraits::HasDiv ? LinearVectorizedTraversal : LinearTraversal,
CompleteUnrolling));
348 VERIFY(
test_assign(Matrix11(),
Matrix<Scalar,17,17>().
template block<PacketSize,PacketSize>(2,3)+
Matrix<Scalar,17,17>().
template block<PacketSize,PacketSize>(8,4),
392 #ifdef EIGEN_VECTORIZE 406 if(internal::packet_traits<float>::Vectorizable)
415 if(internal::packet_traits<double>::Vectorizable)
423 #endif // EIGEN_VECTORIZE
internal::packet_traits< Scalar >::type PacketType
internal::packet_traits< Scalar > PacketTraits
void test_vectorization_logic()
m m block(1, 0, 2, 2)<< 4
Eigen::Matrix< double, 1, 1 > Vector1
A matrix or vector expression mapping an existing array of data.
Matrix< Scalar, Dynamic, 1 > VectorX
#define EIGEN_PLAIN_ENUM_MAX(a, b)
const unsigned int RowMajorBit
internal::unpacket_traits< typename internal::packet_traits< Scalar >::type >::half PacketType
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp< internal::scalar_quotient_op< Scalar >, const Derived, const OtherDerived > cwiseQuotient(const EIGEN_CURRENT_STORAGE_BASE_CLASS< OtherDerived > &other) const
Eigen::Matrix< double, 1, 1 > Matrix1
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Convenience specialization of Stride to specify only an inner stride See class Map for some examples...
internal::unpacket_traits< PacketType >::half HalfPacketType
bool test_assign(const Dst &, const Src &, int traversal, int unrolling)
#define CALL_SUBTEST(FUNC)
#define EIGEN_PLAIN_ENUM_MIN(a, b)
The matrix class, also used for vectors and row-vectors.
bool test_redux(const Xpr &, int traversal, int unrolling)
Convenience specialization of Stride to specify only an outer stride See class Map for some examples...
internal::packet_traits< Scalar > PacketTraits
#define EIGEN_UNALIGNED_VECTORIZE