[llvm] MC: Store fragment content and fixups out-of-line (PR #146307)
Alexis Engelke via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 29 22:46:04 PDT 2025
================
@@ -28,57 +28,90 @@ MCFragment::MCFragment(FragmentType Kind, bool HasInstructions)
: Kind(Kind), HasInstructions(HasInstructions), AlignToBundleEnd(false),
LinkerRelaxable(false), AllowAutoPadding(false) {}
-void MCFragment::destroy() {
- switch (Kind) {
- case FT_Align:
- cast<MCAlignFragment>(this)->~MCAlignFragment();
- return;
- case FT_Data:
- cast<MCDataFragment>(this)->~MCDataFragment();
- return;
- case FT_Fill:
- cast<MCFillFragment>(this)->~MCFillFragment();
- return;
- case FT_Nops:
- cast<MCNopsFragment>(this)->~MCNopsFragment();
- return;
- case FT_Relaxable:
- cast<MCRelaxableFragment>(this)->~MCRelaxableFragment();
- return;
- case FT_Org:
- cast<MCOrgFragment>(this)->~MCOrgFragment();
- return;
- case FT_Dwarf:
- cast<MCDwarfLineAddrFragment>(this)->~MCDwarfLineAddrFragment();
- return;
- case FT_DwarfFrame:
- cast<MCDwarfCallFrameFragment>(this)->~MCDwarfCallFrameFragment();
- return;
- case FT_LEB:
- cast<MCLEBFragment>(this)->~MCLEBFragment();
- return;
- case FT_BoundaryAlign:
- cast<MCBoundaryAlignFragment>(this)->~MCBoundaryAlignFragment();
- return;
- case FT_SymbolId:
- cast<MCSymbolIdFragment>(this)->~MCSymbolIdFragment();
- return;
- case FT_CVInlineLines:
- cast<MCCVInlineLineTableFragment>(this)->~MCCVInlineLineTableFragment();
- return;
- case FT_CVDefRange:
- cast<MCCVDefRangeFragment>(this)->~MCCVDefRangeFragment();
- return;
- case FT_PseudoProbe:
- cast<MCPseudoProbeAddrFragment>(this)->~MCPseudoProbeAddrFragment();
- return;
+const MCSymbol *MCFragment::getAtom() const {
+ return cast<MCSectionMachO>(Parent)->getAtom(LayoutOrder);
+}
+
+SmallVectorImpl<char> &MCEncodedFragment::getContentsForAppending() {
----------------
aengelke wrote:
Maybe put an inline implementation of the hot path in MCSection.h? (Single check ContentStart + ContentSize != S.size() should suffice.) Same for doneAppending, I expect these are the most performance-critical functions.
https://github.com/llvm/llvm-project/pull/146307
More information about the llvm-commits
mailing list