Make the X86 subtarget compute the basic target type: ELF, Cygwin, Darwin,
authorChris Lattner <sabre@nondot.org>
Mon, 21 Nov 2005 22:31:58 +0000 (22:31 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 21 Nov 2005 22:31:58 +0000 (22:31 +0000)
or native Win32

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24476 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 7a4a178a5bd245871a4ea43abdc7f73106c2d861..b05e674ff0a8c716a09b66fe93e94ee10a3a38cc 100644 (file)
@@ -21,37 +21,42 @@ X86Subtarget::X86Subtarget(const Module &M, const std::string &FS)
     asmLeadingUnderscore(false), asmAlignmentIsInBytes(false),
     asmPrintDotLocalConstants(false), asmPrintDotLCommConstants(false),
     asmPrintConstantAlignment(false) {
-  // Declare a boolean for each major platform.
-  bool forCygwin = false;
-  bool forDarwin = false;
-  bool forWindows = false;
-
+      
+  // Default to ELF unless otherwise specified.
+  TargetType = isELF;
+      
   // Set the boolean corresponding to the current target triple, or the default
   // if one cannot be determined, to true.
   const std::string& TT = M.getTargetTriple();
   if (TT.length() > 5) {
-    forCygwin = TT.find("cygwin") != std::string::npos ||
-                TT.find("mingw")  != std::string::npos;
-    forDarwin = TT.find("darwin") != std::string::npos;
-    forWindows = TT.find("win32") != std::string::npos;
+    if (TT.find("cygwin") != std::string::npos ||
+        TT.find("mingw")  != std::string::npos)
+      TargetType = isCygwin;
+    else if (TT.find("darwin") != std::string::npos)
+      TargetType = isDarwin;
+    else if (TT.find("win32") != std::string::npos)
+      TargetType = isWindows;
   } else if (TT.empty()) {
 #if defined(__CYGWIN__) || defined(__MINGW32__)
-    forCygwin = true;
+    TargetType = isCygwin;
 #elif defined(__APPLE__)
-    forDarwin = true;
+    TargetType = isDarwin;
 #elif defined(_WIN32)
-    forWindows = true;
+    TargetType = isWindows;
 #endif
   }
 
-  if (forCygwin) {
+  switch (TargetType) {
+  case isCygwin:
     asmLeadingUnderscore = true;
-  } else if (forDarwin) {
+    break;
+  case isDarwin:
     stackAlignment = 16;
     indirectExternAndWeakGlobals = true;
     asmDarwinLinkerStubs = true;
     asmLeadingUnderscore = true;
     asmPrintDotLCommConstants = true;
-  } else if (forWindows) {
+    break;
+  default: break;
   }
 }
index adbc7cba2f0e4de39c2c91a0f5704dff6746d83f..dba2bc6b76e242e643707c906bfeba6649bd4cc8 100644 (file)
@@ -38,6 +38,10 @@ protected:
   bool asmPrintDotLCommConstants;
   bool asmPrintConstantAlignment;
 public:
+  enum {
+    isELF, isCygwin, isDarwin, isWindows
+  } TargetType;
+    
   /// This constructor initializes the data members to match that
   /// of the specified module.
   ///