aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/vectorization_logic.cpp
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2014-03-12 18:14:58 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2014-03-12 18:14:58 +0100
commita395024d4496d6ee5f6876c41a7988e340b392e1 (patch)
tree0006f919b9cfb94ca19fe6cede34bc4e951f51ae /test/vectorization_logic.cpp
parentf74ed345395b57f299d597c835177222120d9992 (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.cpp69
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),