[llvm-branch-commits] [llvm] CodeGen: Merge TargetLoweringObjectFile::getModuleMetadata into Initialize (PR #226837)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sun Sep 27 14:07:40 PDT 2026


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/226837

getModuleMetadata had a single caller, which invoked it immediately after
Initialize. Pass the module to Initialize and fold it in.

Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>

>From e10e760418d7e791832474a1139f684810570f7e Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Sun, 27 Sep 2026 10:15:08 +0200
Subject: [PATCH] CodeGen: Merge TargetLoweringObjectFile::getModuleMetadata
 into Initialize

getModuleMetadata had a single caller, which invoked it immediately after
Initialize. Pass the module to Initialize and fold it in.

Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>
---
 .../CodeGen/TargetLoweringObjectFileImpl.h    | 35 +++++++-----
 .../llvm/Target/TargetLoweringObjectFile.h    | 19 +++----
 llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp    |  2 -
 llvm/lib/CodeGen/MachineModuleInfo.cpp        |  4 +-
 .../CodeGen/TargetLoweringObjectFileImpl.cpp  | 54 +++++++++++--------
 .../AArch64/AArch64TargetObjectFile.cpp       |  5 +-
 .../Target/AArch64/AArch64TargetObjectFile.h  |  3 +-
 llvm/lib/Target/ARM/ARMTargetObjectFile.cpp   | 11 ++--
 llvm/lib/Target/ARM/ARMTargetObjectFile.h     |  5 +-
 llvm/lib/Target/AVR/AVRTargetObjectFile.cpp   |  5 +-
 llvm/lib/Target/AVR/AVRTargetObjectFile.h     |  3 +-
 llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp |  5 +-
 llvm/lib/Target/CSKY/CSKYTargetObjectFile.h   |  3 +-
 .../Hexagon/HexagonTargetObjectFile.cpp       |  5 +-
 .../Target/Hexagon/HexagonTargetObjectFile.h  |  3 +-
 .../Target/Lanai/LanaiTargetObjectFile.cpp    |  6 +--
 llvm/lib/Target/Lanai/LanaiTargetObjectFile.h |  3 +-
 llvm/lib/Target/M68k/M68kTargetObjectFile.cpp |  5 +-
 llvm/lib/Target/M68k/M68kTargetObjectFile.h   |  3 +-
 llvm/lib/Target/Mips/MipsTargetObjectFile.cpp |  5 +-
 llvm/lib/Target/Mips/MipsTargetObjectFile.h   |  3 +-
 .../Target/PowerPC/PPCTargetObjectFile.cpp    |  8 +--
 llvm/lib/Target/PowerPC/PPCTargetObjectFile.h |  3 +-
 .../Target/RISCV/RISCVTargetObjectFile.cpp    | 30 +++++------
 llvm/lib/Target/RISCV/RISCVTargetObjectFile.h |  5 +-
 .../Target/Sparc/SparcTargetObjectFile.cpp    |  5 +-
 llvm/lib/Target/Sparc/SparcTargetObjectFile.h |  3 +-
 llvm/lib/Target/TargetLoweringObjectFile.cpp  |  7 +--
 llvm/lib/Target/VE/VETargetMachine.cpp        |  5 +-
 .../WebAssemblyTargetObjectFile.cpp           |  5 +-
 .../WebAssembly/WebAssemblyTargetObjectFile.h |  3 +-
 .../Target/XCore/XCoreTargetObjectFile.cpp    |  8 +--
 llvm/lib/Target/XCore/XCoreTargetObjectFile.h |  3 +-
 llvm/unittests/CodeGen/TestAsmPrinter.cpp     |  3 +-
 llvm/unittests/CodeGen/TestAsmPrinter.h       |  4 ++
 llvm/unittests/CodeGen/X86MCInstLowerTest.cpp |  4 +-
 .../DebugInfo/DWARF/DwarfGenerator.cpp        |  3 +-
 .../DebugInfo/DWARF/DwarfGenerator.h          |  4 ++
 38 files changed, 164 insertions(+), 126 deletions(-)

diff --git a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index e76a1ac1720579..72a10441842cb1 100644
--- a/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -47,12 +47,11 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
 public:
   ~TargetLoweringObjectFileELF() override = default;
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
-
-  void getModuleMetadata(Module &M) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   /// Emit Obj-C garbage collection and linker options.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+  void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
 
   void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &DL,
                             const MCSymbol *Sym,
@@ -63,7 +62,8 @@ class LLVM_ABI TargetLoweringObjectFileELF : public TargetLoweringObjectFile {
                                         const MCSymbol *Sym,
                                         const MachineModuleInfo *MMI) const;
 
-  void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+  void emitLinkerDirectives(MCStreamer &Streamer,
+                            const Module &M) const override;
 
   /// Given a constant with the SectionKind, return a section that it should be
   /// placed in.
@@ -141,15 +141,17 @@ class LLVM_ABI TargetLoweringObjectFileMachO : public TargetLoweringObjectFile {
   TargetLoweringObjectFileMachO();
   ~TargetLoweringObjectFileMachO() override = default;
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   MCSection *getStaticDtorSection(unsigned Priority,
                                   const MCSymbol *KeySym) const override;
 
   /// Emit the module flags that specify the garbage collection information.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+  void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
 
-  void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+  void emitLinkerDirectives(MCStreamer &Streamer,
+                            const Module &M) const override;
 
   MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
                                     const TargetMachine &TM) const override;
@@ -192,7 +194,8 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
 public:
   ~TargetLoweringObjectFileCOFF() override = default;
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
   MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
                                       const TargetMachine &TM) const override;
 
@@ -209,9 +212,10 @@ class LLVM_ABI TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
                                            const Function &F) const override;
 
   /// Emit Obj-C garbage collection and linker options.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+  void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const override;
 
-  void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const override;
+  void emitLinkerDirectives(MCStreamer &Streamer,
+                            const Module &M) const override;
 
   MCSection *getStaticCtorSection(unsigned Priority,
                                   const MCSymbol *KeySym) const override;
@@ -238,7 +242,8 @@ class LLVM_ABI TargetLoweringObjectFileWasm : public TargetLoweringObjectFile {
   TargetLoweringObjectFileWasm() = default;
   ~TargetLoweringObjectFileWasm() override = default;
 
-  void getModuleMetadata(Module &M) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
                                       const TargetMachine &TM) const override;
@@ -266,7 +271,8 @@ class LLVM_ABI TargetLoweringObjectFileXCOFF : public TargetLoweringObjectFile {
 
   static MCSymbol *getEHInfoTableSymbol(const MachineFunction *MF);
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference,
                                            const Function &F) const override;
@@ -328,7 +334,8 @@ class LLVM_ABI TargetLoweringObjectFileGOFF : public TargetLoweringObjectFile {
   TargetLoweringObjectFileGOFF();
   ~TargetLoweringObjectFileGOFF() override = default;
 
-  void getModuleMetadata(Module &M) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   bool shouldPutJumpTableInFunctionSection(bool UsesLabelDifference,
                                            const Function &F) const override;
diff --git a/llvm/include/llvm/Target/TargetLoweringObjectFile.h b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
index 3cce5974e67057..3ac4663b8d4c7d 100644
--- a/llvm/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/llvm/include/llvm/Target/TargetLoweringObjectFile.h
@@ -80,29 +80,30 @@ class LLVM_ABI TargetLoweringObjectFile : public MCObjectFileInfo {
 
   /// This method must be called before any actual lowering is done.  This
   /// specifies the current context for codegen, and gives the lowering
-  /// implementations a chance to set up their default sections.
-  virtual void Initialize(MCContext &ctx, const TargetMachine &TM);
+  /// implementations a chance to set up their default sections and to inspect
+  /// the module-level metadata the platform cares about.
+  virtual void Initialize(MCContext &ctx, const TargetMachine &TM,
+                          const Module &M);
 
   virtual void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM,
                                     const MCSymbol *Sym,
                                     const MachineModuleInfo *MMI) const;
 
   /// Emit the module-level metadata that the platform cares about.
-  virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
+  virtual void emitModuleMetadata(MCStreamer &Streamer, const Module &M) const {
+  }
 
   /// Emit Call Graph Profile metadata.
-  void emitCGProfileMetadata(MCStreamer &Streamer, Module &M) const;
+  void emitCGProfileMetadata(MCStreamer &Streamer, const Module &M) const;
 
   /// Emit pseudo_probe_desc metadata.
-  void emitPseudoProbeDescMetadata(MCStreamer &Streamer, Module &M,
+  void emitPseudoProbeDescMetadata(MCStreamer &Streamer, const Module &M,
                                    std::function<void(MCStreamer &Streamer)>
                                        COMDATSymEmitter = nullptr) const;
 
   /// Process linker options metadata and emit platform-specific bits.
-  virtual void emitLinkerDirectives(MCStreamer &Streamer, Module &M) const {}
-
-  /// Get the module-level metadata that the platform cares about.
-  virtual void getModuleMetadata(Module &M) {}
+  virtual void emitLinkerDirectives(MCStreamer &Streamer,
+                                    const Module &M) const {}
 
   /// Given a constant with the SectionKind, return a section that it should be
   /// placed in.
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index bd929901612f97..750e5e756e0ee0 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -531,8 +531,6 @@ bool AsmPrinter::doInitialization(Module &M) {
 
   AddrLabelSymbols = nullptr;
 
-  TM.getObjFileLowering()->getModuleMetadata(M);
-
   // On AIX, we delay emitting any section information until
   // after emitting the .file pseudo-op. This allows additional
   // information (such as the embedded command line) to be associated
diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp
index cc7958e59f6809..d5c091f62cb587 100644
--- a/llvm/lib/CodeGen/MachineModuleInfo.cpp
+++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp
@@ -220,7 +220,7 @@ bool MachineModuleInfoWrapperPass::doInitialization(Module &M) {
       });
   MMI.getTarget().verifyOptionsConsistency(M);
   MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(),
-                                                   MMI.getTarget());
+                                                   MMI.getTarget(), M);
   return false;
 }
 
@@ -247,6 +247,6 @@ MachineModuleAnalysis::run(Module &M, ModuleAnalysisManager &) {
       });
   MMI.getTarget().verifyOptionsConsistency(M);
   MMI.getTarget().getObjFileLowering()->Initialize(MMI.getContext(),
-                                                   MMI.getTarget());
+                                                   MMI.getTarget(), M);
   return Result(MMI);
 }
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 68ff80ae1d376d..79f0b3e8c620f2 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -82,8 +82,8 @@ static cl::opt<bool> JumpTableInFunctionSection(
     "jumptable-in-function-section", cl::Hidden, cl::init(false),
     cl::desc("Putting Jump Table in function section"));
 
-static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
-                             StringRef &Section) {
+static void GetObjCImageInfo(const Module &M, unsigned &Version,
+                             unsigned &Flags, StringRef &Section) {
   SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
   M.getModuleFlagsMetadata(ModuleFlags);
 
@@ -121,8 +121,9 @@ static void GetObjCImageInfo(Module &M, unsigned &Version, unsigned &Flags,
 //===----------------------------------------------------------------------===//
 
 void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
-                                             const TargetMachine &TgtM) {
-  TargetLoweringObjectFile::Initialize(Ctx, TgtM);
+                                             const TargetMachine &TgtM,
+                                             const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TgtM, M);
 
   const CodeModel::Model CM = TgtM.getCodeModel();
   InitializeELF(TgtM.Options.UseInitArray);
@@ -306,9 +307,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx,
   default:
     break;
   }
-}
 
-void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) {
   SmallVector<GlobalValue *, 4> Vec;
   collectUsedGlobalVariables(M, Vec, false);
   for (GlobalValue *GV : Vec)
@@ -317,7 +316,7 @@ void TargetLoweringObjectFileELF::getModuleMetadata(Module &M) {
 }
 
 void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
-                                                     Module &M) const {
+                                                     const Module &M) const {
   auto &C = getContext();
 
   emitLinkerDirectives(Streamer, M);
@@ -380,7 +379,7 @@ void TargetLoweringObjectFileELF::emitModuleMetadata(MCStreamer &Streamer,
 }
 
 void TargetLoweringObjectFileELF::emitLinkerDirectives(MCStreamer &Streamer,
-                                                       Module &M) const {
+                                                       const Module &M) const {
   auto &C = getContext();
   if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
     auto *S = C.getELFSection(".linker-options", ELF::SHT_LLVM_LINKER_OPTIONS,
@@ -1314,8 +1313,9 @@ TargetLoweringObjectFileMachO::TargetLoweringObjectFileMachO() {
 }
 
 void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx,
-                                               const TargetMachine &TM) {
-  TargetLoweringObjectFile::Initialize(Ctx, TM);
+                                               const TargetMachine &TM,
+                                               const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TM, M);
   if (TM.getRelocationModel() == Reloc::Static) {
     StaticCtorSection = Ctx.getMachOSection("__TEXT", "__constructor", 0,
                                             SectionKind::getData());
@@ -1348,7 +1348,7 @@ MCSection *TargetLoweringObjectFileMachO::getStaticDtorSection(
 }
 
 void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer,
-                                                       Module &M) const {
+                                                       const Module &M) const {
   // Emit the linker options if present.
   emitLinkerDirectives(Streamer, M);
 
@@ -1386,8 +1386,8 @@ void TargetLoweringObjectFileMachO::emitModuleMetadata(MCStreamer &Streamer,
   Streamer.addBlankLine();
 }
 
-void TargetLoweringObjectFileMachO::emitLinkerDirectives(MCStreamer &Streamer,
-                                                         Module &M) const {
+void TargetLoweringObjectFileMachO::emitLinkerDirectives(
+    MCStreamer &Streamer, const Module &M) const {
   if (auto *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
     for (const auto *Option : LinkerOptions->operands()) {
       SmallVector<std::string, 4> StrOptions;
@@ -1948,7 +1948,7 @@ bool TargetLoweringObjectFileCOFF::shouldPutJumpTableInFunctionSection(
 }
 
 void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer,
-                                                      Module &M) const {
+                                                      const Module &M) const {
   emitLinkerDirectives(Streamer, M);
 
   unsigned Version = 0;
@@ -1980,8 +1980,8 @@ void TargetLoweringObjectFileCOFF::emitModuleMetadata(MCStreamer &Streamer,
   });
 }
 
-void TargetLoweringObjectFileCOFF::emitLinkerDirectives(
-    MCStreamer &Streamer, Module &M) const {
+void TargetLoweringObjectFileCOFF::emitLinkerDirectives(MCStreamer &Streamer,
+                                                        const Module &M) const {
   if (NamedMDNode *LinkerOptions = M.getNamedMetadata("llvm.linker.options")) {
     // Emit the linker options to the linker .drectve section.  According to the
     // spec, this section is a space-separated string containing flags for
@@ -2040,8 +2040,9 @@ void TargetLoweringObjectFileCOFF::emitLinkerDirectives(
 }
 
 void TargetLoweringObjectFileCOFF::Initialize(MCContext &Ctx,
-                                              const TargetMachine &TM) {
-  TargetLoweringObjectFile::Initialize(Ctx, TM);
+                                              const TargetMachine &TM,
+                                              const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TM, M);
   const Triple &T = TM.getTargetTriple();
   if (T.isWindowsMSVCEnvironment() || T.isWindowsItaniumEnvironment()) {
     StaticCtorSection =
@@ -2298,7 +2299,11 @@ static unsigned getWasmSectionFlags(SectionKind K, bool Retain) {
   return Flags;
 }
 
-void TargetLoweringObjectFileWasm::getModuleMetadata(Module &M) {
+void TargetLoweringObjectFileWasm::Initialize(MCContext &Ctx,
+                                              const TargetMachine &TM,
+                                              const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TM, M);
+
   SmallVector<GlobalValue *, 4> Vec;
   collectUsedGlobalVariables(M, Vec, false);
   for (GlobalValue *GV : Vec)
@@ -2711,8 +2716,9 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForConstant(
 }
 
 void TargetLoweringObjectFileXCOFF::Initialize(MCContext &Ctx,
-                                               const TargetMachine &TgtM) {
-  TargetLoweringObjectFile::Initialize(Ctx, TgtM);
+                                               const TargetMachine &TgtM,
+                                               const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TgtM, M);
   TTypeEncoding =
       dwarf::DW_EH_PE_indirect | dwarf::DW_EH_PE_datarel |
       (TgtM.getTargetTriple().isArch32Bit() ? dwarf::DW_EH_PE_sdata4
@@ -2858,7 +2864,11 @@ MCSection *TargetLoweringObjectFileXCOFF::getSectionForLSDA(
 //===----------------------------------------------------------------------===//
 TargetLoweringObjectFileGOFF::TargetLoweringObjectFileGOFF() = default;
 
-void TargetLoweringObjectFileGOFF::getModuleMetadata(Module &M) {
+void TargetLoweringObjectFileGOFF::Initialize(MCContext &Ctx,
+                                              const TargetMachine &TM,
+                                              const Module &M) {
+  TargetLoweringObjectFile::Initialize(Ctx, TM, M);
+
   // Construct the default names for the root SD and the ADA PR symbol.
   StringRef FileName = sys::path::stem(M.getSourceFileName());
   if (FileName.size() > 1 && FileName.starts_with('<') &&
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
index 2d01b321ce013a..b94e46a7445ef1 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.cpp
@@ -28,8 +28,9 @@ static cl::opt<bool> EmitAArch64DebugTLSLocation(
     cl::Hidden);
 
 void AArch64_ELFTargetObjectFile::Initialize(MCContext &Ctx,
-                                             const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                             const TargetMachine &TM,
+                                             const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
   PLTPCRelativeSpecifier = AArch64::S_PLT;
   SupportIndirectSymViaGOTPCRel = true;
   SupportDebugThreadLocalLocation = EmitAArch64DebugTLSLocation;
diff --git a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
index 78c0c22da8d1b7..70263ff29ff16c 100644
--- a/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
+++ b/llvm/lib/Target/AArch64/AArch64TargetObjectFile.h
@@ -17,7 +17,8 @@ namespace llvm {
 
 /// This implementation is used for AArch64 ELF targets (Linux in particular).
 class AArch64_ELFTargetObjectFile : public TargetLoweringObjectFileELF {
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
 public:
   const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV,
diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
index 44040be9c8db9e..f9a1db871902d4 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp
@@ -33,14 +33,14 @@ ARMElfTargetObjectFile::ARMElfTargetObjectFile() {
   SupportIndirectSymViaGOTPCRel = true;
 }
 
-void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
-                                        const TargetMachine &TM) {
+void ARMElfTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+                                        const Module &M) {
   const ARMBaseTargetMachine &ARM_TM =
       static_cast<const ARMBaseTargetMachine &>(TM);
   bool genExecuteOnly =
       ARM_TM.getMCSubtargetInfo().hasFeature(ARM::FeatureExecuteOnly);
 
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   // Make code section unreadable when in execute-only mode
   if (genExecuteOnly) {
@@ -53,12 +53,7 @@ void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
     TextSection =
         Ctx.getELFSection(".text", Type, Flags, 0, "", false, 0U, nullptr);
   }
-}
-
-void ARMElfTargetObjectFile::getModuleMetadata(Module &M) {
-  TargetLoweringObjectFileELF::getModuleMetadata(M);
 
-  const auto &ARM_TM = static_cast<const ARMBaseTargetMachine &>(*TM);
   bool isAAPCS_ABI = ARM_TM.getEffectiveABI(M) == ARM::ARMABI::ARM_ABI_AAPCS;
   InitializeELF(isAAPCS_ABI);
 
diff --git a/llvm/lib/Target/ARM/ARMTargetObjectFile.h b/llvm/lib/Target/ARM/ARMTargetObjectFile.h
index 02cd138cf5c04d..eab097978a7942 100644
--- a/llvm/lib/Target/ARM/ARMTargetObjectFile.h
+++ b/llvm/lib/Target/ARM/ARMTargetObjectFile.h
@@ -18,9 +18,8 @@ namespace llvm {
 class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
 public:
   ARMElfTargetObjectFile();
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
-
-  void getModuleMetadata(Module &M) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   MCRegister getStaticBase() const override;
 
diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
index 8cab0f3ba95b4b..c67de44ccf37eb 100644
--- a/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
+++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.cpp
@@ -18,8 +18,9 @@
 #include "AVR.h"
 
 namespace llvm {
-void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
-  Base::Initialize(Ctx, TM);
+void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+                                     const Module &M) {
+  Base::Initialize(Ctx, TM, M);
   ProgmemDataSection =
       Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
   Progmem1DataSection =
diff --git a/llvm/lib/Target/AVR/AVRTargetObjectFile.h b/llvm/lib/Target/AVR/AVRTargetObjectFile.h
index 609849b4402957..10034bd39f4b6e 100644
--- a/llvm/lib/Target/AVR/AVRTargetObjectFile.h
+++ b/llvm/lib/Target/AVR/AVRTargetObjectFile.h
@@ -18,7 +18,8 @@ class AVRTargetObjectFile : public TargetLoweringObjectFileELF {
   typedef TargetLoweringObjectFileELF Base;
 
 public:
-  void Initialize(MCContext &ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
                                     const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
index b5592d34ca54b1..b5c9d2d4508bcb 100644
--- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
+++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.cpp
@@ -14,8 +14,9 @@
 using namespace llvm;
 
 void CSKYELFTargetObjectFile::Initialize(MCContext &Ctx,
-                                         const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                         const TargetMachine &TM,
+                                         const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   LSDAEncoding = dwarf::DW_EH_PE_pcrel | dwarf::DW_EH_PE_sdata4;
   PersonalityEncoding =
diff --git a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
index a82f2681c12aef..387580c00ce00b 100644
--- a/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
+++ b/llvm/lib/Target/CSKY/CSKYTargetObjectFile.h
@@ -16,7 +16,8 @@ namespace llvm {
 
 class CSKYELFTargetObjectFile : public TargetLoweringObjectFileELF {
 public:
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 };
 
 } // namespace llvm
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
index 0212dffa386457..dac3786b213ad4 100644
--- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
+++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.cpp
@@ -110,8 +110,9 @@ static const char *getSectionSuffixForSize(unsigned Size) {
 }
 
 void HexagonTargetObjectFile::Initialize(MCContext &Ctx,
-      const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                         const TargetMachine &TM,
+                                         const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   SmallDataSection =
     getContext().getELFSection(".sdata", ELF::SHT_PROGBITS,
diff --git a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
index 550aac72346f3d..aed5b649f6b99b 100644
--- a/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
+++ b/llvm/lib/Target/Hexagon/HexagonTargetObjectFile.h
@@ -17,7 +17,8 @@ namespace llvm {
 
   class HexagonTargetObjectFile : public TargetLoweringObjectFileELF {
   public:
-    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+    void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                    const Module &M) override;
 
     MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
                                       const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
index 472ee41b35599d..243653493b08c2 100644
--- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
+++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.cpp
@@ -22,9 +22,9 @@ static cl::opt<unsigned> SSThreshold(
     cl::desc("Small data and bss section threshold size (default=0)"),
     cl::init(0));
 
-void LanaiTargetObjectFile::Initialize(MCContext &Ctx,
-                                       const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void LanaiTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+                                       const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   SmallDataSection = getContext().getELFSection(
       ".sdata", ELF::SHT_PROGBITS, ELF::SHF_WRITE | ELF::SHF_ALLOC);
diff --git a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
index ade56f9d6bccf5..083823d13491b1 100644
--- a/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
+++ b/llvm/lib/Target/Lanai/LanaiTargetObjectFile.h
@@ -22,7 +22,8 @@ class LanaiTargetObjectFile : public TargetLoweringObjectFileELF {
                                   const TargetMachine &TM) const;
 
 public:
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   /// Return true if this global address should be placed into small data/bss
   /// section.
diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
index 5aed6b8fe38e1c..8dd91c83c35d3e 100644
--- a/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
+++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.cpp
@@ -32,8 +32,9 @@ static cl::opt<unsigned> SSThreshold(
     cl::init(8));
 
 void M68kELFTargetObjectFile::Initialize(MCContext &Ctx,
-                                         const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                         const TargetMachine &TM,
+                                         const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
   InitializeELF(TM.Options.UseInitArray);
 
   // FIXME do we need `.sdata` and `.sbss` explicitly?
diff --git a/llvm/lib/Target/M68k/M68kTargetObjectFile.h b/llvm/lib/Target/M68k/M68kTargetObjectFile.h
index 3d145aa434750b..0df600a3e3e726 100644
--- a/llvm/lib/Target/M68k/M68kTargetObjectFile.h
+++ b/llvm/lib/Target/M68k/M68kTargetObjectFile.h
@@ -22,7 +22,8 @@ class M68kELFTargetObjectFile : public TargetLoweringObjectFileELF {
   MCSection *SmallBSSSection;
 
 public:
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 };
 } // end namespace llvm
 
diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
index 3ca44a2ab3e378..3caa2fa731756b 100644
--- a/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
+++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.cpp
@@ -40,8 +40,9 @@ EmbeddedData("membedded-data", cl::Hidden,
                       " sections if possible: .rodata, .sdata, .data ."),
              cl::init(false));
 
-void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void MipsTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+                                      const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   SmallDataSection = getContext().getELFSection(
       ".sdata", ELF::SHT_PROGBITS,
diff --git a/llvm/lib/Target/Mips/MipsTargetObjectFile.h b/llvm/lib/Target/Mips/MipsTargetObjectFile.h
index 09ec2a9f920958..2618b18c5c5c4e 100644
--- a/llvm/lib/Target/Mips/MipsTargetObjectFile.h
+++ b/llvm/lib/Target/Mips/MipsTargetObjectFile.h
@@ -24,7 +24,8 @@ class MipsTargetObjectFile : public TargetLoweringObjectFileELF {
   explicit MipsTargetObjectFile(bool UseSmallSection)
       : UseSmallSection(UseSmallSection) {}
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   /// Return true if this global address should be placed into small data/bss
   /// section.
diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
index 29e4286cf4adab..6df78f6bdec589 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.cpp
@@ -14,10 +14,10 @@
 
 using namespace llvm;
 
-void
-PPC64LinuxTargetObjectFile::
-Initialize(MCContext &Ctx, const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void PPC64LinuxTargetObjectFile::Initialize(MCContext &Ctx,
+                                            const TargetMachine &TM,
+                                            const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 }
 
 MCSection *PPC64LinuxTargetObjectFile::SelectSectionForGlobal(
diff --git a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
index 78a5840c87c721..75e23d714fcb80 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
+++ b/llvm/lib/Target/PowerPC/PPCTargetObjectFile.h
@@ -19,7 +19,8 @@ namespace llvm {
   /// 64-bit PowerPC Linux.
   class PPC64LinuxTargetObjectFile : public TargetLoweringObjectFileELF {
 
-    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+    void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                    const Module &M) override;
 
     MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
                                       const TargetMachine &TM) const override;
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
index 9f3666f1a2ff69..0df0189b681bac 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.cpp
@@ -24,8 +24,9 @@ unsigned RISCVELFTargetObjectFile::getTextSectionAlignment() const {
 }
 
 void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,
-                                          const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                          const TargetMachine &TM,
+                                          const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   PLTPCRelativeSpecifier = ELF::R_RISCV_PLT32;
   SupportIndirectSymViaGOTPCRel = true;
@@ -44,6 +45,17 @@ void RISCVELFTargetObjectFile::Initialize(MCContext &Ctx,
       ".srodata.cst16", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 16);
   SmallROData32Section = getContext().getELFSection(
       ".srodata.cst32", ELF::SHT_PROGBITS, ELF::SHF_ALLOC | ELF::SHF_MERGE, 32);
+
+  SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
+  M.getModuleFlagsMetadata(ModuleFlags);
+
+  for (const auto &MFE : ModuleFlags) {
+    StringRef Key = MFE.Key->getString();
+    if (Key == "SmallDataLimit") {
+      SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue();
+      break;
+    }
+  }
 }
 
 const MCExpr *RISCVELFTargetObjectFile::getIndirectSymViaGOTPCRel(
@@ -139,20 +151,6 @@ MCSection *RISCVELFTargetObjectFile::SelectSectionForGlobal(
   return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, Kind, TM);
 }
 
-void RISCVELFTargetObjectFile::getModuleMetadata(Module &M) {
-  TargetLoweringObjectFileELF::getModuleMetadata(M);
-  SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
-  M.getModuleFlagsMetadata(ModuleFlags);
-
-  for (const auto &MFE : ModuleFlags) {
-    StringRef Key = MFE.Key->getString();
-    if (Key == "SmallDataLimit") {
-      SSThreshold = mdconst::extract<ConstantInt>(MFE.Val)->getZExtValue();
-      break;
-    }
-  }
-}
-
 /// Return true if this constant should be placed into small data section.
 bool RISCVELFTargetObjectFile::isConstantInSmallSection(
     const DataLayout &DL, const Constant *CN) const {
diff --git a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
index db03a0546079da..902f6b5a342ac5 100644
--- a/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
+++ b/llvm/lib/Target/RISCV/RISCVTargetObjectFile.h
@@ -27,7 +27,8 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF {
 public:
   unsigned getTextSectionAlignment() const override;
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   /// Return true if this global address should be placed into small data/bss
   /// section.
@@ -44,8 +45,6 @@ class RISCVELFTargetObjectFile : public TargetLoweringObjectFileELF {
                                    const Constant *C, Align &Alignment,
                                    const Function *F) const override;
 
-  void getModuleMetadata(Module &M) override;
-
   bool isInSmallSection(uint64_t Size) const;
 
   const MCExpr *getIndirectSymViaGOTPCRel(const GlobalValue *GV,
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
index b1919647590828..507319a8dbc367 100644
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.cpp
@@ -16,8 +16,9 @@
 using namespace llvm;
 
 void SparcELFTargetObjectFile::Initialize(MCContext &Ctx,
-                                          const TargetMachine &TM) {
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+                                          const TargetMachine &TM,
+                                          const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 }
 
 const MCExpr *SparcELFTargetObjectFile::getTTypeGlobalReference(
diff --git a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
index 28ab139180423c..54202c8f92e2fd 100644
--- a/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
+++ b/llvm/lib/Target/Sparc/SparcTargetObjectFile.h
@@ -20,7 +20,8 @@ class SparcELFTargetObjectFile : public TargetLoweringObjectFileELF {
 public:
   SparcELFTargetObjectFile() = default;
 
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 
   const MCExpr *getTTypeGlobalReference(const GlobalValue *GV,
                                         unsigned Encoding,
diff --git a/llvm/lib/Target/TargetLoweringObjectFile.cpp b/llvm/lib/Target/TargetLoweringObjectFile.cpp
index b94c374e1dbd59..a596a645a56eaf 100644
--- a/llvm/lib/Target/TargetLoweringObjectFile.cpp
+++ b/llvm/lib/Target/TargetLoweringObjectFile.cpp
@@ -40,7 +40,8 @@ using namespace llvm;
 /// done.  This specifies the current context for codegen, and gives the
 /// lowering implementations a chance to set up their default sections.
 void TargetLoweringObjectFile::Initialize(MCContext &ctx,
-                                          const TargetMachine &TM) {
+                                          const TargetMachine &TM,
+                                          const Module &M) {
   // `Initialize` can be called more than once.
   delete Mang;
   Mang = new Mangler();
@@ -148,7 +149,7 @@ void TargetLoweringObjectFile::emitPersonalityValue(
     const MachineModuleInfo *MMI) const {}
 
 void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer,
-                                                     Module &M) const {
+                                                     const Module &M) const {
   MCContext &C = getContext();
   SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
   M.getModuleFlagsMetadata(ModuleFlags);
@@ -194,7 +195,7 @@ void TargetLoweringObjectFile::emitCGProfileMetadata(MCStreamer &Streamer,
 }
 
 void TargetLoweringObjectFile::emitPseudoProbeDescMetadata(
-    MCStreamer &Streamer, Module &M,
+    MCStreamer &Streamer, const Module &M,
     std::function<void(MCStreamer &Streamer)> COMDATSymEmitter) const {
   NamedMDNode *FuncInfo = M.getNamedMetadata(PseudoProbeDescMetadataName);
   if (!FuncInfo)
diff --git a/llvm/lib/Target/VE/VETargetMachine.cpp b/llvm/lib/Target/VE/VETargetMachine.cpp
index ae61da2fb441bf..af561ae1b5ba31 100644
--- a/llvm/lib/Target/VE/VETargetMachine.cpp
+++ b/llvm/lib/Target/VE/VETargetMachine.cpp
@@ -41,8 +41,9 @@ static Reloc::Model getEffectiveRelocModel(std::optional<Reloc::Model> RM) {
 
 namespace {
 class VEELFTargetObjectFile : public TargetLoweringObjectFileELF {
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override {
-    TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override {
+    TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
     InitializeELF(TM.Options.UseInitArray);
   }
 };
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
index 22dee6e874ada0..af428bdeade323 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.cpp
@@ -17,7 +17,8 @@
 using namespace llvm;
 
 void WebAssemblyTargetObjectFile::Initialize(MCContext &Ctx,
-                                             const TargetMachine &TM) {
-  TargetLoweringObjectFileWasm::Initialize(Ctx, TM);
+                                             const TargetMachine &TM,
+                                             const Module &M) {
+  TargetLoweringObjectFileWasm::Initialize(Ctx, TM, M);
   InitializeWasm();
 }
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
index f46bb2040a7d4b..c87f30fe23d7f9 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetObjectFile.h
@@ -21,7 +21,8 @@ namespace llvm {
 
 class WebAssemblyTargetObjectFile final : public TargetLoweringObjectFileWasm {
 public:
-  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                  const Module &M) override;
 };
 
 } // end namespace llvm
diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
index 5a8a4d396a1da9..68babb7dcba0a6 100644
--- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
+++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
@@ -16,9 +16,9 @@
 
 using namespace llvm;
 
-
-void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
-  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
+void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM,
+                                       const Module &M) {
+  TargetLoweringObjectFileELF::Initialize(Ctx, TM, M);
 
   BSSSection = Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
                                  ELF::SHF_ALLOC | ELF::SHF_WRITE |
@@ -60,7 +60,7 @@ void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
   // TextSection       - see MObjectFileInfo.cpp
   // StaticCtorSection - see MObjectFileInfo.cpp
   // StaticDtorSection - see MObjectFileInfo.cpp
- }
+}
 
 static unsigned getXCoreSectionType(SectionKind K) {
   if (K.isBSS())
diff --git a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
index f9b895795c94a1..1fe571e4b295a9 100644
--- a/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
+++ b/llvm/lib/Target/XCore/XCoreTargetObjectFile.h
@@ -22,7 +22,8 @@ static const unsigned CodeModelLargeSize = 256;
     MCSection *DataRelROSectionLarge;
 
   public:
-    void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
+    void Initialize(MCContext &Ctx, const TargetMachine &TM,
+                    const Module &M) override;
 
     MCSection *getExplicitSectionGlobal(const GlobalObject *GO, SectionKind Kind,
                                         const TargetMachine &TM) const override;
diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.cpp b/llvm/unittests/CodeGen/TestAsmPrinter.cpp
index 8d30e457178fc4..f39ad8c089a3fe 100644
--- a/llvm/unittests/CodeGen/TestAsmPrinter.cpp
+++ b/llvm/unittests/CodeGen/TestAsmPrinter.cpp
@@ -59,7 +59,8 @@ llvm::Error TestAsmPrinter::init(const Target *TheTarget, StringRef TripleName,
 
   MC.reset(new MCContext(TheTriple, TM->getMCAsmInfo(), TM->getMCRegisterInfo(),
                          TM->getMCSubtargetInfo()));
-  TM->getObjFileLowering()->Initialize(*MC, *TM);
+  M = std::make_unique<Module>("TestAsmPrinter", Context);
+  TM->getObjFileLowering()->Initialize(*MC, *TM, *M);
   MC->setObjectFileInfo(TM->getObjFileLowering());
 
   MS = new StrictMock<MockMCStreamer>(MC.get());
diff --git a/llvm/unittests/CodeGen/TestAsmPrinter.h b/llvm/unittests/CodeGen/TestAsmPrinter.h
index 372214a55fcfeb..3f859f95bcd51a 100644
--- a/llvm/unittests/CodeGen/TestAsmPrinter.h
+++ b/llvm/unittests/CodeGen/TestAsmPrinter.h
@@ -10,6 +10,8 @@
 #define LLVM_UNITTESTS_CODEGEN_TESTASMPRINTER_H
 
 #include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
 #include "llvm/MC/MCStreamer.h"
 #include "gmock/gmock.h"
 
@@ -51,6 +53,8 @@ class TestAsmPrinter {
   std::unique_ptr<MCContext> MC;
   MockMCStreamer *MS = nullptr; // Owned by AsmPrinter
   std::unique_ptr<TargetMachine> TM;
+  LLVMContext Context;
+  std::unique_ptr<Module> M;
   std::unique_ptr<AsmPrinter> Asm;
 
   /// Private constructor; call TestAsmPrinter::create(...)
diff --git a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
index 32d77d16c32728..e6073cf84996d3 100644
--- a/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
+++ b/llvm/unittests/CodeGen/X86MCInstLowerTest.cpp
@@ -55,7 +55,7 @@ class X86MCInstLowerTest : public testing::Test {
     MC.reset(new MCContext(TM->getTargetTriple(), TM->getMCAsmInfo(),
                            TM->getMCRegisterInfo(), TM->getMCSubtargetInfo()));
     MC->setObjectFileInfo(TM->getObjFileLowering());
-    TM->getObjFileLowering()->Initialize(*MC, *TM);
+    TM->getObjFileLowering()->Initialize(*MC, *TM, *M);
     MC->setObjectFileInfo(TM->getObjFileLowering());
 
     // Use a new MCContext for AsmPrinter for testing.
@@ -131,7 +131,7 @@ class X86MCInstLowerTest : public testing::Test {
                               TM->getMCRegisterInfo(),
                               TM->getMCSubtargetInfo()));
     MCFoo->setObjectFileInfo(TM->getObjFileLowering());
-    TM->getObjFileLowering()->Initialize(*MCFoo, *TM);
+    TM->getObjFileLowering()->Initialize(*MCFoo, *TM, *M);
     MCFoo->setObjectFileInfo(TM->getObjFileLowering());
   }
 
diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
index 65e3fc234b8d66..e5a03ef6b0a671 100644
--- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
+++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.cpp
@@ -489,8 +489,9 @@ llvm::Error dwarfgen::Generator::init(Triple TheTriple, uint16_t V) {
                                    inconvertibleErrorCode());
 
   MC.reset(new MCContext(TheTriple, *MAI, *MRI, *MSTI));
+  M = std::make_unique<Module>("dwarfgen", Context);
   TLOF = TM->getObjFileLowering();
-  TLOF->Initialize(*MC, *TM);
+  TLOF->Initialize(*MC, *TM, *M);
   MC->setObjectFileInfo(TLOF);
 
   MCE = TheTarget->createMCCodeEmitter(*MII, *MC);
diff --git a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
index c617c67ee98b30..3d2d255015b5bc 100644
--- a/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
+++ b/llvm/unittests/DebugInfo/DWARF/DwarfGenerator.h
@@ -17,6 +17,8 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/CodeGen/DIE.h"
 #include "llvm/DebugInfo/DWARF/DWARFDebugLine.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
 #include "llvm/MC/MCTargetOptions.h"
 #include "llvm/Support/Error.h"
 
@@ -255,6 +257,8 @@ class Generator {
   MCCodeEmitter *MCE; // Owned by MCStreamer
   MCStreamer *MS;     // Owned by AsmPrinter
   std::unique_ptr<TargetMachine> TM;
+  LLVMContext Context;
+  std::unique_ptr<Module> M;
   TargetLoweringObjectFile *TLOF; // Owned by TargetMachine;
   std::unique_ptr<AsmPrinter> Asm;
   BumpPtrAllocator Allocator;



More information about the llvm-branch-commits mailing list