summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/eigen
diff options
context:
space:
mode:
Diffstat (limited to 'var/spack/repos/builtin/packages/eigen')
-rw-r--r--var/spack/repos/builtin/packages/eigen/package.py4
-rw-r--r--var/spack/repos/builtin/packages/eigen/xlc-compilation-3.3.4.patch12
2 files changed, 16 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index eae3dca0e3..552827ed43 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -39,6 +39,10 @@ class Eigen(CMakePackage):
patch('https://gitlab.com/libeigen/eigen/-/commit/6d822a1052fc665f06dc51b4729f6a38e0da0546.diff', when='@3.3.8',
sha256='62590e9b33a8f72b608a72b87147a306e7cb20766ea53c6b8e0a183fa6cb7635')
+ # there is a bug in 3.3.4 that provokes a compile error with the xl compiler
+ # See https://gitlab.com/libeigen/eigen/-/issues/1555
+ patch('xlc-compilation-3.3.4.patch', when='@3.3.4%xl_r')
+
# From http://eigen.tuxfamily.org/index.php?title=Main_Page#Requirements
# "Eigen doesn't have any dependencies other than the C++ standard
# library."
diff --git a/var/spack/repos/builtin/packages/eigen/xlc-compilation-3.3.4.patch b/var/spack/repos/builtin/packages/eigen/xlc-compilation-3.3.4.patch
new file mode 100644
index 0000000000..50ccd0f39f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/eigen/xlc-compilation-3.3.4.patch
@@ -0,0 +1,12 @@
+diff -up /Eigen/src/Core/arch/AltiVec/PacketMath.h /Eigen/src/Core/arch/AltiVec/PacketMath.h
+--- /Eigen/src/Core/arch/AltiVec/PacketMath.h
++++ /Eigen/src/Core/arch/AltiVec/PacketMath.h
+@@ -1022,7 +1022,7 @@ ptranspose(PacketBlock<Packet2d,2>& kern
+
+ template<> EIGEN_STRONG_INLINE Packet2d pblend(const Selector<2>& ifPacket, const Packet2d& thenPacket, const Packet2d& elsePacket) {
+ Packet2l select = { ifPacket.select[0], ifPacket.select[1] };
+- Packet2bl mask = vec_cmpeq(reinterpret_cast<Packet2d>(select), reinterpret_cast<Packet2d>(p2l_ONE));
++ Packet2bl mask = reinterpret_cast<Packet2bl>( vec_cmpeq(reinterpret_cast<Packet2d>(select), reinterpret_cast<Packet2d>(p2l_ONE)) );
+ return vec_sel(elsePacket, thenPacket, mask);
+ }
+ #endif // __VSX__