[PATCH] [X86] Use sys::getHostCPUFeatures to improve -march=native
Craig Topper
craig.topper at gmail.com
Sun Mar 29 21:16:09 PDT 2015
Hi chandlerc, echristo, rafael, grosbach,
Some versions of Sandybridge, Ivybridge, Haswell, and Broadwell CPUs don't support AVX. Currently, getHostCPUName changes the CPU name to Nehalem when it detects one of the CPUs. This also ends up disabling other features that these CPUs might still have as well as changing the scheduling model, etc.
This patch attempts to correct this by allowing the CPU name to work unaltered and then use getHostCPUFeatures to explicitly specify which features are enabled and disabled.
Similar patch will also be made to llc.
http://reviews.llvm.org/D8694
Files:
lib/Driver/Tools.cpp
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -1566,6 +1566,17 @@
static void getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple,
const ArgList &Args,
std::vector<const char *> &Features) {
+ // If -march=native, autodetect the feature list.
+ if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {
+ if (StringRef(A->getValue()) == "native") {
+ llvm::StringMap<bool> HostFeatures;
+ if (llvm::sys::getHostCPUFeatures(HostFeatures))
+ for (auto &F : HostFeatures)
+ Features.push_back(Args.MakeArgString((F.second ? "+" : "-") +
+ F.first()));
+ }
+ }
+
if (Triple.getArchName() == "x86_64h") {
// x86_64h implies quite a few of the more modern subtarget features
// for Haswell class CPUs, but not all of them. Opt-out of a few.
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D8694.22860.patch
Type: text/x-patch
Size: 1018 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150330/8f41ddbd/attachment.bin>
More information about the cfe-commits
mailing list