[llvm] ae3c85a - MCAssembler: Move CGProfile to MCObjectWriter
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 21:56:49 PDT 2024
Author: Fangrui Song
Date: 2024-07-22T21:56:45-07:00
New Revision: ae3c85a708dcb8e9a1721d69943232af3e263099
URL: https://github.com/llvm/llvm-project/commit/ae3c85a708dcb8e9a1721d69943232af3e263099
DIFF: https://github.com/llvm/llvm-project/commit/ae3c85a708dcb8e9a1721d69943232af3e263099.diff
LOG: MCAssembler: Move CGProfile to MCObjectWriter
Added:
Modified:
llvm/include/llvm/MC/MCAssembler.h
llvm/include/llvm/MC/MCObjectWriter.h
llvm/lib/MC/MCELFStreamer.cpp
llvm/lib/MC/MCMachOStreamer.cpp
llvm/lib/MC/MCObjectWriter.cpp
llvm/lib/MC/MCWinCOFFStreamer.cpp
llvm/lib/MC/MachObjectWriter.cpp
llvm/lib/MC/WinCOFFObjectWriter.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCAssembler.h b/llvm/include/llvm/MC/MCAssembler.h
index 14c7ead4c8663..a834f09da1dd0 100644
--- a/llvm/include/llvm/MC/MCAssembler.h
+++ b/llvm/include/llvm/MC/MCAssembler.h
@@ -236,24 +236,10 @@ class MCAssembler {
return make_pointee_range(Symbols);
}
- /// @}
- /// \name Linker Option List Access
- /// @{
-
std::vector<std::vector<std::string>> &getLinkerOptions() {
return LinkerOptions;
}
- struct CGProfileEntry {
- const MCSymbolRefExpr *From;
- const MCSymbolRefExpr *To;
- uint64_t Count;
- };
- std::vector<CGProfileEntry> CGProfile;
- /// @}
- /// \name Backend Data Access
- /// @{
-
bool registerSection(MCSection &Section);
bool registerSymbol(const MCSymbol &Symbol);
@@ -262,8 +248,6 @@ class MCAssembler {
void writeFragmentPadding(raw_ostream &OS, const MCEncodedFragment &F,
uint64_t FSize) const;
- /// @}
-
void dump() const;
};
diff --git a/llvm/include/llvm/MC/MCObjectWriter.h b/llvm/include/llvm/MC/MCObjectWriter.h
index 81bd0f385ad47..c94251ce6baa4 100644
--- a/llvm/include/llvm/MC/MCObjectWriter.h
+++ b/llvm/include/llvm/MC/MCObjectWriter.h
@@ -39,6 +39,13 @@ class MCObjectWriter {
std::vector<const MCSymbol *> AddrsigSyms;
bool EmitAddrsigSection = false;
+ struct CGProfileEntry {
+ const MCSymbolRefExpr *From;
+ const MCSymbolRefExpr *To;
+ uint64_t Count;
+ };
+ SmallVector<CGProfileEntry, 0> CGProfile;
+
MCObjectWriter() = default;
public:
@@ -105,6 +112,7 @@ class MCObjectWriter {
void addAddrsigSymbol(const MCSymbol *Sym) { AddrsigSyms.push_back(Sym); }
std::vector<const MCSymbol *> &getAddrsigSyms() { return AddrsigSyms; }
+ SmallVector<CGProfileEntry, 0> &getCGProfile() { return CGProfile; }
/// Write the object file and returns the number of bytes written.
///
diff --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp
index e37306eeb90f6..602acd924fc9d 100644
--- a/llvm/lib/MC/MCELFStreamer.cpp
+++ b/llvm/lib/MC/MCELFStreamer.cpp
@@ -347,7 +347,7 @@ void MCELFStreamer::emitValueToAlignment(Align Alignment, int64_t Value,
void MCELFStreamer::emitCGProfileEntry(const MCSymbolRefExpr *From,
const MCSymbolRefExpr *To,
uint64_t Count) {
- getAssembler().CGProfile.push_back({From, To, Count});
+ getWriter().getCGProfile().push_back({From, To, Count});
}
void MCELFStreamer::emitIdent(StringRef IdentString) {
@@ -476,8 +476,8 @@ void MCELFStreamer::finalizeCGProfileEntry(const MCSymbolRefExpr *&SRE,
}
void MCELFStreamer::finalizeCGProfile() {
- MCAssembler &Asm = getAssembler();
- if (Asm.CGProfile.empty())
+ ELFObjectWriter &W = getWriter();
+ if (W.getCGProfile().empty())
return;
MCSection *CGProfile = getAssembler().getContext().getELFSection(
".llvm.call-graph-profile", ELF::SHT_LLVM_CALL_GRAPH_PROFILE,
@@ -485,7 +485,7 @@ void MCELFStreamer::finalizeCGProfile() {
pushSection();
switchSection(CGProfile);
uint64_t Offset = 0;
- for (MCAssembler::CGProfileEntry &E : Asm.CGProfile) {
+ for (auto &E : W.getCGProfile()) {
finalizeCGProfileEntry(E.From, Offset);
finalizeCGProfileEntry(E.To, Offset);
emitIntValue(E.Count, sizeof(uint64_t));
diff --git a/llvm/lib/MC/MCMachOStreamer.cpp b/llvm/lib/MC/MCMachOStreamer.cpp
index 1d5d1c6ee72f1..63c54e62bea77 100644
--- a/llvm/lib/MC/MCMachOStreamer.cpp
+++ b/llvm/lib/MC/MCMachOStreamer.cpp
@@ -123,7 +123,7 @@ class MCMachOStreamer : public MCObjectStreamer {
void emitCGProfileEntry(const MCSymbolRefExpr *From,
const MCSymbolRefExpr *To, uint64_t Count) override {
if (!From->getSymbol().isTemporary() && !To->getSymbol().isTemporary())
- getAssembler().CGProfile.push_back({From, To, Count});
+ getWriter().getCGProfile().push_back({From, To, Count});
}
void finishImpl() override;
@@ -506,9 +506,10 @@ void MCMachOStreamer::finalizeCGProfileEntry(const MCSymbolRefExpr *&SRE) {
void MCMachOStreamer::finalizeCGProfile() {
MCAssembler &Asm = getAssembler();
- if (Asm.CGProfile.empty())
+ MCObjectWriter &W = getWriter();
+ if (W.getCGProfile().empty())
return;
- for (MCAssembler::CGProfileEntry &E : Asm.CGProfile) {
+ for (auto &E : W.getCGProfile()) {
finalizeCGProfileEntry(E.From);
finalizeCGProfileEntry(E.To);
}
@@ -520,7 +521,7 @@ void MCMachOStreamer::finalizeCGProfile() {
changeSection(CGProfileSection);
// For each entry, reserve space for 2 32-bit indices and a 64-bit count.
size_t SectionBytes =
- Asm.CGProfile.size() * (2 * sizeof(uint32_t) + sizeof(uint64_t));
+ W.getCGProfile().size() * (2 * sizeof(uint32_t) + sizeof(uint64_t));
cast<MCDataFragment>(*CGProfileSection->begin())
.getContents()
.resize(SectionBytes);
diff --git a/llvm/lib/MC/MCObjectWriter.cpp b/llvm/lib/MC/MCObjectWriter.cpp
index bc523b48d3a0f..9194d721823c9 100644
--- a/llvm/lib/MC/MCObjectWriter.cpp
+++ b/llvm/lib/MC/MCObjectWriter.cpp
@@ -19,7 +19,11 @@ using namespace llvm;
MCObjectWriter::~MCObjectWriter() = default;
-void MCObjectWriter::reset() { FileNames.clear(); }
+void MCObjectWriter::reset() {
+ FileNames.clear();
+ AddrsigSyms.clear();
+ CGProfile.clear();
+}
bool MCObjectWriter::isSymbolRefDifferenceFullyResolved(
const MCAssembler &Asm, const MCSymbolRefExpr *A, const MCSymbolRefExpr *B,
diff --git a/llvm/lib/MC/MCWinCOFFStreamer.cpp b/llvm/lib/MC/MCWinCOFFStreamer.cpp
index 47360a1d26258..92329e079f93a 100644
--- a/llvm/lib/MC/MCWinCOFFStreamer.cpp
+++ b/llvm/lib/MC/MCWinCOFFStreamer.cpp
@@ -360,7 +360,7 @@ void MCWinCOFFStreamer::emitCGProfileEntry(const MCSymbolRefExpr *From,
uint64_t Count) {
// Ignore temporary symbols for now.
if (!From->getSymbol().isTemporary() && !To->getSymbol().isTemporary())
- getAssembler().CGProfile.push_back({From, To, Count});
+ getWriter().getCGProfile().push_back({From, To, Count});
}
void MCWinCOFFStreamer::finalizeCGProfileEntry(const MCSymbolRefExpr *&SRE) {
@@ -376,8 +376,8 @@ void MCWinCOFFStreamer::finishImpl() {
switchSection(Asm.getContext().getCOFFSection(".llvm_addrsig",
COFF::IMAGE_SCN_LNK_REMOVE));
}
- if (!Asm.CGProfile.empty()) {
- for (MCAssembler::CGProfileEntry &E : Asm.CGProfile) {
+ if (!Asm.getWriter().getCGProfile().empty()) {
+ for (auto &E : Asm.getWriter().getCGProfile()) {
finalizeCGProfileEntry(E.From);
finalizeCGProfileEntry(E.To);
}
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index cc29c1ae6ccd6..c8ef373f57aec 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -791,13 +791,13 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
computeSymbolTable(Asm, LocalSymbolData, ExternalSymbolData,
UndefinedSymbolData);
- if (!Asm.CGProfile.empty()) {
+ if (!CGProfile.empty()) {
MCSection *CGProfileSection = Asm.getContext().getMachOSection(
"__LLVM", "__cg_profile", 0, SectionKind::getMetadata());
auto &Frag = cast<MCDataFragment>(*CGProfileSection->begin());
Frag.getContents().clear();
raw_svector_ostream OS(Frag.getContents());
- for (const MCAssembler::CGProfileEntry &CGPE : Asm.CGProfile) {
+ for (const MCObjectWriter::CGProfileEntry &CGPE : CGProfile) {
uint32_t FromIndex = CGPE.From->getSymbol().getIndex();
uint32_t ToIndex = CGPE.To->getSymbol().getIndex();
support::endian::write(OS, FromIndex, W.Endian);
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp
index 81f06190b2169..62f53423126ea 100644
--- a/llvm/lib/MC/WinCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp
@@ -1084,12 +1084,12 @@ uint64_t WinCOFFWriter::writeObject(MCAssembler &Asm) {
}
// Create the contents of the .llvm.call-graph-profile section.
- if (Mode != DwoOnly && !Asm.CGProfile.empty()) {
+ if (Mode != DwoOnly && !OWriter.getCGProfile().empty()) {
auto *Sec = Asm.getContext().getCOFFSection(
".llvm.call-graph-profile", COFF::IMAGE_SCN_LNK_REMOVE);
auto *Frag = cast<MCDataFragment>(Sec->curFragList()->Head);
raw_svector_ostream OS(Frag->getContents());
- for (const MCAssembler::CGProfileEntry &CGPE : Asm.CGProfile) {
+ for (const auto &CGPE : OWriter.getCGProfile()) {
uint32_t FromIndex = CGPE.From->getSymbol().getIndex();
uint32_t ToIndex = CGPE.To->getSymbol().getIndex();
support::endian::write(OS, FromIndex, W.Endian);
More information about the llvm-commits
mailing list