Skip to content

Commit

Permalink
PPC: Implement null target streamer
Browse files Browse the repository at this point in the history
  • Loading branch information
arsenm committed Dec 19, 2022
1 parent 3ae0075 commit 0ebab8b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 16 deletions.
7 changes: 7 additions & 0 deletions llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}
Expand Down
18 changes: 6 additions & 12 deletions llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp
Expand Up @@ -1572,9 +1572,7 @@ void PPCLinuxAsmPrinter::emitStartOfAsmFile(Module &M) {
if (static_cast<const PPCTargetMachine &>(TM).isELFv2ABI()) {
PPCTargetStreamer *TS =
static_cast<PPCTargetStreamer *>(OutStreamer->getTargetStreamer());

if (TS)
TS->emitAbiVersion(2);
TS->emitAbiVersion(2);
}

if (static_cast<const PPCTargetMachine &>(TM).isPPC64() ||
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -1806,9 +1804,7 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() {

PPCTargetStreamer *TS =
static_cast<PPCTargetStreamer *>(OutStreamer->getTargetStreamer());

if (TS)
TS->emitLocalEntry(cast<MCSymbolELF>(CurrentFnSym), LocalOffsetExp);
TS->emitLocalEntry(cast<MCSymbolELF>(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
Expand All @@ -1835,9 +1831,8 @@ void PPCLinuxAsmPrinter::emitFunctionBodyStart() {
MF->hasInlineAsm() || (!PPCFI->usesTOCBasePtr() && UsesX2OrR2)) {
PPCTargetStreamer *TS =
static_cast<PPCTargetStreamer *>(OutStreamer->getTargetStreamer());
if (TS)
TS->emitLocalEntry(cast<MCSymbolELF>(CurrentFnSym),
MCConstantExpr::create(1, OutContext));
TS->emitLocalEntry(cast<MCSymbolELF>(CurrentFnSym),
MCConstantExpr::create(1, OutContext));
}
}
}
Expand Down Expand Up @@ -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)
Expand Down
8 changes: 4 additions & 4 deletions llvm/lib/Target/PowerPC/PPCTargetStreamer.h
Expand Up @@ -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
Expand Down

0 comments on commit 0ebab8b

Please sign in to comment.