Author: Freddy Ye
Date: 2022-09-05T22:51:22+08:00
New Revision: ea62cce7c72d152406d6cd91754a3153c1300c31
URL:
https://github.com/llvm/llvm-project/commit/ea62cce7c72d152406d6cd91754a3153c1300c31
DIFF:
https://github.com/llvm/llvm-project/commit/ea62cce7c72d152406d6cd91754a3153c1300c31.diff
LOG: avxifma
Added:
clang/lib/Headers/avxifmaintrin.h
clang/test/CodeGen/avxifma-builtins.c
llvm/test/CodeGen/X86/avx-ifma-intrinsics.ll
llvm/test/MC/Disassembler/X86/avx-ifma-att.txt
llvm/test/MC/Disassembler/X86/avx-ifma-intel.txt
llvm/test/MC/Disassembler/X86/x86-64-avx-ifma-att.txt
llvm/test/MC/Disassembler/X86/x86-64-avx-ifma-intel.txt
llvm/test/MC/X86/avx-ifma-att.s
llvm/test/MC/X86/avx-ifma-intel.s
llvm/test/MC/X86/x86-64-avx-ifma-att.s
Modified:
clang/include/clang/Basic/BuiltinsX86.def
clang/include/clang/Driver/Options.td
clang/lib/Basic/Targets/X86.cpp
clang/lib/Basic/Targets/X86.h
clang/lib/Headers/CMakeLists.txt
clang/lib/Headers/immintrin.h
clang/test/CodeGen/attr-target-x86.c
clang/test/Driver/x86-target-features.c
clang/test/Preprocessor/predefined-arch-macros-x86.c
clang/test/Preprocessor/x86_target_features.c
llvm/include/llvm/IR/IntrinsicsX86.td
llvm/include/llvm/Support/X86TargetParser.def
llvm/lib/Support/X86TargetParser.cpp
llvm/lib/Target/X86/X86.td
llvm/lib/Target/X86/X86InstrFoldTables.cpp
llvm/lib/Target/X86/X86InstrInfo.cpp
llvm/lib/Target/X86/X86InstrInfo.td
llvm/lib/Target/X86/X86InstrSSE.td
llvm/lib/Target/X86/X86IntrinsicsInfo.h
Removed:
diff --git a/clang/include/clang/Basic/BuiltinsX86.def
b/clang/include/clang/Basic/BuiltinsX86.def
index ad8509e6124d4..c79dd20867ae1 100644
--- a/clang/include/clang/Basic/BuiltinsX86.def
+++ b/clang/include/clang/Basic/BuiltinsX86.def
@@ -1326,6 +1326,10 @@ TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask,
"V2OiV2OiC*V2OiUc", "nV:128:
TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4OiV4OiC*V4OiUc",
"nV:256:", "avx512vl")
TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2Oi*V2OiUc",
"nV:128:", "avx512vl")
TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4Oi*V4OiUc",
"nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huqvex128, "V2OiV2OiV2OiV2Oi",
"ncV:128:", "avxifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huqvex256, "V4OiV4OiV4OiV4Oi",
"ncV:256:", "avxifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luqvex128, "V2OiV2OiV2OiV2Oi",
"ncV:128:", "avxifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luqvex256, "V4OiV4OiV4OiV4Oi",
"ncV:256:", "avxifma")
TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512, "V8OiV8OiV8OiV8Oi", "ncV:512:",
"avx512ifma")
TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512, "V8OiV8OiV8OiV8Oi", "ncV:512:",
"avx512ifma")
TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128, "V2OiV2OiV2OiV2Oi", "ncV:128:",
"avx512ifma,avx512vl")
diff --git a/clang/include/clang/Driver/Options.td
b/clang/include/clang/Driver/Options.td
index d921ea5d5da99..4eaf752ea1c28 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -4544,6 +4544,8 @@ def mavx512vpopcntdq : Flag<["-"], "mavx512vpopcntdq">,
Group,
Group;
def mavx512vp2intersect : Flag<["-"], "mavx512vp2intersect">,
Group;
def mno_avx512vp2intersect : Flag<["-"], "mno-avx512vp2intersect">,
Group;
+def mavxifma : Flag<["-"], "mavxifma">, Group;
+def mno_avxifma : Flag<["-"], "mno-avxifma">, Group;
def mavxvnni : Flag<["-"], "mavxvnni">, Group;
def mno_avxvnni : Flag<["-"], "mno-avxvnni">, Group;
def madx : Flag<["-"], "madx">, Group;
diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index 46a551603eca2..e20e1f369a1a8 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -330,6 +330,8 @@ bool
X86TargetInfo::handleTargetFeatures(std::vector &Features,
HasAMXINT8 = true;
} else if (Feature == "+amx-tile") {
HasAMXTILE = true;
+} else if (Feature == "+avxifma") {
+ HasAVXIFMA = true;
} else if (Feature == "+avxvnni") {
HasAVXVNNI = true;
} else if (Feature == "+serialize") {
@@ -774,6 +776,9 @@ void X86TargetInfo::getTargetDefines(const LangOptions
&Opts,
Builder.defineMacro("__AMXINT8__");
if (HasAMXBF16)
Builder.defineMacro("__AMXBF16__");
+ if (HasAVXIFMA)
+Builder.defineMacro("__AVXIFMA__");
+ Builder.defineMacro("__AVXIFMA_SUPPORTED__");
if (HasAVXVNNI)
Builder.defineMacro("__AVXVNNI__");
if (HasSERIALIZE)
@@ -898,6 +903,7 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name)
const {
.Case("avx512ifma", true)
.Case("avx512vp2intersect", true)
.Case("avxvnni", true)
+ .Case("avxifma", true)
.Case("bmi", true)
.Case("bmi2", true)
.Case("cldemote", true)
@@ -973,6 +979,7 @@ bool X86TargetInfo::hasFeature(StringRef Feature)