[llvm-commits] [llvm] r75273 - in /llvm/trunk/lib/Target/X86: AsmPrinter/X86ATTAsmPrinter.cpp X86FastISel.cpp X86ISelLowering.cpp X86Subtarget.cpp X86Subtarget.h

Chris Lattner sabre at nondot.org
Fri Jul 10 13:47:30 PDT 2009


Author: lattner
Date: Fri Jul 10 15:47:30 2009
New Revision: 75273

URL: http://llvm.org/viewvc/llvm-project?rev=75273&view=rev
Log:
add a couple of predicates to test for "stub style pic in PIC mode" and "stub style pic in dynamic-no-pic" mode.


Modified:
    llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
    llvm/trunk/lib/Target/X86/X86FastISel.cpp
    llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
    llvm/trunk/lib/Target/X86/X86Subtarget.cpp
    llvm/trunk/lib/Target/X86/X86Subtarget.h

Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=75273&r1=75272&r2=75273&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Fri Jul 10 15:47:30 2009
@@ -603,15 +603,12 @@
 
   O << JTEntryDirective << ' ';
 
-  if (TM.getRelocationModel() == Reloc::PIC_) {
-    if (Subtarget->isPICStyleRIPRel() || Subtarget->isPICStyleStub()) {
-      O << TAI->getPrivateGlobalPrefix() << getFunctionNumber()
-        << '_' << uid << "_set_" << MBB->getNumber();
-    } else if (Subtarget->isPICStyleGOT()) {
-      printBasicBlockLabel(MBB, false, false, false);
-      O << "@GOTOFF";
-    } else
-      assert(0 && "Don't know how to print MBB label for this PIC mode");
+  if (Subtarget->isPICStyleRIPRel() || Subtarget->isPICStyleStubPIC(TM)) {
+    O << TAI->getPrivateGlobalPrefix() << getFunctionNumber()
+      << '_' << uid << "_set_" << MBB->getNumber();
+  } else if (Subtarget->isPICStyleGOT()) {
+    printBasicBlockLabel(MBB, false, false, false);
+    O << "@GOTOFF";
   } else
     printBasicBlockLabel(MBB, false, false, false);
 }

Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FastISel.cpp?rev=75273&r1=75272&r2=75273&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Fri Jul 10 15:47:30 2009
@@ -578,8 +578,7 @@
       // base and index registers are unused.
       assert(AM.Base.Reg == 0 && AM.IndexReg == 0);
       AM.Base.Reg = X86::RIP;
-    } else if (Subtarget->isPICStyleStub() &&
-               TM.getRelocationModel() == Reloc::PIC_) {
+    } else if (Subtarget->isPICStyleStubPIC(TM)) {
       AM.GVOpFlags = X86II::MO_PIC_BASE_OFFSET;
     } else if (Subtarget->isPICStyleGOT()) {
       AM.GVOpFlags = X86II::MO_GOTOFF;
@@ -1413,7 +1412,7 @@
         TM.getRelocationModel() == Reloc::PIC_ &&
         GV->hasDefaultVisibility() && !GV->hasLocalLinkage()) {
       OpFlags = X86II::MO_PLT;
-    } else if (Subtarget->isPICStyleStub() &&
+    } else if (Subtarget->isPICStyleStubAny() &&
                (GV->isDeclaration() || GV->isWeakForLinker()) &&
                Subtarget->getDarwinVers() < 9) {
       // PC-relative references to external symbols should go through $stub,
@@ -1621,8 +1620,7 @@
   // x86-32 PIC requires a PIC base register for constant pools.
   unsigned PICBase = 0;
   unsigned char OpFlag = 0;
-  if (Subtarget->isPICStyleStub() &&
-      TM.getRelocationModel() == Reloc::PIC_) { // Not dynamic-no-pic
+  if (Subtarget->isPICStyleStubPIC(TM)) { // Not dynamic-no-pic
     OpFlag = X86II::MO_PIC_BASE_OFFSET;
     PICBase = getInstrInfo()->getGlobalBaseReg(&MF);
   } else if (Subtarget->isPICStyleGOT()) {

Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=75273&r1=75272&r2=75273&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Jul 10 15:47:30 2009
@@ -1913,7 +1913,7 @@
           getTargetMachine().getRelocationModel() == Reloc::PIC_ &&
           GV->hasDefaultVisibility() && !GV->hasLocalLinkage()) {
         OpFlags = X86II::MO_PLT;
-      } else if (Subtarget->isPICStyleStub() &&
+      } else if (Subtarget->isPICStyleStubAny() &&
                (GV->isDeclaration() || GV->isWeakForLinker()) &&
                Subtarget->getDarwinVers() < 9) {
         // PC-relative references to external symbols should go through $stub,
@@ -1933,7 +1933,7 @@
     if (Subtarget->isTargetELF() &&
         getTargetMachine().getRelocationModel() == Reloc::PIC_) {
       OpFlags = X86II::MO_PLT;
-    } else if (Subtarget->isPICStyleStub() &&
+    } else if (Subtarget->isPICStyleStubAny() &&
              Subtarget->getDarwinVers() < 9) {
       // PC-relative references to external symbols should go through $stub,
       // unless we're building with the leopard linker or later, which
@@ -4454,14 +4454,12 @@
   unsigned WrapperKind = X86ISD::Wrapper;
   
   if (Subtarget->is64Bit() &&
-      getTargetMachine().getCodeModel() == CodeModel::Small) {
+      getTargetMachine().getCodeModel() == CodeModel::Small)
     WrapperKind = X86ISD::WrapperRIP;
-  } else if (Subtarget->isPICStyleGOT()) {
+  else if (Subtarget->isPICStyleGOT())
     OpFlag = X86II::MO_GOTOFF;
-  } else if (Subtarget->isPICStyleStub() &&
-             getTargetMachine().getRelocationModel() == Reloc::PIC_) {
+  else if (Subtarget->isPICStyleStubPIC(getTargetMachine()))
     OpFlag = X86II::MO_PIC_BASE_OFFSET;
-  }
   
   SDValue Result = DAG.getTargetConstantPool(CP->getConstVal(), getPointerTy(),
                                              CP->getAlignment(),
@@ -4487,14 +4485,13 @@
   unsigned char OpFlag = 0;
   unsigned WrapperKind = X86ISD::Wrapper;
   
-  if (Subtarget->is64Bit()) {
+  if (Subtarget->is64Bit() &&
+      getTargetMachine().getCodeModel() == CodeModel::Small)
     WrapperKind = X86ISD::WrapperRIP;
-  } else if (Subtarget->isPICStyleGOT()) {
+  else if (Subtarget->isPICStyleGOT())
     OpFlag = X86II::MO_GOTOFF;
-  } else if (Subtarget->isPICStyleStub() &&
-             getTargetMachine().getRelocationModel() == Reloc::PIC_) {
+  else if (Subtarget->isPICStyleStubPIC(getTargetMachine()))
     OpFlag = X86II::MO_PIC_BASE_OFFSET;
-  }
   
   SDValue Result = DAG.getTargetJumpTable(JT->getIndex(), getPointerTy(),
                                           OpFlag);
@@ -4520,14 +4517,13 @@
   // global base reg.
   unsigned char OpFlag = 0;
   unsigned WrapperKind = X86ISD::Wrapper;
-  if (Subtarget->is64Bit()) {
+  if (Subtarget->is64Bit() &&
+      getTargetMachine().getCodeModel() == CodeModel::Small)
     WrapperKind = X86ISD::WrapperRIP;
-  } else if (Subtarget->isPICStyleGOT()) {
+  else if (Subtarget->isPICStyleGOT())
     OpFlag = X86II::MO_GOTOFF;
-  } else if (Subtarget->isPICStyleStub() &&
-             getTargetMachine().getRelocationModel() == Reloc::PIC_) {
+  else if (Subtarget->isPICStyleStubPIC(getTargetMachine()))
     OpFlag = X86II::MO_PIC_BASE_OFFSET;
-  }
   
   SDValue Result = DAG.getTargetExternalSymbol(Sym, getPointerTy(), OpFlag);
   

Modified: llvm/trunk/lib/Target/X86/X86Subtarget.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.cpp?rev=75273&r1=75272&r2=75273&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86Subtarget.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86Subtarget.cpp Fri Jul 10 15:47:30 2009
@@ -34,6 +34,17 @@
     clEnumValN(X86Subtarget::Intel, "intel", "Emit Intel-style assembly"),
     clEnumValEnd));
 
+bool X86Subtarget::isPICStyleStubPIC(const TargetMachine &TM) const {
+  return PICStyle == PICStyles::Stub &&
+         TM.getRelocationModel() == Reloc::PIC_;
+}
+
+bool X86Subtarget::isPICStyleStubNoDynamic(const TargetMachine &TM) const {
+  return PICStyle == PICStyles::Stub &&
+         TM.getRelocationModel() == Reloc::DynamicNoPIC;
+}
+
+
 
 /// ClassifyGlobalReference - Classify a global variable reference for the
 /// current subtarget according to how we should reference it in a non-pcrel
@@ -76,7 +87,7 @@
     return X86II::MO_GOT;
   }
   
-  if (isPICStyleStub()) {
+  if (isPICStyleStubAny()) {
     // In Darwin/32, we have multiple different stub types, and we have both PIC
     // and -mdynamic-no-pic.  Determine whether we have a stub reference
     // and/or whether the reference is relative to the PIC base or not.

Modified: llvm/trunk/lib/Target/X86/X86Subtarget.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86Subtarget.h?rev=75273&r1=75272&r2=75273&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86Subtarget.h (original)
+++ llvm/trunk/lib/Target/X86/X86Subtarget.h Fri Jul 10 15:47:30 2009
@@ -184,10 +184,14 @@
 
   bool isPICStyleSet() const { return PICStyle != PICStyles::None; }
   bool isPICStyleGOT() const { return PICStyle == PICStyles::GOT; }
-  bool isPICStyleStub() const { return PICStyle == PICStyles::Stub; }
   bool isPICStyleRIPRel() const { return PICStyle == PICStyles::RIPRel; }
+
+  bool isPICStyleStubPIC(const TargetMachine &TM) const;
+  bool isPICStyleStubNoDynamic(const TargetMachine &TM) const;
+  bool isPICStyleStubAny() const { return PICStyle == PICStyles::Stub; }
   
-  /// getDarwinVers - Return the darwin version number, 8 = tiger, 9 = leopard.
+  /// getDarwinVers - Return the darwin version number, 8 = Tiger, 9 = Leopard,
+  /// 10 = Snow Leopard, etc.
   unsigned getDarwinVers() const { return DarwinVers; }
   
   /// isLinux - Return true if the target is "Linux".





More information about the llvm-commits mailing list