[X86] Add getHostCPUName support for cannonlake.

This adds an explicit model number check and fallback path to the unknown family 6 detection.

llvm-svn: 318270
diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp
index 63a2117..a7f1133 100644
--- a/llvm/lib/Support/Host.cpp
+++ b/llvm/lib/Support/Host.cpp
@@ -637,6 +637,12 @@
       *Subtype = X86::INTEL_COREI7_SKYLAKE_AVX512; // "skylake-avx512"
       break;
 
+    // Cannonlake:
+    case 0x66:
+      *Type = X86::INTEL_COREI7;
+      *Subtype = X86::INTEL_COREI7_CANNONLAKE; // "cannonlake"
+      break;
+
     case 0x1c: // Most 45 nm Intel Atom processors
     case 0x26: // 45 nm Atom Lincroft
     case 0x27: // 32 nm Atom Medfield
@@ -667,15 +673,23 @@
       break;
 
     default: // Unknown family 6 CPU, try to guess.
-      if (Features & (1 << FEATURE_AVX512F)) {
-        if (Features & (1 << FEATURE_AVX512VL)) {
-          *Type = X86::INTEL_COREI7;
-          *Subtype = X86::INTEL_COREI7_SKYLAKE_AVX512;
-        } else {
-          *Type = X86::INTEL_KNL; // knl
-        }
+      if (Features & (1 << FEATURE_AVX512VBMI)) {
+        *Type = X86::INTEL_COREI7;
+        *Subtype = X86::INTEL_COREI7_CANNONLAKE;
         break;
       }
+
+      if (Features & (1 << FEATURE_AVX512VL)) {
+        *Type = X86::INTEL_COREI7;
+        *Subtype = X86::INTEL_COREI7_SKYLAKE_AVX512;
+        break;
+      }
+
+      if (Features & (1 << FEATURE_AVX512ER)) {
+        *Type = X86::INTEL_KNL; // knl
+        break;
+      }
+
       if (Features2 & (1 << (FEATURE_CLFLUSHOPT - 32))) {
         if (Features2 & (1 << (FEATURE_SHA - 32))) {
           *Type = X86::INTEL_GOLDMONT;