[AArch64] -mcpu=native CPU detection for Cavium processors

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
diff --git a/llvm/unittests/Support/Host.cpp b/llvm/unittests/Support/Host.cpp
index e07d415..6235918 100644
--- a/llvm/unittests/Support/Host.cpp
+++ b/llvm/unittests/Support/Host.cpp
@@ -170,6 +170,78 @@
                                               "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__)