Skip to content

Commit 23f0269

Browse files
committed
[X86] Add AVX-VNNI-INT8 instructions.
For more details about these instructions, please refer to the latest ISE document: https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html Reviewed By: pengfei, skan Differential Revision: https://reviews.llvm.org/D135938
1 parent 4ae88a8 commit 23f0269

35 files changed

+2908
-2
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,10 @@ X86 Support in Clang
648648
- Support ISA of ``AVX-IFMA``.
649649
* Support intrinsic of ``_mm(256)_madd52hi_avx_epu64``.
650650
* Support intrinsic of ``_mm(256)_madd52lo_avx_epu64``.
651+
- Support ISA of ``AVX-VNNI-INT8``.
652+
* Support intrinsic of ``_mm(256)_dpbssd(s)_epi32``.
653+
* Support intrinsic of ``_mm(256)_dpbsud(s)_epi32``.
654+
* Support intrinsic of ``_mm(256)_dpbuud(s)_epi32``.
651655

652656
WebAssembly Support in Clang
653657
----------------------------

clang/include/clang/Basic/BuiltinsX86.def

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -906,6 +906,7 @@ TARGET_BUILTIN(__builtin_ia32_alignq256, "V4OiV4OiV4OiIi", "ncV:256:", "avx512vl
906906
TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIiV4dUc", "ncV:512:", "avx512f")
907907
TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIiV4fUc", "ncV:512:", "avx512f")
908908

909+
// AVX-VNNI and AVX512-VNNI
909910
TARGET_BUILTIN(__builtin_ia32_vpdpbusd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni|avxvnni")
910911
TARGET_BUILTIN(__builtin_ia32_vpdpbusd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni|avxvnni")
911912
TARGET_BUILTIN(__builtin_ia32_vpdpbusd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
@@ -919,6 +920,20 @@ TARGET_BUILTIN(__builtin_ia32_vpdpwssds128, "V4iV4iV4iV4i", "ncV:128:", "avx512v
919920
TARGET_BUILTIN(__builtin_ia32_vpdpwssds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni|avxvnni")
920921
TARGET_BUILTIN(__builtin_ia32_vpdpwssds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
921922

923+
// AVX-VNNI-INT8
924+
TARGET_BUILTIN(__builtin_ia32_vpdpbssd128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
925+
TARGET_BUILTIN(__builtin_ia32_vpdpbssd256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
926+
TARGET_BUILTIN(__builtin_ia32_vpdpbssds128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
927+
TARGET_BUILTIN(__builtin_ia32_vpdpbssds256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
928+
TARGET_BUILTIN(__builtin_ia32_vpdpbsud128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
929+
TARGET_BUILTIN(__builtin_ia32_vpdpbsud256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
930+
TARGET_BUILTIN(__builtin_ia32_vpdpbsuds128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
931+
TARGET_BUILTIN(__builtin_ia32_vpdpbsuds256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
932+
TARGET_BUILTIN(__builtin_ia32_vpdpbuud128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
933+
TARGET_BUILTIN(__builtin_ia32_vpdpbuud256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
934+
TARGET_BUILTIN(__builtin_ia32_vpdpbuuds128, "V4iV4iV4iV4i", "ncV:128:", "avxvnniint8")
935+
TARGET_BUILTIN(__builtin_ia32_vpdpbuuds256, "V8iV8iV8iV8i", "ncV:256:", "avxvnniint8")
936+
922937
TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2dvC*V2OiUcIi", "nV:128:", "avx512vl")
923938
TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2OiV2OivC*V2OiUcIi", "nV:128:", "avx512vl")
924939
TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4dvC*V4OiUcIi", "nV:256:", "avx512vl")

clang/include/clang/Driver/Options.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4590,6 +4590,8 @@ def mavx512vp2intersect : Flag<["-"], "mavx512vp2intersect">, Group<m_x86_Featur
45904590
def mno_avx512vp2intersect : Flag<["-"], "mno-avx512vp2intersect">, Group<m_x86_Features_Group>;
45914591
def mavxifma : Flag<["-"], "mavxifma">, Group<m_x86_Features_Group>;
45924592
def mno_avxifma : Flag<["-"], "mno-avxifma">, Group<m_x86_Features_Group>;
4593+
def mavxvnniint8 : Flag<["-"], "mavxvnniint8">, Group<m_x86_Features_Group>;
4594+
def mno_avxvnniint8 : Flag<["-"], "mno-avxvnniint8">, Group<m_x86_Features_Group>;
45934595
def mavxvnni : Flag<["-"], "mavxvnni">, Group<m_x86_Features_Group>;
45944596
def mno_avxvnni : Flag<["-"], "mno-avxvnni">, Group<m_x86_Features_Group>;
45954597
def madx : Flag<["-"], "madx">, Group<m_x86_Features_Group>;

clang/lib/Basic/Targets/X86.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
342342
HasAVXIFMA = true;
343343
} else if (Feature == "+avxvnni") {
344344
HasAVXVNNI = true;
345+
} else if (Feature == "+avxvnniint8") {
346+
HasAVXVNNIINT8 = true;
345347
} else if (Feature == "+serialize") {
346348
HasSERIALIZE = true;
347349
} else if (Feature == "+tsxldtrk") {
@@ -796,6 +798,8 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
796798
Builder.defineMacro("__AVXIFMA__");
797799
if (HasAVXVNNI)
798800
Builder.defineMacro("__AVXVNNI__");
801+
if (HasAVXVNNIINT8)
802+
Builder.defineMacro("__AVXVNNIINT8__");
799803
if (HasSERIALIZE)
800804
Builder.defineMacro("__SERIALIZE__");
801805
if (HasTSXLDTRK)
@@ -920,6 +924,7 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
920924
.Case("avx512vp2intersect", true)
921925
.Case("avxifma", true)
922926
.Case("avxvnni", true)
927+
.Case("avxvnniint8", true)
923928
.Case("bmi", true)
924929
.Case("bmi2", true)
925930
.Case("cldemote", true)
@@ -1019,6 +1024,8 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
10191024
.Case("avx512vp2intersect", HasAVX512VP2INTERSECT)
10201025
.Case("avxifma", HasAVXIFMA)
10211026
.Case("avxvnni", HasAVXVNNI)
1027+
.Case("avxvnni", HasAVXVNNI)
1028+
.Case("avxvnniint8", HasAVXVNNIINT8)
10221029
.Case("bmi", HasBMI)
10231030
.Case("bmi2", HasBMI2)
10241031
.Case("cldemote", HasCLDEMOTE)

clang/lib/Basic/Targets/X86.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public TargetInfo {
141141
bool HasAMXFP16 = false;
142142
bool HasCMPCCXADD = false;
143143
bool HasRAOINT = false;
144+
bool HasAVXVNNIINT8 = false;
144145
bool HasKL = false; // For key locker
145146
bool HasWIDEKL = false; // For wide key locker
146147
bool HasHRESET = false;

clang/lib/Headers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ set(x86_files
144144
avx512vpopcntdqvlintrin.h
145145
avxifmaintrin.h
146146
avxintrin.h
147+
avxvnniint8intrin.h
147148
avxvnniintrin.h
148149
bmi2intrin.h
149150
bmiintrin.h

0 commit comments

Comments
 (0)