Introduce a new technique for merging BasicBlock with Instruction sentinel by superpo...
[oota-llvm.git] / lib / Target / X86 / X86Subtarget.cpp
index 5dc5103727d5af752e9a59e2e5499a3418d63ea7..cd292a4a2c67d7f1a28f4a524732df46eb01ca89 100644 (file)
@@ -322,21 +322,26 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
     // If feature string is not empty, parse features string.
     std::string CPU = GetCurrentX86CPU();
     ParseSubtargetFeatures(FS, CPU);
+    // All X86-64 CPUs also have SSE2, however user might request no SSE via 
+    // -mattr, so don't force SSELevel here.
   } else {
     // Otherwise, use CPUID to auto-detect feature set.
     AutoDetectSubtargetFeatures();
-  }
-    
-  // If requesting codegen for X86-64, make sure that 64-bit and SSE2 features
-  // are enabled.  These are available on all x86-64 CPUs.
-  if (Is64Bit) {
-    HasX86_64 = true;
-    if (X86SSELevel < SSE2)
+    // Make sure SSE2 is enabled; it is available on all X86-64 CPUs.
+    if (Is64Bit && X86SSELevel < SSE2)
       X86SSELevel = SSE2;
   }
+
+  // If requesting codegen for X86-64, make sure that 64-bit features
+  // are enabled.
+  if (Is64Bit)
+    HasX86_64 = true;
+
   DOUT << "Subtarget features: SSELevel " << X86SSELevel
        << ", 3DNowLevel " << X863DNowLevel
        << ", 64bit " << HasX86_64 << "\n";
+  assert((!Is64Bit || HasX86_64) &&
+         "64-bit code requested on a subtarget that doesn't support it!");
 
   // Set the boolean corresponding to the current target triple, or the default
   // if one cannot be determined, to true.