diff options
author | 2013-11-29 13:38:59 +0100 | |
---|---|---|
committer | 2013-11-29 13:38:59 +0100 | |
commit | 558427532565bf9c81bd4473591cfc6b552deff2 (patch) | |
tree | 2f4981e1265e4fc0bad1194f21385cf57af344f8 | |
parent | cc6dd878ee5a80375c587d018c2ae89fc2216dd1 (diff) |
Remove HasEvalTo and all at once eval mode
-rw-r--r-- | Eigen/src/Core/AssignEvaluator.h | 23 | ||||
-rw-r--r-- | 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<OtherDerived>::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<Kernel, SliceVectorizedTraversal, NoUnrolling> } }; -/**************************** -*** All-at-once traversal *** -****************************/ - -// TODO: this 'AllAtOnceTraversal' should be dropped or caught earlier (Gael) -// Indeed, what to do with the kernel's functor?? -template<typename Kernel> -struct dense_assignment_loop<Kernel, AllAtOnceTraversal, NoUnrolling> -{ - 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<typename T> struct evaluator_traits { - // 1 if evaluator_impl<T>::evalTo() exists - // 0 if evaluator_impl<T> 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<typename ArgType> class EvalToTemp; // evaluator<T>::type is type of evaluator for T -// evaluator<T>::nestedType is type of evaluator if T is nested inside another evaluator template<typename T> struct evaluator_impl { }; - -template<typename T, int Nested = evaluator_traits<T>::HasEvalTo> -struct evaluator_nested_type; - -template<typename T> -struct evaluator_nested_type<T, 0> -{ - typedef evaluator_impl<T> type; -}; - -template<typename T> -struct evaluator_nested_type<T, 1> -{ - typedef evaluator_impl<EvalToTemp<T> > type; -}; template<typename T> struct evaluator { typedef evaluator_impl<T> type; - typedef typename evaluator_nested_type<T>::type nestedType; + typedef evaluator_impl<T> nestedType; }; // TODO: Think about const-correctness |