From 558427532565bf9c81bd4473591cfc6b552deff2 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Fri, 29 Nov 2013 13:38:59 +0100 Subject: [PATCH] Remove HasEvalTo and all at once eval mode --- Eigen/src/Core/AssignEvaluator.h | 23 ++--------------------- Eigen/src/Core/CoreEvaluators.h | 22 +--------------------- 2 files changed, 3 insertions(+), 42 deletions(-) diff --git a/Eigen/src/Core/AssignEvaluator.h b/Eigen/src/Core/AssignEvaluator.h index 158dc7842..99ae3f89d 100644 --- a/Eigen/src/Core/AssignEvaluator.h +++ b/Eigen/src/Core/AssignEvaluator.h @@ -32,8 +32,7 @@ public: DstIsAligned = Derived::Flags & AlignedBit, DstHasDirectAccess = Derived::Flags & DirectAccessBit, SrcIsAligned = OtherDerived::Flags & AlignedBit, - JointAlignment = bool(DstIsAligned) && bool(SrcIsAligned) ? Aligned : Unaligned, - SrcEvalBeforeAssign = (evaluator_traits::HasEvalTo == 1) + JointAlignment = bool(DstIsAligned) && bool(SrcIsAligned) ? Aligned : Unaligned }; private: @@ -68,8 +67,7 @@ private: public: enum { - Traversal = int(SrcEvalBeforeAssign) ? int(AllAtOnceTraversal) - : int(MayInnerVectorize) ? int(InnerVectorizedTraversal) + Traversal = int(MayInnerVectorize) ? int(InnerVectorizedTraversal) : int(MayLinearVectorize) ? int(LinearVectorizedTraversal) : int(MaySliceVectorize) ? int(SliceVectorizedTraversal) : int(MayLinearize) ? int(LinearTraversal) @@ -496,23 +494,6 @@ struct dense_assignment_loop } }; -/**************************** -*** All-at-once traversal *** -****************************/ - -// TODO: this 'AllAtOnceTraversal' should be dropped or caught earlier (Gael) -// Indeed, what to do with the kernel's functor?? -template -struct dense_assignment_loop -{ - static inline void run(Kernel & kernel) - { - // Evaluate rhs in temporary to prevent aliasing problems in a = a * a; - // TODO: Do not pass the xpr object to evalTo() (Jitse) - kernel.srcEvaluator().evalTo(kernel.dstEvaluator(), kernel.dstExpression()); - } -}; - /*************************************************************************** * Part 4 : Generic dense assignment kernel ***************************************************************************/ diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h index 57960fcf6..c998c37cb 100644 --- a/Eigen/src/Core/CoreEvaluators.h +++ b/Eigen/src/Core/CoreEvaluators.h @@ -22,10 +22,6 @@ namespace internal { template struct evaluator_traits { - // 1 if evaluator_impl::evalTo() exists - // 0 if evaluator_impl allows coefficient-based access - static const int HasEvalTo = 0; - // 1 if assignment A = B assumes aliasing when B is of type T and thus B needs to be evaluated into a // temporary; 0 if not. static const int AssumeAliasing = 0; @@ -37,32 +33,16 @@ template class EvalToTemp; // evaluator::type is type of evaluator for T -// evaluator::nestedType is type of evaluator if T is nested inside another evaluator template struct evaluator_impl { }; - -template::HasEvalTo> -struct evaluator_nested_type; - -template -struct evaluator_nested_type -{ - typedef evaluator_impl type; -}; - -template -struct evaluator_nested_type -{ - typedef evaluator_impl > type; -}; template struct evaluator { typedef evaluator_impl type; - typedef typename evaluator_nested_type::type nestedType; + typedef evaluator_impl nestedType; }; // TODO: Think about const-correctness