[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