Intel 15.0.1 (composer_xe_2015.1.133) immintrin.h defines _mm256_setr_m128 as the following: #define _mm256_setr_m128(lo, hi) _mm256_set_m128((hi), (lo)) This is not compatible with Eigen/src/Core/arch/AVX/MathFunctions.h: // For some reason, this function didn't make it into the avxintirn.h // used by the compiler, so we'll just wrap it. #define _mm256_setr_m128(lo, hi) \ _mm256_insertf128_si256(_mm256_castsi128_si256(lo), (hi), 1) Perhaps the #define in MathFunctions.h should be protected with an #ifndef ? Would that break anything? So far this is just a warning, but I am curious why the cast is needed?
Fixed: https://bitbucket.org/eigen/eigen/commits/69441f92b003/
Apologies for drudging this up again -- thanks for fixing so quickly -- but was the change to the following line correct? - Packet8i sign_flip_mask = _mm256_setr_m128(lo, hi); + Packet8i sign_flip_mask = _mm256_setr_m128(hi, lo); I see that the order of lo/hi was swapped, but the set-reverse "setr" function is still called rather than the "set" function. I point this out because the other diffs in this commit have swapped the lo/hi order *AND* changed it from setr to just set.
https://bitbucket.org/eigen/eigen/commits/4d343cd68ddc/ https://bitbucket.org/eigen/eigen/commits/927089ed4185/
-- GitLab Migration Automatic Message -- This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1140.