[llvm] MC: Restructure MCFragment as a fixed part and a variable tail (PR #148544)
Alexis Engelke via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 13 12:23:18 PDT 2025
================
@@ -265,55 +263,55 @@ class MCFragment {
/// MCRelaxableFragment: x86-specific
bool AllowAutoPadding : 1;
- LLVM_ABI MCFragment(FragmentType Kind, bool HasInstructions);
-
-public:
- MCFragment() = delete;
- MCFragment(const MCFragment &) = delete;
- MCFragment &operator=(const MCFragment &) = delete;
-
- MCFragment *getNext() const { return Next; }
-
- FragmentType getKind() const { return Kind; }
-
- MCSection *getParent() const { return Parent; }
- void setParent(MCSection *Value) { Parent = Value; }
-
- LLVM_ABI const MCSymbol *getAtom() const;
-
- unsigned getLayoutOrder() const { return LayoutOrder; }
- void setLayoutOrder(unsigned Value) { LayoutOrder = Value; }
-
- /// Does this fragment have instructions emitted into it? By default
- /// this is false, but specific fragment types may set it to true.
- bool hasInstructions() const { return HasInstructions; }
-
- bool isLinkerRelaxable() const { return LinkerRelaxable; }
- void setLinkerRelaxable() { LinkerRelaxable = true; }
-
- LLVM_ABI void dump() const;
-};
-
-/// Interface implemented by fragments that contain encoded instructions and/or
-/// data.
-class MCEncodedFragment : public MCFragment {
uint8_t BundlePadding = 0;
+
uint32_t ContentStart = 0;
uint32_t ContentEnd = 0;
uint32_t FixupStart = 0;
uint32_t FixupEnd = 0;
-protected:
- MCEncodedFragment(MCFragment::FragmentType FType, bool HasInstructions)
- : MCFragment(FType, HasInstructions) {}
+ uint32_t VarContentStart = 0;
+ uint32_t VarContentEnd = 0;
+ uint32_t VarFixupStart = 0;
+ uint32_t VarFixupEnd = 0;
----------------
aengelke wrote:
Not sure I like this design, this seems to complicate things. Why not a single, contiguous region for all fixups and store just VarContentStart and VarFixupStart? This would avoid hacks like in MCAssembler::layout.
https://github.com/llvm/llvm-project/pull/148544
More information about the llvm-commits
mailing list