Fixed dllimported symbols support during JIT'ing. JIT on mingw32
platform should be more or less workable. At least, sim is running fine
under lli :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32711 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp
index ff88fdb..5281dcd 100644
--- a/lib/Target/X86/X86Subtarget.cpp
+++ b/lib/Target/X86/X86Subtarget.cpp
@@ -32,13 +32,14 @@
 /// or index register of the address, not the GV offset field.
 bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue* GV, bool isDirectCall) const
 {
-  if (isTargetDarwin()) {
-    return (!isDirectCall &&
-            (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
-             (GV->isExternal() && !GV->hasNotBeenReadFromBytecode())));
-  } else if (isTargetCygwin() || isTargetWindows()) {
-    return (GV->hasDLLImportLinkage());
-  }
+  if (GenerateExtraLoadsForGVs)
+    if (isTargetDarwin()) {
+      return (!isDirectCall &&
+              (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
+               (GV->isExternal() && !GV->hasNotBeenReadFromBytecode())));
+    } else if (isTargetCygwin() || isTargetWindows()) {
+      return (GV->hasDLLImportLinkage());
+    }
   
   return false;
 }
@@ -206,6 +207,15 @@
   }
 }
 
+/// SetJITMode - This is called to inform the subtarget info that we are
+/// producing code for the JIT.
+void X86Subtarget::SetJITMode() {
+  // JIT mode doesn't want extra loads for dllimported symbols, it knows exactly
+  // where everything is.
+  if (isTargetCygwin())
+    GenerateExtraLoadsForGVs = false;
+}
+
 X86Subtarget::X86Subtarget(const Module &M, const std::string &FS, bool is64Bit)
   : AsmFlavor(AsmWriterFlavor)
   , X86SSELevel(NoMMXSSE)
@@ -214,6 +224,7 @@
   // FIXME: this is a known good value for Yonah. How about others?
   , MinRepStrSizeThreshold(128)
   , Is64Bit(is64Bit)
+  , GenerateExtraLoadsForGVs(true)
   , TargetType(isELF) { // Default to ELF unless otherwise specified.
 
   // Determine default and user specified characteristics