From 0ebab8bae4215000ec73c0233f929466fc05a038 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Sat, 29 Oct 2022 12:17:23 -0700 Subject: [PATCH] PPC: Implement null target streamer --- .../PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp | 7 +++++++ llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 18 ++++++------------ llvm/lib/Target/PowerPC/PPCTargetStreamer.h | 8 ++++---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp index 9b37c862dbd0b..10e352923c1a9 100644 --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp @@ -352,6 +352,10 @@ static MCTargetStreamer *createAsmTargetStreamer(MCStreamer &S, return new PPCTargetAsmStreamer(S, OS); } +static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) { + return new PPCTargetStreamer(S); +} + static MCTargetStreamer * createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) { const Triple &TT = STI.getTargetTriple(); @@ -432,6 +436,9 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializePowerPCTargetMC() { // Register the asm target streamer. TargetRegistry::RegisterAsmTargetStreamer(*T, createAsmTargetStreamer); + // Register the null target streamer. + TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer); + // Register the MCInstPrinter. TargetRegistry::RegisterMCInstPrinter(*T, createPPCMCInstPrinter); } diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index 955f8cd44e8d2..30e96cff9e2c3 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -1572,9 +1572,7 @@ void PPCLinuxAsmPrinter::emitStartOfAsmFile(Module &M) { if (static_cast(TM).isELFv2ABI()) { PPCTargetStreamer *TS = static_cast(OutStreamer->getTargetStreamer()); - - if (TS) - TS->emitAbiVersion(2); + TS->emitAbiVersion(2); } if (static_cast(TM).isPPC64() || @@ -1700,7 +1698,7 @@ void PPCLinuxAsmPrinter::emitEndOfAsmFile(Module &M) { MCSymbol *const TOCEntryLabel = TOCMapPair.second; OutStreamer->emitLabel(TOCEntryLabel); - if (isPPC64 && TS != nullptr) + if (isPPC64) TS->emitTCEntry(*TOCEntryTarget, TOCMapPair.first.second); else OutStreamer->emitSymbolValue(TOCEntryTarget, 4); @@ -1806,9 +1804,7 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() { PPCTargetStreamer *TS = static_cast(OutStreamer->getTargetStreamer()); - - if (TS) - TS->emitLocalEntry(cast(CurrentFnSym), LocalOffsetExp); + TS->emitLocalEntry(cast(CurrentFnSym), LocalOffsetExp); } else if (Subtarget->isUsingPCRelativeCalls()) { // When generating the entry point for a function we have a few scenarios // based on whether or not that function uses R2 and whether or not that @@ -1835,9 +1831,8 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() { MF->hasInlineAsm() || (!PPCFI->usesTOCBasePtr() && UsesX2OrR2)) { PPCTargetStreamer *TS = static_cast(OutStreamer->getTargetStreamer()); - if (TS) - TS->emitLocalEntry(cast(CurrentFnSym), - MCConstantExpr::create(1, OutContext)); + TS->emitLocalEntry(cast(CurrentFnSym), + MCConstantExpr::create(1, OutContext)); } } } @@ -2568,8 +2563,7 @@ void PPCAIXAsmPrinter::emitEndOfAsmFile(Module &M) { OutStreamer->switchSection(TCEntry); OutStreamer->emitLabel(I.second); - if (TS != nullptr) - TS->emitTCEntry(*I.first.first, I.first.second); + TS->emitTCEntry(*I.first.first, I.first.second); } for (const auto *GV : TOCDataGlobalVars) diff --git a/llvm/lib/Target/PowerPC/PPCTargetStreamer.h b/llvm/lib/Target/PowerPC/PPCTargetStreamer.h index e3fc6285494c5..daf5b93ff21f0 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetStreamer.h +++ b/llvm/lib/Target/PowerPC/PPCTargetStreamer.h @@ -25,10 +25,10 @@ class PPCTargetStreamer : public MCTargetStreamer { ~PPCTargetStreamer() override; virtual void emitTCEntry(const MCSymbol &S, - MCSymbolRefExpr::VariantKind Kind) = 0; - virtual void emitMachine(StringRef CPU) = 0; - virtual void emitAbiVersion(int AbiVersion) = 0; - virtual void emitLocalEntry(MCSymbolELF *S, const MCExpr *LocalOffset) = 0; + MCSymbolRefExpr::VariantKind Kind){}; + virtual void emitMachine(StringRef CPU){}; + virtual void emitAbiVersion(int AbiVersion){}; + virtual void emitLocalEntry(MCSymbolELF *S, const MCExpr *LocalOffset){}; }; } // end namespace llvm