pull @GOT, @GOTOFF, @GOTPCREL handling into isel from the asmprinter.
authorChris Lattner <sabre@nondot.org>
Sat, 27 Jun 2009 05:39:56 +0000 (05:39 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 27 Jun 2009 05:39:56 +0000 (05:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74378 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
lib/Target/X86/X86ISelLowering.cpp

index 0d43de61c0ac3f7883376ed8a43ab82b9c267912..bb16e6a91176417916f201d78f7c5ee1ac8019a9 100644 (file)
@@ -290,10 +290,6 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
   return false;
 }
 
-static inline bool shouldPrintGOT(TargetMachine &TM, const X86Subtarget* ST) {
-  return ST->isPICStyleGOT() && TM.getRelocationModel() == Reloc::PIC_;
-}
-
 static inline bool shouldPrintPLT(TargetMachine &TM, const X86Subtarget* ST) {
   return ST->isTargetELF() && TM.getRelocationModel() == Reloc::PIC_;
 }
@@ -584,42 +580,15 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo,
       if (isThreadLocal)
         assert(0 && "Not lowered right");
       break;
-    case X86II::MO_TLSGD:
-      O << "@TLSGD";
-      break;
-    case X86II::MO_GOTTPOFF:
-      O << "@GOTTPOFF";
-      break;
-    case X86II::MO_INDNTPOFF:
-      O << "@INDNTPOFF";
-      break;
-    case X86II::MO_TPOFF:
-      O << "@TPOFF";
-      break;
-    case X86II::MO_NTPOFF:
-      O << "@NTPOFF";
-      break;
-    case X86II::MO_GOTPCREL:
-      O << "@GOTPCREL";
-      break;
-    }
-    
-    if (isThreadLocal) {
-      // DEAD
-    } else if (isMemOp) {
-      if (shouldPrintGOT(TM, Subtarget)) {
-        if (Subtarget->GVRequiresExtraLoad(GV, TM, false))
-          O << "@GOT";
-        else
-          O << "@GOTOFF";
-      } else if (Subtarget->isPICStyleRIPRel()) {
-        if (TM.getRelocationModel() != Reloc::Static) {
-          if (Subtarget->GVRequiresExtraLoad(GV, TM, false))
-            O << "@GOTPCREL";
-        }
-      }
+    case X86II::MO_TLSGD:     O << "@TLSGD";     break;
+    case X86II::MO_GOTTPOFF:  O << "@GOTTPOFF";  break;
+    case X86II::MO_INDNTPOFF: O << "@INDNTPOFF"; break;
+    case X86II::MO_TPOFF:     O << "@TPOFF";     break;
+    case X86II::MO_NTPOFF:    O << "@NTPOFF";    break;
+    case X86II::MO_GOTPCREL:  O << "@GOTPCREL";  break;
+    case X86II::MO_GOT:       O << "@GOT";       break;
+    case X86II::MO_GOTOFF:    O << "@GOTOFF";    break;
     }
-
     return;
   }
   case MachineOperand::MO_ExternalSymbol: {
index 23d37e12af526c4ca6ab3ed2a30ff930d4f3c5d5..9614e69e0f8946f1ccb8aff79e90223d53877730 100644 (file)
@@ -4426,7 +4426,21 @@ X86TargetLowering::LowerGlobalAddress(const GlobalValue *GV, DebugLoc dl,
     Result = DAG.getTargetGlobalAddress(GV, getPointerTy(), Offset);
     Offset = 0;
   } else {
-    Result = DAG.getTargetGlobalAddress(GV, getPointerTy(), 0);
+    unsigned char OpFlags = 0;
+    
+    if (Subtarget->isPICStyleRIPRel() &&
+        getTargetMachine().getRelocationModel() != Reloc::Static) {
+      if (ExtraLoadRequired)
+        OpFlags = X86II::MO_GOTPCREL;
+    } else if (Subtarget->isPICStyleGOT() &&
+               getTargetMachine().getRelocationModel() == Reloc::PIC_) {
+      if (ExtraLoadRequired)
+        OpFlags = X86II::MO_GOT;
+      else
+        OpFlags = X86II::MO_GOTOFF;
+    }
+    
+    Result = DAG.getTargetGlobalAddress(GV, getPointerTy(), 0, OpFlags);
   }
   
   if (Subtarget->isPICStyleRIPRel() &&