In PIC mode, GV not requiring an extra load can be used as address immediate.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 29 Nov 2006 23:48:14 +0000 (23:48 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 29 Nov 2006 23:48:14 +0000 (23:48 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32028 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 67effad79760aaf40eb2a97a477f17ed2beaa973..1e3530f21f61ad11ccdc9506854856b8185e5cb2 100644 (file)
@@ -4994,21 +4994,14 @@ bool X86TargetLowering::isLegalAddressImmediate(int64_t V) const {
 }
 
 bool X86TargetLowering::isLegalAddressImmediate(GlobalValue *GV) const {
-  // GV is 64-bit but displacement field is 32-bit unless we are in small code
-  // model. Mac OS X happens to support only small PIC code model.
-  // FIXME: better support for other OS's.
-  if (Subtarget->is64Bit() && !Subtarget->isTargetDarwin())
+  // In 64-bit mode, GV is 64-bit so it won't fit in the 32-bit displacement 
+  // field unless we are in small code model.
+  if (Subtarget->is64Bit() &&
+      getTargetMachine().getCodeModel() != CodeModel::Small)
     return false;
-  if (Subtarget->isTargetDarwin()) {
-    Reloc::Model RModel = getTargetMachine().getRelocationModel();
-    if (RModel == Reloc::Static)
-      return true;
-    else if (RModel == Reloc::DynamicNoPIC)
-      return !(Subtarget->GVRequiresExtraLoad(GV, false));
-    else
-      return false;
-  } else
-    return true;
+  Reloc::Model RModel = getTargetMachine().getRelocationModel();
+  return (RModel == Reloc::Static) ||
+    !Subtarget->GVRequiresExtraLoad(GV, false);
 }
 
 /// isShuffleMaskLegal - Targets can use this to indicate that they only