Really big cleanup.
- New target type "mingw" was introduced
- Same things for both mingw & cygwin are marked as "cygming" (as in
gcc)
- .lcomm is supported here, so allow LLVM to use it
- Correctly use underscored versions of setjmp & _longjmp for both mingw
& cygwin


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32833 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index 05965c2..6feb0af 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -40,7 +40,7 @@
       return (!isDirectCall &&
               (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
                (GV->isExternal() && !GV->hasNotBeenReadFromBytecode())));
-    } else if (isTargetCygwin() || isTargetWindows()) {
+    } else if (isTargetCygMing() || isTargetWindows()) {
       return (GV->hasDLLImportLinkage());
     }
   
@@ -248,16 +248,19 @@
   // if one cannot be determined, to true.
   const std::string& TT = M.getTargetTriple();
   if (TT.length() > 5) {
-    if (TT.find("cygwin") != std::string::npos ||
-        TT.find("mingw")  != std::string::npos)
+    if (TT.find("cygwin") != std::string::npos)
       TargetType = isCygwin;
+    else if (TT.find("mingw") != std::string::npos)
+      TargetType = isMingw;
     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__)
+#if defined(__CYGWIN__)
     TargetType = isCygwin;
+#elif defined(__MINGW32__)
+    TargetType = isMingw;
 #elif defined(__APPLE__)
     TargetType = isDarwin;
 #elif defined(_WIN32)
@@ -277,6 +280,7 @@
 
   if (TargetType == isDarwin ||
       TargetType == isCygwin ||
+      TargetType == isMingw  ||
       (TargetType == isELF && Is64Bit))
     stackAlignment = 16;
 }