[AArch64] -mcpu=native CPU detection for Cavium processors
authorJoel Jones <joelkevinjones@gmail.com>
Fri, 5 Oct 2018 22:23:21 +0000 (22:23 +0000)
committerJoel Jones <joelkevinjones@gmail.com>
Fri, 5 Oct 2018 22:23:21 +0000 (22:23 +0000)
This small patch updates the CPU detection for Cavium processors when
-mcpu=native is passed on compile-line.

Patch by Stefan Teleman
Differential Revision: https://reviews.llvm.org/D51939

llvm-svn: 343897

llvm/lib/Support/Host.cpp
llvm/unittests/Support/Host.cpp

index 963b32b..7de2a9e 100644 (file)
@@ -196,6 +196,21 @@ StringRef sys::detail::getHostCPUNameForARM(StringRef ProcCpuinfoContent) {
             .Default("generic");
   }
 
+  if (Implementer == "0x42" || Implementer == "0x43") { // Broadcom | Cavium.
+    for (unsigned I = 0, E = Lines.size(); I != E; ++I) {
+      if (Lines[I].startswith("CPU part")) {
+        return StringSwitch<const char *>(Lines[I].substr(8).ltrim("\t :"))
+          .Case("0x516", "thunderx2t99")
+          .Case("0x0516", "thunderx2t99")
+          .Case("0xaf", "thunderx2t99")
+          .Case("0x0af", "thunderx2t99")
+          .Case("0xa1", "thunderxt88")
+          .Case("0x0a1", "thunderxt88")
+          .Default("generic");
+      }
+    }
+  }
+
   if (Implementer == "0x51") // Qualcomm Technologies, Inc.
     // Look for the CPU part line.
     for (unsigned I = 0, E = Lines.size(); I != E; ++I)
index e07d415..6235918 100644 (file)
@@ -170,6 +170,78 @@ CPU architecture: 8
                                               "CPU variant     : 0x4\n"
                                               "CPU part        : 0x001"),
             "exynos-m2");
+
+  const std::string ThunderX2T99ProcCpuInfo = R"(
+processor      : 0
+BogoMIPS       : 400.00
+Features       : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics
+CPU implementer        : 0x43
+CPU architecture: 8
+CPU variant    : 0x1
+CPU part       : 0x0af
+)";
+
+  // Verify different versions of ThunderX2T99.
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x42\n"
+                                              "CPU part        : 0x516"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x42\n"
+                                              "CPU part        : 0x0516"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0x516"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0x0516"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x42\n"
+                                              "CPU part        : 0xaf"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x42\n"
+                                              "CPU part        : 0x0af"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0xaf"),
+            "thunderx2t99");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderX2T99ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0x0af"),
+            "thunderx2t99");
+
+  // Verify ThunderXT88.
+  const std::string ThunderXT88ProcCpuInfo = R"(
+processor      : 0
+BogoMIPS       : 200.00
+Features       : fp asimd evtstrm aes pmull sha1 sha2 crc32
+CPU implementer        : 0x43
+CPU architecture: 8
+CPU variant    : 0x1
+CPU part       : 0x0a1
+)";
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderXT88ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0x0a1"),
+            "thunderxt88");
+
+  EXPECT_EQ(sys::detail::getHostCPUNameForARM(ThunderXT88ProcCpuInfo +
+                                              "CPU implementer : 0x43\n"
+                                              "CPU part        : 0xa1"),
+            "thunderxt88");
 }
 
 #if defined(__APPLE__)