From: Rafael Espindola Date: Mon, 27 Jun 2016 14:19:45 +0000 (+0000) Subject: Move isPositionIndependent up to AsmPrinter. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=665d49773dd5eda7a624d6a43b19b94f8c481905;p=llvm Move isPositionIndependent up to AsmPrinter. Use it in ppc too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273877 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 9bc7a2d2e5e..de618d17357 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -148,6 +148,8 @@ public: DwarfDebug *getDwarfDebug() { return DD; } DwarfDebug *getDwarfDebug() const { return DD; } + bool isPositionIndependent() const; + /// Return true if assembly output should contain comments. /// bool isVerbose() const { return VerboseAsm; } diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 3f2ef090b86..37099c468cb 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -124,6 +124,10 @@ AsmPrinter::~AsmPrinter() { } } +bool AsmPrinter::isPositionIndependent() const { + return TM.getRelocationModel() == Reloc::PIC_; +} + /// getFunctionNumber - Return a unique ID for the current function. /// unsigned AsmPrinter::getFunctionNumber() const { diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp index 72b4c6a932c..3cf405eedb0 100644 --- a/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/ARMAsmPrinter.cpp @@ -614,10 +614,6 @@ static ARMBuildAttrs::CPUArch getArchForCPU(StringRef CPU, return ARMBuildAttrs::v4; } -bool ARMAsmPrinter::isPositionIndependent() const { - return TM.getRelocationModel() == Reloc::PIC_; -} - void ARMAsmPrinter::emitAttributes() { MCTargetStreamer &TS = *OutStreamer->getTargetStreamer(); ARMTargetStreamer &ATS = static_cast(TS); diff --git a/lib/Target/ARM/ARMAsmPrinter.h b/lib/Target/ARM/ARMAsmPrinter.h index d38669a6634..97f5ca0ecbc 100644 --- a/lib/Target/ARM/ARMAsmPrinter.h +++ b/lib/Target/ARM/ARMAsmPrinter.h @@ -95,7 +95,6 @@ public: bool lowerOperand(const MachineOperand &MO, MCOperand &MCOp); private: - bool isPositionIndependent() const; // Helpers for EmitStartOfAsmFile() and EmitEndOfAsmFile() void emitAttributes(); diff --git a/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 0b879995d9a..570165b81c9 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -459,7 +459,7 @@ void PPCAsmPrinter::EmitTlsCall(const MachineInstr *MI, "GETtls[ld]ADDR[32] must read GPR3"); if (!Subtarget->isPPC64() && !Subtarget->isDarwin() && - TM.getRelocationModel() == Reloc::PIC_) + isPositionIndependent()) Kind = MCSymbolRefExpr::VK_PLT; const MCSymbolRefExpr *TlsRef = MCSymbolRefExpr::create(TlsGetAddr, Kind, OutContext); @@ -1027,7 +1027,7 @@ void PPCLinuxAsmPrinter::EmitStartOfAsmFile(Module &M) { } if (static_cast(TM).isPPC64() || - TM.getRelocationModel() != Reloc::PIC_) + !isPositionIndependent()) return AsmPrinter::EmitStartOfAsmFile(M); if (M.getPICLevel() == PICLevel::SmallPIC) @@ -1056,7 +1056,7 @@ void PPCLinuxAsmPrinter::EmitStartOfAsmFile(Module &M) { void PPCLinuxAsmPrinter::EmitFunctionEntryLabel() { // linux/ppc32 - Normal entry label. if (!Subtarget->isPPC64() && - (TM.getRelocationModel() != Reloc::PIC_ || + (!isPositionIndependent() || MF->getFunction()->getParent()->getPICLevel() == PICLevel::SmallPIC)) return AsmPrinter::EmitFunctionEntryLabel();