[llvm] cd075a4 - MCObjectStreamer: Deduplicate emitInstToData
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 29 16:12:15 PDT 2025
Author: Fangrui Song
Date: 2025-06-29T16:12:10-07:00
New Revision: cd075a40133dbe8a01f4fb1d6b99d55869089edf
URL: https://github.com/llvm/llvm-project/commit/cd075a40133dbe8a01f4fb1d6b99d55869089edf
DIFF: https://github.com/llvm/llvm-project/commit/cd075a40133dbe8a01f4fb1d6b99d55869089edf.diff
LOG: MCObjectStreamer: Deduplicate emitInstToData
Added:
Modified:
llvm/include/llvm/MC/MCDXContainerStreamer.h
llvm/include/llvm/MC/MCGOFFStreamer.h
llvm/include/llvm/MC/MCObjectStreamer.h
llvm/include/llvm/MC/MCSPIRVStreamer.h
llvm/include/llvm/MC/MCWasmStreamer.h
llvm/include/llvm/MC/MCWinCOFFStreamer.h
llvm/include/llvm/MC/MCXCOFFStreamer.h
llvm/lib/MC/MCDXContainerStreamer.cpp
llvm/lib/MC/MCMachOStreamer.cpp
llvm/lib/MC/MCObjectStreamer.cpp
llvm/lib/MC/MCSPIRVStreamer.cpp
llvm/lib/MC/MCWasmStreamer.cpp
llvm/lib/MC/MCWinCOFFStreamer.cpp
llvm/lib/MC/MCXCOFFStreamer.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCDXContainerStreamer.h b/llvm/include/llvm/MC/MCDXContainerStreamer.h
index 8d29bb3d03f61..37e3c7ddaad2c 100644
--- a/llvm/include/llvm/MC/MCDXContainerStreamer.h
+++ b/llvm/include/llvm/MC/MCDXContainerStreamer.h
@@ -35,9 +35,6 @@ class MCDXContainerStreamer : public MCObjectStreamer {
bool emitSymbolAttribute(MCSymbol *, MCSymbolAttr) override { return false; }
void emitCommonSymbol(MCSymbol *, uint64_t, Align) override {}
-
-private:
- void emitInstToData(const MCInst &, const MCSubtargetInfo &) override;
};
} // end namespace llvm
diff --git a/llvm/include/llvm/MC/MCGOFFStreamer.h b/llvm/include/llvm/MC/MCGOFFStreamer.h
index b89d516e1452b..6d029f6bd4a29 100644
--- a/llvm/include/llvm/MC/MCGOFFStreamer.h
+++ b/llvm/include/llvm/MC/MCGOFFStreamer.h
@@ -35,7 +35,6 @@ class MCGOFFStreamer : public MCObjectStreamer {
}
void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
Align ByteAlignment) override {}
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override {}
};
} // end namespace llvm
diff --git a/llvm/include/llvm/MC/MCObjectStreamer.h b/llvm/include/llvm/MC/MCObjectStreamer.h
index c987bc2426e9f..d516fd5b00dd9 100644
--- a/llvm/include/llvm/MC/MCObjectStreamer.h
+++ b/llvm/include/llvm/MC/MCObjectStreamer.h
@@ -60,7 +60,7 @@ class MCObjectStreamer : public MCStreamer {
DenseMap<const MCSymbol *, SmallVector<PendingAssignment, 1>>
pendingAssignments;
- virtual void emitInstToData(const MCInst &Inst, const MCSubtargetInfo&) = 0;
+ virtual void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &);
void emitCFIStartProcImpl(MCDwarfFrameInfo &Frame) override;
void emitCFIEndProcImpl(MCDwarfFrameInfo &Frame) override;
void emitInstructionImpl(const MCInst &Inst, const MCSubtargetInfo &STI);
diff --git a/llvm/include/llvm/MC/MCSPIRVStreamer.h b/llvm/include/llvm/MC/MCSPIRVStreamer.h
index ee0544147073f..42559f7522b50 100644
--- a/llvm/include/llvm/MC/MCSPIRVStreamer.h
+++ b/llvm/include/llvm/MC/MCSPIRVStreamer.h
@@ -35,9 +35,6 @@ class MCSPIRVStreamer : public MCObjectStreamer {
}
void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
Align ByteAlignment) override {}
-
-private:
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
};
} // end namespace llvm
diff --git a/llvm/include/llvm/MC/MCWasmStreamer.h b/llvm/include/llvm/MC/MCWasmStreamer.h
index bf5b5f6c3447d..2598c261ea02a 100644
--- a/llvm/include/llvm/MC/MCWasmStreamer.h
+++ b/llvm/include/llvm/MC/MCWasmStreamer.h
@@ -58,8 +58,6 @@ class MCWasmStreamer : public MCObjectStreamer {
void finishImpl() override;
private:
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
-
bool SeenIdent;
};
diff --git a/llvm/include/llvm/MC/MCWinCOFFStreamer.h b/llvm/include/llvm/MC/MCWinCOFFStreamer.h
index b474ececb21d6..05def07a7d9dd 100644
--- a/llvm/include/llvm/MC/MCWinCOFFStreamer.h
+++ b/llvm/include/llvm/MC/MCWinCOFFStreamer.h
@@ -74,8 +74,6 @@ class MCWinCOFFStreamer : public MCObjectStreamer {
protected:
const MCSymbol *CurSymbol;
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override;
-
void finalizeCGProfileEntry(const MCSymbolRefExpr *&S);
private:
diff --git a/llvm/include/llvm/MC/MCXCOFFStreamer.h b/llvm/include/llvm/MC/MCXCOFFStreamer.h
index 684c229407a80..870d48fe4200c 100644
--- a/llvm/include/llvm/MC/MCXCOFFStreamer.h
+++ b/llvm/include/llvm/MC/MCXCOFFStreamer.h
@@ -25,7 +25,6 @@ class MCXCOFFStreamer : public MCObjectStreamer {
bool emitSymbolAttribute(MCSymbol *Symbol, MCSymbolAttr Attribute) override;
void emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
Align ByteAlignment) override;
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
void emitXCOFFLocalCommonSymbol(MCSymbol *LabelSym, uint64_t Size,
MCSymbol *CsectSym, Align Alignment) override;
void emitXCOFFSymbolLinkageWithVisibility(MCSymbol *Symbol,
diff --git a/llvm/lib/MC/MCDXContainerStreamer.cpp b/llvm/lib/MC/MCDXContainerStreamer.cpp
index a596c9a16d498..88c6c8b7e9784 100644
--- a/llvm/lib/MC/MCDXContainerStreamer.cpp
+++ b/llvm/lib/MC/MCDXContainerStreamer.cpp
@@ -16,9 +16,6 @@
using namespace llvm;
-void MCDXContainerStreamer::emitInstToData(const MCInst &,
- const MCSubtargetInfo &) {}
-
MCStreamer *llvm::createDXContainerStreamer(
MCContext &Context, std::unique_ptr<MCAsmBackend> &&MAB,
std::unique_ptr<MCObjectWriter> &&OW, std::unique_ptr<MCCodeEmitter> &&CE) {
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index 4cf602b7e4563..e1d7f8c8f1572 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -59,8 +59,6 @@ class MCMachOStreamer : public MCObjectStreamer {
/// labels in the middle of the section.
DenseMap<const MCSection*, bool> HasSectionLabel;
- void emitInstToData(const MCInst &Inst, const MCSubtargetInfo &STI) override;
-
void emitDataRegion(MachO::DataRegionType Kind);
void emitDataRegionEnd();
@@ -423,23 +421,6 @@ void MCMachOStreamer::emitTBSSSymbol(MCSection *Section, MCSymbol *Symbol,
emitZerofill(Section, Symbol, Size, ByteAlignment);
}
-void MCMachOStreamer::emitInstToData(const MCInst &Inst,
- const MCSubtargetInfo &STI) {
- MCDataFragment *DF = getOrCreateDataFragment();
-
- SmallVector<MCFixup, 4> Fixups;
- SmallString<256> Code;
- getAssembler().getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
-
- // Add the fixups and data.
- for (MCFixup &Fixup : Fixups) {
- Fixup.setOffset(Fixup.getOffset() + DF->getContents().size());
- DF->getFixups().push_back(Fixup);
- }
- DF->setHasInstructions(STI);
- DF->appendContents(Code);
-}
-
void MCMachOStreamer::finishImpl() {
emitFrames(&getAssembler().getBackend());
diff --git a/llvm/lib/MC/MCObjectStreamer.cpp b/llvm/lib/MC/MCObjectStreamer.cpp
index 4a179fcdf6d08..1af0414b01955 100644
--- a/llvm/lib/MC/MCObjectStreamer.cpp
+++ b/llvm/lib/MC/MCObjectStreamer.cpp
@@ -390,6 +390,22 @@ void MCObjectStreamer::emitInstructionImpl(const MCInst &Inst,
emitInstToFragment(Inst, STI);
}
+void MCObjectStreamer::emitInstToData(const MCInst &Inst,
+ const MCSubtargetInfo &STI) {
+ MCDataFragment *DF = getOrCreateDataFragment();
+ SmallVector<MCFixup, 1> Fixups;
+ SmallString<256> Code;
+ getAssembler().getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
+
+ auto CodeOffset = DF->getContents().size();
+ for (MCFixup &Fixup : Fixups) {
+ Fixup.setOffset(Fixup.getOffset() + CodeOffset);
+ DF->getFixups().push_back(Fixup);
+ }
+ DF->setHasInstructions(STI);
+ DF->appendContents(Code);
+}
+
void MCObjectStreamer::emitInstToFragment(const MCInst &Inst,
const MCSubtargetInfo &STI) {
// Always create a new, separate fragment here, because its size can change
diff --git a/llvm/lib/MC/MCSPIRVStreamer.cpp b/llvm/lib/MC/MCSPIRVStreamer.cpp
index 3b8cbee70d209..d2534375e501e 100644
--- a/llvm/lib/MC/MCSPIRVStreamer.cpp
+++ b/llvm/lib/MC/MCSPIRVStreamer.cpp
@@ -16,21 +16,6 @@
using namespace llvm;
-void MCSPIRVStreamer::emitInstToData(const MCInst &Inst,
- const MCSubtargetInfo &STI) {
- MCAssembler &Assembler = getAssembler();
- SmallVector<MCFixup, 0> Fixups;
- SmallString<256> Code;
- Assembler.getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
-
- // Append the encoded instruction to the current data fragment (or create a
- // new such fragment if the current fragment is not a data fragment).
- MCDataFragment *DF = getOrCreateDataFragment();
-
- DF->setHasInstructions(STI);
- DF->appendContents(Code);
-}
-
MCStreamer *llvm::createSPIRVStreamer(MCContext &Context,
std::unique_ptr<MCAsmBackend> &&MAB,
std::unique_ptr<MCObjectWriter> &&OW,
diff --git a/llvm/lib/MC/MCWasmStreamer.cpp b/llvm/lib/MC/MCWasmStreamer.cpp
index cc731fe02f7d3..0940fc01f6594 100644
--- a/llvm/lib/MC/MCWasmStreamer.cpp
+++ b/llvm/lib/MC/MCWasmStreamer.cpp
@@ -151,26 +151,6 @@ void MCWasmStreamer::emitIdent(StringRef IdentString) {
// sections in the object format
}
-void MCWasmStreamer::emitInstToData(const MCInst &Inst,
- const MCSubtargetInfo &STI) {
- MCAssembler &Assembler = getAssembler();
- SmallVector<MCFixup, 4> Fixups;
- SmallString<256> Code;
- Assembler.getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
-
- // Append the encoded instruction to the current data fragment (or create a
- // new such fragment if the current fragment is not a data fragment).
- MCDataFragment *DF = getOrCreateDataFragment();
-
- // Add the fixups and data.
- for (MCFixup &Fixup : Fixups) {
- Fixup.setOffset(Fixup.getOffset() + DF->getContents().size());
- DF->getFixups().push_back(Fixup);
- }
- DF->setHasInstructions(STI);
- DF->appendContents(Code);
-}
-
void MCWasmStreamer::finishImpl() {
emitFrames(nullptr);
diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp
index d95e0cb8f0439..db62ddc3c4ace 100644
--- a/llvm/lib/MC/MCWinCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp
@@ -136,23 +136,6 @@ WinCOFFObjectWriter &MCWinCOFFStreamer::getWriter() {
return static_cast<WinCOFFObjectWriter &>(getAssembler().getWriter());
}
-void MCWinCOFFStreamer::emitInstToData(const MCInst &Inst,
- const MCSubtargetInfo &STI) {
- MCDataFragment *DF = getOrCreateDataFragment();
-
- SmallVector<MCFixup, 4> Fixups;
- SmallString<256> Code;
- getAssembler().getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
-
- // Add the fixups and data.
- for (MCFixup &Fixup : Fixups) {
- Fixup.setOffset(Fixup.getOffset() + DF->getContents().size());
- DF->getFixups().push_back(Fixup);
- }
- DF->setHasInstructions(STI);
- DF->appendContents(Code);
-}
-
void MCWinCOFFStreamer::initSections(bool NoExecStack,
const MCSubtargetInfo &STI) {
// FIXME: this is identical to the ELF one.
diff --git a/llvm/lib/MC/MCXCOFFStreamer.cpp b/llvm/lib/MC/MCXCOFFStreamer.cpp
index 15de5d83bfe10..8b051ca532b9e 100644
--- a/llvm/lib/MC/MCXCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCXCOFFStreamer.cpp
@@ -138,26 +138,6 @@ void MCXCOFFStreamer::emitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
emitZeros(Size);
}
-void MCXCOFFStreamer::emitInstToData(const MCInst &Inst,
- const MCSubtargetInfo &STI) {
- MCAssembler &Assembler = getAssembler();
- SmallVector<MCFixup, 4> Fixups;
- SmallString<256> Code;
- Assembler.getEmitter().encodeInstruction(Inst, Code, Fixups, STI);
-
- // Add the fixups and data.
- MCDataFragment *DF = getOrCreateDataFragment(&STI);
- const size_t ContentsSize = DF->getContents().size();
- auto &DataFragmentFixups = DF->getFixups();
- for (auto &Fixup : Fixups) {
- Fixup.setOffset(Fixup.getOffset() + ContentsSize);
- DataFragmentFixups.push_back(Fixup);
- }
-
- DF->setHasInstructions(STI);
- DF->appendContents(Code);
-}
-
void MCXCOFFStreamer::emitXCOFFLocalCommonSymbol(MCSymbol *LabelSym,
uint64_t Size,
MCSymbol *CsectSym,
More information about the llvm-commits
mailing list