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
 }