eladcohen created this revision. eladcohen added a subscriber: cfe-commits.
These were re-introduced to get better compile times in cases that don't actually require all the features. However, it creates compatibility issues with MSVC (in which all the intrinsics are available all the time). With Clang's Modules feature we can remove these guards and still prevent large header files from compiling over and over again. See also the thread "clang-cl's <intrin.h>, _tzcnt_u32, and compatibility with MSVC's <intrin.h>" in cfe-dev. https://reviews.llvm.org/D27896 Files: lib/Headers/immintrin.h lib/Headers/x86intrin.h
Index: lib/Headers/immintrin.h =================================================================== --- lib/Headers/immintrin.h +++ lib/Headers/immintrin.h @@ -24,45 +24,24 @@ #ifndef __IMMINTRIN_H #define __IMMINTRIN_H -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__MMX__) #include <mmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE__) #include <xmmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE2__) #include <emmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE3__) #include <pmmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSSE3__) #include <tmmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__SSE4_2__) || defined(__SSE4_1__)) #include <smmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AES__) || defined(__PCLMUL__)) #include <wmmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__CLFLUSHOPT__) #include <clflushoptintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX__) #include <avxintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX2__) #include <avx2intrin.h> /* The 256-bit versions of functions in f16cintrin.h. @@ -112,90 +91,45 @@ { return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a); } -#endif /* __AVX2__ */ -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI__) #include <bmiintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI2__) #include <bmi2intrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__LZCNT__) #include <lzcntintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FMA__) #include <fmaintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512F__) #include <avx512fintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VL__) #include <avx512vlintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512BW__) #include <avx512bwintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512CD__) #include <avx512cdintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512DQ__) #include <avx512dqintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AVX512VL__) && defined(__AVX512BW__)) #include <avx512vlbwintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AVX512VL__) && defined(__AVX512CD__)) #include <avx512vlcdintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AVX512VL__) && defined(__AVX512DQ__)) #include <avx512vldqintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512ER__) #include <avx512erintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512IFMA__) #include <avx512ifmaintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AVX512IFMA__) && defined(__AVX512VL__)) #include <avx512ifmavlintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512VBMI__) #include <avx512vbmiintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || \ - (defined(__AVX512VBMI__) && defined(__AVX512VL__)) #include <avx512vbmivlintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__AVX512PF__) #include <avx512pfintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PKU__) #include <pkuintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDRND__) static __inline__ int __attribute__((__always_inline__, __nodebug__, __target__("rdrnd"))) _rdrand16_step(unsigned short *__p) { @@ -227,9 +161,7 @@ return __builtin_ia32_rdrand64_step(__p); } #endif -#endif /* __RDRND__ */ -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FSGSBASE__) #ifdef __x86_64__ static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__, __target__("fsgsbase"))) _readfsbase_u32(void) @@ -280,36 +212,21 @@ } #endif -#endif /* __FSGSBASE__ */ -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RTM__) #include <rtmintrin.h> #include <xtestintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SHA__) #include <shaintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FXSR__) #include <fxsrintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVE__) #include <xsaveintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEOPT__) #include <xsaveoptintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVEC__) #include <xsavecintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XSAVES__) #include <xsavesintrin.h> -#endif /* Some intrinsics inside adxintrin.h are available only on processors with ADX, * whereas others are also available at all times. */ Index: lib/Headers/x86intrin.h =================================================================== --- lib/Headers/x86intrin.h +++ lib/Headers/x86intrin.h @@ -28,57 +28,31 @@ #include <immintrin.h> -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__3dNOW__) #include <mm3dnow.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI__) #include <bmiintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__BMI2__) #include <bmi2intrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__LZCNT__) #include <lzcntintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__POPCNT__) #include <popcntintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__RDSEED__) #include <rdseedintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__PRFCHW__) #include <prfchwintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__SSE4A__) #include <ammintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__FMA4__) #include <fma4intrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__XOP__) #include <xopintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__TBM__) #include <tbmintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__F16C__) #include <f16cintrin.h> -#endif -#if !defined(_MSC_VER) || __has_feature(modules) || defined(__MWAITX__) #include <mwaitxintrin.h> -#endif /* FIXME: LWP */
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits