Include immintrin.h if F16C is available and vectorization is disabled
If EIGEN_DONT_VECTORIZE is defined, immintrin.h is not included even if F16C is available. Trying to use F16C intrinsics thus fails.
This fixes issue #2395.
diff --git a/Eigen/src/Core/util/ConfigureVectorization.h b/Eigen/src/Core/util/ConfigureVectorization.h
index ba2049b..4ba1370 100644
--- a/Eigen/src/Core/util/ConfigureVectorization.h
+++ b/Eigen/src/Core/util/ConfigureVectorization.h
@@ -420,9 +420,11 @@
// We can use the optimized fp16 to float and float to fp16 conversion routines
#define EIGEN_HAS_FP16_C
- #if EIGEN_COMP_CLANG
- // Workaround for clang: The FP16C intrinsics for clang are included by
- // immintrin.h, as opposed to emmintrin.h as suggested by Intel:
+ #if EIGEN_COMP_GNUC
+ // Make sure immintrin.h is included, even if e.g. vectorization is
+ // explicitly disabled (see also issue #2395).
+ // Note that FP16C intrinsics for gcc and clang are included by immintrin.h,
+ // as opposed to emmintrin.h as suggested by Intel:
// https://software.intel.com/sites/landingpage/IntrinsicsGuide/#othertechs=FP16C&expand=1711
#include <immintrin.h>
#endif