diff options
author | Fangrui Song <i@maskray.me> | 2025-07-20 00:55:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-20 00:55:54 -0700 |
commit | fd6d6a7c8d4e2fb196bd3707dc4022a236089d9a (patch) | |
tree | 7494de66280613183934bcea08012c58c9207508 /llvm/lib/MC/MCExpr.cpp | |
parent | 2ba5e0ad1789f33c71af15d7c09cc5ca874cf7b1 (diff) | |
download | llvm-fd6d6a7c8d4e2fb196bd3707dc4022a236089d9a.zip llvm-fd6d6a7c8d4e2fb196bd3707dc4022a236089d9a.tar.gz llvm-fd6d6a7c8d4e2fb196bd3707dc4022a236089d9a.tar.bz2 |
MC: Refactor FT_Align fragments when linker relaxation is enabled
Previously, two MCAsmBackend hooks were used, with
shouldInsertFixupForCodeAlign calling getWriter().recordRelocation
directly, bypassing generic code.
This patch:
* Introduces MCAsmBackend::relaxAlign to replace the two hooks.
* Tracks padding size using VarContentEnd (content is ignored).
* Move setLinkerRelaxable from MCObjectStreamer::emitCodeAlignment to the backends.
Pull Request: https://github.com/llvm/llvm-project/pull/149465
Diffstat (limited to 'llvm/lib/MC/MCExpr.cpp')
-rw-r--r-- | llvm/lib/MC/MCExpr.cpp | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/llvm/lib/MC/MCExpr.cpp b/llvm/lib/MC/MCExpr.cpp index f0f1bd4..dbb2fd1 100644 --- a/llvm/lib/MC/MCExpr.cpp +++ b/llvm/lib/MC/MCExpr.cpp @@ -370,7 +370,6 @@ static void attemptToFoldSymbolOffsetDifference(const MCAssembler *Asm, } int64_t Num; - unsigned Count; if (DF) { Displacement += DF->getContents().size(); } else if (F->getKind() == MCFragment::FT_Relaxable && @@ -380,9 +379,7 @@ static void attemptToFoldSymbolOffsetDifference(const MCAssembler *Asm, // data fragment. Displacement += F->getSize(); } else if (F->getKind() == MCFragment::FT_Align && Layout && - F->hasAlignEmitNops() && - !Asm->getBackend().shouldInsertExtraNopBytesForCodeAlign( - *F, Count)) { + F->isLinkerRelaxable()) { Displacement += Asm->computeFragmentSize(*F); } else if (auto *FF = dyn_cast<MCFillFragment>(F); FF && FF->getNumValues().evaluateAsAbsolute(Num)) { |