[Mlir-commits] [clang] [llvm] [mlir] [MC] Drop MCTargetOptions parameter from MCTargetAsmParser (PR #194120)

Fangrui Song llvmlistbot at llvm.org
Sat Apr 25 17:03:41 PDT 2026


https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/194120

>From a4eb032d9275b37aa34a2d189292296b1524dadd Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Fri, 24 Apr 2026 23:22:20 -0700
Subject: [PATCH 1/3] [MC] Drop MCTargetOptions parameter from
 MCTargetAsmParser. NFC

Since #180464, MCAsmInfo holds the canonical MCTargetOptions.
The MCTargetAsmParser::MCOptions member was a redundant by-value copy,
which may be inconsistent.

Remove the field in favor of getParser().getContext().getTargetOptions,
and remove the MCTargetOptions parameter from the base ctor, all
subclass ctors, Target::createMCAsmParser, MCAsmParserCtorTy, and
RegisterMCAsmParser.
---
 .../include/llvm/MC/MCParser/MCTargetAsmParser.h | 13 +++++++------
 llvm/include/llvm/MC/TargetRegistry.h            | 16 +++++++---------
 .../CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp   |  4 ++--
 llvm/lib/MC/MCParser/MCTargetAsmParser.cpp       |  5 ++---
 llvm/lib/Object/ModuleSymbolTable.cpp            |  2 +-
 .../AArch64/AsmParser/AArch64AsmParser.cpp       |  4 ++--
 .../Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp  |  4 ++--
 llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp   |  4 ++--
 llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp   |  4 ++--
 llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp   |  4 ++--
 llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp |  4 ++--
 .../Hexagon/AsmParser/HexagonAsmParser.cpp       |  5 ++---
 .../Target/Lanai/AsmParser/LanaiAsmParser.cpp    |  6 +++---
 .../LoongArch/AsmParser/LoongArchAsmParser.cpp   |  4 ++--
 llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp |  4 ++--
 .../Target/MSP430/AsmParser/MSP430AsmParser.cpp  |  4 ++--
 llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp |  9 +++++----
 .../Target/PowerPC/AsmParser/PPCAsmParser.cpp    |  5 ++---
 .../Target/RISCV/AsmParser/RISCVAsmParser.cpp    |  6 +++---
 .../Target/Sparc/AsmParser/SparcAsmParser.cpp    |  4 ++--
 .../SystemZ/AsmParser/SystemZAsmParser.cpp       |  4 ++--
 llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp     |  4 ++--
 .../AsmParser/WebAssemblyAsmParser.cpp           |  8 ++++----
 llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp   |  7 +++----
 .../Target/Xtensa/AsmParser/XtensaAsmParser.cpp  |  4 ++--
 llvm/tools/llvm-exegesis/lib/SnippetFile.cpp     |  3 +--
 .../llvm-mc-assemble-fuzzer.cpp                  |  2 +-
 llvm/tools/llvm-mc/llvm-mc.cpp                   |  2 +-
 llvm/tools/llvm-mca/CodeRegionGenerator.cpp      |  2 +-
 llvm/tools/llvm-ml/llvm-ml.cpp                   |  2 +-
 .../unittests/MC/SystemZ/SystemZAsmLexerTest.cpp |  3 +--
 31 files changed, 73 insertions(+), 79 deletions(-)

diff --git a/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h b/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
index 7628987b9587d..7dbca79e2880d 100644
--- a/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
+++ b/llvm/include/llvm/MC/MCParser/MCTargetAsmParser.h
@@ -345,8 +345,7 @@ class LLVM_ABI MCTargetAsmParser : public MCAsmParserExtension {
   };
 
 protected: // Can only create subclasses.
-  MCTargetAsmParser(MCTargetOptions const &, const MCSubtargetInfo &STI,
-                    const MCInstrInfo &MII);
+  MCTargetAsmParser(const MCSubtargetInfo &STI, const MCInstrInfo &MII);
 
   /// Create a copy of STI and return a non-const reference to it.
   MCSubtargetInfo &copySTI();
@@ -361,9 +360,6 @@ class LLVM_ABI MCTargetAsmParser : public MCAsmParserExtension {
   /// ms-style inline assembly.
   MCAsmParserSemaCallback *SemaCallback = nullptr;
 
-  /// Set of options which affects instrumentation of inline assembly.
-  MCTargetOptions MCOptions;
-
   /// Current STI.
   const MCSubtargetInfo *STI;
 
@@ -387,7 +383,12 @@ class LLVM_ABI MCTargetAsmParser : public MCAsmParserExtension {
   bool isParsingMSInlineAsm () { return ParsingMSInlineAsm; }
   void setParsingMSInlineAsm (bool Value) { ParsingMSInlineAsm = Value; }
 
-  MCTargetOptions getTargetOptions() const { return MCOptions; }
+  const MCTargetOptions &getTargetOptions() const {
+    return const_cast<MCTargetAsmParser *>(this)
+        ->getParser()
+        .getContext()
+        .getTargetOptions();
+  }
 
   void setSemaCallback(MCAsmParserSemaCallback *Callback) {
     SemaCallback = Callback;
diff --git a/llvm/include/llvm/MC/TargetRegistry.h b/llvm/include/llvm/MC/TargetRegistry.h
index 6b45274f9dc95..86ad5ad3ae710 100644
--- a/llvm/include/llvm/MC/TargetRegistry.h
+++ b/llvm/include/llvm/MC/TargetRegistry.h
@@ -176,9 +176,9 @@ class Target {
                                                const MCSubtargetInfo &STI,
                                                const MCRegisterInfo &MRI,
                                                const MCTargetOptions &Options);
-  using MCAsmParserCtorTy = MCTargetAsmParser *(*)(
-      const MCSubtargetInfo &STI, MCAsmParser &P, const MCInstrInfo &MII,
-      const MCTargetOptions &Options);
+  using MCAsmParserCtorTy = MCTargetAsmParser *(*)(const MCSubtargetInfo &STI,
+                                                   MCAsmParser &P,
+                                                   const MCInstrInfo &MII);
   using MCDisassemblerCtorTy = MCDisassembler *(*)(const Target &T,
                                                    const MCSubtargetInfo &STI,
                                                    MCContext &Ctx);
@@ -504,11 +504,10 @@ class Target {
   /// parsing and lexing.
   MCTargetAsmParser *createMCAsmParser(const MCSubtargetInfo &STI,
                                        MCAsmParser &Parser,
-                                       const MCInstrInfo &MII,
-                                       const MCTargetOptions &Options) const {
+                                       const MCInstrInfo &MII) const {
     if (!MCAsmParserCtorFn)
       return nullptr;
-    return MCAsmParserCtorFn(STI, Parser, MII, Options);
+    return MCAsmParserCtorFn(STI, Parser, MII);
   }
 
   /// createAsmPrinter - Create a target specific assembly printer pass.  This
@@ -1349,9 +1348,8 @@ template <class MCAsmParserImpl> struct RegisterMCAsmParser {
 
 private:
   static MCTargetAsmParser *Allocator(const MCSubtargetInfo &STI,
-                                      MCAsmParser &P, const MCInstrInfo &MII,
-                                      const MCTargetOptions &Options) {
-    return new MCAsmParserImpl(STI, P, MII, Options);
+                                      MCAsmParser &P, const MCInstrInfo &MII) {
+    return new MCAsmParserImpl(STI, P, MII);
   }
 };
 
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
index b649c41f56208..10ae995c7fdaa 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterInlineAsm.cpp
@@ -116,8 +116,8 @@ void AsmPrinter::emitInlineAsm(StringRef Str, const MCSubtargetInfo &STI,
   // because it's not subtarget dependent.
   std::unique_ptr<MCInstrInfo> MII(TM.getTarget().createMCInstrInfo());
   assert(MII && "Failed to create instruction info");
-  std::unique_ptr<MCTargetAsmParser> TAP(TM.getTarget().createMCAsmParser(
-      STI, *Parser, *MII, MCOptions));
+  std::unique_ptr<MCTargetAsmParser> TAP(
+      TM.getTarget().createMCAsmParser(STI, *Parser, *MII));
   if (!TAP)
     report_fatal_error("Inline asm not supported by this streamer because"
                        " we don't have an asm parser for this target\n");
diff --git a/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp b/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp
index d7b0546d70558..d9da7fdeb5f75 100644
--- a/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp
+++ b/llvm/lib/MC/MCParser/MCTargetAsmParser.cpp
@@ -13,10 +13,9 @@
 
 using namespace llvm;
 
-MCTargetAsmParser::MCTargetAsmParser(MCTargetOptions const &MCOptions,
-                                     const MCSubtargetInfo &STI,
+MCTargetAsmParser::MCTargetAsmParser(const MCSubtargetInfo &STI,
                                      const MCInstrInfo &MII)
-    : MCOptions(MCOptions), STI(&STI), MII(MII) {}
+    : STI(&STI), MII(MII) {}
 
 MCTargetAsmParser::~MCTargetAsmParser() = default;
 
diff --git a/llvm/lib/Object/ModuleSymbolTable.cpp b/llvm/lib/Object/ModuleSymbolTable.cpp
index ff0bc8b192de7..5e55f6d0a5acb 100644
--- a/llvm/lib/Object/ModuleSymbolTable.cpp
+++ b/llvm/lib/Object/ModuleSymbolTable.cpp
@@ -114,7 +114,7 @@ initializeRecordStreamer(const Module &M,
       createMCAsmParser(SrcMgr, MCCtx, Streamer, *MAI));
 
   std::unique_ptr<MCTargetAsmParser> TAP(
-      T->createMCAsmParser(*STI, *Parser, *MCII, MCOptions));
+      T->createMCAsmParser(*STI, *Parser, *MCII));
   if (!TAP)
     return;
 
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 28417db66709b..7a9a6224442d7 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -311,8 +311,8 @@ class AArch64AsmParser : public MCTargetAsmParser {
   bool IsWindowsArm64EC;
 
   AArch64AsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                   const MCInstrInfo &MII, const MCTargetOptions &Options)
-    : MCTargetAsmParser(Options, STI, MII) {
+                   const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII) {
     IsILP32 = STI.getTargetTriple().getEnvironment() == Triple::GNUILP32;
     IsWindowsArm64EC = STI.getTargetTriple().isWindowsArm64EC();
     MCAsmParserExtension::Initialize(Parser);
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 2e300733b5c99..103372d6e4c5c 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -1468,8 +1468,8 @@ class AMDGPUAsmParser : public MCTargetAsmParser {
   using OptionalImmIndexMap = std::map<AMDGPUOperand::ImmTy, unsigned>;
 
   AMDGPUAsmParser(const MCSubtargetInfo &STI, MCAsmParser &_Parser,
-                  const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(_Parser),
+                  const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(_Parser),
         HwMode(STI.getHwMode(MCSubtargetInfo::HwMode_RegInfo)) {
     MCAsmParserExtension::Initialize(Parser);
 
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index c7dd09120b8a0..a8fefa1803a5e 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -689,8 +689,8 @@ class ARMAsmParser : public MCTargetAsmParser {
   };
 
   ARMAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-               const MCInstrInfo &MII, const MCTargetOptions &Options)
-    : MCTargetAsmParser(Options, STI, MII), UC(Parser), MS(STI) {
+               const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), UC(Parser), MS(STI) {
     MCAsmParserExtension::Initialize(Parser);
 
     // Cache the MCRegisterInfo.
diff --git a/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp b/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
index 48452f6d9391c..4d961573a7f92 100644
--- a/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
+++ b/llvm/lib/Target/AVR/AsmParser/AVRAsmParser.cpp
@@ -91,8 +91,8 @@ class AVRAsmParser : public MCTargetAsmParser {
 
 public:
   AVRAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-               const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(Parser) {
+               const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(Parser) {
     MCAsmParserExtension::Initialize(Parser);
     MRI = getContext().getRegisterInfo();
 
diff --git a/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp b/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
index 9f86322a81b3e..8f7a147dc02e2 100644
--- a/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
+++ b/llvm/lib/Target/BPF/AsmParser/BPFAsmParser.cpp
@@ -71,8 +71,8 @@ class BPFAsmParser : public MCTargetAsmParser {
   };
 
   BPFAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-               const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII) {
+               const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII) {
     setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
   }
 };
diff --git a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
index 5f7e1497a1ebf..1feb24999b504 100644
--- a/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
+++ b/llvm/lib/Target/CSKY/AsmParser/CSKYAsmParser.cpp
@@ -128,8 +128,8 @@ class CSKYAsmParser : public MCTargetAsmParser {
   };
 
   CSKYAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII) {
+                const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII) {
 
     MCAsmParserExtension::Initialize(Parser);
 
diff --git a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
index c18db982bfd97..f14ecdfb820cd 100644
--- a/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
+++ b/llvm/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
@@ -159,9 +159,8 @@ class HexagonAsmParser : public MCTargetAsmParser {
 
 public:
   HexagonAsmParser(const MCSubtargetInfo &_STI, MCAsmParser &_Parser,
-                   const MCInstrInfo &MII, const MCTargetOptions &Options)
-    : MCTargetAsmParser(Options, _STI, MII), Parser(_Parser),
-      InBrackets(false) {
+                   const MCInstrInfo &MII)
+      : MCTargetAsmParser(_STI, MII), Parser(_Parser), InBrackets(false) {
     MCB.setOpcode(Hexagon::BUNDLE);
     setAvailableFeatures(ComputeAvailableFeatures(getSTI().getFeatureBits()));
 
diff --git a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
index 0444c865f6866..6621bdce4cbce 100644
--- a/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
+++ b/llvm/lib/Target/Lanai/AsmParser/LanaiAsmParser.cpp
@@ -83,9 +83,9 @@ class LanaiAsmParser : public MCTargetAsmParser {
 
 public:
   LanaiAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                 const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(Parser),
-        Lexer(Parser.getLexer()), SubtargetInfo(STI) {
+                 const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(Parser), Lexer(Parser.getLexer()),
+        SubtargetInfo(STI) {
     setAvailableFeatures(
         ComputeAvailableFeatures(SubtargetInfo.getFeatureBits()));
   }
diff --git a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
index c8c3a2bc9ce6d..1f608fa85b7b4 100644
--- a/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+++ b/llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
@@ -193,8 +193,8 @@ class LoongArchAsmParser : public MCTargetAsmParser {
                                 LoongArchMCExpr::Specifier &Kind);
 
   LoongArchAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                     const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII) {
+                     const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII) {
     Parser.addAliasForDirective(".half", ".2byte");
     Parser.addAliasForDirective(".hword", ".2byte");
     Parser.addAliasForDirective(".word", ".4byte");
diff --git a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
index fb5cd5c29d7dc..eefcee8bcc98d 100644
--- a/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
+++ b/llvm/lib/Target/M68k/AsmParser/M68kAsmParser.cpp
@@ -56,8 +56,8 @@ class M68kAsmParser : public MCTargetAsmParser {
 
 public:
   M68kAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(Parser) {
+                const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(Parser) {
     MCAsmParserExtension::Initialize(Parser);
     MRI = getContext().getRegisterInfo();
 
diff --git a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
index a8891d686abe8..160edc30eeacc 100644
--- a/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
+++ b/llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
@@ -77,8 +77,8 @@ class MSP430AsmParser : public MCTargetAsmParser {
 
 public:
   MSP430AsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                  const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(Parser) {
+                  const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(Parser) {
     MCAsmParserExtension::Initialize(Parser);
     MRI = getContext().getRegisterInfo();
 
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index 092efb8d78b33..928bd03b57c60 100644
--- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -523,10 +523,11 @@ class MipsAsmParser : public MCTargetAsmParser {
   };
 
   MipsAsmParser(const MCSubtargetInfo &sti, MCAsmParser &parser,
-                const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, sti, MII),
-        ABI(MipsABIInfo::computeTargetABI(sti.getTargetTriple(),
-                                          Options.getABIName())) {
+                const MCInstrInfo &MII)
+      : MCTargetAsmParser(sti, MII),
+        ABI(MipsABIInfo::computeTargetABI(
+            sti.getTargetTriple(),
+            parser.getContext().getTargetOptions().getABIName())) {
     MCAsmParserExtension::Initialize(parser);
 
     parser.addAliasForDirective(".asciiz", ".asciz");
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index 3c2fb0bf73ecd..258239083d3dc 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -144,9 +144,8 @@ class PPCAsmParser : public MCTargetAsmParser {
 
 public:
   PPCAsmParser(const MCSubtargetInfo &STI, MCAsmParser &,
-               const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII),
-        IsPPC64(STI.getTargetTriple().isPPC64()) {
+               const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), IsPPC64(STI.getTargetTriple().isPPC64()) {
     // Initialize the set of available features.
     setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
   }
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index a199b0ab646b1..cbf3d0f518ac8 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -301,8 +301,8 @@ class RISCVAsmParser : public MCTargetAsmParser {
   static bool isSymbolDiff(const MCExpr *Expr);
 
   RISCVAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                 const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII) {
+                 const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII) {
     MCAsmParserExtension::Initialize(Parser);
 
     Parser.addAliasForDirective(".half", ".2byte");
@@ -311,7 +311,7 @@ class RISCVAsmParser : public MCTargetAsmParser {
     Parser.addAliasForDirective(".dword", ".8byte");
     setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
 
-    auto ABIName = StringRef(Options.ABIName);
+    auto ABIName = StringRef(getTargetOptions().ABIName);
     if (ABIName.ends_with("f") && !getSTI().hasFeature(RISCV::FeatureStdExtF)) {
       errs() << "Hard-float 'f' ABI can't be used for a target that "
                 "doesn't support the F instruction set extension (ignoring "
diff --git a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
index 77b3634f4e405..f6b8e0af67150 100644
--- a/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
+++ b/llvm/lib/Target/Sparc/AsmParser/SparcAsmParser.cpp
@@ -141,8 +141,8 @@ class SparcAsmParser : public MCTargetAsmParser {
 
 public:
   SparcAsmParser(const MCSubtargetInfo &sti, MCAsmParser &parser,
-                 const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, sti, MII), Parser(parser),
+                 const MCInstrInfo &MII)
+      : MCTargetAsmParser(sti, MII), Parser(parser),
         MRI(*Parser.getContext().getRegisterInfo()) {
     Parser.addAliasForDirective(".half", ".2byte");
     Parser.addAliasForDirective(".uahalf", ".2byte");
diff --git a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
index 4efb305b2d55a..27ef8ff0b6515 100644
--- a/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
+++ b/llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
@@ -501,8 +501,8 @@ class SystemZAsmParser : public MCTargetAsmParser {
 
 public:
   SystemZAsmParser(const MCSubtargetInfo &sti, MCAsmParser &parser,
-                   const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, sti, MII), Parser(parser) {
+                   const MCInstrInfo &MII)
+      : MCTargetAsmParser(sti, MII), Parser(parser) {
     MCAsmParserExtension::Initialize(Parser);
 
     // Alias the .word directive to .short.
diff --git a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
index eceddd66e39d5..cc58efcd7b005 100644
--- a/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
+++ b/llvm/lib/Target/VE/AsmParser/VEAsmParser.cpp
@@ -85,8 +85,8 @@ class VEAsmParser : public MCTargetAsmParser {
 
 public:
   VEAsmParser(const MCSubtargetInfo &sti, MCAsmParser &parser,
-              const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, sti, MII), Parser(parser) {
+              const MCInstrInfo &MII)
+      : MCTargetAsmParser(sti, MII), Parser(parser) {
     // Initialize the set of available features.
     setAvailableFeatures(ComputeAvailableFeatures(getSTI().getFeatureBits()));
   }
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
index 0c2b5a857c076..33e2e1c0d48f6 100644
--- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
+++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp
@@ -273,10 +273,10 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
 
 public:
   WebAssemblyAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                       const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII), Parser(Parser),
-        Lexer(Parser.getLexer()), Is64(STI.getTargetTriple().isArch64Bit()),
-        TC(Parser, MII, Is64), SkipTypeCheck(Options.MCNoTypeCheck) {
+                       const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII), Parser(Parser), Lexer(Parser.getLexer()),
+        Is64(STI.getTargetTriple().isArch64Bit()), TC(Parser, MII, Is64),
+        SkipTypeCheck(Parser.getContext().getTargetOptions().MCNoTypeCheck) {
     FeatureBitset FBS = ComputeAvailableFeatures(STI.getFeatureBits());
 
     // bulk-memory implies bulk-memory-opt
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 9d8b74284a3de..43c591bd9cd87 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1302,9 +1302,8 @@ class X86AsmParser : public MCTargetAsmParser {
   };
 
   X86AsmParser(const MCSubtargetInfo &sti, MCAsmParser &Parser,
-               const MCInstrInfo &mii, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, sti, mii),  InstInfo(nullptr),
-        Code16GCC(false) {
+               const MCInstrInfo &mii)
+      : MCTargetAsmParser(sti, mii), InstInfo(nullptr), Code16GCC(false) {
 
     Parser.addAliasForDirective(".word", ".2byte");
 
@@ -3849,7 +3848,7 @@ static bool convertSSEToAVX(MCInst &Inst) {
 }
 
 bool X86AsmParser::processInstruction(MCInst &Inst, const OperandVector &Ops) {
-  if (MCOptions.X86Sse2Avx && convertSSEToAVX(Inst))
+  if (getTargetOptions().X86Sse2Avx && convertSSEToAVX(Inst))
     return true;
 
   if (ForcedOpcodePrefix != OpcodePrefix_VEX3 &&
diff --git a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
index 4001b2cfa2a6d..dc33295c16f28 100644
--- a/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
+++ b/llvm/lib/Target/Xtensa/AsmParser/XtensaAsmParser.cpp
@@ -92,8 +92,8 @@ class XtensaAsmParser : public MCTargetAsmParser {
   };
 
   XtensaAsmParser(const MCSubtargetInfo &STI, MCAsmParser &Parser,
-                  const MCInstrInfo &MII, const MCTargetOptions &Options)
-      : MCTargetAsmParser(Options, STI, MII),
+                  const MCInstrInfo &MII)
+      : MCTargetAsmParser(STI, MII),
         MRI(*Parser.getContext().getRegisterInfo()) {
     setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits()));
   }
diff --git a/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp b/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
index d67a24b5596cc..2f32b23aea4e1 100644
--- a/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
+++ b/llvm/tools/llvm-exegesis/lib/SnippetFile.cpp
@@ -272,8 +272,7 @@ Expected<std::vector<BenchmarkCode>> readSnippets(const LLVMState &State,
 
   const std::unique_ptr<MCTargetAsmParser> TargetAsmParser(
       TM.getTarget().createMCAsmParser(*TM.getMCSubtargetInfo(), *AsmParser,
-                                       *TM.getMCInstrInfo(),
-                                       MCTargetOptions()));
+                                       *TM.getMCInstrInfo()));
 
   if (!TargetAsmParser)
     return make_error<Failure>("cannot create target asm parser");
diff --git a/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp b/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
index 4781ff81e7446..794e3ce4e7534 100644
--- a/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
+++ b/llvm/tools/llvm-mc-assemble-fuzzer/llvm-mc-assemble-fuzzer.cpp
@@ -115,7 +115,7 @@ static int AssembleInput(const char *ProgName, const Target *TheTarget,
     createMCAsmParser(SrcMgr, Ctx, Str, MAI));
 
   std::unique_ptr<MCTargetAsmParser> TAP(
-    TheTarget->createMCAsmParser(STI, *Parser, MCII, MCOptions));
+      TheTarget->createMCAsmParser(STI, *Parser, MCII));
 
   if (!TAP) {
     errs() << ProgName
diff --git a/llvm/tools/llvm-mc/llvm-mc.cpp b/llvm/tools/llvm-mc/llvm-mc.cpp
index 5080afb2b108a..0ffe8e87672ec 100644
--- a/llvm/tools/llvm-mc/llvm-mc.cpp
+++ b/llvm/tools/llvm-mc/llvm-mc.cpp
@@ -356,7 +356,7 @@ static int AssembleInput(const char *ProgName, const Target *TheTarget,
   std::unique_ptr<MCAsmParser> Parser(
       createMCAsmParser(SrcMgr, Ctx, Str, MAI));
   std::unique_ptr<MCTargetAsmParser> TAP(
-      TheTarget->createMCAsmParser(STI, *Parser, MCII, MCOptions));
+      TheTarget->createMCAsmParser(STI, *Parser, MCII));
 
   if (!TAP) {
     WithColor::error(errs(), ProgName)
diff --git a/llvm/tools/llvm-mca/CodeRegionGenerator.cpp b/llvm/tools/llvm-mca/CodeRegionGenerator.cpp
index 146907189929e..67b90d0ebe6ce 100644
--- a/llvm/tools/llvm-mca/CodeRegionGenerator.cpp
+++ b/llvm/tools/llvm-mca/CodeRegionGenerator.cpp
@@ -54,7 +54,7 @@ Expected<const CodeRegions &> AsmCodeRegionGenerator::parseCodeRegions(
   Lexer.setLexMasmIntegers(true);
 
   std::unique_ptr<MCTargetAsmParser> TAP(
-      TheTarget.createMCAsmParser(STI, *Parser, MCII, Opts));
+      TheTarget.createMCAsmParser(STI, *Parser, MCII));
   if (!TAP)
     return make_error<StringError>(
         "This target does not support assembly parsing.",
diff --git a/llvm/tools/llvm-ml/llvm-ml.cpp b/llvm/tools/llvm-ml/llvm-ml.cpp
index 7b88576e6075c..a75d831d586b8 100644
--- a/llvm/tools/llvm-ml/llvm-ml.cpp
+++ b/llvm/tools/llvm-ml/llvm-ml.cpp
@@ -158,7 +158,7 @@ static int AssembleInput(StringRef ProgName, const Target *TheTarget,
   std::unique_ptr<MCAsmParser> Parser(
       createMCMasmParser(SrcMgr, Ctx, Str, MAI, TM, 0));
   std::unique_ptr<MCTargetAsmParser> TAP(
-      TheTarget->createMCAsmParser(STI, *Parser, MCII, MCOptions));
+      TheTarget->createMCAsmParser(STI, *Parser, MCII));
 
   if (!TAP) {
     WithColor::error(errs(), ProgName)
diff --git a/llvm/unittests/MC/SystemZ/SystemZAsmLexerTest.cpp b/llvm/unittests/MC/SystemZ/SystemZAsmLexerTest.cpp
index 74da8fe77829f..08ed15aef079a 100644
--- a/llvm/unittests/MC/SystemZ/SystemZAsmLexerTest.cpp
+++ b/llvm/unittests/MC/SystemZ/SystemZAsmLexerTest.cpp
@@ -90,8 +90,7 @@ class SystemZAsmLexerTest : public ::testing::Test {
 
     Parser.reset(createMCAsmParser(SrcMgr, *Ctx, *Str, *MAI));
 
-    TargetAsmParser.reset(
-        TheTarget->createMCAsmParser(*STI, *Parser, *MII, MCOptions));
+    TargetAsmParser.reset(TheTarget->createMCAsmParser(*STI, *Parser, *MII));
     Parser->setTargetParser(*TargetAsmParser);
   }
 

>From 57f6d264899a84227be80063aa58a81946197550 Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Sat, 25 Apr 2026 11:46:47 -0700
Subject: [PATCH 2/3] fix clang cc1as_main.cpp

---
 clang/lib/Parse/ParseStmtAsm.cpp  | 2 +-
 clang/tools/driver/cc1as_main.cpp | 3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Parse/ParseStmtAsm.cpp b/clang/lib/Parse/ParseStmtAsm.cpp
index d434ddbae6f58..fd712b3de1e90 100644
--- a/clang/lib/Parse/ParseStmtAsm.cpp
+++ b/clang/lib/Parse/ParseStmtAsm.cpp
@@ -582,7 +582,7 @@ StmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {
       createMCAsmParser(TempSrcMgr, Ctx, *Str, *MAI));
 
   std::unique_ptr<llvm::MCTargetAsmParser> TargetParser(
-      TheTarget->createMCAsmParser(*STI, *Parser, *MII, MCOptions));
+      TheTarget->createMCAsmParser(*STI, *Parser, *MII));
   // Target AsmParser may not be linked in clang-based tools.
   if (!TargetParser) {
     Diag(AsmLoc, diag::err_msasm_unable_to_create_target)
diff --git a/clang/tools/driver/cc1as_main.cpp b/clang/tools/driver/cc1as_main.cpp
index 8d343fcd634df..cacccd028fa06 100644
--- a/clang/tools/driver/cc1as_main.cpp
+++ b/clang/tools/driver/cc1as_main.cpp
@@ -625,9 +625,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
   std::unique_ptr<MCAsmParser> Parser(
       createMCAsmParser(SrcMgr, Ctx, *Str, *MAI));
 
-  // FIXME: init MCTargetOptions from sanitizer flags here.
   std::unique_ptr<MCTargetAsmParser> TAP(
-      TheTarget->createMCAsmParser(*STI, *Parser, *MCII, MCOptions));
+      TheTarget->createMCAsmParser(*STI, *Parser, *MCII));
   if (!TAP)
     Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple.str();
 

>From 07bff584e2794e75158235cdaf7738c98ed381fe Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Sat, 25 Apr 2026 17:03:29 -0700
Subject: [PATCH 3/3] fix ROCDL

---
 mlir/lib/Target/LLVM/ROCDL/Target.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mlir/lib/Target/LLVM/ROCDL/Target.cpp b/mlir/lib/Target/LLVM/ROCDL/Target.cpp
index e3ad7cf8b5b04..25ed2d143e585 100644
--- a/mlir/lib/Target/LLVM/ROCDL/Target.cpp
+++ b/mlir/lib/Target/LLVM/ROCDL/Target.cpp
@@ -325,7 +325,7 @@ mlir::ROCDL::assembleIsa(StringRef isa, StringRef targetTriple, StringRef chip,
   std::unique_ptr<llvm::MCAsmParser> parser(
       createMCAsmParser(srcMgr, ctx, *mcStreamer, *mai));
   std::unique_ptr<llvm::MCTargetAsmParser> tap(
-      target->createMCAsmParser(*sti, *parser, *mcii, mcOptions));
+      target->createMCAsmParser(*sti, *parser, *mcii));
 
   if (!tap)
     return emitError() << "assembler initialization error";



More information about the Mlir-commits mailing list