[llvm-commits] CVS: llvm/lib/Target/X86/X86Subtarget.cpp

Chris Lattner sabre at nondot.org
Mon Nov 20 10:16:20 PST 2006



Changes in directory llvm/lib/Target/X86:

X86Subtarget.cpp updated: 1.39 -> 1.40
---
Log message:

Fix codegen for x86-64 on systems (like ppc or i386) that don't have 64-bit
features autodetected.  This fixes PR1010: http://llvm.org/PR1010  and Regression/CodeGen/X86/xmm-r64.ll
on non-x86-64 hosts.


---
Diffs of the changes:  (+17 -8)

 X86Subtarget.cpp |   25 +++++++++++++++++--------
 1 files changed, 17 insertions(+), 8 deletions(-)


Index: llvm/lib/Target/X86/X86Subtarget.cpp
diff -u llvm/lib/Target/X86/X86Subtarget.cpp:1.39 llvm/lib/Target/X86/X86Subtarget.cpp:1.40
--- llvm/lib/Target/X86/X86Subtarget.cpp:1.39	Wed Nov  8 14:35:37 2006
+++ llvm/lib/Target/X86/X86Subtarget.cpp	Mon Nov 20 12:16:05 2006
@@ -78,10 +78,10 @@
     unsigned u[3];
     char     c[12];
   } text;
-
+  
   if (X86::GetCpuIDAndInfo(0, &EAX, text.u+0, text.u+2, text.u+1))
     return;
-
+  
   // FIXME: support for AMD family of processors.
   if (memcmp(text.c, "GenuineIntel", 12) == 0) {
     X86::GetCpuIDAndInfo(0x1, &EAX, &EBX, &ECX, &EDX);
@@ -205,14 +205,23 @@
     // If feature string is not empty, parse features string.
     std::string CPU = GetCurrentX86CPU();
     ParseSubtargetFeatures(FS, CPU);
-  } else
-    // Otherwise, use CPUID to auto-detect feature set.
-    AutoDetectSubtargetFeatures();
-
-  if (Is64Bit && !HasX86_64) {
+    
+    if (Is64Bit && !HasX86_64)
       std::cerr << "Warning: Generation of 64-bit code for a 32-bit processor "
                    "requested.\n";
-      HasX86_64 = true;
+    if (Is64Bit && X86SSELevel < SSE2)
+      std::cerr << "Warning: 64-bit processors all have at least SSE2.\n";
+  } 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)
+      X86SSELevel = SSE2;
   }
 
   // Set the boolean corresponding to the current target triple, or the default






More information about the llvm-commits mailing list