[pkg-d-commits] [ldc] 72/211: Let LLVM figure out default CPU for ARM/AArch64

Matthias Klumpp mak at moszumanska.debian.org
Sun Apr 23 22:36:11 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.1.0
in repository ldc.

commit 4da394d9d099887a5eb660d3a6bf64d67a9513e6
Author: Martin <noone at nowhere.com>
Date:   Sat Oct 8 23:09:58 2016 +0200

    Let LLVM figure out default CPU for ARM/AArch64
---
 driver/targetmachine.cpp | 88 ++++++++++++++++++++++++++++++------------------
 1 file changed, 55 insertions(+), 33 deletions(-)

diff --git a/driver/targetmachine.cpp b/driver/targetmachine.cpp
index c8ec25f..34e5fef 100644
--- a/driver/targetmachine.cpp
+++ b/driver/targetmachine.cpp
@@ -28,6 +28,7 @@
 
 #if LDC_LLVM_VER >= 307
 #include "driver/cl_options.h"
+#include "llvm/Support/TargetParser.h"
 
 static const char *getABI(const llvm::Triple &triple) {
   llvm::StringRef ABIName(opts::mABI);
@@ -165,44 +166,56 @@ static std::string getX86TargetCPU(const llvm::Triple &triple) {
 }
 
 static std::string getARMTargetCPU(const llvm::Triple &triple) {
-  const char *result = llvm::StringSwitch<const char *>(triple.getArchName())
-                           .Cases("armv2", "armv2a", "arm2")
-                           .Case("armv3", "arm6")
-                           .Case("armv3m", "arm7m")
-                           .Case("armv4", "strongarm")
-                           .Case("armv4t", "arm7tdmi")
-                           .Cases("armv5", "armv5t", "arm10tdmi")
-                           .Cases("armv5e", "armv5te", "arm1026ejs")
-                           .Case("armv5tej", "arm926ej-s")
-                           .Cases("armv6", "armv6k", "arm1136jf-s")
-                           .Case("armv6j", "arm1136j-s")
-                           .Cases("armv6z", "armv6zk", "arm1176jzf-s")
-                           .Case("armv6t2", "arm1156t2-s")
-                           .Cases("armv6m", "armv6-m", "cortex-m0")
-                           .Cases("armv7", "armv7a", "armv7-a", "cortex-a8")
-                           .Cases("armv7l", "armv7-l", "cortex-a8")
-                           .Cases("armv7f", "armv7-f", "cortex-a9-mp")
-                           .Cases("armv7s", "armv7-s", "swift")
-                           .Cases("armv7r", "armv7-r", "cortex-r4")
-                           .Cases("armv7m", "armv7-m", "cortex-m3")
-                           .Cases("armv7em", "armv7e-m", "cortex-m4")
-                           .Cases("armv8", "armv8a", "armv8-a", "cortex-a53")
-                           .Case("ep9312", "ep9312")
-                           .Case("iwmmxt", "iwmmxt")
-                           .Case("xscale", "xscale")
-                           // If all else failed, return the most base CPU with
-                           // thumb interworking
-                           // supported by LLVM.
-                           .Default(nullptr);
-
-  if (result) {
-    return result;
-  }
+#if LDC_LLVM_VER >= 308
+  auto defaultCPU = llvm::ARM::getDefaultCPU(triple.getArchName());
+  if (!defaultCPU.empty())
+    return defaultCPU;
+#else
+  auto defaultCPU = llvm::StringSwitch<const char *>(triple.getArchName())
+                        .Cases("armv2", "armv2a", "arm2")
+                        .Case("armv3", "arm6")
+                        .Case("armv3m", "arm7m")
+                        .Case("armv4", "strongarm")
+                        .Case("armv4t", "arm7tdmi")
+                        .Cases("armv5", "armv5t", "arm10tdmi")
+                        .Cases("armv5e", "armv5te", "arm1026ejs")
+                        .Case("armv5tej", "arm926ej-s")
+                        .Cases("armv6", "armv6k", "arm1136jf-s")
+                        .Case("armv6j", "arm1136j-s")
+                        .Cases("armv6z", "armv6zk", "arm1176jzf-s")
+                        .Case("armv6t2", "arm1156t2-s")
+                        .Cases("armv6m", "armv6-m", "cortex-m0")
+                        .Cases("armv7", "armv7a", "armv7-a", "cortex-a8")
+                        .Cases("armv7l", "armv7-l", "cortex-a8")
+                        .Cases("armv7f", "armv7-f", "cortex-a9-mp")
+                        .Cases("armv7s", "armv7-s", "swift")
+                        .Cases("armv7r", "armv7-r", "cortex-r4")
+                        .Cases("armv7m", "armv7-m", "cortex-m3")
+                        .Cases("armv7em", "armv7e-m", "cortex-m4")
+                        .Cases("armv8", "armv8a", "armv8-a", "cortex-a53")
+                        .Case("ep9312", "ep9312")
+                        .Case("iwmmxt", "iwmmxt")
+                        .Case("xscale", "xscale")
+                        .Default(nullptr);
+  if (defaultCPU)
+    return defaultCPU;
+#endif
 
+  // Return the most base CPU with thumb interworking supported by LLVM.
   return (triple.getEnvironment() == llvm::Triple::GNUEABIHF) ? "arm1176jzf-s"
                                                               : "arm7tdmi";
 }
 
+static std::string getAArch64TargetCPU(const llvm::Triple &triple) {
+#if LDC_LLVM_VER >= 309
+  auto defaultCPU = llvm::AArch64::getDefaultCPU(triple.getArchName());
+  if (!defaultCPU.empty())
+    return defaultCPU;
+#endif
+
+  return "generic";
+}
+
 /// Returns the LLVM name of the target CPU to use given the provided
 /// -mcpu argument and target triple.
 static std::string getTargetCPU(const std::string &cpu,
@@ -229,7 +242,16 @@ static std::string getTargetCPU(const std::string &cpu,
   case llvm::Triple::x86_64:
     return getX86TargetCPU(triple);
   case llvm::Triple::arm:
+  case llvm::Triple::armeb:
+  case llvm::Triple::thumb:
     return getARMTargetCPU(triple);
+#if LDC_LLVM_VER == 305
+  case llvm::Triple::arm64:
+  case llvm::Triple::arm64_be:
+#endif
+  case llvm::Triple::aarch64:
+  case llvm::Triple::aarch64_be:
+    return getAArch64TargetCPU(triple);
   }
 }
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list