diff options
author | Gael Guennebaud <g.gael@free.fr> | 2014-03-12 18:14:58 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2014-03-12 18:14:58 +0100 |
commit | a395024d4496d6ee5f6876c41a7988e340b392e1 (patch) | |
tree | 0006f919b9cfb94ca19fe6cede34bc4e951f51ae /test/vectorization_logic.cpp | |
parent | f74ed345395b57f299d597c835177222120d9992 (diff) |
More debug info and use lazyProd instead of operator* to query the right flags
Diffstat (limited to 'test/vectorization_logic.cpp')
-rw-r--r-- | test/vectorization_logic.cpp | 69 |
1 files changed, 58 insertions, 11 deletions
diff --git a/test/vectorization_logic.cpp b/test/vectorization_logic.cpp index aee68a87f..23be0ffba 100644 --- a/test/vectorization_logic.cpp +++ b/test/vectorization_logic.cpp @@ -27,19 +27,43 @@ std::string demangle_unrolling(int t) if(t==CompleteUnrolling) return "CompleteUnrolling"; return "?"; } +std::string demangle_flags(int f) +{ + std::string res; + if(f&RowMajorBit) res += " | RowMajor"; + if(f&PacketAccessBit) res += " | Packet"; + if(f&LinearAccessBit) res += " | Linear"; + if(f&LvalueBit) res += " | Lvalue"; + if(f&DirectAccessBit) res += " | Direct"; + if(f&AlignedBit) res += " | Aligned"; + if(f&NestByRefBit) res += " | NestByRef"; + return res; +} template<typename Dst, typename Src> bool test_assign(const Dst&, const Src&, int traversal, int unrolling) { - internal::assign_traits<Dst,Src>::debug(); - bool res = internal::assign_traits<Dst,Src>::Traversal==traversal - && internal::assign_traits<Dst,Src>::Unrolling==unrolling; +#ifdef EIGEN_TEST_EVALUATORS + typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar> > traits; +#else + typedef internal::assign_traits<Dst,Src> traits; +#endif + bool res = traits::Traversal==traversal && traits::Unrolling==unrolling; if(!res) { + std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl; +#ifdef EIGEN_TEST_EVALUATORS + std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl; +#endif + std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl; +#ifdef EIGEN_TEST_EVALUATORS + std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl; +#endif + traits::debug(); std::cerr << " Expected Traversal == " << demangle_traversal(traversal) - << " got " << demangle_traversal(internal::assign_traits<Dst,Src>::Traversal) << "\n"; + << " got " << demangle_traversal(traits::Traversal) << "\n"; std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) - << " got " << demangle_unrolling(internal::assign_traits<Dst,Src>::Unrolling) << "\n"; + << " got " << demangle_unrolling(traits::Unrolling) << "\n"; } return res; } @@ -47,15 +71,27 @@ bool test_assign(const Dst&, const Src&, int traversal, int unrolling) template<typename Dst, typename Src> bool test_assign(int traversal, int unrolling) { - internal::assign_traits<Dst,Src>::debug(); - bool res = internal::assign_traits<Dst,Src>::Traversal==traversal - && internal::assign_traits<Dst,Src>::Unrolling==unrolling; +#ifdef EIGEN_TEST_EVALUATORS + typedef internal::copy_using_evaluator_traits<internal::evaluator<Dst>,internal::evaluator<Src>, internal::assign_op<typename Dst::Scalar> > traits; +#else + typedef internal::assign_traits<Dst,Src> traits; +#endif + bool res = traits::Traversal==traversal && traits::Unrolling==unrolling; if(!res) { + std::cerr << "Src: " << demangle_flags(Src::Flags) << std::endl; +#ifdef EIGEN_TEST_EVALUATORS + std::cerr << " " << demangle_flags(internal::evaluator<Src>::Flags) << std::endl; +#endif + std::cerr << "Dst: " << demangle_flags(Dst::Flags) << std::endl; +#ifdef EIGEN_TEST_EVALUATORS + std::cerr << " " << demangle_flags(internal::evaluator<Dst>::Flags) << std::endl; +#endif + traits::debug(); std::cerr << " Expected Traversal == " << demangle_traversal(traversal) - << " got " << demangle_traversal(internal::assign_traits<Dst,Src>::Traversal) << "\n"; + << " got " << demangle_traversal(traits::Traversal) << "\n"; std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) - << " got " << demangle_unrolling(internal::assign_traits<Dst,Src>::Unrolling) << "\n"; + << " got " << demangle_unrolling(traits::Unrolling) << "\n"; } return res; } @@ -63,10 +99,21 @@ bool test_assign(int traversal, int unrolling) template<typename Xpr> bool test_redux(const Xpr&, int traversal, int unrolling) { +#ifdef EIGEN_TEST_EVALUATORS + typedef internal::redux_traits<internal::scalar_sum_op<typename Xpr::Scalar>,internal::redux_evaluator<Xpr> > traits; +#else typedef internal::redux_traits<internal::scalar_sum_op<typename Xpr::Scalar>,Xpr> traits; +#endif + bool res = traits::Traversal==traversal && traits::Unrolling==unrolling; if(!res) { + std::cerr << demangle_flags(Xpr::Flags) << std::endl; +#ifdef EIGEN_TEST_EVALUATORS + std::cerr << demangle_flags(internal::evaluator<Xpr>::Flags) << std::endl; +#endif + traits::debug(); + std::cerr << " Expected Traversal == " << demangle_traversal(traversal) << " got " << demangle_traversal(traits::Traversal) << "\n"; std::cerr << " Expected Unrolling == " << demangle_unrolling(unrolling) @@ -185,7 +232,7 @@ template<typename Scalar, bool Enable = internal::packet_traits<Scalar>::Vectori Matrix22 >(DefaultTraversal,CompleteUnrolling))); - VERIFY((test_assign(Matrix11(), Matrix11()*Matrix11(), InnerVectorizedTraversal, CompleteUnrolling))); + VERIFY((test_assign(Matrix11(), Matrix11().lazyProduct(Matrix11()), InnerVectorizedTraversal, CompleteUnrolling))); #endif VERIFY(test_assign(MatrixXX(10,10),MatrixXX(20,20).block(10,10,2,3), |