[llvm] [X86] Reimplement bundle alignment mode (PR #175830)
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 14 19:38:26 PDT 2026
================
@@ -463,9 +471,55 @@ void X86_MC::emitInstruction(MCObjectStreamer &S, const MCInst &Inst,
Backend.emitInstructionEnd(S, Inst);
}
+/// If the upcoming instruction is inside the bundle lock, do nothing so that
+/// the ObjectStreamer emits the instruction to the current fragment. If not, it
+/// creates a new BA to group bundled fragments.
+void X86AsmBackend::emitInstructionBeginBundle(MCObjectStreamer &OS) {
+ assert(Asm->isBundlingEnabled());
+
+ if (OS.getCurrentSectionOnly()->isBundleLocked()) {
+ OS.getCurrentFragment()->setAllowAutoPadding(true);
+ return;
+ }
+ PendingBA = OS.newSpecialFragment<MCBoundaryAlignFragment>(
+ Align(Asm->getBundleAlignSize()), STI);
+ // We can set LastFragment now, before the instruction is emitted, as bundling
+ // emits one fragment per instruction. Deferring setLastFragment to
+ // post-emitInstruction would risk capturing a fragment that a subsequent
+ // emitCodeAlignment repurposes in-place to FT_Align, corrupting the BA's
+ // boundary range.
+ PendingBA->setLastFragment(OS.getCurrentFragment());
+
+ OS.getCurrentFragment()->setAllowAutoPadding(true);
+}
+
+/// If the just-emitted instruction is inside the bundle lock, check the current
+/// fragment is non-zero to ensure the instruction is placed as expected. If it
+/// is not locked, finalize pending BA Fragment. emitBundleUnlock will close the
+/// fragment and start a new empty fragment.
+void X86AsmBackend::emitInstructionEndBundle(MCObjectStreamer &OS) {
+ assert(Asm->isBundlingEnabled());
+
----------------
MaskRay wrote:
excessive blank lines in this function.
Drop braces in the `if` below. Move the comment before `if`.
https://github.com/llvm/llvm-project/pull/175830
More information about the llvm-commits
mailing list