From a39e0f7438aee78766a5875f2d29f7c54aff68dc Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Tue, 16 Oct 2018 01:04:25 +0200 Subject: [PATCH] bug #1612: fix regression in "outer-vectorization" of partial reductions for PacketSize==1 (aka complex) --- Eigen/src/Core/PartialReduxEvaluator.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Eigen/src/Core/PartialReduxEvaluator.h b/Eigen/src/Core/PartialReduxEvaluator.h index e524f32a6..0be694259 100644 --- a/Eigen/src/Core/PartialReduxEvaluator.h +++ b/Eigen/src/Core/PartialReduxEvaluator.h @@ -205,6 +205,13 @@ struct evaluator > Direction==Vertical ? idx : 0, Direction==Vertical ? m_arg.rows() : Index(PacketSize), Direction==Vertical ? Index(PacketSize) : m_arg.cols()); + + // FIXME + // See bug 1612, currently if PacketSize==1 (i.e. complex with 128bits registers) then the storage-order of panel get reversed + // and methods like packetByOuterInner do not make sense anymore in this context. + // So let's just by pass "vectorization" in this case: + if(PacketSize==1) + return internal::pset1(coeff(idx)); typedef typename internal::redux_evaluator PanelEvaluator; PanelEvaluator panel_eval(panel);