Do not generate no-op cast() and conjugate() expressions

This commit is contained in:
Eugene Zhulenev 2019-02-14 09:51:51 -08:00
parent 8c2f30c790
commit 106ba7bb1a

View File

@ -244,9 +244,11 @@ class TensorBase<Derived, ReadOnlyAccessors>
} }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE const TensorCwiseUnaryOp<internal::scalar_conjugate_op<Scalar>, const Derived> EIGEN_STRONG_INLINE const typename internal::conditional<NumTraits<Scalar>::IsComplex,
TensorCwiseUnaryOp<internal::scalar_conjugate_op<Scalar>, const Derived>,
Derived>::type
conjugate() const { conjugate() const {
return unaryExpr(internal::scalar_conjugate_op<Scalar>()); return choose(Cond<NumTraits<Scalar>::IsComplex>(), unaryExpr(internal::scalar_conjugate_op<Scalar>()), derived());
} }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
@ -339,10 +341,13 @@ class TensorBase<Derived, ReadOnlyAccessors>
return cwiseMin(constant(threshold)); return cwiseMin(constant(threshold));
} }
template <typename NewType> EIGEN_DEVICE_FUNC template<typename NewType>
EIGEN_STRONG_INLINE const TensorConversionOp<NewType, const Derived> EIGEN_DEVICE_FUNC
EIGEN_STRONG_INLINE const typename internal::conditional<internal::is_same<NewType, CoeffReturnType>::value,
Derived,
TensorConversionOp<NewType, const Derived> >::type
cast() const { cast() const {
return TensorConversionOp<NewType, const Derived>(derived()); return choose(Cond<internal::is_same<NewType, CoeffReturnType>::value>(), derived(), TensorConversionOp<NewType, const Derived>(derived()));
} }
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
@ -628,26 +633,26 @@ class TensorBase<Derived, ReadOnlyAccessors>
} }
template <typename Dims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE template <typename Dims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const TensorReductionOp<internal::AndReducer, const Dims, const TensorConversionOp<bool, const Derived> > const TensorReductionOp<internal::AndReducer, const Dims, const typename internal::conditional<internal::is_same<bool, CoeffReturnType>::value, Derived, TensorConversionOp<bool, const Derived> >::type >
all(const Dims& dims) const { all(const Dims& dims) const {
return cast<bool>().reduce(dims, internal::AndReducer()); return cast<bool>().reduce(dims, internal::AndReducer());
} }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const TensorReductionOp<internal::AndReducer, const DimensionList<Index, NumDimensions>, const TensorConversionOp<bool, const Derived> > const TensorReductionOp<internal::AndReducer, const DimensionList<Index, NumDimensions>, const typename internal::conditional<internal::is_same<bool, CoeffReturnType>::value, Derived, TensorConversionOp<bool, const Derived> >::type >
all() const { all() const {
DimensionList<Index, NumDimensions> in_dims; DimensionList<Index, NumDimensions> in_dims;
return cast<bool>().reduce(in_dims, internal::AndReducer()); return cast<bool>().reduce(in_dims, internal::AndReducer());
} }
template <typename Dims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE template <typename Dims> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const TensorReductionOp<internal::OrReducer, const Dims, const TensorConversionOp<bool, const Derived> > const TensorReductionOp<internal::OrReducer, const Dims, const typename internal::conditional<internal::is_same<bool, CoeffReturnType>::value, Derived, TensorConversionOp<bool, const Derived> >::type >
any(const Dims& dims) const { any(const Dims& dims) const {
return cast<bool>().reduce(dims, internal::OrReducer()); return cast<bool>().reduce(dims, internal::OrReducer());
} }
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const TensorReductionOp<internal::OrReducer, const DimensionList<Index, NumDimensions>, const TensorConversionOp<bool, const Derived> > const TensorReductionOp<internal::OrReducer, const DimensionList<Index, NumDimensions>, const typename internal::conditional<internal::is_same<bool, CoeffReturnType>::value, Derived, TensorConversionOp<bool, const Derived> >::type >
any() const { any() const {
DimensionList<Index, NumDimensions> in_dims; DimensionList<Index, NumDimensions> in_dims;
return cast<bool>().reduce(in_dims, internal::OrReducer()); return cast<bool>().reduce(in_dims, internal::OrReducer());