Restore old behavior. Always auto-detect features unless cpu or features are specified.
authorEvan Cheng <evan.cheng@apple.com>
Fri, 8 Jul 2011 22:30:25 +0000 (22:30 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 8 Jul 2011 22:30:25 +0000 (22:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134757 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86Subtarget.cpp
lib/Target/X86/X86Subtarget.h
lib/Target/X86/X86TargetMachine.cpp

index 4109ddd019111e50adb4c06e885b38ab012fbc5a..3ae6e6193775732c99dc7a8b646658bb295b2bad 100644 (file)
@@ -225,7 +225,7 @@ void X86Subtarget::AutoDetectSubtargetFeatures() {
 
 X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
                            const std::string &FS, 
-                           unsigned StackAlignOverride)
+                           unsigned StackAlignOverride, bool is64Bit)
   : X86GenSubtargetInfo(TT, CPU, FS)
   , PICStyle(PICStyles::None)
   , X86SSELevel(NoMMXSSE)
@@ -246,20 +246,9 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
   // FIXME: this is a known good value for Yonah. How about others?
   , MaxInlineSizeThreshold(128)
   , TargetTriple(TT)
-  , In64BitMode(false) {
-  // Insert the architecture feature derived from the target triple into the
-  // feature string. This is important for setting features that are implied
-  // based on the architecture version.
-  std::string ArchFS = X86_MC::ParseX86Triple(TT);
-  if (!FS.empty()) {
-    if (!ArchFS.empty())
-      ArchFS = ArchFS + "," + FS;
-    else
-      ArchFS = FS;
-  }
-
+  , In64BitMode(is64Bit) {
   // Determine default and user specified characteristics
-  if (!ArchFS.empty()) {
+  if (!FS.empty() || !CPU.empty()) {
     std::string CPUName = CPU;
     if (CPUName.empty()) {
 #if defined (__x86_64__) || defined(__i386__)
@@ -270,7 +259,8 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
     }
 
     // If feature string is not empty, parse features string.
-    ParseSubtargetFeatures(CPUName, ArchFS);
+    ParseSubtargetFeatures(CPUName, FS);
+
     // All X86-64 CPUs also have SSE2, however user might request no SSE via 
     // -mattr, so don't force SSELevel here.
     if (HasAVX)
@@ -279,9 +269,6 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
     // Otherwise, use CPUID to auto-detect feature set.
     AutoDetectSubtargetFeatures();
 
-    // If CPU is 64-bit capable, default to 64-bit mode if not specified.
-    In64BitMode = HasX86_64;
-
     // Make sure SSE2 is enabled; it is available on all X86-64 CPUs.
     if (In64BitMode && !HasAVX && X86SSELevel < SSE2)
       X86SSELevel = SSE2;
index e5a4f28cd5428fbcc4a14df398d98fe60af6260c..6d22027b7aa8eb8f60814f22dbc2e11488a2bda0 100644 (file)
@@ -122,7 +122,7 @@ public:
   ///
   X86Subtarget(const std::string &TT, const std::string &CPU,
                const std::string &FS,
-               unsigned StackAlignOverride);
+               unsigned StackAlignOverride, bool is64Bit);
 
   /// getStackAlignment - Returns the minimum alignment known to hold of the
   /// stack frame on entry to the function and which must be maintained by every
index 26c0d54862098cf31158f3dfb1ceb306e1f69ef3..016111cadd01a158120c1adc15bd8ddde1363031 100644 (file)
@@ -120,7 +120,7 @@ X86TargetMachine::X86TargetMachine(const Target &T, const std::string &TT,
                                    const std::string &CPU,
                                    const std::string &FS, bool is64Bit)
   : LLVMTargetMachine(T, TT, CPU, FS),
-    Subtarget(TT, CPU, FS, StackAlignmentOverride),
+    Subtarget(TT, CPU, FS, StackAlignmentOverride, is64Bit),
     FrameLowering(*this, Subtarget),
     ELFWriterInfo(is64Bit, true) {
   DefRelocModel = getRelocationModel();