diff options
Diffstat (limited to 'clang/lib/Basic/Targets/X86.cpp')
| -rw-r--r-- | clang/lib/Basic/Targets/X86.cpp | 97 |
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. |
