Skip to content

Commit 1c154bd

Browse files
committed
[X86] Add AVX-VNNI-INT16 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/D155145
1 parent b215a2c commit 1c154bd

30 files changed

+3157
-2
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,10 @@ X86 Support
824824
- Support ISA of ``SM4``.
825825
* Support intrinsic of ``_mm(256)_sm4key4_epi32``.
826826
* Support intrinsic of ``_mm(256)_sm4rnds4_epi32``.
827+
- Support ISA of ``AVX-VNNI-INT16``.
828+
* Support intrinsic of ``_mm(256)_dpwsud(s)_epi32``.
829+
* Support intrinsic of ``_mm(256)_dpwusd(s)_epi32``.
830+
* Support intrinsic of ``_mm(256)_dpwuud(s)_epi32``.
827831

828832
Arm and AArch64 Support
829833
^^^^^^^^^^^^^^^^^^^^^^^

clang/include/clang/Basic/BuiltinsX86.def

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2116,6 +2116,20 @@ TARGET_HEADER_BUILTIN(__readgsword, "UsUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES,
21162116
TARGET_HEADER_BUILTIN(__readgsdword, "UNiUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
21172117
TARGET_HEADER_BUILTIN(__readgsqword, "ULLiUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
21182118

2119+
// AVX-VNNI-INT16
2120+
TARGET_BUILTIN(__builtin_ia32_vpdpwsud128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2121+
TARGET_BUILTIN(__builtin_ia32_vpdpwsud256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2122+
TARGET_BUILTIN(__builtin_ia32_vpdpwsuds128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2123+
TARGET_BUILTIN(__builtin_ia32_vpdpwsuds256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2124+
TARGET_BUILTIN(__builtin_ia32_vpdpwusd128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2125+
TARGET_BUILTIN(__builtin_ia32_vpdpwusd256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2126+
TARGET_BUILTIN(__builtin_ia32_vpdpwusds128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2127+
TARGET_BUILTIN(__builtin_ia32_vpdpwusds256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2128+
TARGET_BUILTIN(__builtin_ia32_vpdpwuud128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2129+
TARGET_BUILTIN(__builtin_ia32_vpdpwuud256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2130+
TARGET_BUILTIN(__builtin_ia32_vpdpwuuds128, "V4iV4iV4iV4i", "nV:128:", "avxvnniint16")
2131+
TARGET_BUILTIN(__builtin_ia32_vpdpwuuds256, "V8iV8iV8iV8i", "nV:256:", "avxvnniint16")
2132+
21192133
// AVX-NE-CONVERT
21202134
TARGET_BUILTIN(__builtin_ia32_vbcstnebf162ps128, "V4fyC*", "nV:128:", "avxneconvert")
21212135
TARGET_BUILTIN(__builtin_ia32_vbcstnebf162ps256, "V8fyC*", "nV:256:", "avxneconvert")

clang/include/clang/Driver/Options.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4960,6 +4960,8 @@ def mavxifma : Flag<["-"], "mavxifma">, Group<m_x86_Features_Group>;
49604960
def mno_avxifma : Flag<["-"], "mno-avxifma">, Group<m_x86_Features_Group>;
49614961
def mavxneconvert : Flag<["-"], "mavxneconvert">, Group<m_x86_Features_Group>;
49624962
def mno_avxneconvert : Flag<["-"], "mno-avxneconvert">, Group<m_x86_Features_Group>;
4963+
def mavxvnniint16 : Flag<["-"], "mavxvnniint16">, Group<m_x86_Features_Group>;
4964+
def mno_avxvnniint16 : Flag<["-"], "mno-avxvnniint16">, Group<m_x86_Features_Group>;
49634965
def mavxvnniint8 : Flag<["-"], "mavxvnniint8">, Group<m_x86_Features_Group>;
49644966
def mno_avxvnniint8 : Flag<["-"], "mno-avxvnniint8">, Group<m_x86_Features_Group>;
49654967
def mavxvnni : Flag<["-"], "mavxvnni">, Group<m_x86_Features_Group>;

clang/lib/Basic/Targets/X86.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,8 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
353353
HasAVXNECONVERT= true;
354354
} else if (Feature == "+avxvnni") {
355355
HasAVXVNNI = true;
356+
} else if (Feature == "+avxvnniint16") {
357+
HasAVXVNNIINT16 = true;
356358
} else if (Feature == "+avxvnniint8") {
357359
HasAVXVNNIINT8 = true;
358360
} else if (Feature == "+serialize") {
@@ -836,6 +838,8 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
836838
Builder.defineMacro("__AVXNECONVERT__");
837839
if (HasAVXVNNI)
838840
Builder.defineMacro("__AVXVNNI__");
841+
if (HasAVXVNNIINT16)
842+
Builder.defineMacro("__AVXVNNIINT16__");
839843
if (HasAVXVNNIINT8)
840844
Builder.defineMacro("__AVXVNNIINT8__");
841845
if (HasSERIALIZE)
@@ -964,6 +968,7 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
964968
.Case("avxifma", true)
965969
.Case("avxneconvert", true)
966970
.Case("avxvnni", true)
971+
.Case("avxvnniint16", true)
967972
.Case("avxvnniint8", true)
968973
.Case("bmi", true)
969974
.Case("bmi2", true)
@@ -1069,6 +1074,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
10691074
.Case("avxifma", HasAVXIFMA)
10701075
.Case("avxneconvert", HasAVXNECONVERT)
10711076
.Case("avxvnni", HasAVXVNNI)
1077+
.Case("avxvnniint16", HasAVXVNNIINT16)
10721078
.Case("avxvnniint8", HasAVXVNNIINT8)
10731079
.Case("bmi", HasBMI)
10741080
.Case("bmi2", HasBMI2)

clang/lib/Basic/Targets/X86.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class LLVM_LIBRARY_VISIBILITY X86TargetInfo : public TargetInfo {
145145
bool HasPTWRITE = false;
146146
bool HasINVPCID = false;
147147
bool HasENQCMD = false;
148+
bool HasAVXVNNIINT16 = false;
148149
bool HasAMXFP16 = false;
149150
bool HasCMPCCXADD = false;
150151
bool HasRAOINT = false;

clang/lib/Headers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ set(x86_files
160160
avxifmaintrin.h
161161
avxintrin.h
162162
avxneconvertintrin.h
163+
avxvnniint16intrin.h
163164
avxvnniint8intrin.h
164165
avxvnniintrin.h
165166
bmi2intrin.h

0 commit comments

Comments
 (0)