aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2018-10-16 01:04:25 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2018-10-16 01:04:25 +0200
commita39e0f7438aee78766a5875f2d29f7c54aff68dc (patch)
tree43043af62adb43a793f4d4270f12a5065075de0d /Eigen
parente3b85771d76d3f62bec99c4ab1a8223b71b53286 (diff)
bug #1612: fix regression in "outer-vectorization" of partial reductions for PacketSize==1 (aka complex<double>)
Diffstat (limited to 'Eigen')
-rw-r--r--Eigen/src/Core/PartialReduxEvaluator.h7
1 files changed, 7 insertions, 0 deletions
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<PartialReduxExpr<ArgType, MemberOp, Direction> >
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<double> 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<PacketType>(coeff(idx));
typedef typename internal::redux_evaluator<PanelType> PanelEvaluator;
PanelEvaluator panel_eval(panel);