Under X86-64 large code model, do not emit 32-bit pc relative calls.
authorEvan Cheng <evan.cheng@apple.com>
Wed, 14 Mar 2007 22:11:11 +0000 (22:11 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 14 Mar 2007 22:11:11 +0000 (22:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35108 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 8dad16edfe1d95b7d77547475cc3476858701ba0..3e96985eb2305d6681af8900dbb500cc7e35b4bf 100644 (file)
@@ -1304,11 +1304,13 @@ X86TargetLowering::LowerX86_64CCCCallTo(SDOperand Op, SelectionDAG &DAG,
   if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) {
     // We should use extra load for direct calls to dllimported functions in
     // non-JIT mode.
-    if (!Subtarget->GVRequiresExtraLoad(G->getGlobal(),
-                                        getTargetMachine(), true))
+    if (getTargetMachine().getCodeModel() != CodeModel::Large
+       && !Subtarget->GVRequiresExtraLoad(G->getGlobal(),
+                                          getTargetMachine(), true))
       Callee = DAG.getTargetGlobalAddress(G->getGlobal(), getPointerTy());
   } else if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee))
-    Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy());
+    if (getTargetMachine().getCodeModel() != CodeModel::Large)
+      Callee = DAG.getTargetExternalSymbol(S->getSymbol(), getPointerTy());
 
   // Returns a chain & a flag for retval copy to use.
   SDVTList NodeTys = DAG.getVTList(MVT::Other, MVT::Flag);