From 4df4927382d9aad617b181be65b517ebdb98e35d Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 28 Aug 2015 22:32:01 +0000 Subject: [PATCH] Fold TargetInfo::handleUserFeatures into TargetInfo::initFeatureMap. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246346 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/TargetInfo.h | 26 ++++------ lib/Basic/Targets.cpp | 82 +++++++++++++++----------------- 2 files changed, 46 insertions(+), 62 deletions(-) diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h index 9db319ac2f..b19d57c716 100644 --- a/include/clang/Basic/TargetInfo.h +++ b/include/clang/Basic/TargetInfo.h @@ -746,8 +746,14 @@ public: /// \return False on error (invalid features). virtual bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const { - return handleUserFeatures(Features, FAW, Diags); + std::vector &FeatureVec) const { + for (const auto &F : FeatureVec) { + const char *Name = F.c_str(); + // Apply the feature via the target. + bool Enabled = Name[0] == '+'; + setFeatureEnabled(Features, Name + 1, Enabled); + } + return true; } /// \brief Get the ABI currently in use. @@ -787,22 +793,6 @@ public: Features[Name] = Enabled; } - /// \brief Add user defined features to the feature set while - /// possibly diagnosing incompatibilities. - /// - /// \return False on error. - virtual bool handleUserFeatures(llvm::StringMap &Features, - std::vector &UserFeatures, - DiagnosticsEngine &Diags) const { - for (const auto &F : UserFeatures) { - const char *Name = F.c_str(); - // Apply the feature via the target. - bool Enabled = Name[0] == '+'; - setFeatureEnabled(Features, Name + 1, Enabled); - } - return true; - } - /// \brief Perform initialization based on the user configured /// set of features (e.g., +sse4). /// diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 455bbeef9b..ee9a37153f 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -865,13 +865,10 @@ public: bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const override; + std::vector &FeaturesVec) const override; bool handleTargetFeatures(std::vector &Features, DiagnosticsEngine &Diags) override; - bool handleUserFeatures(llvm::StringMap &Features, - std::vector &UserFeatures, - DiagnosticsEngine &Diags) const override; bool hasFeature(StringRef Feature) const override; void setFeatureEnabled(llvm::StringMap &Features, StringRef Name, bool Enabled) const override; @@ -1050,30 +1047,6 @@ bool PPCTargetInfo::handleTargetFeatures(std::vector &Features, return true; } -bool PPCTargetInfo::handleUserFeatures(llvm::StringMap &Features, - std::vector &FAW, - DiagnosticsEngine &Diags) const { - // Handle explicit options being passed to the compiler here: if we've - // explicitly turned off vsx and turned on power8-vector or direct-move then - // go ahead and error since the customer has expressed a somewhat incompatible - // set of options. - if (std::find(FAW.begin(), FAW.end(), "-vsx") != FAW.end()) { - if (std::find(FAW.begin(), FAW.end(), "+power8-vector") != FAW.end()) { - Diags.Report(diag::err_opt_not_valid_with_opt) << "-mpower8-vector" - << "-mno-vsx"; - return false; - } - - if (std::find(FAW.begin(), FAW.end(), "+direct-move") != FAW.end()) { - Diags.Report(diag::err_opt_not_valid_with_opt) << "-mdirect-move" - << "-mno-vsx"; - return false; - } - } - - return TargetInfo::handleUserFeatures(Features, FAW, Diags); -} - /// PPCTargetInfo::getTargetDefines - Return a set of the PowerPC-specific /// #defines that are not tied to a specific subtarget. void PPCTargetInfo::getTargetDefines(const LangOptions &Opts, @@ -1253,9 +1226,9 @@ void PPCTargetInfo::getTargetDefines(const LangOptions &Opts, // __NO_FPRS__ } -bool PPCTargetInfo::initFeatureMap(llvm::StringMap &Features, - DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const { +bool PPCTargetInfo::initFeatureMap( + llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, + std::vector &FeaturesVec) const { Features["altivec"] = llvm::StringSwitch(CPU) .Case("7400", true) .Case("g4", true) @@ -1299,7 +1272,27 @@ bool PPCTargetInfo::initFeatureMap(llvm::StringMap &Features, .Case("pwr7", true) .Default(false); - return handleUserFeatures(Features, FAW, Diags); + // Handle explicit options being passed to the compiler here: if we've + // explicitly turned off vsx and turned on power8-vector or direct-move then + // go ahead and error since the customer has expressed a somewhat incompatible + // set of options. + if (std::find(FeaturesVec.begin(), FeaturesVec.end(), "-vsx") != + FeaturesVec.end()) { + if (std::find(FeaturesVec.begin(), FeaturesVec.end(), "+power8-vector") != + FeaturesVec.end()) { + Diags.Report(diag::err_opt_not_valid_with_opt) << "-mpower8-vector" + << "-mno-vsx"; + return false; + } + + if (std::find(FeaturesVec.begin(), FeaturesVec.end(), "+direct-move") != + FeaturesVec.end()) { + Diags.Report(diag::err_opt_not_valid_with_opt) << "-mdirect-move" + << "-mno-vsx"; + return false; + } + } + return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } bool PPCTargetInfo::hasFeature(StringRef Feature) const { @@ -2369,7 +2362,7 @@ public: StringRef Name, bool Enabled); bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const override; + std::vector &FeaturesVec) const override; bool hasFeature(StringRef Feature) const override; bool handleTargetFeatures(std::vector &Features, DiagnosticsEngine &Diags) override; @@ -2495,9 +2488,9 @@ bool X86TargetInfo::setFPMath(StringRef Name) { return false; } -bool X86TargetInfo::initFeatureMap(llvm::StringMap &Features, - DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const { +bool X86TargetInfo::initFeatureMap( + llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, + std::vector &FeaturesVec) const { // FIXME: This *really* should not be here. // X86_64 always has SSE2. @@ -2673,7 +2666,7 @@ bool X86TargetInfo::initFeatureMap(llvm::StringMap &Features, setFeatureEnabledImpl(Features, "cx16", true); break; } - return handleUserFeatures(Features, FAW, Diags); + return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } void X86TargetInfo::setSSELevel(llvm::StringMap &Features, @@ -4395,7 +4388,7 @@ public: // FIXME: This should be based on Arch attributes, not CPU names. bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const override { + std::vector &FeaturesVec) const override { if (CPU == "arm1136jf-s" || CPU == "arm1176jzf-s" || CPU == "mpcore") Features["vfp2"] = true; else if (CPU == "cortex-a8" || CPU == "cortex-a9") { @@ -4427,7 +4420,7 @@ public: CPU == "sc300" || CPU == "cortex-r4" || CPU == "cortex-r4f") { Features["hwdiv"] = true; } - return handleUserFeatures(Features, FAW, Diags); + return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } bool handleTargetFeatures(std::vector &Features, @@ -5841,14 +5834,14 @@ public: } bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const override { + std::vector &FeaturesVec) const override { if (CPU == "zEC12") Features["transactional-execution"] = true; if (CPU == "z13") { Features["transactional-execution"] = true; Features["vector"] = true; } - return handleUserFeatures(Features, FAW, Diags); + return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } bool handleTargetFeatures(std::vector &Features, @@ -6211,12 +6204,12 @@ public: const std::string& getCPU() const { return CPU; } bool initFeatureMap(llvm::StringMap &Features, DiagnosticsEngine &Diags, StringRef CPU, - std::vector &FAW) const override { + std::vector &FeaturesVec) const override { if (CPU == "octeon") Features["mips64r2"] = Features["cnmips"] = true; else Features[CPU] = true; - return handleUserFeatures(Features, FAW, Diags); + return TargetInfo::initFeatureMap(Features, Diags, CPU, FeaturesVec); } void getTargetDefines(const LangOptions &Opts, @@ -7502,7 +7495,8 @@ TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, // Compute the default target features, we need the target to handle this // because features may have dependencies on one another. llvm::StringMap Features; - if (!Target->initFeatureMap(Features, Diags, Opts->CPU, Opts->FeaturesAsWritten)) + if (!Target->initFeatureMap(Features, Diags, Opts->CPU, + Opts->FeaturesAsWritten)) return nullptr; // Add the features to the compile options. -- 2.40.0