Update Eigen to commit:7f2377859377da6f22152015c28b12c04752af77
CHANGELOG
=========
7f2377859 - Add tag to commit instead of branch
c30b35a31 - Force tag to update to latest head.
a26ba6734 - Add LICENSE file in correct place so it is picked up by gitlab.
08c31c3ba - try alpine for formatting
1ac1af62e - Update deploy job
7b6623af3 - Fix special packetmath erfc flushing for ARM32.
fd48fbb26 - Update rocm docker again again.
a885340ba - Update rocm docker again.
45a8478d0 - Update rocm docker image in CI.
de4afcf41 - Add a deploy phase to the CI that tags the latest nightly pipeline if it passes.
5e8916050 - move constructor / move assignment doc strings
PiperOrigin-RevId: 704393684
Change-Id: Ic0d81e61335b2fcca8b0cce28ca1097e7a319cc5
diff --git a/Eigen/src/Core/Array.h b/Eigen/src/Core/Array.h
index 2098749..fb1f48a 100644
--- a/Eigen/src/Core/Array.h
+++ b/Eigen/src/Core/Array.h
@@ -102,8 +102,13 @@
return Base::_set(other);
}
- /** This is a special case of the templated operator=. Its purpose is to
- * prevent a default operator= from hiding the templated operator=.
+ /**
+ * \brief Assigns arrays to each other.
+ *
+ * \note This is a special case of the templated operator=. Its purpose is
+ * to prevent a default operator= from hiding the templated operator=.
+ *
+ * \callgraph
*/
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Array& operator=(const Array& other) { return Base::_set(other); }
@@ -122,6 +127,7 @@
#else
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Array() = default;
#endif
+ /** \brief Move constructor */
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Array(Array&&) = default;
EIGEN_DEVICE_FUNC Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value) {
Base::operator=(std::move(other));
diff --git a/Eigen/src/Core/Matrix.h b/Eigen/src/Core/Matrix.h
index 8b7f70c..1ea1a66 100644
--- a/Eigen/src/Core/Matrix.h
+++ b/Eigen/src/Core/Matrix.h
@@ -255,7 +255,11 @@
#else
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix() = default;
#endif
+ /** \brief Move constructor */
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix(Matrix&&) = default;
+ /** \brief Moves the matrix into the other one.
+ *
+ */
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Matrix& operator=(Matrix&& other)
EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value) {
Base::operator=(std::move(other));
diff --git a/Eigen/src/Core/PlainObjectBase.h b/Eigen/src/Core/PlainObjectBase.h
index 8720c44..22f1329 100644
--- a/Eigen/src/Core/PlainObjectBase.h
+++ b/Eigen/src/Core/PlainObjectBase.h
@@ -473,7 +473,9 @@
// by making all its constructor protected. See bug 1074.
protected:
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr PlainObjectBase() = default;
+ /** \brief Move constructor */
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr PlainObjectBase(PlainObjectBase&&) = default;
+ /** \brief Move assignment operator */
EIGEN_DEVICE_FUNC constexpr PlainObjectBase& operator=(PlainObjectBase&& other) EIGEN_NOEXCEPT {
m_storage = std::move(other.m_storage);
return *this;
diff --git a/unsupported/test/special_packetmath.cpp b/unsupported/test/special_packetmath.cpp
index 044ce67..1a53a09 100644
--- a/unsupported/test/special_packetmath.cpp
+++ b/unsupported/test/special_packetmath.cpp
@@ -12,6 +12,20 @@
#include "packetmath_test_shared.h"
#include "../Eigen/SpecialFunctions"
+#if EIGEN_ARCH_ARM
+// Note: 32-bit arm always flushes subnormals to zero.
+#define MAYBE_FLUSH(op) \
+ [](Scalar x) { \
+ Scalar y = static_cast<Scalar>(op(x)); \
+ if (Eigen::numext::abs(y) < (std::numeric_limits<decltype(y)>::min)()) { \
+ y = y * decltype(y)(0); /* Preserve sign. */ \
+ } \
+ return y; \
+ }
+#else
+#define MAYBE_FLUSH(op) op
+#endif
+
template <typename Scalar, typename Packet>
void packetmath_real() {
using std::abs;
@@ -119,7 +133,7 @@
CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasErf, std::erf, internal::perf);
// FIXME(rmlarsen): This test occasionally fails due to difference in tiny subnormal results
// near the underflow boundary. I am not sure which version is correct.
- CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasErfc, std::erfc, internal::perfc);
+ CHECK_CWISE1_IF(internal::packet_traits<Scalar>::HasErfc, MAYBE_FLUSH(std::erfc), internal::perfc);
#endif
}