Reduce indentation in GVRequiresExtraLoad. Return true for windows
authorChris Lattner <sabre@nondot.org>
Thu, 9 Jul 2009 03:27:27 +0000 (03:27 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 9 Jul 2009 03:27:27 +0000 (03:27 +0000)
with DLLImport symbols even when in -static mode.

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

lib/Target/X86/X86Subtarget.cpp

index 8506fa66a645a530f955a3828cab1afd16d23f3e..e4cd288470e2f868adca15095218ee208fedb4ca 100644 (file)
@@ -40,32 +40,34 @@ AsmWriterFlavor("x86-asm-syntax", cl::init(X86Subtarget::Unset),
 /// or index register of the address, not the GV offset field.
 bool X86Subtarget::GVRequiresExtraLoad(const GlobalValue* GV,
                                        const TargetMachine& TM,
-                                       bool isDirectCall) const
-{
-  // FIXME: PIC
-  if (TM.getRelocationModel() != Reloc::Static &&
-      TM.getCodeModel() != CodeModel::Large) {
-    if (isTargetDarwin()) {
-      if (isDirectCall)
-        return false;
-      bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode();
-      if (GV->hasHiddenVisibility() &&
-          (Is64Bit || (!isDecl && !GV->hasCommonLinkage())))
-        // If symbol visibility is hidden, the extra load is not needed if
-        // target is x86-64 or the symbol is definitely defined in the current
-        // translation unit.
-        return false;
-      return !isDirectCall && (isDecl || GV->isWeakForLinker());
-    } else if (isTargetELF()) {
-      // Extra load is needed for all externally visible.
-      if (isDirectCall)
-        return false;
-      if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
-        return false;
-      return true;
-    } else if (isTargetCygMing() || isTargetWindows()) {
-      return (GV->hasDLLImportLinkage());
-    }
+                                       bool isDirectCall) const {
+  // Windows targets only require an extra load for DLLImport linkage values,
+  // and they need these regardless of whether we're in PIC mode or not.
+  if (isTargetCygMing() || isTargetWindows())
+    return GV->hasDLLImportLinkage();
+
+  if (TM.getRelocationModel() == Reloc::Static ||
+      TM.getCodeModel() == CodeModel::Large)
+    return false;
+    
+  if (isTargetDarwin()) {
+    if (isDirectCall)
+      return false;
+    bool isDecl = GV->isDeclaration() && !GV->hasNotBeenReadFromBitcode();
+    if (GV->hasHiddenVisibility() &&
+        (Is64Bit || (!isDecl && !GV->hasCommonLinkage())))
+      // If symbol visibility is hidden, the extra load is not needed if
+      // target is x86-64 or the symbol is definitely defined in the current
+      // translation unit.
+      return false;
+    return !isDirectCall && (isDecl || GV->isWeakForLinker());
+  } else if (isTargetELF()) {
+    // Extra load is needed for all externally visible.
+    if (isDirectCall)
+      return false;
+    if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
+      return false;
+    return true;
   }
   return false;
 }