[llvm-commits] [llvm] r54712 - in /llvm/tags/Apple/llvmCore-2064/lib/Target/X86: X86CodeEmitter.cpp X86TargetMachine.cpp

Bill Wendling isanbard at gmail.com
Tue Aug 12 19:50:19 PDT 2008


Author: void
Date: Tue Aug 12 21:50:19 2008
New Revision: 54712

URL: http://llvm.org/viewvc/llvm-project?rev=54712&view=rev
Log:
Pull r54700 into llvmCore-2064:

Make x86-64 JIT changes Darwin-specific.


Modified:
    llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86CodeEmitter.cpp
    llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86TargetMachine.cpp

Modified: llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86CodeEmitter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86CodeEmitter.cpp?rev=54712&r1=54711&r2=54712&view=diff

==============================================================================
--- llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86CodeEmitter.cpp (original)
+++ llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86CodeEmitter.cpp Tue Aug 12 21:50:19 2008
@@ -525,7 +525,11 @@
         emitPCRelativeBlockAddress(MO.getMBB());
       } else if (MO.isGlobalAddress()) {
         // Assume undefined functions may be outside the Small codespace.
-        bool NeedStub = Is64BitMode || Opcode == X86::TAILJMPd;
+        bool NeedStub = 
+          (Is64BitMode && 
+              (TM.getCodeModel() == CodeModel::Large ||
+               TM.getSubtarget<X86Subtarget>().isTargetDarwin())) ||
+          Opcode == X86::TAILJMPd;
         emitGlobalAddress(MO.getGlobal(), X86::reloc_pcrel_word,
                           0, 0, NeedStub);
       } else if (MO.isExternalSymbol()) {
@@ -549,6 +553,9 @@
       else {
         unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
           : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
+        // This should not occur on Darwin for relocatable objects.
+        if (Opcode == X86::MOV64ri)
+          rt = X86::reloc_absolute_dword;  // FIXME: add X86II flag?
         if (MO1.isGlobalAddress()) {
           bool NeedStub = isa<Function>(MO1.getGlobal());
           bool isLazy = gvNeedsLazyPtr(MO1.getGlobal());
@@ -619,6 +626,8 @@
       else {
         unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
           : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
+        if (Opcode == X86::MOV64ri32)
+          rt = X86::reloc_absolute_word;  // FIXME: add X86II flag?
         if (MO1.isGlobalAddress()) {
           bool NeedStub = isa<Function>(MO1.getGlobal());
           bool isLazy = gvNeedsLazyPtr(MO1.getGlobal());
@@ -654,6 +663,8 @@
       else {
         unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
           : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
+        if (Opcode == X86::MOV64mi32)
+          rt = X86::reloc_absolute_word;  // FIXME: add X86II flag?
         if (MO.isGlobalAddress()) {
           bool NeedStub = isa<Function>(MO.getGlobal());
           bool isLazy = gvNeedsLazyPtr(MO.getGlobal());

Modified: llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86TargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86TargetMachine.cpp?rev=54712&r1=54711&r2=54712&view=diff

==============================================================================
--- llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86TargetMachine.cpp (original)
+++ llvm/tags/Apple/llvmCore-2064/lib/Target/X86/X86TargetMachine.cpp Tue Aug 12 21:50:19 2008
@@ -194,14 +194,20 @@
 bool X86TargetMachine::addCodeEmitter(PassManagerBase &PM, bool Fast,
                                       bool DumpAsm, MachineCodeEmitter &MCE) {
   // FIXME: Move this to TargetJITInfo!
-  // Do not override 64-bit setting made in X86TargetMachine().
-  if (DefRelocModel == Reloc::Default && !Subtarget.is64Bit())
+  // On Darwin, do not override 64-bit setting made in X86TargetMachine().
+  if (DefRelocModel == Reloc::Default && 
+        (!Subtarget.isTargetDarwin() || !Subtarget.is64Bit()))
     setRelocationModel(Reloc::Static);
   
   // 64-bit JIT places everything in the same buffer except external functions.
-  // Use small code model but hack the call instruction for externals.
-  if (Subtarget.is64Bit())
-    setCodeModel(CodeModel::Small);
+  // On Darwin, use small code model but hack the call instruction for 
+  // externals.  Elsewhere, do not assume globals are in the lower 4G.
+  if (Subtarget.is64Bit()) {
+    if (Subtarget.isTargetDarwin())
+      setCodeModel(CodeModel::Small);
+    else
+      setCodeModel(CodeModel::Large);
+  }
 
   PM.add(createX86CodeEmitterPass(*this, MCE));
   if (DumpAsm)





More information about the llvm-commits mailing list