diff --git a/Eigen/src/Core/CoreEvaluators.h b/Eigen/src/Core/CoreEvaluators.h
index c620600..5e1cbf6 100644
--- a/Eigen/src/Core/CoreEvaluators.h
+++ b/Eigen/src/Core/CoreEvaluators.h
@@ -840,6 +840,27 @@
   Data m_d;
 };
 
+// specialization for expresions like (a < b).select(c, d) to enable full vectorization
+template <typename Arg1, typename Arg2, typename Scalar, typename CmpLhsType, typename CmpRhsType, ComparisonName cmp>
+struct evaluator<CwiseTernaryOp<scalar_boolean_select_op<Scalar, Scalar, bool>, Arg1, Arg2,
+                                CwiseBinaryOp<scalar_cmp_op<Scalar, Scalar, cmp, false>, CmpLhsType, CmpRhsType>>>
+    : public ternary_evaluator<
+          CwiseTernaryOp<scalar_boolean_select_op<Scalar, Scalar, Scalar>, Arg1, Arg2,
+                         CwiseBinaryOp<scalar_cmp_op<Scalar, Scalar, cmp, true>, CmpLhsType, CmpRhsType>>> {
+  using DummyTernaryOp = scalar_boolean_select_op<Scalar, Scalar, bool>;
+  using DummyArg3 = CwiseBinaryOp<scalar_cmp_op<Scalar, Scalar, cmp, false>, CmpLhsType, CmpRhsType>;
+  using DummyXprType = CwiseTernaryOp<DummyTernaryOp, Arg1, Arg2, DummyArg3>;
+
+  using TernaryOp = scalar_boolean_select_op<Scalar, Scalar, Scalar>;
+  using Arg3 = CwiseBinaryOp<scalar_cmp_op<Scalar, Scalar, cmp, true>, CmpLhsType, CmpRhsType>;
+  using XprType = CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3>;
+
+  using Base = ternary_evaluator<XprType>;
+
+  EIGEN_DEVICE_FUNC explicit evaluator(const DummyXprType& xpr)
+      : Base(XprType(xpr.arg1(), xpr.arg2(), Arg3(xpr.arg3().lhs(), xpr.arg3().rhs()))) {}
+};
+
 // -------------------- CwiseBinaryOp --------------------
 
 // this is a binary expression
diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h
index eed545c..b0f7262 100644
--- a/Eigen/src/Core/arch/AltiVec/PacketMath.h
+++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h
@@ -3398,6 +3398,10 @@
   return reinterpret_cast<Packet2d>(vec_cmpeq(a, b));
 }
 template <>
+EIGEN_STRONG_INLINE Packet2l pcmp_eq(const Packet2l& a, const Packet2l& b) {
+  return reinterpret_cast<Packet2l>(vec_cmpeq(a, b));
+}
+template <>
 EIGEN_STRONG_INLINE Packet2d pcmp_lt_or_nan(const Packet2d& a, const Packet2d& b) {
   Packet2d c = reinterpret_cast<Packet2d>(vec_cmpge(a, b));
   return vec_nor(c, c);
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
index 4ee035d..16ca807 100644
--- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
+++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h
@@ -129,7 +129,7 @@
   const PacketI e = pcast<Packet, PacketI>(pmin(pmax(exponent, pnegate(max_exponent)), max_exponent));
   PacketI b = parithmetic_shift_right<2>(e);                                          // floor(e/4);
   Packet c = preinterpret<Packet>(plogical_shift_left<MantissaBits>(padd(b, bias)));  // 2^b
-  Packet out = pmul(pmul(a, c), pmul(c, c));                                          // a * 2^(3b)
+  Packet out = pmul(pmul(pmul(a, c), c), c);                                          // a * 2^(3b)
   b = pnmadd(pset1<PacketI>(3), b, e);                                                // e - 3b
   c = preinterpret<Packet>(plogical_shift_left<MantissaBits>(padd(b, bias)));         // 2^(e-3*b)
   out = pmul(out, c);
diff --git a/Eigen/src/Eigenvalues/Tridiagonalization.h b/Eigen/src/Eigenvalues/Tridiagonalization.h
index 9bb791d..e49e9db 100644
--- a/Eigen/src/Eigenvalues/Tridiagonalization.h
+++ b/Eigen/src/Eigenvalues/Tridiagonalization.h
@@ -445,8 +445,8 @@
   typedef typename MatrixType::RealScalar RealScalar;
 
   template <typename DiagonalType, typename SubDiagonalType, typename CoeffVectorType, typename WorkSpaceType>
-  static void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, CoeffVectorType&, WorkSpaceType&,
-                  bool extractQ) {
+  static EIGEN_DEVICE_FUNC void run(MatrixType& mat, DiagonalType& diag, SubDiagonalType& subdiag, CoeffVectorType&,
+                                    WorkSpaceType&, bool extractQ) {
     using std::sqrt;
     const RealScalar tol = (std::numeric_limits<RealScalar>::min)();
     diag[0] = mat(0, 0);
diff --git a/scripts/ci_cmake_msvc.ps1 b/scripts/ci_cmake_msvc.ps1
new file mode 100644
index 0000000..5dae3c8
--- /dev/null
+++ b/scripts/ci_cmake_msvc.ps1
@@ -0,0 +1,65 @@
+# Powershell script to set up MSVC cmake builds that mirror the CI.  Useful for reproducing issues.
+
+param ($EIGEN_CI_ROOTDIR,
+       $EIGEN_CI_BUILDDIR,
+       $EIGEN_CI_BUILD_TARGET,
+       $EIGEN_CI_ADDITIONAL_ARGS,
+       $EIGEN_CI_BEFORE_SCRIPT,
+       $EIGEN_CI_CMAKE_GENERATOR,
+       $EIGEN_CI_MSVC_ARCH,
+       $EIGEN_CI_MSVC_VER,
+       $EIGEN_CI_TEST_CUSTOM_CXX_FLAGS
+       )
+
+function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
+       
+# Set defaults if not already set.
+IF (!$EIGEN_CI_ROOTDIR)               { $EIGEN_CI_ROOTDIR               = Join-Path (Get-ScriptDirectory) '..' }
+IF (!$EIGEN_CI_BUILDDIR)              { $EIGEN_CI_BUILDDIR              = ".build" }
+IF (!$EIGEN_CI_BUILD_TARGET)          { $EIGEN_CI_BUILD_TARGET          = "buildtests" }
+IF (!$EIGEN_CI_ADDITIONAL_ARGS)       { $EIGEN_CI_ADDITIONAL_ARGS       = "" }
+IF (!$EIGEN_CI_BEFORE_SCRIPT)         { $EIGEN_CI_BEFORE_SCRIPT         = "" }
+IF (!$EIGEN_CI_CMAKE_GENERATOR)       { $EIGEN_CI_CMAKE_GENERATOR       = "Ninja" }
+IF (!$EIGEN_CI_MSVC_ARCH)             { $EIGEN_CI_MSVC_ARCH             = "x64" }
+IF (!$EIGEN_CI_MSVC_VER)              { $EIGEN_CI_MSVC_VER              = "14.29" }
+IF (!$EIGEN_CI_TEST_CUSTOM_CXX_FLAGS) { $EIGEN_CI_TEST_CUSTOM_CXX_FLAGS = "/d2ReducedOptimizeHugeFunctions /DEIGEN_STRONG_INLINE=inline /Os" }
+
+# Export variables into the global scope
+$global:EIGEN_CI_ROOTDIR               = $EIGEN_CI_ROOTDIR
+$global:EIGEN_CI_BUILDDIR              = $EIGEN_CI_BUILDDIR
+$global:EIGEN_CI_BUILD_TARGET          = $EIGEN_CI_BUILD_TARGET
+$global:EIGEN_CI_ADDITIONAL_ARGS       = $EIGEN_CI_ADDITIONAL_ARGS
+$global:EIGEN_CI_BEFORE_SCRIPT         = $EIGEN_CI_BEFORE_SCRIPT
+$global:EIGEN_CI_CMAKE_GENERATOR       = $EIGEN_CI_CMAKE_GENERATOR
+$global:EIGEN_CI_MSVC_ARCH             = $EIGEN_CI_MSVC_ARCH
+$global:EIGEN_CI_MSVC_VER              = $EIGEN_CI_MSVC_VER
+$global:EIGEN_CI_TEST_CUSTOM_CXX_FLAGS = $EIGEN_CI_TEST_CUSTOM_CXX_FLAGS
+
+# Print configuration variables.
+Get-Variable | findstr EIGEN
+
+
+# Run any setup scripts.
+if ("${EIGEN_CI_BEFORE_SCRIPT}") { Invoke-Expression -Command "${EIGEN_CI_BEFORE_SCRIPT}" }
+
+# Find Visual Studio installation directory.
+$global:VS_INSTALL_DIR = &"${Env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -property installationPath
+# Run VCVarsAll.bat incitialization script and extract environment variables.
+# http://allen-mack.blogspot.com/2008/03/replace-visual-studio-command-prompt.html
+cmd.exe /c "`"${VS_INSTALL_DIR}\VC\Auxiliary\Build\vcvarsall.bat`" $EIGEN_CI_MSVC_ARCH -vcvars_ver=$EIGEN_CI_MSVC_VER & set" | foreach { if ($_ -match "=") { $v = $_.split("="); set-item -force -path "ENV:\$($v[0])" -value "$($v[1])" } }
+
+# Create and change to the build directory.
+IF (-Not (Test-Path -Path $EIGEN_CI_BUILDDIR) ) { mkdir $EIGEN_CI_BUILDDIR }
+cd $EIGEN_CI_BUILDDIR
+
+# We need to split EIGEN_CI_ADDITIONAL_ARGS, otherwise they are interpretted
+# as a single argument.  Split by space, unless double-quoted.
+$split_args = [regex]::Split(${EIGEN_CI_ADDITIONAL_ARGS}, ' (?=(?:[^"]|"[^"]*")*$)' )
+cmake -G "${EIGEN_CI_CMAKE_GENERATOR}" -DCMAKE_BUILD_TYPE=MinSizeRel -DEIGEN_TEST_CUSTOM_CXX_FLAGS="${EIGEN_CI_TEST_CUSTOM_CXX_FLAGS}" ${split_args} "${EIGEN_CI_ROOTDIR}"
+
+IF ($EIGEN_CI_BUILD_TARGET) {
+  # Windows builds sometimes fail due heap errors. In that case, try
+  # building the rest, then try to build again with a single thread.
+  cmake --build . --target $EIGEN_CI_BUILD_TARGET -- -k0 || cmake --build . --target $EIGEN_CI_BUILD_TARGET -- -k0 -j1
+}
+
diff --git a/scripts/ci_cmake_msvc_cuda.ps1 b/scripts/ci_cmake_msvc_cuda.ps1
new file mode 100644
index 0000000..dd615ec
--- /dev/null
+++ b/scripts/ci_cmake_msvc_cuda.ps1
@@ -0,0 +1,31 @@
+# Powershell script to set up MSVC CUDA cmake builds that mirror the CI.  Useful for reproducing issues.
+
+param ($EIGEN_CI_ROOTDIR,
+       $EIGEN_CI_BUILDDIR,
+       $EIGEN_CI_BUILD_TARGET,
+       $EIGEN_CI_ADDITIONAL_ARGS,
+       $EIGEN_CI_BEFORE_SCRIPT,
+       $EIGEN_CI_CMAKE_GENERATOR,
+       $EIGEN_CI_MSVC_ARCH,
+       $EIGEN_CI_MSVC_VER,
+       $EIGEN_CI_TEST_CUSTOM_CXX_FLAGS,
+
+       $EIGEN_CI_CUDA_CXX_FLAGS,
+       $EIGEN_CI_CUDA_COMPUTE_ARCH
+       )
+
+# Set defaults if not already set.
+IF (!$EIGEN_CI_CUDA_CXX_FLAGS)    { $EIGEN_CI_CUDA_CXX_FLAGS    = "" }
+IF (!$EIGEN_CI_CUDA_COMPUTE_ARCH) { $EIGEN_CI_CUDA_COMPUTE_ARCH = "50;70" }
+IF (!$EIGEN_CI_BUILD_TARGET)      { $EIGEN_CI_BUILD_TARGET      = "buildtests_gpu" }
+IF (!$EIGEN_CI_ADDITIONAL_ARGS)   { $EIGEN_CI_ADDITIONAL_ARGS   = '-DCMAKE_CUDA_COMPILER=nvcc.exe -DCMAKE_CUDA_SEPARABLE_COMPILATION=OFF -DEIGEN_TEST_CUDA=on -DEIGEN_CUDA_CXX_FLAGS='+${EIGEN_CI_CUDA_CXX_FLAGS}+' -DEIGEN_CUDA_COMPUTE_ARCH='+${EIGEN_CI_CUDA_COMPUTE_ARCH} }
+
+
+# Export variables into the global scope
+$global:EIGEN_CI_CUDA_CXX_FLAGS    = $EIGEN_CI_CUDA_CXX_FLAGS
+$global:EIGEN_CI_CUDA_COMPUTE_ARCH = $EIGEN_CI_CUDA_COMPUTE_ARCH
+
+# Call the generic msvc setup scripts.
+function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
+$script = Join-Path (Get-ScriptDirectory) 'ci_cmake_msvc.ps1'
+& $script $EIGEN_CI_ROOTDIR $EIGEN_CI_BUILDDIR  $EIGEN_CI_BUILD_TARGET $EIGEN_CI_ADDITIONAL_ARGS $EIGEN_CI_BEFORE_SCRIPT $EIGEN_CI_CMAKE_GENERATOR $EIGEN_CI_MSVC_ARCH $EIGEN_CI_MSVC_VER $EIGEN_CI_TEST_CUSTOM_CXX_FLAGS
diff --git a/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h b/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h
index b1928c4..2605219 100644
--- a/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h
+++ b/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h
@@ -195,19 +195,19 @@
 // Default scalar printer.
 template <typename Scalar, typename Format, typename EnableIf = void>
 struct ScalarPrinter {
-  static void run(std::ostream& stream, const Scalar& scalar, const Format& fmt) { stream << scalar; }
+  static void run(std::ostream& stream, const Scalar& scalar, const Format&) { stream << scalar; }
 };
 
 template <typename Scalar>
 struct ScalarPrinter<Scalar, TensorIOFormatNumpy, std::enable_if_t<NumTraits<Scalar>::IsComplex>> {
-  static void run(std::ostream& stream, const Scalar& scalar, const TensorIOFormatNumpy& fmt) {
+  static void run(std::ostream& stream, const Scalar& scalar, const TensorIOFormatNumpy&) {
     stream << numext::real(scalar) << "+" << numext::imag(scalar) << "j";
   }
 };
 
 template <typename Scalar>
 struct ScalarPrinter<Scalar, TensorIOFormatNative, std::enable_if_t<NumTraits<Scalar>::IsComplex>> {
-  static void run(std::ostream& stream, const Scalar& scalar, const TensorIOFormatNative& fmt) {
+  static void run(std::ostream& stream, const Scalar& scalar, const TensorIOFormatNative&) {
     stream << "{" << numext::real(scalar) << ", " << numext::imag(scalar) << "}";
   }
 };
@@ -339,7 +339,7 @@
       IndexType scalar_width = scalar_str.length();
       if (width && scalar_width < width) {
         std::string filler;
-        for (IndexType i = scalar_width; i < width; ++i) {
+        for (IndexType j = scalar_width; j < width; ++j) {
           filler.push_back(fmt.fill);
         }
         s << filler;
@@ -360,7 +360,7 @@
   using Format = TensorIOFormatLegacy;
   using Scalar = std::remove_const_t<typename Tensor::Scalar>;
 
-  static void run(std::ostream& s, const Tensor& tensor, const Format& fmt) {
+  static void run(std::ostream& s, const Tensor& tensor, const Format&) {
     typedef typename Tensor::Index IndexType;
     // backwards compatibility case: print tensor after reshaping to matrix of size dim(0) x
     // (dim(1)*dim(2)*...*dim(rank-1)).
diff --git a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
index c6ffa0d..74f2e6f 100644
--- a/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
+++ b/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h
@@ -22,13 +22,8 @@
 
 template <typename DerivativeType, typename OtherDerivativeType, typename EnableIf = void>
 struct maybe_coherent_pad_helper {
-  static constexpr int SizeAtCompileTime = DerivativeType::SizeAtCompileTime == Dynamic ||
-                                                   OtherDerivativeType::SizeAtCompileTime == Dynamic
-                                               ? Dynamic
-                                           : int(DerivativeType::SizeAtCompileTime) >
-                                                   int(OtherDerivativeType::SizeAtCompileTime)
-                                               ? DerivativeType::SizeAtCompileTime
-                                               : OtherDerivativeType::SizeAtCompileTime;
+  static constexpr int SizeAtCompileTime =
+      max_size_prefer_dynamic(DerivativeType::SizeAtCompileTime, OtherDerivativeType::SizeAtCompileTime);
   using type = CoherentPadOp<DerivativeType, SizeAtCompileTime>;
   static type pad(const DerivativeType& x, const OtherDerivativeType& y) {
     // CoherentPadOp uses variable_if_dynamic<SizeAtCompileTime>.  In this case, `SizeAtCompileTime` might
diff --git a/unsupported/test/NonLinearOptimization.cpp b/unsupported/test/NonLinearOptimization.cpp
index c847420..0a1cf36 100644
--- a/unsupported/test/NonLinearOptimization.cpp
+++ b/unsupported/test/NonLinearOptimization.cpp
@@ -1029,7 +1029,7 @@
   // VERIFY_IS_EQUAL(info, 2);
   LM_CHECK_N_ITERS(lm, 9, 8);
   // check norm^2
-  VERIFY(lm.fvec.squaredNorm() <= 1.4307867721E-25);
+  VERIFY(lm.fvec.squaredNorm() <= 1.44E-25);
   // check x
   VERIFY_IS_APPROX(x[0], 9.5100000027E-02);
   VERIFY_IS_APPROX(x[1], 1.0000000001E+00);
diff --git a/unsupported/test/levenberg_marquardt.cpp b/unsupported/test/levenberg_marquardt.cpp
index 355fc7c..c4f060b 100644
--- a/unsupported/test/levenberg_marquardt.cpp
+++ b/unsupported/test/levenberg_marquardt.cpp
@@ -692,7 +692,7 @@
   // VERIFY_IS_EQUAL(lm.nfev(), 9);
   // VERIFY_IS_EQUAL(lm.njev(), 8);
   // check norm^2
-  VERIFY(lm.fvec().squaredNorm() <= 1.4307867721E-25);
+  VERIFY(lm.fvec().squaredNorm() <= 1.44E-25);
   // check x
   VERIFY_IS_APPROX(x[0], 9.5100000027E-02);
   VERIFY_IS_APPROX(x[1], 1.0000000001E+00);
