Author: echristo Date: Wed Aug 26 19:05:52 2015 New Revision: 246128 URL: http://llvm.org/viewvc/llvm-project?rev=246128&view=rev Log: Pass in a cpu to initDefaultFeatures so that we can share this code with multiple uses of feature map construction.
Note: We could make this a static function on TargetInfo if we fix the x86 port needing to check the triple in an isolated case. Modified: cfe/trunk/include/clang/Basic/TargetInfo.h cfe/trunk/lib/Basic/Targets.cpp Modified: cfe/trunk/include/clang/Basic/TargetInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/TargetInfo.h?rev=246128&r1=246127&r2=246128&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/TargetInfo.h (original) +++ cfe/trunk/include/clang/Basic/TargetInfo.h Wed Aug 26 19:05:52 2015 @@ -741,10 +741,9 @@ public: virtual void adjust(const LangOptions &Opts); /// \brief Initialize the map with the default set of target features for the - /// CPU, ABI, and FPMath options - these should have already been set prior - /// to calling this function; this should include all legal feature strings on - /// the target. - virtual void initDefaultFeatures(llvm::StringMap<bool> &Features) const {} + /// CPU this should include all legal feature strings on the target. + virtual void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const {} /// \brief Get the ABI currently in use. virtual StringRef getABI() const { return StringRef(); } Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=246128&r1=246127&r2=246128&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Wed Aug 26 19:05:52 2015 @@ -863,7 +863,8 @@ public: void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override; - void initDefaultFeatures(llvm::StringMap<bool> &Features) const override; + void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const override; bool handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) override; @@ -1262,7 +1263,8 @@ void PPCTargetInfo::getTargetDefines(con // __NO_FPRS__ } -void PPCTargetInfo::initDefaultFeatures(llvm::StringMap<bool> &Features) const { +void PPCTargetInfo::initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const { Features["altivec"] = llvm::StringSwitch<bool>(CPU) .Case("7400", true) .Case("g4", true) @@ -2372,7 +2374,8 @@ public: // initDefaultFeatures which calls this repeatedly. static void setFeatureEnabledImpl(llvm::StringMap<bool> &Features, StringRef Name, bool Enabled); - void initDefaultFeatures(llvm::StringMap<bool> &Features) const override; + void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const override; bool hasFeature(StringRef Feature) const override; bool handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) override; @@ -2498,14 +2501,15 @@ bool X86TargetInfo::setFPMath(StringRef return false; } -void X86TargetInfo::initDefaultFeatures(llvm::StringMap<bool> &Features) const { +void X86TargetInfo::initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const { // FIXME: This *really* should not be here. // X86_64 always has SSE2. if (getTriple().getArch() == llvm::Triple::x86_64) setFeatureEnabledImpl(Features, "sse2", true); - switch (CPU) { + switch (getCPUKind(CPU)) { case CK_Generic: case CK_i386: case CK_i486: @@ -4375,7 +4379,8 @@ public: } // FIXME: This should be based on Arch attributes, not CPU names. - void initDefaultFeatures(llvm::StringMap<bool> &Features) const override { + void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const override { if (CPU == "arm1136jf-s" || CPU == "arm1176jzf-s" || CPU == "mpcore") Features["vfp2"] = true; else if (CPU == "cortex-a8" || CPU == "cortex-a9") { @@ -5818,7 +5823,8 @@ public: return CPUKnown; } - void initDefaultFeatures(llvm::StringMap<bool> &Features) const override { + void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const override { if (CPU == "zEC12") Features["transactional-execution"] = true; if (CPU == "z13") { @@ -6185,7 +6191,8 @@ public: .Default(false); } const std::string& getCPU() const { return CPU; } - void initDefaultFeatures(llvm::StringMap<bool> &Features) const override { + void initDefaultFeatures(llvm::StringMap<bool> &Features, + StringRef CPU) const override { if (CPU == "octeon") Features["mips64r2"] = Features["cnmips"] = true; else @@ -7475,7 +7482,7 @@ TargetInfo::CreateTargetInfo(Diagnostics // Compute the default target features, we need the target to handle this // because features may have dependencies on one another. llvm::StringMap<bool> Features; - Target->initDefaultFeatures(Features); + Target->initDefaultFeatures(Features, Opts->CPU); // Apply the user specified deltas. if (!Target->handleUserFeatures(Features, Opts->FeaturesAsWritten, Diags)) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits