From 504a197fe54de83be791ea0aa2ed290f6b9285b0 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Thu, 6 Aug 2020 00:13:40 -0700 Subject: [PATCH] [X86] Rename X86::getImpliedFeatures to X86::updateImpliedFeatures and pass clang's StringMap directly to it. No point in building a vector of StringRefs for clang to apply to the StringMap. Just pass the StringMap and modify it directly. --- clang/lib/Basic/Targets/X86.cpp | 6 +----- llvm/include/llvm/Support/X86TargetParser.h | 7 ++++--- llvm/lib/Support/X86TargetParser.cpp | 22 +++++++++------------ 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/clang/lib/Basic/Targets/X86.cpp b/clang/lib/Basic/Targets/X86.cpp index 543f232d2459..8b8f7d43b277 100644 --- a/clang/lib/Basic/Targets/X86.cpp +++ b/clang/lib/Basic/Targets/X86.cpp @@ -159,11 +159,7 @@ void X86TargetInfo::setFeatureEnabled(llvm::StringMap &Features, } Features[Name] = Enabled; - - SmallVector ImpliedFeatures; - llvm::X86::getImpliedFeatures(Name, Enabled, ImpliedFeatures); - for (const auto &F : ImpliedFeatures) - Features[F] = Enabled; + llvm::X86::updateImpliedFeatures(Name, Enabled, Features); } /// handleTargetFeatures - Perform initialization based on the user diff --git a/llvm/include/llvm/Support/X86TargetParser.h b/llvm/include/llvm/Support/X86TargetParser.h index 66c474b5c275..a26ac8dac3ba 100644 --- a/llvm/include/llvm/Support/X86TargetParser.h +++ b/llvm/include/llvm/Support/X86TargetParser.h @@ -14,6 +14,7 @@ #define LLVM_SUPPORT_X86TARGETPARSERCOMMON_H #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringMap.h" namespace llvm { class StringRef; @@ -137,10 +138,10 @@ ProcessorFeatures getKeyFeature(CPUKind Kind); /// Fill in the features that \p CPU supports into \p Features. void getFeaturesForCPU(StringRef CPU, SmallVectorImpl &Features); -/// Fill \p Features with the features that are implied to be enabled/disabled +/// Set or clear entries in \p Features that are implied to be enabled/disabled /// by the provided \p Feature. -void getImpliedFeatures(StringRef Feature, bool Enabled, - SmallVectorImpl &Features); +void updateImpliedFeatures(StringRef Feature, bool Enabled, + StringMap &Features); } // namespace X86 } // namespace llvm diff --git a/llvm/lib/Support/X86TargetParser.cpp b/llvm/lib/Support/X86TargetParser.cpp index c629f872df12..680ec91dc8ef 100644 --- a/llvm/lib/Support/X86TargetParser.cpp +++ b/llvm/lib/Support/X86TargetParser.cpp @@ -536,14 +536,6 @@ static constexpr FeatureInfo FeatureInfos[X86::CPU_FEATURE_MAX] = { #include "llvm/Support/X86TargetParser.def" }; -// Convert the set bits in FeatureBitset to a list of strings. -static void getFeatureBitsAsStrings(const FeatureBitset &Bits, - SmallVectorImpl &Features) { - for (unsigned i = 0; i != CPU_FEATURE_MAX; ++i) - if (Bits[i] && !FeatureInfos[i].Name.empty()) - Features.push_back(FeatureInfos[i].Name); -} - void llvm::X86::getFeaturesForCPU(StringRef CPU, SmallVectorImpl &EnabledFeatures) { auto I = llvm::find_if(Processors, @@ -557,7 +549,9 @@ void llvm::X86::getFeaturesForCPU(StringRef CPU, Bits &= ~Feature64BIT; // Add the string version of all set bits. - getFeatureBitsAsStrings(Bits, EnabledFeatures); + for (unsigned i = 0; i != CPU_FEATURE_MAX; ++i) + if (Bits[i] && !FeatureInfos[i].Name.empty()) + EnabledFeatures.push_back(FeatureInfos[i].Name); } // For each feature that is (transitively) implied by this feature, set it. @@ -591,9 +585,9 @@ static void getImpliedDisabledFeatures(FeatureBitset &Bits, unsigned Value) { } while (Prev != Bits); } -void llvm::X86::getImpliedFeatures( +void llvm::X86::updateImpliedFeatures( StringRef Feature, bool Enabled, - SmallVectorImpl &ImpliedFeatures) { + StringMap &Features) { auto I = llvm::find_if( FeatureInfos, [&](const FeatureInfo &FI) { return FI.Name == Feature; }); if (I == std::end(FeatureInfos)) { @@ -609,6 +603,8 @@ void llvm::X86::getImpliedFeatures( getImpliedDisabledFeatures(ImpliedBits, std::distance(std::begin(FeatureInfos), I)); - // Convert all the found bits into strings. - getFeatureBitsAsStrings(ImpliedBits, ImpliedFeatures); + // Update the map entry for all implied features. + for (unsigned i = 0; i != CPU_FEATURE_MAX; ++i) + if (ImpliedBits[i] && !FeatureInfos[i].Name.empty()) + Features[FeatureInfos[i].Name] = Enabled; }