[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