summaryrefslogtreecommitdiff
path: root/clang/lib/Basic/Targets/X86.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Basic/Targets/X86.cpp')
-rw-r--r--clang/lib/Basic/Targets/X86.cpp97
1 files changed, 14 insertions, 83 deletions
diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp
index f9424cb68ad7..6eb4db51d4e6 100644
--- a/clang/lib/Basic/Targets/X86.cpp
+++ b/clang/lib/Basic/Targets/X86.cpp
@@ -165,14 +165,6 @@ bool X86TargetInfo::initFeatureMap(
setFeatureEnabled(Features, F, true);
std::vector<std::string> UpdatedFeaturesVec;
- std::vector<std::string> UpdatedAVX10FeaturesVec;
- enum { FE_NOSET = -1, FE_FALSE, FE_TRUE };
- int HasEVEX512 = FE_NOSET;
- bool HasAVX512F = Features.lookup("avx512f");
- bool HasAVX10 = Features.lookup("avx10.1-256");
- bool HasAVX10_512 = Features.lookup("avx10.1-512");
- std::string LastAVX10;
- std::string LastAVX512;
for (const auto &Feature : FeaturesVec) {
// Expand general-regs-only to -x86, -mmx and -sse
if (Feature == "+general-regs-only") {
@@ -182,51 +174,8 @@ bool X86TargetInfo::initFeatureMap(
continue;
}
- if (Feature.substr(1, 6) == "avx10.") {
- if (Feature[0] == '+') {
- HasAVX10 = true;
- if (StringRef(Feature).ends_with("512"))
- HasAVX10_512 = true;
- LastAVX10 = Feature;
- } else if (HasAVX10 && Feature == "-avx10.1-256") {
- HasAVX10 = false;
- HasAVX10_512 = false;
- } else if (HasAVX10_512 && Feature == "-avx10.1-512") {
- HasAVX10_512 = false;
- }
- // Postpone AVX10 features handling after AVX512 settled.
- UpdatedAVX10FeaturesVec.push_back(Feature);
- continue;
- } else if (!HasAVX512F && StringRef(Feature).starts_with("+avx512")) {
- HasAVX512F = true;
- LastAVX512 = Feature;
- } else if (HasAVX512F && Feature == "-avx512f") {
- HasAVX512F = false;
- } else if (HasEVEX512 != FE_TRUE && Feature == "+evex512") {
- HasEVEX512 = FE_TRUE;
- continue;
- } else if (HasEVEX512 != FE_FALSE && Feature == "-evex512") {
- HasEVEX512 = FE_FALSE;
- continue;
- }
-
UpdatedFeaturesVec.push_back(Feature);
}
- llvm::append_range(UpdatedFeaturesVec, UpdatedAVX10FeaturesVec);
- // HasEVEX512 is a three-states flag. We need to turn it into [+-]evex512
- // according to other features.
- if (!HasAVX10_512 && HasAVX512F) {
- UpdatedFeaturesVec.push_back(HasEVEX512 == FE_FALSE ? "-evex512"
- : "+evex512");
- if (HasAVX10 && HasEVEX512 != FE_FALSE)
- Diags.Report(diag::warn_invalid_feature_combination)
- << LastAVX512 + " " + LastAVX10 + "; will be promoted to avx10.1-512";
- } else if (HasAVX10) {
- if (!HasAVX512F && HasEVEX512 != FE_NOSET)
- Diags.Report(diag::warn_invalid_feature_combination)
- << LastAVX10 + (HasEVEX512 == FE_TRUE ? " +evex512" : " -evex512");
- UpdatedFeaturesVec.push_back(HasAVX10_512 ? "+evex512" : "-evex512");
- }
if (!TargetInfo::initFeatureMap(Features, Diags, CPU, UpdatedFeaturesVec))
return false;
@@ -327,17 +276,11 @@ bool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features,
HasF16C = true;
} else if (Feature == "+gfni") {
HasGFNI = true;
- } else if (Feature == "+evex512") {
- HasEVEX512 = true;
- } else if (Feature == "+avx10.1-256") {
+ } else if (Feature == "+avx10.1") {
HasAVX10_1 = true;
- } else if (Feature == "+avx10.1-512") {
- HasAVX10_1_512 = true;
- } else if (Feature == "+avx10.2-256") {
+ } else if (Feature == "+avx10.2") {
HasAVX10_2 = true;
HasFullBFloat16 = true;
- } else if (Feature == "+avx10.2-512") {
- HasAVX10_2_512 = true;
} else if (Feature == "+avx512cd") {
HasAVX512CD = true;
} else if (Feature == "+avx512vpopcntdq") {
@@ -868,16 +811,14 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
if (HasGFNI)
Builder.defineMacro("__GFNI__");
- if (HasEVEX512)
- Builder.defineMacro("__EVEX512__");
- if (HasAVX10_1)
+ if (HasAVX10_1) {
Builder.defineMacro("__AVX10_1__");
- if (HasAVX10_1_512)
Builder.defineMacro("__AVX10_1_512__");
- if (HasAVX10_2)
+ }
+ if (HasAVX10_2) {
Builder.defineMacro("__AVX10_2__");
- if (HasAVX10_2_512)
Builder.defineMacro("__AVX10_2_512__");
+ }
if (HasAVX512CD)
Builder.defineMacro("__AVX512CD__");
if (HasAVX512VPOPCNTDQ)
@@ -896,7 +837,6 @@ void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
Builder.defineMacro("__AVX512BW__");
if (HasAVX512VL) {
Builder.defineMacro("__AVX512VL__");
- Builder.defineMacro("__EVEX256__");
}
if (HasAVX512VBMI)
Builder.defineMacro("__AVX512VBMI__");
@@ -1128,10 +1068,8 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
.Case("amx-tile", true)
.Case("amx-transpose", true)
.Case("avx", true)
- .Case("avx10.1-256", true)
- .Case("avx10.1-512", true)
- .Case("avx10.2-256", true)
- .Case("avx10.2-512", true)
+ .Case("avx10.1", true)
+ .Case("avx10.2", true)
.Case("avx2", true)
.Case("avx512f", true)
.Case("avx512cd", true)
@@ -1162,7 +1100,6 @@ bool X86TargetInfo::isValidFeatureName(StringRef Name) const {
.Case("crc32", true)
.Case("cx16", true)
.Case("enqcmd", true)
- .Case("evex512", true)
.Case("f16c", true)
.Case("fma", true)
.Case("fma4", true)
@@ -1252,10 +1189,8 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
.Case("amx-tile", HasAMXTILE)
.Case("amx-transpose", HasAMXTRANSPOSE)
.Case("avx", SSELevel >= AVX)
- .Case("avx10.1-256", HasAVX10_1)
- .Case("avx10.1-512", HasAVX10_1_512)
- .Case("avx10.2-256", HasAVX10_2)
- .Case("avx10.2-512", HasAVX10_2_512)
+ .Case("avx10.1", HasAVX10_1)
+ .Case("avx10.2", HasAVX10_2)
.Case("avx2", SSELevel >= AVX2)
.Case("avx512f", SSELevel >= AVX512F)
.Case("avx512cd", HasAVX512CD)
@@ -1287,7 +1222,6 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
.Case("cx8", HasCX8)
.Case("cx16", HasCX16)
.Case("enqcmd", HasENQCMD)
- .Case("evex512", HasEVEX512)
.Case("f16c", HasF16C)
.Case("fma", HasFMA)
.Case("fma4", XOPLevel >= FMA4)
@@ -1766,9 +1700,8 @@ bool X86TargetInfo::validateOperandSize(const llvm::StringMap<bool> &FeatureMap,
return Size <= 64;
case 'z':
// XMM0/YMM/ZMM0
- if (hasFeatureEnabled(FeatureMap, "avx512f") &&
- hasFeatureEnabled(FeatureMap, "evex512"))
- // ZMM0 can be used if target supports AVX512F and EVEX512 is set.
+ if (hasFeatureEnabled(FeatureMap, "avx512f"))
+ // ZMM0 can be used if target supports AVX512F.
return Size <= 512U;
else if (hasFeatureEnabled(FeatureMap, "avx"))
// YMM0 can be used if target supports AVX.
@@ -1787,10 +1720,8 @@ bool X86TargetInfo::validateOperandSize(const llvm::StringMap<bool> &FeatureMap,
break;
case 'v':
case 'x':
- if (hasFeatureEnabled(FeatureMap, "avx512f") &&
- hasFeatureEnabled(FeatureMap, "evex512"))
- // 512-bit zmm registers can be used if target supports AVX512F and
- // EVEX512 is set.
+ if (hasFeatureEnabled(FeatureMap, "avx512f"))
+ // 512-bit zmm registers can be used if target supports AVX512F.
return Size <= 512U;
else if (hasFeatureEnabled(FeatureMap, "avx"))
// 256-bit ymm registers can be used if target supports AVX.