diff options
author | Gael Guennebaud <g.gael@free.fr> | 2018-10-16 01:04:25 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2018-10-16 01:04:25 +0200 |
commit | a39e0f7438aee78766a5875f2d29f7c54aff68dc (patch) | |
tree | 43043af62adb43a793f4d4270f12a5065075de0d /Eigen | |
parent | e3b85771d76d3f62bec99c4ab1a8223b71b53286 (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.h | 7 |
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); |