diff --git a/Eigen/src/Core/InnerProduct.h b/Eigen/src/Core/InnerProduct.h index 686ad1379..ad9844dc9 100644 --- a/Eigen/src/Core/InnerProduct.h +++ b/Eigen/src/Core/InnerProduct.h @@ -216,8 +216,8 @@ struct scalar_inner_product_op { template struct scalar_inner_product_op< Scalar, - typename std::enable_if::ReturnType, Scalar>::value, - Scalar>::type, + std::enable_if_t::ReturnType, Scalar>::value, + Scalar>, Conj> { using result_type = Scalar; using conj_helper = conditional_conj; diff --git a/Eigen/src/Core/NestByValue.h b/Eigen/src/Core/NestByValue.h index 2ce83a8c5..c2c32c1c7 100644 --- a/Eigen/src/Core/NestByValue.h +++ b/Eigen/src/Core/NestByValue.h @@ -52,17 +52,11 @@ class NestByValue : public internal::dense_xpr_base EIGEN_DEVICE_FUNC const ExpressionType& nestedExpression() const { return m_expression; } - EIGEN_DEVICE_FUNC typename std::enable_if::type data() const { - return m_expression.data(); - } + EIGEN_DEVICE_FUNC std::enable_if_t data() const { return m_expression.data(); } - EIGEN_DEVICE_FUNC typename std::enable_if::type innerStride() const { - return m_expression.innerStride(); - } + EIGEN_DEVICE_FUNC std::enable_if_t innerStride() const { return m_expression.innerStride(); } - EIGEN_DEVICE_FUNC typename std::enable_if::type outerStride() const { - return m_expression.outerStride(); - } + EIGEN_DEVICE_FUNC std::enable_if_t outerStride() const { return m_expression.outerStride(); } protected: const ExpressionType m_expression; diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h index febd29542..8a24de330 100644 --- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h @@ -1072,14 +1072,23 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS // syms x; // cosf = @(x) cos(x); // pade_cosf = pade(cosf(x), x, 0, 'Order', 8) - Packet sc1_num = pmadd(ss, pset1(80737373), pset1(-13853547000)); - Packet sc2_num = pmadd(sc1_num, ss, pset1(727718024880)); - Packet sc3_num = pmadd(sc2_num, ss, pset1(-11275015752000)); - Packet sc4_num = pmadd(sc3_num, ss, pset1(23594700729600)); - Packet sc1_denum = pmadd(ss, pset1(147173), pset1(39328920)); - Packet sc2_denum = pmadd(sc1_denum, ss, pset1(5772800880)); - Packet sc3_denum = pmadd(sc2_denum, ss, pset1(522334612800)); - Packet sc4_denum = pmadd(sc3_denum, ss, pset1(23594700729600)); + const Packet cn4 = pset1(80737373); + const Packet cn3 = pset1(-13853547000); + const Packet cn2 = pset1(727718024880); + const Packet cn1 = pset1(-11275015752000); + const Packet cn0 = pset1(23594700729600); // shared with cd0 + const Packet cd3 = pset1(147173); + const Packet cd2 = pset1(39328920); + const Packet cd1 = pset1(5772800880); + const Packet cd0 = pset1(522334612800); + Packet sc1_num = pmadd(ss, cn4, cn3); + Packet sc2_num = pmadd(sc1_num, ss, cn2); + Packet sc3_num = pmadd(sc2_num, ss, cn1); + Packet sc4_num = pmadd(sc3_num, ss, cn0); + Packet sc1_denum = pmadd(ss, cd3, cd2); + Packet sc2_denum = pmadd(sc1_denum, ss, cd1); + Packet sc3_denum = pmadd(sc2_denum, ss, cd0); + Packet sc4_denum = pmadd(sc3_denum, ss, cn0); Packet scos = pdiv(sc4_num, sc4_denum); // Padé approximant of sin(x) @@ -1090,15 +1099,26 @@ EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS // syms x; // sinf = @(x) sin(x); // pade_sinf = pade(sinf(x), x, 0, 'Order', 8, 'OrderMode', 'relative') - Packet ss1_num = pmadd(ss, pset1(4585922449), pset1(-1066023933480)); - Packet ss2_num = pmadd(ss1_num, ss, pset1(83284044283440)); - Packet ss3_num = pmadd(ss2_num, ss, pset1(-2303682236856000)); - Packet ss4_num = pmadd(ss3_num, ss, pset1(15605159573203200)); - Packet ss1_denum = pmadd(ss, pset1(1029037), pset1(345207016)); - Packet ss2_denum = pmadd(ss1_denum, ss, pset1(61570292784)); - Packet ss3_denum = pmadd(ss2_denum, ss, pset1(6603948711360)); - Packet ss4_denum = pmadd(ss3_denum, ss, pset1(346781323848960)); - Packet ssin = pdiv(pmul(s, ss4_num), pmul(pset1(45), ss4_denum)); + const Packet sn4 = pset1(4585922449); + const Packet sn3 = pset1(-1066023933480); + const Packet sn2 = pset1(83284044283440); + const Packet sn1 = pset1(-2303682236856000); + const Packet sn0 = pset1(15605159573203200); + const Packet sd3 = pset1(1029037); + const Packet sd2 = pset1(345207016); + const Packet sd1 = pset1(61570292784); + const Packet sd0_inner = pset1(6603948711360); + const Packet sd0 = pset1(346781323848960); + const Packet cst_45 = pset1(45); + Packet ss1_num = pmadd(ss, sn4, sn3); + Packet ss2_num = pmadd(ss1_num, ss, sn2); + Packet ss3_num = pmadd(ss2_num, ss, sn1); + Packet ss4_num = pmadd(ss3_num, ss, sn0); + Packet ss1_denum = pmadd(ss, sd3, sd2); + Packet ss2_denum = pmadd(ss1_denum, ss, sd1); + Packet ss3_denum = pmadd(ss2_denum, ss, sd0_inner); + Packet ss4_denum = pmadd(ss3_denum, ss, sd0); + Packet ssin = pdiv(pmul(s, ss4_num), pmul(cst_45, ss4_denum)); Packet poly_mask = preinterpret(pcmp_eq(pand(q_int, cst_one), pzero(q_int))); diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h index bf2756757..adae3dd6c 100644 --- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h @@ -87,7 +87,7 @@ struct general_matrix_matrix_triangular_product Traits::nr) { - using UnsignedIndex = typename make_unsigned::type; + using UnsignedIndex = std::make_unsigned_t; mc = (UnsignedIndex(mc) / Traits::nr) * Traits::nr; } diff --git a/Eigen/src/Core/products/GeneralMatrixVector.h b/Eigen/src/Core/products/GeneralMatrixVector.h index b974fb6bd..ff2ce23c8 100644 --- a/Eigen/src/Core/products/GeneralMatrixVector.h +++ b/Eigen/src/Core/products/GeneralMatrixVector.h @@ -149,10 +149,8 @@ general_matrix_vector_product(ResScalar(0)), c1 = pset1(ResScalar(0)), - c2 = pset1(ResScalar(0)), c3 = pset1(ResScalar(0)), - c4 = pset1(ResScalar(0)), c5 = pset1(ResScalar(0)), - c6 = pset1(ResScalar(0)), c7 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}), c2 = pzero(ResPacket{}), c3 = pzero(ResPacket{}), + c4 = pzero(ResPacket{}), c5 = pzero(ResPacket{}), c6 = pzero(ResPacket{}), c7 = pzero(ResPacket{}); for (Index j = j2; j < jend; j += 1) { RhsPacket b0 = pset1(rhs(j, 0)); @@ -175,8 +173,7 @@ general_matrix_vector_product(res + i + ResPacketSize * 7))); } if (i < n4) { - ResPacket c0 = pset1(ResScalar(0)), c1 = pset1(ResScalar(0)), - c2 = pset1(ResScalar(0)), c3 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}), c2 = pzero(ResPacket{}), c3 = pzero(ResPacket{}); for (Index j = j2; j < jend; j += 1) { RhsPacket b0 = pset1(rhs(j, 0)); @@ -193,8 +190,7 @@ general_matrix_vector_product(ResScalar(0)), c1 = pset1(ResScalar(0)), - c2 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}), c2 = pzero(ResPacket{}); for (Index j = j2; j < jend; j += 1) { RhsPacket b0 = pset1(rhs(j, 0)); @@ -209,7 +205,7 @@ general_matrix_vector_product(ResScalar(0)), c1 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}); for (Index j = j2; j < jend; j += 1) { RhsPacket b0 = pset1(rhs(j, 0)); @@ -221,7 +217,7 @@ general_matrix_vector_product(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}); for (Index j = j2; j < jend; j += 1) { RhsPacket b0 = pset1(rhs(j, 0)); c0 = pcj.pmadd(lhs.template load(i + 0, j), b0, c0); @@ -230,7 +226,7 @@ general_matrix_vector_product(ResScalar(0)); + ResPacketHalf c0 = pzero(ResPacketHalf{}); for (Index j = j2; j < jend; j += 1) { RhsPacketHalf b0 = pset1(rhs(j, 0)); c0 = pcj_half.pmadd(lhs.template load(i + 0, j), b0, c0); @@ -240,7 +236,7 @@ general_matrix_vector_product(ResScalar(0)); + ResPacketQuarter c0 = pzero(ResPacketQuarter{}); for (Index j = j2; j < jend; j += 1) { RhsPacketQuarter b0 = pset1(rhs(j, 0)); c0 = pcj_quarter.pmadd(lhs.template load(i + 0, j), b0, c0); @@ -328,17 +324,15 @@ general_matrix_vector_product::type; + using UnsignedIndex = std::make_unsigned_t; const Index fullColBlockEnd = LhsPacketSize * (UnsignedIndex(cols) / LhsPacketSize); const Index halfColBlockEnd = LhsPacketSizeHalf * (UnsignedIndex(cols) / LhsPacketSizeHalf); const Index quarterColBlockEnd = LhsPacketSizeQuarter * (UnsignedIndex(cols) / LhsPacketSizeQuarter); Index i = 0; for (; i < n8; i += 8) { - ResPacket c0 = pset1(ResScalar(0)), c1 = pset1(ResScalar(0)), - c2 = pset1(ResScalar(0)), c3 = pset1(ResScalar(0)), - c4 = pset1(ResScalar(0)), c5 = pset1(ResScalar(0)), - c6 = pset1(ResScalar(0)), c7 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}), c2 = pzero(ResPacket{}), c3 = pzero(ResPacket{}), + c4 = pzero(ResPacket{}), c5 = pzero(ResPacket{}), c6 = pzero(ResPacket{}), c7 = pzero(ResPacket{}); for (Index j = 0; j < fullColBlockEnd; j += LhsPacketSize) { RhsPacket b0 = rhs.template load(j, 0); @@ -383,8 +377,7 @@ general_matrix_vector_product(ResScalar(0)), c1 = pset1(ResScalar(0)), - c2 = pset1(ResScalar(0)), c3 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}), c2 = pzero(ResPacket{}), c3 = pzero(ResPacket{}); for (Index j = 0; j < fullColBlockEnd; j += LhsPacketSize) { RhsPacket b0 = rhs.template load(j, 0); @@ -413,7 +406,7 @@ general_matrix_vector_product(ResScalar(0)), c1 = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}), c1 = pzero(ResPacket{}); for (Index j = 0; j < fullColBlockEnd; j += LhsPacketSize) { RhsPacket b0 = rhs.template load(j, 0); @@ -434,9 +427,9 @@ general_matrix_vector_product(ResScalar(0)); - ResPacketHalf c0_h = pset1(ResScalar(0)); - ResPacketQuarter c0_q = pset1(ResScalar(0)); + ResPacket c0 = pzero(ResPacket{}); + ResPacketHalf c0_h = pzero(ResPacketHalf{}); + ResPacketQuarter c0_q = pzero(ResPacketQuarter{}); for (Index j = 0; j < fullColBlockEnd; j += LhsPacketSize) { RhsPacket b0 = rhs.template load(j, 0); diff --git a/Eigen/src/Core/util/Meta.h b/Eigen/src/Core/util/Meta.h index ddbc898e1..4c36d4c1c 100644 --- a/Eigen/src/Core/util/Meta.h +++ b/Eigen/src/Core/util/Meta.h @@ -94,13 +94,7 @@ using std::false_type; using std::true_type; template -struct bool_constant; - -template <> -struct bool_constant : true_type {}; - -template <> -struct bool_constant : false_type {}; +using bool_constant = std::integral_constant; // Third-party libraries rely on these. using std::conditional; @@ -136,77 +130,24 @@ struct remove_all { template using remove_all_t = typename remove_all::type; +// Eigen's is_arithmetic is similar to std::is_arithmetic but can be specialized +// for SIMD packet types and other Eigen-specific types. The primary template +// delegates to std::is_arithmetic for fundamental types. template struct is_arithmetic { - enum { value = false }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; + enum { value = std::is_arithmetic::value }; }; // GPU devices treat `long double` as `double`. -#ifndef EIGEN_GPU_COMPILE_PHASE +#ifdef EIGEN_GPU_COMPILE_PHASE template <> struct is_arithmetic { - enum { value = true }; + enum { value = false }; }; #endif -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; -template -struct is_same { - enum { value = 0 }; -}; -template -struct is_same { - enum { value = 1 }; -}; +using std::is_same; -template -struct is_void : is_same> {}; +using std::is_void; /** \internal * Implementation of std::void_t for SFINAE. @@ -223,26 +164,11 @@ template using void_t = void; #endif -template <> -struct is_arithmetic { - enum { value = true }; -}; -template <> -struct is_arithmetic { - enum { value = true }; -}; using std::is_integral; using std::make_unsigned; -template -struct is_const { - enum { value = 0 }; -}; -template -struct is_const { - enum { value = 1 }; -}; +using std::is_const; template struct add_const_on_value_type { diff --git a/Eigen/src/Core/util/Serializer.h b/Eigen/src/Core/util/Serializer.h index dc3bd1308..72ce6cb59 100644 --- a/Eigen/src/Core/util/Serializer.h +++ b/Eigen/src/Core/util/Serializer.h @@ -129,7 +129,7 @@ struct serialize_impl; template struct serialize_impl { - using Serializer = Eigen::Serializer::type>; + using Serializer = Eigen::Serializer>; static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t serialize_size(const T1& value, const Ts&... args) { Serializer serializer; diff --git a/Eigen/src/Core/util/XprHelper.h b/Eigen/src/Core/util/XprHelper.h index 378c50179..043b006bc 100644 --- a/Eigen/src/Core/util/XprHelper.h +++ b/Eigen/src/Core/util/XprHelper.h @@ -20,11 +20,10 @@ namespace internal { // useful for unsigned / signed integer comparisons when idx is intended to be non-negative template -EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename make_unsigned::type returnUnsignedIndexValue( - const IndexType& idx) { +EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::make_unsigned_t returnUnsignedIndexValue(const IndexType& idx) { EIGEN_STATIC_ASSERT((NumTraits::IsInteger), THIS FUNCTION IS FOR INTEGER TYPES) eigen_internal_assert(idx >= 0 && "Index value is negative and target type is unsigned"); - using UnsignedType = typename make_unsigned::type; + using UnsignedType = std::make_unsigned_t; return static_cast(idx); }