imp files for Intel intrinsics

Rules are based on the files' error messages when included directly.

These differ for different compilers, hence separate files for gcc and
clang. Newer compiler versions can include additional header files for
intrinsics, hence version specification in filenames - mostly an issue
for forwards compatibility. Backwards compatibility should work out for
most cases. Rules for backwards compatibility to some gcc versions
included (tested versions listed in the file).

When two possible public headers are suggested, both are allowed
and it's left up to the iwyu standard behaviour which to suggest.
This commit is contained in:
Paul Seyfert 2018-05-22 17:41:39 +02:00 committed by Kim Gräsman
parent 615507a3cd
commit e8066f0032
2 changed files with 119 additions and 0 deletions

59
clang-6.intrinsics.imp Normal file
View File

@ -0,0 +1,59 @@
# These mappings based on #error pragmas in the header files below in clang 6.0.0
[
{ include: ["<adxintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx2intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512bitalgintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512bwintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512cdintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512dqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512erintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512fintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512ifmaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512ifmavlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512pfintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmi2intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmiintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmivlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlbitalgintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlbwintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlcdintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vldqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlvbmi2intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlvnniintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vnniintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vpopcntdqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vpopcntdqvlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avxintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<bmi2intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<bmiintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<cetintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<clflushoptintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<clwbintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<clzerointrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<f16cintrin.h>", private, "<emmintrin.h>", public ] },
{ include: ["<fma4intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<fmaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<fxsrintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<gfniintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<ia32intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<lwpintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<lzcntintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<mwaitxintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<pkuintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<rdseedintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<rtmintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<shaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<tbmintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<vaesintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<vpclmulqdqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<xopintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<xsavecintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<xsaveintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<xsaveoptintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<xsavesintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<xtestintrin.h>", private, "<immintrin.h>", public ] },
# files that list two possible public headers
{ include: ["<prfchwintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<prfchwintrin.h>", private, "<mm3dnow.h>", public ] },
]

60
gcc-8.intrinsics.imp Normal file
View File

@ -0,0 +1,60 @@
# These mappings based on #error pragmas in the header files below in gcc 8.1.0
# backwards compatibility tested on gcc 4.8.4, 4.9.3, 6.2.0, 7.3.0
[
{ include: ["<adxintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<avx2intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx5124fmapsintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<avx5124vnniwintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<avx512bitalgintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<avx512bwintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512cdintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512dqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512erintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512fintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512ifmaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512ifmavlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512pfintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmi2intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmi2vlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmiintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vbmivlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlbwintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vldqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vnniintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vnnivlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avx512vpopcntdqintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<avx512vpopcntdqvlintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<avxintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<bmi2intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<bmiintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<cetintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<clflushoptintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<clwbintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<fma4intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<fmaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<gfniintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<ia32intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<lwpintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<lzcntintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<movdirintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<pconfigintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<pkuintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<rdseedintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<rtmintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<shaintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<tbmintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<vpclmulqdqintrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<wbnoinvdintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<xopintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<xsavecintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<xsavesintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<xtestintrin.h>", private, "<immintrin.h>", public ] },
# files that list two possible public headers
{ include: ["<f16intrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<f16intrin.h>", private, "<immintrin.h>", public ] },
{ include: ["<prfchwintrin.h>", private, "<x86intrin.h>", public ] },
{ include: ["<prfchwintrin.h>", private, "<mm3dnow.h>", public ] },
# one rule for backwards compatibility with gcc 6.1 and 6.2
{ include: ["<pcommitintrin.h>", private, "<x86intrin.h>", public ] },
]